void render(const example_state_view& state) override { rad += radians_(0.5f*state.frame_duration().value()); current_buf = (current_buf+1)%2; gl.uniform( prog.light_pos, vec3(cos(rad)*4, sin(rad)*4, 8) ); gl.uniform( prog.modelview, matrix_rotation_x(rad*1)* matrix_rotation_y(rad*2)* matrix_rotation_z(rad*3) ); // draw into the texture gl.bind(GL.draw_framebuffer, rnd_tex.fbos[current_buf]); gl.viewport(tex_side, tex_side); GLfloat s = 0.5f; gl.uniform( prog.projection, oglplus::matrix_perspective(-s,+s, -s,+s, 1.0f, 5)* oglplus::matrix_translation(0,0,-2) ); gl.clear(GL.color_buffer_bit|GL.depth_buffer_bit); gl.draw_arrays(GL.triangles, 0, 6 * 2 * 3); // draw on screen gl.bind(GL.draw_framebuffer, default_framebuffer); gl.viewport(state.width(), state.height()); gl.uniform(prog.cube_tex, GLint(current_buf)); GLfloat h = 0.55f; GLfloat w = h*state.aspect(); gl.uniform( prog.projection, oglplus::matrix_perspective(-w,+w, -h,+h, 1, 3)* oglplus::matrix_translation(0,0,-2) ); gl.clear(GL.color_buffer_bit|GL.depth_buffer_bit); gl.draw_arrays(GL.triangles, 0, 6 * 2 * 3); }
void render(const example_state_view& /*state*/) override { gl.draw_arrays(GL.triangle_strip, 0, 4); }