CHGICKEN
[carveJwlIkooP6JGAAIwe30JlM.git] / render.h
index 0abbdae0ce9f07a78b3b8c964fd38abf67117f53..493ed3b6d4520c8954bc7860e4702c28fb9b9893 100644 (file)
--- 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 */