32 if(m_mesh.vertex_count() == 0)
36 m_mesh.bounds(pmin, pmax);
37 m_camera.lookat(pmin, pmax);
43 glGenFramebuffers(1, &m_framebuffer);
44 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_framebuffer);
45 glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, m_aatexture, 0);
46 glFramebufferTexture(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_aadepth, 0);
48 GLenum buffers[]= { GL_COLOR_ATTACHMENT0 };
49 glDrawBuffers(1, buffers);
51 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
59 m_program_count=
read_program(
"gkit2_tutos/M2/aaquads_count.glsl");
62 m_program_display=
read_program(
"gkit2_tutos/M2/aaquads_display.glsl");
66 glClearColor(0.2, 0.2, 0.2, 1);
68 glDepthFunc(GL_LEQUAL);
69 glEnable(GL_DEPTH_TEST);
73 glEnable(GL_CULL_FACE);
95 static bool zinit=
false;
104 printf(
"Z prepass off\n");
108 static bool cull=
true;
115 glEnable(GL_CULL_FACE);
117 glDisable(GL_CULL_FACE);
120 printf(
"face culling ON\n");
122 printf(
"face culling off\n");
125 static bool early_tests=
false;
126 static const char *early_tests_definition=
"";
127 static bool reload=
false;
132 early_tests= !early_tests;
134 early_tests_definition=
"#define EARLY_TESTS";
136 early_tests_definition=
"#undef EARLY_TESTS";
140 printf(
"early fragment tests ON\n");
142 printf(
"early fragment test off\n");
150 reload_program(m_program, early_tests_definition);
153 reload_program(m_program_count);
156 reload_program(m_program_display);
162 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_framebuffer);
163 glViewport(0, 0, 8192, 8192);
166 glClearBufferfv(GL_DEPTH, 0, one);
167 GLuint zero[]= { 0, 0, 0, 0 };
168 glClearBufferuiv(GL_COLOR, 0, zero);
172 Transform projection= m_camera.projection(8192, 8192, 60);
184 draw(m_mesh, model, view, projection);
187 glUseProgram(m_program);
188 program_uniform(m_program,
"mvpMatrix", mvp);
190 m_mesh.draw(m_program);
193 glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
195 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
197 glClearTexImage(m_texture, 0, GL_RED_INTEGER, GL_UNSIGNED_INT, zero);
201 glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT);
202 glUseProgram(m_program_count);
204 glBindImageTexture(0, m_texture, 0, GL_TRUE, 0, GL_WRITE_ONLY, GL_R32UI);
205 program_uniform(m_program,
"counters", 0);
207 glBindImageTexture(1, m_aatexture, 0, GL_TRUE, 0, GL_READ_ONLY, GL_R32UI);
208 program_uniform(m_program,
"primitives", 1);
210 glDispatchCompute(1024, 1024, 1);
213 glMemoryBarrier(GL_SHADER_IMAGE_ACCESS_BARRIER_BIT);
214 glUseProgram(m_program_display);
216 program_uniform(m_program_display,
"image", 0);
218 glDrawArrays(GL_TRIANGLES, 0, 3);
222 update_camera( m_camera );