17 static void render_water_texture( m4x3f camera
);
18 static void render_water_surface( m4x4f pv
);
19 static void render_world( m4x4f projection
, m4x3f camera
);
22 * http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
24 static void plane_clip_projection( m4x4f mat
, v4f plane
)
28 (vg_signf(plane
[0]) + mat
[2][0]) / mat
[0][0],
29 (vg_signf(plane
[1]) + mat
[2][1]) / mat
[1][1],
31 (1.0f
+ mat
[2][2]) / mat
[3][2]
34 v4_muls( plane
, 2.0f
/ v4_dot(plane
,c
), c
);
38 mat
[2][2] = c
[2] + 1.0f
;
42 static void pipeline_projection( m4x4f mat
, float nearz
, float farz
)
46 (float)vg_window_x
/ (float)vg_window_y
,
50 static void create_renderbuffer_std( GLuint
*fb
, GLuint
*rgb
, GLuint
*rb
)
52 glGenFramebuffers( 1, fb
);
53 glBindFramebuffer( GL_FRAMEBUFFER
, *fb
);
55 glGenTextures( 1, rgb
);
56 glBindTexture( GL_TEXTURE_2D
, *rgb
);
57 glTexImage2D( GL_TEXTURE_2D
, 0, GL_RGB
, vg_window_x
, vg_window_y
,
58 0, GL_RGB
, GL_UNSIGNED_BYTE
, NULL
);
60 glTexParameteri( GL_TEXTURE_2D
, GL_TEXTURE_MIN_FILTER
, GL_LINEAR
);
61 glTexParameteri( GL_TEXTURE_2D
, GL_TEXTURE_MAG_FILTER
, GL_LINEAR
);
62 glFramebufferTexture2D( GL_FRAMEBUFFER
, GL_COLOR_ATTACHMENT0
,
63 GL_TEXTURE_2D
, *rgb
, 0);
65 /* TODO: Check for DEPTH32f availiblity and use if possible */
67 glGenRenderbuffers( 1, rb
);
68 glBindRenderbuffer( GL_RENDERBUFFER
, *rb
);
69 glRenderbufferStorage( GL_RENDERBUFFER
, GL_DEPTH24_STENCIL8
,
70 vg_window_x
, vg_window_y
);
72 glFramebufferRenderbuffer( GL_FRAMEBUFFER
, GL_DEPTH_STENCIL_ATTACHMENT
,
73 GL_RENDERBUFFER
, *rb
);
76 static void resize_renderbuffer_std( GLuint
*fb
, GLuint
*rgb
, GLuint
*rb
)
78 glBindTexture( GL_TEXTURE_2D
, *rgb
);
79 glTexImage2D( GL_TEXTURE_2D
, 0, GL_RGB
, vg_window_x
, vg_window_y
, 0,
80 GL_RGB
, GL_UNSIGNED_BYTE
, NULL
);
82 glBindRenderbuffer( GL_RENDERBUFFER
, *rb
);
83 glRenderbufferStorage( GL_RENDERBUFFER
, GL_DEPTH24_STENCIL8
,
84 vg_window_x
, vg_window_y
);
87 static void render_fb_resize(void)
89 glBindTexture( GL_TEXTURE_2D
, gpipeline
.rgb_background
);
90 glTexImage2D( GL_TEXTURE_2D
, 0, GL_RGB
, vg_window_x
, vg_window_y
, 0,
91 GL_RGB
, GL_UNSIGNED_BYTE
, NULL
);
94 static void render_init(void)
96 glGenFramebuffers( 1, &gpipeline
.fb_background
);
97 glBindFramebuffer( GL_FRAMEBUFFER
, gpipeline
.fb_background
);
99 glGenTextures( 1, &gpipeline
.rgb_background
);
100 glBindTexture( GL_TEXTURE_2D
, gpipeline
.rgb_background
);
101 glTexImage2D( GL_TEXTURE_2D
, 0, GL_RGB
, vg_window_x
, vg_window_y
,
102 0, GL_RGB
, GL_UNSIGNED_BYTE
, NULL
);
104 glTexParameteri( GL_TEXTURE_2D
, GL_TEXTURE_MIN_FILTER
, GL_LINEAR
);
105 glTexParameteri( GL_TEXTURE_2D
, GL_TEXTURE_MAG_FILTER
, GL_LINEAR
);
106 glFramebufferTexture2D( GL_FRAMEBUFFER
, GL_COLOR_ATTACHMENT0
,
108 gpipeline
.rgb_background
, 0);
110 float quad
[] = { 0.0f
, 0.0f
, 1.0f
, 1.0f
, 0.0f
, 1.0f
,
111 0.0f
, 0.0f
, 1.0f
, 0.0f
, 1.0f
, 1.0f
};
113 glGenVertexArrays( 1, &gpipeline
.fsquad
.vao
);
114 glGenBuffers( 1, &gpipeline
.fsquad
.vbo
);
115 glBindVertexArray( gpipeline
.fsquad
.vao
);
116 glBindBuffer( GL_ARRAY_BUFFER
, gpipeline
.fsquad
.vbo
);
117 glBufferData( GL_ARRAY_BUFFER
, sizeof(quad
), quad
, GL_STATIC_DRAW
);
118 glBindVertexArray( gpipeline
.fsquad
.vao
);
119 glVertexAttribPointer( 0, 2, GL_FLOAT
, GL_FALSE
,
120 sizeof(float)*2, (void*)0 );
121 glEnableVertexAttribArray( 0 );
125 static void render_fsquad(void)
127 glBindVertexArray( gpipeline
.fsquad
.vao
);
128 glDrawArrays( GL_TRIANGLES
, 0, 6 );
131 #endif /* RENDER_H */