summaryrefslogtreecommitdiff
path: root/src/core/framebuffer.h
blob: 78ead0ebcefb9eaa730240b546ecdf9a98e99514 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#ifndef _SOFTSHADEROOM_FRAMEBUFFER_H_
#define _SOFTSHADEROOM_FRAMEBUFFER_H_

#include "texture.h"
#include "depth.h"
#include "stencil.h"

/*frame buffer object*/

#define RENDER_TARGET_COUNT   6

/*
** OpenGL中fbo的三个挂点可以用renderbuffer或者texture2d绑定,这里考虑效率只提供
** 8个texture2d可以绑定到color attachment。
** 如果开启了深度测试或模板测试,那么应该绑定对应的深度缓存和模板缓存
*/
typedef struct FrameBuffer{
	Texture* render_textures[RENDER_TARGET_COUNT]; /*color attachments*/
	float* depth_buffer; /*depth attachment*/
	byte* stencil_buffer;  /*stencil attachment*/
} FrameBuffer;

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