我正在使用 OpenGL。
道绑定(bind)。
XP Pro 64。
VB.NET 中的 VS 2008
我已经构建了数十个简单的工具和测试应用程序,甚至还有 2 个使用 Opengl 进行渲染的大型应用程序。
为什么我在运行时只在一个项目中看到这一点?它构建时没有错误......这对于此类事情来说是正常的。问题是,我正在努力的这个灵魂正在崩溃。
Unable to find an entry point named 'glCreateShader' in DLL 'opengl32.dll'.
我尝试过更改 IDE 中的各种设置(但它可以与其他代码配合使用,所以这看起来很愚蠢!)
我尝试替换 opengl32.dll 但是..那么构建的解决方案将无法运行。
1) 这不是 opengl32.dll(它在其他版本中工作正常)
2) VS2008 中的设置与我构建的任何其他 OpenGL 应用程序相同。
3)我已经查看了代码几个小时,甚至还搜索了变量名称是否以某种方式意外使用。我看不到任何可能导致此问题的因素。
4)是的..我正在编译到x86(Tao不会在64位中运行)..正如我提到的..到目前为止我还没有遇到任何问题。
这是抗议的路线:
vertexObject = Gl.glCreateShader(Gl.GL_VERTEX_SHADER)
最佳答案
好的,伙计们...我发现了问题。
如果并且我不确定除 XP Pro 64 之外的所有 Win 版本上都是如此...
将屏幕更改为全尺寸会导致 Tai 失去轴承。
摘自Tao类中的文本:
此类包含 2.1 规范中定义的所有 OpenGL 枚举和函数。官方 .spec 文件可以在以下位置找到:http://opengl.org/registry/ 。 我们依靠静态初始化来获取 OpenGL 函数的入口点。请确保在调用任何 OpenGL 函数之前,相关线程中已存在有效的 OpenGL 上下文(GLUT、SDL 或 GLFW 等工具包将自动处理上下文初始化过程)。如果没有有效的 OpenGL 上下文,我们将只能检索静态导出的入口点(通常对应于 Windows 下的 OpenGL 版本 1.1、Linux 下的 1.3 和 Windows Vista 下的 1.4),并且需要手动加载扩展方法。*强>
如果您希望对扩展加载有更多控制,您可以使用 ReloadFunctions 或 ReloadFunction 方法来手动强制初始化 OpenGL 入口点。无论何时您都应该调用 ReloadFunctions 方法。更改现有的视觉或像素格式。当您更改与窗口关联的颜色/模板/深度缓冲区(但可能不是分辨率)时,通常会发生这种情况。这在 Linux/MacOS 下可能是必需的,也可能不是必需的,但对于 Windows 通常是必需的。
我确定以上内容是Tao 的(c)..
我很抱歉,如果我听起来脾气暴躁..我是:(
无论如何..我需要添加这个....
Gl.ReloadFunctions()
...在我设置设备上下文之后。
所以这是现在有效的顺序:
If Not (Wgl.wglMakeCurrent(ghDC, hRC)) Then
MessageBox.Show("Unable to make rendering context current")
End
End If
Glut.glutInit()
Glut.glutInitDisplayMode(GLUT_RGBA Or GLUT_DOUBLE)
Gl.ReloadFunctions() 'New Line that reloads the extensions.
build_shaders() ' where shaders are created and complied
所以你已经拥有它了:)
再次感谢大家!
关于opengl - 无法在 DLL 'glCreateShader' 中找到名为 'opengl32.dll' 的入口点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6561870/