X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;ds=sidebyside;f=render.h;h=493ed3b6d4520c8954bc7860e4702c28fb9b9893;hb=7758c7efec3956c68294bc914e7524045a2b1bd7;hp=0abbdae0ce9f07a78b3b8c964fd38abf67117f53;hpb=1f1d636056450dcd23cce55c0795ec6276272531;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/render.h b/render.h index 0abbdae..493ed3b 100644 --- a/render.h +++ b/render.h @@ -11,7 +11,7 @@ gpipeline; static void render_water_texture( m4x3f camera ); static void render_water_surface( m4x4f pv ); -static void render_world( m4x4f pv ); +static void render_world( m4x4f projection, m4x3f camera ); /* * http://www.terathon.com/lengyel/Lengyel-Oblique.pdf @@ -34,4 +34,49 @@ static void plane_clip_projection( m4x4f mat, v4f plane ) mat[3][2] = c[3]; } +static void pipeline_projection( m4x4f mat, float nearz, float farz ) +{ + m4x4_projection( mat, + gpipeline.fov, + (float)vg_window_x / (float)vg_window_y, + nearz, farz ); +} + +static void create_renderbuffer_std( GLuint *fb, GLuint *rgb, GLuint *rb ) +{ + glGenFramebuffers( 1, fb ); + glBindFramebuffer( GL_FRAMEBUFFER, *fb ); + + glGenTextures( 1, rgb ); + glBindTexture( GL_TEXTURE_2D, *rgb ); + glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, vg_window_x, vg_window_y, + 0, GL_RGB, 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, *rgb, 0); + + /* TODO: Check for DEPTH32f availiblity and use if possible */ + + glGenRenderbuffers( 1, rb ); + glBindRenderbuffer( GL_RENDERBUFFER, *rb ); + glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, + vg_window_x, vg_window_y ); + + glFramebufferRenderbuffer( GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, + GL_RENDERBUFFER, *rb ); +} + +static void resize_renderbuffer_std( GLuint *fb, GLuint *rgb, GLuint *rb ) +{ + glBindTexture( GL_TEXTURE_2D, *rgb ); + glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB, vg_window_x, vg_window_y, 0, + GL_RGB, GL_UNSIGNED_BYTE, NULL ); + + glBindRenderbuffer( GL_RENDERBUFFER, *rb ); + glRenderbufferStorage( GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, + vg_window_x, vg_window_y ); +} + #endif /* RENDER_H */