c++ - OpenGL Nvidia 驱动程序 259.12 纹理不工作

标签 c++ c opengl textures

当我放入 NVIDIA Quadro 卡时,我在 ATI 卡上运行良好的 OpenGL 应用程序停止工作。纹理根本不起作用!我已将我的程序缩减为一个不起作用的显示功能:

void glutDispCallback()
{
//ALLOCATE TEXTURE
unsigned char * noise = new unsigned char [32 * 32 * 3];
memset(noise, 255, 32*32*3);

glEnable(GL_TEXTURE_2D);
GLuint textureID;
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glPixelStorei(GL_PACK_ALIGNMENT, 1);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 32, 32, 0, GL_RGB, GL_UNSIGNED_BYTE, noise);
    delete [] noise;

//DRAW
glDrawBuffer(GL_BACK);
glViewport(0, 0, 1024, 1024);
setOrthographicProjection();
glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
glLoadIdentity();
glDisable(GL_BLEND);
glDisable(GL_LIGHTING);
glBindTexture(GL_TEXTURE_2D, textureID);
glColor4f(0,0,1,0);
glBegin(GL_QUADS);
    glTexCoord2f(0,0); 
    glVertex2f(-0.4,-0.4);

    glTexCoord2f(0, 1); 
    glVertex2f(-0.4, 0.4);

    glTexCoord2f(1, 1); 
    glVertex2f(0.4, 0.4);

    glTexCoord2f(1,0); 
    glVertex2f(0.4,-0.4);

glEnd();
glutSwapBuffers();

//CLEANUP
GL_ERROR();
glDeleteTextures(1, &textureID);
}

结果是一个蓝色的四边形(或者由 glColor4f() 指定的任何东西),而不是纹理的白色四边形。我关注了 OpenGL 网站上的常见问题解答。我已禁用混合以防纹理被混合。我禁用了照明。我查看了 glGetError() - 没有错误。我还设置了 glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);和 GL_DECAL。同样的结果。我还尝试了不同的多边形缠绕 - CW 和 CCW。

还有其他人遇到过这个吗?

最佳答案

你能尝试在 glTexEnvi 中使用 GL_REPLACE 吗?这可能是 NV 驱动程序中的错误。

关于c++ - OpenGL Nvidia 驱动程序 259.12 纹理不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3441534/

相关文章:

c++ - 如何使upnp Action ?

c - 我在哪里可以找到在 c 标准头文件(如 stdlib.h)中声明的函数的定义?

opengl - 顶点数组对象绑定(bind)顺序

c++ - 从四元数到 OpenGL 旋转

opengl - 使用 glui 创建表

c++ - Axis2 wsdl2c 未生成骨架中的所有调用

c++ - fstream - 如何 seekg() 以从末尾定位 x

c++ - 避免返回本地引用(对返回的本地变量的引用 - 警告)

c - printf 参数不足

C 基本编程概念