glBindTexture(GL_TEXTURE_2D, texidx);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 512, 512, 0, GL_RGBA, GL_FLOAT, texdata);
如果texidx == 0
一切正常,但如果texidx != 0
或使用glGenTexture(&texidx,1)
生成,则最终渲染仅显示纯色(最后一个glColor)而不是纹理。我已经调试了一天以上(glGetError显示没有问题)并且我的想法已经用完了。有什么想法吗?我可以根据需要发布更多代码。
设置代码:
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glShadeModel(GL_SMOOTH);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glDisable(GL_LIGHTING);
glClearColor(0.5,0.5,0.5,0);
glClearDepth(1);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable(GL_COLOR_MATERIAL);
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
答案 0 :(得分:2)
TexID不能为零,这是默认纹理或没有纹理。
问题是默认的OpenGL缩小过滤器使用mipmaps,但是没有提供常见错误,将MIN / MAG过滤器更改为可用的东西,如GL_LINEAR或GL_NEAREST,并且纹理可以正常工作。
http://www.opengl.org/wiki/Common_Mistakes#Creating_a_Texture
中讨论了更多信息(以及其他常见错误)