+ glGenVertexArrays( 1, &gpipeline.fsquad.vao );
+ glGenBuffers( 1, &gpipeline.fsquad.vbo );
+ glBindVertexArray( gpipeline.fsquad.vao );
+ glBindBuffer( GL_ARRAY_BUFFER, gpipeline.fsquad.vbo );
+ glBufferData( GL_ARRAY_BUFFER, sizeof(quad), quad, GL_STATIC_DRAW );
+ glBindVertexArray( gpipeline.fsquad.vao );
+ glVertexAttribPointer( 0, 2, GL_FLOAT, GL_FALSE,
+ sizeof(float)*2, (void*)0 );
+ glEnableVertexAttribArray( 0 );
+
+ if( VG_CHECK_GL_ERR() )
+ {
+ vg_error( "Error while creating fsquad\n" );
+ glBindFramebuffer( GL_FRAMEBUFFER, 0 );
+ vg_release_thread_sync(1);
+ return 0;
+ }
+
+ glGenBuffers( 1, &gpipeline.ubo_world_lighting );
+ glBindBuffer( GL_UNIFORM_BUFFER, gpipeline.ubo_world_lighting );
+ glBufferData( GL_UNIFORM_BUFFER, sizeof(struct ub_world_lighting),
+ NULL, GL_DYNAMIC_DRAW );
+
+ render_update_lighting_ub();
+ glBindBufferBase( GL_UNIFORM_BUFFER, 0, gpipeline.ubo_world_lighting );
+
+ if( VG_CHECK_GL_ERR() )
+ {
+ vg_error( "Error while creating world uniform buffers\n" );
+ glBindFramebuffer( GL_FRAMEBUFFER, 0 );
+ vg_release_thread_sync(1);
+ return 0;
+ }
+
+ glBindFramebuffer( GL_FRAMEBUFFER, 0 );
+ vg_success( "Done\n" );
+
+ gpipeline.ready = 1;
+ vg_release_thread_sync(1);
+ return 1;
+ }
+ else
+ return 0;