我正在尝试使用GLdc创建一个快速渲染到纹理的示例,GLdc是世嘉Dreamcast的OpenGL实现。我已经验证了我的纹理和帧缓冲对象都是完整的,但从帧缓冲生成的纹理中只有一个白色。
首先,我生成一个空纹理,并准备写入它。
func genTextures(){
glGenTextures(1, &renderedTexture[0]);
glBindTexture(GL_TEXTURE_2D, renderedTexture[0]);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); // scale linearly when image smaller than texture
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 128, 128, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
}
接下来,我生成一个FBO,并将我们刚刚创建的新纹理绑定到它。
func genFBO() {
glGenFramebuffersEXT(1, &fbo);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
GL_TEXTURE_2D, renderedTexture[0], 0);
}
此时FBO和纹理都应该被认为是完成了。主循环的结构类似于:
int main(int argc, char**argv)
{
glKosInit();
InitGL(640, 480);
ReSizeGLScene(640, 480);
genTextures();
genFBO();
while(1) {
if(check_start())
break;
// I checked here for FBO and Texture completeness, both return True.
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, fbo); // bind to the FBO
DrawGLScene(); // Draw our cube to the FBO
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0); // back to default
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
ReSizeGLScene(640,480);
DrawGLUI(); //Draw the quad with the framebuffers texture
}
return 0;
}
以下是绘制几何图形的两个函数:
第一个
结果为
我想把立方体渲染到一个纹理上,然后把这个纹理应用到右上角的四边形上...
1条答案
按热度按时间2nbm6dog1#
切换帧缓冲区时,必须使用
glViewport
将视口的大小调整为帧缓冲区的大小: