#include "shaders/standard.h"
#include "shaders/vblend.h"
-static void render_water_texture( m4x3f camera );
-static void render_water_surface( m4x4f pv, m4x3f camera );
-static void render_world( m4x4f projection, m4x3f camera );
-static void shader_link_standard_ub( GLuint shader, int texture_id );
-static void render_world_depth( m4x4f projection, m4x3f camera );
+VG_STATIC void render_water_texture( m4x3f camera );
+VG_STATIC void render_water_surface( m4x4f pv, m4x3f camera );
+VG_STATIC void render_world( m4x4f projection, m4x3f camera );
+VG_STATIC void shader_link_standard_ub( GLuint shader, int texture_id );
+VG_STATIC void render_world_depth( m4x4f projection, m4x3f camera );
#ifndef RENDER_H
#define RENDER_H
int allocated;
};
-static struct pipeline
+VG_STATIC struct pipeline
{
float fov;
glmesh fsquad;
/*
* http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
*/
-static void plane_clip_projection( m4x4f mat, v4f plane )
+VG_STATIC void plane_clip_projection( m4x4f mat, v4f plane )
{
v4f c =
{
mat[3][2] = c[3];
}
-static void pipeline_projection( m4x4f mat, float nearz, float farz )
+VG_STATIC void pipeline_projection( m4x4f mat, float nearz, float farz )
{
m4x4_projection( mat,
gpipeline.fov,
/*
* Shaders
*/
-static void shader_link_standard_ub( GLuint shader, int texture_id )
+VG_STATIC void shader_link_standard_ub( GLuint shader, int texture_id )
{
GLuint idx = glGetUniformBlockIndex( shader, "ub_world_lighting" );
glUniformBlockBinding( shader, idx, 0 );
glUniform1i( glGetUniformLocation( shader, "g_world_depth" ), texture_id );
}
-static void render_update_lighting_ub(void)
+VG_STATIC void render_update_lighting_ub(void)
{
struct ub_world_lighting *winf = &gpipeline.ub_world_lighting;
int c = 0;
* Framebuffers
*/
-static void fb_use( struct framebuffer *fb )
+VG_STATIC void fb_use( struct framebuffer *fb )
{
if( !fb )
{
}
}
-static void fb_init( struct framebuffer *fb )
+VG_STATIC void fb_init( struct framebuffer *fb )
{
i32 ix = vg.window_x / fb->div,
iy = vg.window_y / fb->div;
fb->allocated = 1;
}
-static void fb_free( struct framebuffer *fb )
+VG_STATIC void fb_free( struct framebuffer *fb )
{
glDeleteTextures( 1, &fb->colour );
glDeleteFramebuffers( 1, &fb->fb );
}
-static void fb_bindtex( struct framebuffer *fb, int texture )
+VG_STATIC void fb_bindtex( struct framebuffer *fb, int texture )
{
glActiveTexture( GL_TEXTURE0 + texture );
glBindTexture( GL_TEXTURE_2D, fb->colour );
}
-static void fb_resize( struct framebuffer *fb )
+VG_STATIC void fb_resize( struct framebuffer *fb )
{
if( !fb->allocated )
return;
glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, ix, iy );
}
-static void render_fb_resize(void)
+VG_STATIC void render_fb_resize(void)
{
if( gpipeline.ready )
{
}
/* used for drawing player onto */
-static void render_init_temp_buffer(void)
+VG_STATIC void render_init_temp_buffer(void)
{
vg_info( "[render] Allocate temporary framebuffer\n" );
/* used for drawing world depth from the top view, used in our water and
* lighting calculations */
-static void render_init_depthmap_buffer(void)
+VG_STATIC void render_init_depthmap_buffer(void)
{
vg_info( "[render] Allocate depth map buffer\n" );
VG_CHECK_GL_ERR();
}
-static void render_init_fs_quad(void)
+VG_STATIC void render_init_fs_quad(void)
{
vg_info( "[render] Allocate quad\n" );
VG_CHECK_GL_ERR();
}
-static void render_init_uniform_buffers(void)
+VG_STATIC void render_init_uniform_buffers(void)
{
vg_info( "[render] Allocate uniform buffer\n" );
VG_CHECK_GL_ERR();
}
-static void render_init(void)
+VG_STATIC void render_init(void)
{
shader_blit_register();
shader_standard_register();
vg_release_thread_sync();
}
-static void render_free(void *_)
-{
- glDeleteBuffers( 1, &gpipeline.ubo_world_lighting );
-
- glDeleteVertexArrays( 1, &gpipeline.fsquad.vao );
- glDeleteBuffers( 1, &gpipeline.fsquad.vbo );
-
- glDeleteFramebuffers( 1, &gpipeline.fb_depthmap );
- glDeleteTextures( 1, &gpipeline.rgb_depthmap );
-
- glDeleteFramebuffers( 1, &gpipeline.fb_background );
- glDeleteTextures( 1, &gpipeline.rgb_background );
-}
-
/*
* Utility
*/
-static void render_fsquad(void)
+VG_STATIC void render_fsquad(void)
{
glBindVertexArray( gpipeline.fsquad.vao );
glDrawArrays( GL_TRIANGLES, 0, 6 );