我以前做过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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)