gpt4 book ai didi

c++ - OpenGL 多重纹理 - glActiveTexture 为 NULL

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:13:07 24 4
gpt4 key购买 nike

我已经开始了一个新项目,我想在其中使用多纹理。我以前做过多重纹理,我的 OpenGL 版本支持

在标题中我有:

GLuint  m_TerrainTexture[3];//heightmap, texture map and detail map
GLuint m_SkyboxTexture[5]; //left, front, right, back and top textures

PFNGLMULTITEXCOORD2FARBPROC 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 );
...

这显示消息框“多纹理失败”,glActiveTexture 的内容是 0x00000000

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

我正在实现 MVC 图,所以这一切都在我的地形 View 类中

最佳答案

您引用了您的代码来加载如下扩展:

PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB;
PFNGLACTIVETEXTUREARBPROC glActiveTexture;

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

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

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

PFNGLMULTITEXCOORD2FARBPROC myglMultiTexCoord2fARB;
#define glMultiTexCoord2fARB myglMultiTexCoord2fARB

PFNGLACTIVETEXTUREARBPROC myglActiveTexture;
#define glActiveTexture myglActiveTexture

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

如果您有一个有效的渲染上下文处于事件状态并且支持扩展,我真的不知道为什么事情会失败的任何其他原因。

关于c++ - OpenGL 多重纹理 - glActiveTexture 为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5810123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com