【发布时间】:2011-04-27 20:25:40
【问题描述】:
我已经开始了一个新项目,我想在其中使用多重纹理。 我之前做过多重纹理处理,并且我的 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 );
...
这显示消息框“multitexturing failed”并且glActiveTexture的内容是0x00000000
当它到达 glActiveTexture( GL_TEXTURE0_ARB );我收到访问冲突错误
我正在实现 MVC 图,所以这一切都在我的地形视图类中
【问题讨论】:
-
当你调用所有这些时你确定你有一个当前的 GL 上下文吗?
-
我有 #included
、 、 和 "glext.h" 我错过了什么吗? -
你检查glGetString(GL_EXTENSIONS)的内容了吗?这是了解支持和不支持的唯一可靠方法。您还应该检查 glGetString(GL_RENDERER) 和 glGetString(GL_VENDOR)。您的程序很可能会进入软件光栅化模式。
-
它们都返回一个错误的指针 - 无法评估表达式。我不知道什么是软件光栅模式...
-
@Tim:如果您请求(该)硬件驱动程序不支持的 OpenGL 上下文配置,Windows 将退回到软件仿真。例如启用累积缓冲区或 BITMAP 渲染。但是 glGetString 不应该返回无效的指针,除非你没有激活有效的渲染上下文。
标签: c++ opengl multitexturing