}
}
-#if 0
-VG_STATIC void fb_use( struct framebuffer *fb )
-{
- if( !fb )
- {
- glBindFramebuffer( GL_FRAMEBUFFER, gpipeline.fb_background );
- glViewport( 0, 0, vg.window_x, vg.window_y );
- }
- else
- {
- glBindFramebuffer( GL_FRAMEBUFFER, fb->fb );
- glViewport( 0, 0, vg.window_x / fb->div, vg.window_y / fb->div );
- }
-}
-
-VG_STATIC void fb_init( struct framebuffer *fb )
-{
- i32 ix = vg.window_x / fb->div,
- iy = vg.window_y / fb->div;
-
- glGenFramebuffers( 1, &fb->fb );
- glBindFramebuffer( GL_FRAMEBUFFER, fb->fb );
-
- glGenTextures( 1, &fb->colour );
- glBindTexture( GL_TEXTURE_2D, fb->colour );
- glTexImage2D( GL_TEXTURE_2D, 0, fb->format, ix, iy,
- 0, fb->format, GL_UNSIGNED_BYTE, NULL);
-
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
- glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_2D, fb->colour, 0);
-
- glGenRenderbuffers( 1, &fb->rb );
- glBindRenderbuffer( GL_RENDERBUFFER, fb->rb );
- glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, ix, iy );
-
- glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT,
- GL_RENDERBUFFER, fb->rb );
- glBindFramebuffer( GL_FRAMEBUFFER, 0 );
-
- VG_CHECK_GL_ERR();
- fb->allocated = 1;
-}
-
-VG_STATIC void _fb_glTexImage2D( GLsizei x, GLsizei y, GLint internalformat,
- GLenum format, GLenum type, const void *data )
-{
- glTexImage2D( GL_TEXTURE_2D, 0, internalformat, x,y, 0,
- format, type, data );
-
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
-}
-
-#define fb_tex2d( X,Y, INTERNAL_FORMAT, FORMAT, TYPE, DATA ) \
- _fb_glTexImage2D( X,Y, INTERNAL_FORMAT, FORMAT, TYPE, DATA ); \
- vg_info( "texture( %dx%d, internal: %s, format: %s, type: %s )\n", \
- X,Y, #INTERNAL_FORMAT, #FORMAT, #TYPE );
-
-VG_STATIC void fb_free( struct framebuffer *fb )
-{
- glDeleteTextures( 1, &fb->colour );
- glDeleteFramebuffers( 1, &fb->fb );
-}
-
-VG_STATIC void fb_bindtex( struct framebuffer *fb, int texture )
-{
- glActiveTexture( GL_TEXTURE0 + texture );
- glBindTexture( GL_TEXTURE_2D, fb->colour );
-}
-
-VG_STATIC void fb_resize( struct framebuffer *fb )
-{
- if( !fb->allocated )
- return;
-
- i32 ix = vg.window_x / fb->div,
- iy = vg.window_y / fb->div;
-
- glBindTexture( GL_TEXTURE_2D, fb->colour );
- glTexImage2D( GL_TEXTURE_2D, 0, fb->format, ix, iy, 0,
- fb->format, GL_UNSIGNED_BYTE, NULL );
-
- glBindRenderbuffer( GL_RENDERBUFFER, fb->rb );
- glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, ix, iy );
-}
-#endif
-
-#if 0
-VG_STATIC void render_init_temp_buffer(void)
-{
- vg_info( "[render] Allocate framebuffer\n" );
-
- glGenFramebuffers( 1, &gpipeline.fb_background );
- glBindFramebuffer( GL_FRAMEBUFFER, gpipeline.fb_background );
-
- glGenTextures( 1, &gpipeline.rgb_background );
- glBindTexture( GL_TEXTURE_2D, gpipeline.rgb_background );
- fb_tex2d( vg.window_x, vg.window_y, GL_RGB, GL_RGB, GL_UNSIGNED_BYTE, NULL );
- glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_2D,
- gpipeline.rgb_background, 0 );
-
- glGenTextures( 1, &gpipeline.mv_background );
- glBindTexture( GL_TEXTURE_2D, gpipeline.mv_background );
-#if 0
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RG, vg.window_x, vg.window_y,
- 0, GL_RG, GL_FLOAT, NULL);
-#endif
- glTexImage2D( GL_TEXTURE_2D, 0, GL_RG16F, vg.window_x, vg.window_y,
- 0, GL_RG, GL_FLOAT, NULL);
-
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
- glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1,
- GL_TEXTURE_2D,
- gpipeline.mv_background, 0 );
-
- /* render buffer */
- glGenRenderbuffers( 1, &gpipeline.rb_background );
- glBindRenderbuffer( GL_RENDERBUFFER, gpipeline.rb_background );
- glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH24_STENCIL8,
- vg.window_x, vg.window_y );
- glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT,
- GL_RENDERBUFFER, gpipeline.rb_background );
-
- GLuint attachments[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1 };
- glDrawBuffers( 2, attachments );
-
- render_check_framebuffer_complete();
-
- glBindFramebuffer( GL_FRAMEBUFFER, 0 );
- VG_CHECK_GL_ERR();
-}
-
-/* used for drawing world depth from the top view, used in our water and
- * lighting calculations */
-VG_STATIC void render_init_depthmap_buffer(void)
-{
- vg_info( "[render] Allocate depth map buffer\n" );
-
- glGenFramebuffers( 1, &gpipeline.fb_depthmap );
- glBindFramebuffer( GL_FRAMEBUFFER, gpipeline.fb_depthmap );
-
- glGenTextures( 1, &gpipeline.rgb_depthmap );
- glBindTexture( GL_TEXTURE_2D, gpipeline.rgb_depthmap );
- glTexImage2D( GL_TEXTURE_2D, 0, GL_R32F, 1024, 1024, 0,
- GL_RED, GL_FLOAT, NULL );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
- glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
- vg_tex2d_clamp();
-
- glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0,
- GL_TEXTURE_2D,
- gpipeline.rgb_depthmap, 0);
-
- render_check_framebuffer_complete();
- VG_CHECK_GL_ERR();
-}
-#endif
-
VG_STATIC void render_init_fs_quad(void)
{
vg_info( "[render] Allocate quad\n" );