c – OpenGL Multitexturing – glActiveTexture为NULL

c – OpenGL Multitexturing – glActiveTexture为NULL,第1张

概述我已经开始了一个新项目,我想在其中使用多重纹理. 我以前做过multixexturing,并且得到了我的OpenGL版本的支持 在标题中我有: GLuint m_TerrainTexture[3];//heightmap, texture map and detail mapGLuint m_SkyboxTexture[5]; //left, front, right, back and t 我已经开始了一个新项目,我想在其中使用多重纹理.
我以前做过multixexturing,并且得到了我的OpenGL版本的支持

在标题中我有:

gluint  m_TerrainTexture[3];//heightmap,texture map and detail mapgluint  m_SkyBoxTexture[5]; //left,front,right,back and top texturesPFNGLMulTITEXCOORD2FARBPROC glMultiTexCoord2fARB;PFNGLACTIVETEXTUREARBPROC   glActiveTexture;

在构造函数中我有:

glActiveTexture = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress((LPCSTR)"glActiveTextureARB");glMultiTexCoord2fARB = (PFNGLMulTITEXCOORD2FARBPROC) wglGetProcAddress((LPCSTR)"glMultiTexCoord2fARB");if(!glActiveTexture || !glMultiTexCoord2fARB){    MessageBox(NulL,"multitexturing Failed","OGL_D3D Error",MB_OK);}glActiveTexture( GL_TEXTURE0_ARB );...

这显示消息框“multitexturing Failed”,glActiveTexture的内容为0x00000000

当它到达glActiveTexture(GL_TEXTURE0_ARB);我收到访问冲突错误

我正在实现MVC图,所以这都在我的terrain视图类中

解决方法 您引用了代码来加载扩展,如下所示:

PFNGLMulTITEXCOORD2FARBPROC glMultiTexCoord2fARB;PFNGLACTIVETEXTUREARBPROC   glActiveTexture;glActiveTexture = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress((LPCSTR)"glActiveTextureARB");glMultiTexCoord2fARB = (PFNGLMulTITEXCOORD2FARBPROC) wglGetProcAddress((LPCSTR)"glMultiTexCoord2fARB");

这是非常有问题的,因为它可能重新定义已经存在的符号. (动态)链接器最终会跳过这个.例如,可能会发生对指针变量glActiveTexture的赋值进入某个地方,但每当调用同名函数时,它会调用从其他地方链接的内容.

在C中,您通常使用预处理器宏和自定义前缀的组合来避免此问题,而无需调整大部分代码.

PFNGLMulTITEXCOORD2FARBPROC myglMultiTexCoord2fARB;#define glMultiTexCoord2fARB myglMultiTexCoord2fARBPFNGLACTIVETEXTUREARBPROC   myglActiveTexture;#define glActiveTexture myglActiveTextureglActiveTexture = (PFNGLACTIVETEXTUREARBPROC) wglGetProcAddress((LPCSTR)"glActiveTextureARB");glMultiTexCoord2fARB = (PFNGLMulTITEXCOORD2FARBPROC) wglGetProcAddress((LPCSTR)"glMultiTexCoord2fARB");

如果你有一个有效的渲染上下文并支持扩展,我真的不知道为什么事情会失败的任何其他原因.

总结

以上是内存溢出为你收集整理的c – OpenGL Multitexturing – glActiveTexture为NULL全部内容,希望文章能够帮你解决c – OpenGL Multitexturing – glActiveTexture为NULL所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1229423.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存