|
在OpenGL之中,如果我们不去创建自己的FrameBuffer Object,则系统会缺少地创建一个FrameBuffer Object用于RenderTarget,于是我们所有的绘制最终都被写入到缺省的FrameBuffer Object对象之中了。
如果我们自己去创建一个FrameBuffer Object并且绑定它,则OpenGL将会将所有的绘制都会重定向写入到我们自己定义的FrameBuffer Object中。于是就有了这样一个问题,看代码:- GLuint framebuffer;//the framebuffer object
- GLuint color_texture0;
- GLuint depth_texture0;
- GLuint stencil_rendererbuffer; //在OpenGL中还不支持模板纹理,所以framebuffer object的GL_STENCIL_ATTACHMENT_EXT暂时只能绑定RendererBuffer了
- GLenum status;
- glGenFrameBuffersEXT(1,&framebuffer);
- glBindFrameBufferEXT(GL_FRAMEBUFFER_EXT,framebuffer);
- glGenTextures(1,&color_texture0);
- glBindTexture(GL_TEXTURE_2D,color_texture0);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTR,GL_LINEAR);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_REPEAT);
- glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_REPEAT);
- //...
- glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,viewport_width,viewport_height,0,GL_RGBA,GL_UNSIGNED_BYTE,0);//在OpenGL超级宝典中有相关的例子,最后一个参数可以为0
- glFrameBufferTexture2DEXT(GL_FRAMEBUFFER_EXT,GL_COLOR_ATTACHMENT0_EXT,GL_TEXTURE_2D,color_texture0,0);
- status = glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT);
- if(status != GL_FRAMEBUFFER_COMPLETE_EXT)
- {
- //错误处理
- return false;
- }
复制代码 上面的代码没有问题的
但问题是,像上面这样只绑定了颜色缓冲区,那么在绘制的时候,深度信息与模板值绘制到哪里去了呢,是仍然绘制在缺省的FrameBuffer Object所关联的深度缓冲区与模板缓冲区中还是丢掉了? |
|