问题标签 [glew]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 对 `_imp__glewInit@0' 的未定义引用
我已经多次构建了 glew lib。我的上一个版本删除了对所有着色器函数的未定义引用,例如glCreateShader()
. 我认为这个构建是正确的,因为我发现它Code:Blocks
可以打开 Visual Studio 6.0 项目,所以它为我准备了一切。
我可以在不调用的情况下编译我的应用程序,glewInit()
但它会在调用时导致 SEGFAULT glCreateShader()
。这是由于未初始化 glew 引起的。
我需要打开它,但它不会让我XD
链接:mingw32、glew32、opengl32、glu32、glut32
IDE:代码::块
编译器:MinGW32
c++ - OpenGL 是非常特定于机器的
最近我开始在 C++ 中使用 OpenGL 进行一些 3D 渲染,但奇怪的是它似乎只在少数机器上工作。我正在使用 OpenGL 3.0 或更高版本(目前它设置为 3.0)使用顶点数组对象(不确定它是如何调用的,但 API 修订版删除了 glBegin、glEnd 等)。
在另一台机器上测试之前,我总是询问他们的 GPU 驱动程序,其中大多数支持 OpenGL 4.2,如果没有,我确保他们至少支持 3.0。然而在某些机器上,我的应用程序只是崩溃了,或者不渲染任何东西,OpenGL 不会抛出任何错误(我每帧至少检查一次错误)。不过,它在我自己的机器上运行得非常好,而且在某些情况下,我的机器甚至比一些它不工作的机器还要老。
我开始只使用 OpenGL 本身和 GLEW,但为了易于使用和其他一些我喜欢的功能切换到 SFML 和 GLEW,但 OpenGL 本身并没有改变它的行为。我确实重写了我正在开发的引擎,以封装所有 GL 调用并合并顶点数组对象和其他一些功能,事实上我可以给你一个应用程序使用的所有 API 调用的列表。显然它并没有在测试应用程序中使用所有这些,但这些都是我在引擎中使用的所有调用(这是能够渲染的最低限度,所以是的,引擎甚至还没有接近完成):
- glAttachShader
- glBindAttribLocation
- glBindBuffer
- glBindVertexArray
- glBufferData
- glBufferSubData
- gl清除
- glClearColor
- glClearDepth
- glCompileShader
- glCreate程序
- glCreateShader
- glCullFace
- glDeleteBuffers
- glDeleteProgram
- glDeleteShader
- glDeleteVertexArrays
- glDepthFunc
- glDepthMask
- glDepthRange
- glDisableVertexAttribArray
- glDrawElements
- gl启用
- glEnableVertexAttribArray
- glFrontFace
- glGenBuffers
- glGenVertexArrays
- glGetAttribLocation
- glGetBufferParameteriv
- glGetBufferSubData
- glGetError
- glGetIntegerv
- glGetProgramInfoLog
- glGetProgramiv
- glGetShaderInfoLog
- glGetShaderiv
- glGetShaderSource
- glGetUniformLocation
- glIs程序
- glIsShader
- glLink程序
- glMapBufferRange
- glPixelStorei
- glShaderSource
- glUniform(1i, 1ui, 1f, 2f, 3f, 4f, Matrix3fv, Matrix4fv)
- glUnmapBuffer
- glUseProgram
- glVertexAttrib(1i, 1ui, 1f, 2f, 3f, 4f)
- glVertexAttribPointer
总之,Shader 和 ShaderProgram 部分没什么特别的,我有一些方法来创建/编译它们,预先设置一些属性位置,最后设置属性/制服。缓冲区对象也没有什么特别之处,您可以写入、读取和映射缓冲区,目前我只使用 GL_ARRAY_BUFFER 和 GL_ELEMENT_ARRAY_BUFFER。最后我使用顶点数组对象来实际渲染对象,显然我设置了属性指针,并封装了绘图调用和程序使用,它总是使用索引绘图。
此外,我在谷歌和堆栈溢出本身上进行了广泛搜索以寻找答案。但是所有的问题都与 OpenGL 无法在任何地方工作有关,例如,一些 API 调用没有按顺序调用或根本没有调用。遗憾的是,这些答案都不适合我,它一直在我自己的机器和我可以直接访问的其他机器上工作,但是当我将应用程序发送给其他人在他们的机器上测试它时它从来没有工作过。
希望这足够具体 XD
编辑,从下面的帖子中复制
每个测试都是在 windows vista 或 7 上完成的。我对每个 API 调用都进行了 OpenGL 错误检查,但似乎没有一个发现任何错误。我无法在我自己的机器上重现它,但在其他机器上进行更多跟踪后,我发现它在渲染之前不会崩溃。设置工作正常,它可以完美地创建所有缓冲区和对象,但是一旦我尝试渲染网格(VAO),它就会崩溃而没有任何错误(除了 .exe 已经停止工作)。我怀疑命令 glUseProgram 或 glDrawElements
关于一个例子,除非你想搜索大约 10 个类,我不能给你一个简短的例子
编辑,一小段代码渲染一个对象
Mesh 类将这些结构添加到对象中,因此它知道要绘制什么:
哦,顺便说一句,“几何标记”只是一个字符串,在该字符串下可以“放置”多个绘制调用,几个定义:
对于每个“绘制”调用,它都会返回一个字符串,以便网格类可以绑定适当的材质。
编辑,网格调用所有上述方法来实际渲染对象
lockVertexAttributes() 只是确保所有属性指针都绑定到正确的顶点缓冲区。HardwareProgram 的 bind 方法只是检查程序是否编译并调用 glUseProgram
c++ - 将 GLEW 与 Cygwin 捆绑失败
我需要从源代码构建 GLEW,以便我可以在 Code::Blocks 中将它与 Mingw 一起使用,因为 Mingw 不喜欢使用他们在 VS 中编译的那个。我正在使用 Cygwin,我在这里下载 GLEW 的源代码并解压缩。然后我使用 cd 浏览到带有 Cygwin 的文件夹。然后我跑
制作 Makefile
然后它给了我这些错误。
我已经阅读过,但我还没有找到解决这个问题的有用信息。如果您知道更好的方法,我可以让 GLEW 与 Mingw 合作,这也可以回答我的问题。
在 Windows XP 上使用 Code::Blocks 10.05 使用 Cygwin 1.7.16-1 使用 GLEW 1.8.0
更新
这些错误已在 config.guess 文件中使用 dos2unix 修复。但是,当我现在运行 Makefile 时,它说没有什么可做的。
opengl - GLEW 和 CodeBlks 的链接器问题
我正在努力使用 Code::Blocks。我正在使用带有 SDL 的 OpenGL。根据我所读到的内容,根据我的错误进行链接时遇到问题。(见下文)这是我在 CB 中的链接设置方式
错误
c++ - 无法将 'LPCWSTR {aka const wchar_t*}' 转换为 'LPCSTR {aka const char*}
我一直试图让 Glew 和 opengl 3.2 在 win32 上下文中使用代码块(minGW)。我在这里找到了一个不错的小教程
由于我一直在尝试确定是否可以在代码块中编译 glew,因此我想在执行本教程之前先尝试一下源代码,看看它是否可行。
在稍微调整了代码之后,我尝试编译并得到了几个我以前从未见过的错误。它们如下
我的代码是
(对不起文字墙)还有其他文件,但所有错误似乎都是从这里开始的。如果需要,我会发布其余的。
我还没有真正看到任何与此类似的错误,因此我进行了一些谷歌搜索,发现该错误是由编译器未设置为多字节(VS2010 中的设置)引起的。我环顾四周,在代码块中找不到任何此类设置。这段代码只能在 VS 中使用还是我错过了什么?我担心这可能与我的链接有关,因为我过去有很多问题。任何帮助,将不胜感激。
linker - 如何使用 GLEW 和 Code::Blocks
这似乎是一个相当普遍的问题,我似乎也找不到一个好的解决方案。我读过的大多数论坛或问题都会告诉你出了什么问题,但没有解释如何很好地解决它。我一直在尝试使用 Code::Blocks 设置 GLEW,但我已经无法让它工作大约两个星期了,所以我没有尝试过太多。我不断遇到链接器错误,例如:
我的链接器是如何设置的:
我读过的一件事可能是错误的,即 GLEW 需要编译为 glew32.a 而不是 glew32.lib 但我无法让 Makefile 与 Cygwin 一起使用。我也注意到这似乎是人们遇到的一些常见问题。我知道有很多问题要问,但是有人可以为 Mingw 编译 GLEW 并上传它,或者一步一步详细说明如何做吗?我在这方面遇到的麻烦比我应该做的要多,这让我不得不放弃学习 OpenGL 4 并坚持使用 OpenGL 1.2。
c++ - GLEW 无法初始化
我的机器有 OpenGL 2.0,由于某些奇怪的原因,头文件gl.h
不包含着色器函数。所以,有人建议我使用 GLEW。我正确安装了 GLEW,并链接glew32s
到我的编译器,我还在我的main.cpp
. 然而,当我简单地调用时,我得到了编译器(不是运行时)错误:
对` imp _glewInit@0'的未定义引用
这到底是什么意思?它对着色器功能说了类似的话。
我正在使用 GCC 编译器,并且在 windows x86 上。
opengl - OpenGL 文件 glew.h 和 gl.h/glu.h 之间的区别
我用我的 glu 和 gl 头文件构建了一个 OpenGL 程序,默认包含在 windows 7 专业版中。现在,我买了一本描述 OpenGL 游戏开发的书。这本书的作者说,我必须在我的项目中包含 glew 标头。完成此操作后,我遇到了一些未解决的外部符号错误。
所以,现在我真的很困惑。我之前在我的程序中使用过 glBegin 和 glEnd 语句。现在我必须使用 glBindBuffers 和 glGenBuffer 等,但我得到未解决的外部符号错误,如下所示:
这里有没有人可以解释这些头文件之间的区别以及我对它们的处理?
我看了很多次,但在不同的网站上有更多令人困惑的词,比如“glee”或“glut”。
c++ - GLEW 链接错误
我试图从一个网站上整理一个 GLSL 示例程序,这样我就可以对着色器有所了解。
着色器示例程序来自http://www.swiftless.com/tutorials/glsl/1_setup.html#DL
错误似乎来自 glew 未正确链接。但是我按照 glew 的文档链接 glew @ http://glew.sourceforge.net/install.html
它仍然给我这些错误。我已将glew32.lib放入链接器->输入中。我已经把glew32.lib放到了VC lib 目录下,还有glew 包含在VC 的include 目录下。从谷歌搜索我的问题,这似乎是解决方案,但它对我不起作用。
c++ - 为什么 glGetString(GL_VERSION) 返回 null / zero 而不是 OpenGL 版本?
我在 Linux Mint 13 XFCE 上。我的问题是,当我在终端中运行命令时:
我得到以下输出:
但是当我glGetString(GL_VERSION)
在我的应用程序中运行时,结果为空。为什么这段代码没有得到gl_version
?