summaryrefslogtreecommitdiff
path: root/src/core/framebuffer.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/framebuffer.h')
-rw-r--r--src/core/framebuffer.h22
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