diff options
Diffstat (limited to 'src/core/framebuffer.h')
-rw-r--r-- | src/core/framebuffer.h | 22 |
1 files changed, 19 insertions, 3 deletions
diff --git a/src/core/framebuffer.h b/src/core/framebuffer.h index 3f03200..78ead0e 100644 --- a/src/core/framebuffer.h +++ b/src/core/framebuffer.h @@ -2,15 +2,31 @@ #define _SOFTSHADEROOM_FRAMEBUFFER_H_ #include "texture.h" +#include "depth.h" +#include "stencil.h" /*frame buffer object*/ -typedef Texture RenderTexture; +#define RENDER_TARGET_COUNT 6 +/* +** OpenGL中fbo的三个挂点可以用renderbuffer或者texture2d绑定,这里考虑效率只提供 +** 8个texture2d可以绑定到color attachment。 +** 如果开启了深度测试或模板测试,那么应该绑定对应的深度缓存和模板缓存 +*/ typedef struct FrameBuffer{ - RenderTexture rt; + Texture* render_textures[RENDER_TARGET_COUNT]; /*color attachments*/ + float* depth_buffer; /*depth attachment*/ + byte* stencil_buffer; /*stencil attachment*/ } FrameBuffer; -FrameBuffer* fbo_create(uint height, uint width); +FrameBuffer* fbo_create(); + +void fbo_attachrendertexture(FrameBuffer* fb, uint attachment, Texture* rt); +/*depth buffer和stencil buffer如果传0,绑定到屏幕缓冲区*/ +void fbo_attachdepthbuffer(FrameBuffer* fb, float* depthbuffer); +void fbo_attachstencilbuffer(FrameBuffer* fb, byte* stencilbuffer); + +void fbo_free(FrameBuffer* fb); #endif
\ No newline at end of file |