我正在绘制纹理,然后使用GL_QUADS将此纹理渲染到屏幕上。在屏幕上绘制纹理没有问题,但在绘制到纹理时,唯一有效的操作是glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - 这将整个纹理设置为我想要的颜色。然而,绘制任何原语是不可能的。
以下代码绝对应该用黑色覆盖整个纹理,对吗?
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, texRenderer.framebufferID); // switch to the texture framebuffer
glClearColor(1.0f,0.5f,0.0f,1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glDisable(GL_DEPTH_TEST);
glDisable(GL_SCISSOR_TEST);
glDisable(GL_CULL_FACE);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0, texRenderer.pixelsWidth, 0, texRenderer.pixelsHeight, 1, -1);
// switch to modelview matrix before rendering objects
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glColor4f(0,0,0,1);
glBegin(GL_QUADS);
glVertex2f(-100, -100);
glVertex2f(-100, 100);
glVertex2f(100, 100);
glVertex2f(100, -100);
glEnd();
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
//RenderScene(sim, stateMachine, viewSettings, commandMgr, font, texRenderer.pixelsWidth, texRenderer.pixelsHeight, isMainView, drawText);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); // switch back to normal framebuffer
相反,它是橙色的。
pixelsWidth和pixelsHeight都等于64.我确保视口设置正确。 glGetError()也返回0。
我错过了什么?
答案 0 :(得分:1)
花了我6个小时,但问题解决了。我错了。视口未正确设置。在渲染到纹理之前,请务必添加以下行:
glViewport(0, 0, textureWidth, textureHeight);
并使用
取消绑定任何当前绑定的纹理glBindTexture(GL_TEXTURE_2D, 0);