+ 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 );
+
+ GLenum result = glCheckFramebufferStatus( GL_FRAMEBUFFER );
+
+ if( result != GL_FRAMEBUFFER_COMPLETE )
+ {
+ if( result == GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT )
+ vg_fatal_exit_loop( "Main RT: Incomplete attachment" );
+ else if( result == GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT )
+ vg_fatal_exit_loop( "Main RT: Missing attachment" );
+ else if( result == GL_FRAMEBUFFER_UNSUPPORTED )
+ vg_fatal_exit_loop( "Main RT: Unsupported framebuffer format" );
+ else
+ vg_fatal_exit_loop( "Main RT: Generic Error" );
+ }
+
+ 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();
+