1 /*-------------------------------------------------------------------------
2 * drawElements Quality Program OpenGL ES 3.0 Module
3 * -------------------------------------------------
5 * Copyright 2014 The Android Open Source Project
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
21 * \brief Redundant state change performance tests.
22 *//*--------------------------------------------------------------------*/
24 #include "es3pRedundantStateChangeTests.hpp"
25 #include "glsStateChangePerfTestCases.hpp"
26 #include "gluShaderProgram.hpp"
27 #include "glwFunctions.hpp"
28 #include "glwEnums.hpp"
37 using namespace glw; // GL types
48 class RedundantStateChangeCase : public gls::StateChangePerformanceCase
51 RedundantStateChangeCase (Context& context, int drawCallCount, int triangleCount, bool drawArrays, bool useIndexBuffer, const char* name, const char* description);
52 ~RedundantStateChangeCase (void);
55 virtual void renderTest (const glw::Functions& gl);
56 virtual void renderReference (const glw::Functions& gl);
57 virtual void changeState (const glw::Functions& gl) = 0;
60 RedundantStateChangeCase::RedundantStateChangeCase (Context& context, int drawCallCount, int triangleCount, bool drawArrays, bool useIndexBuffer, const char* name, const char* description)
61 : gls::StateChangePerformanceCase(context.getTestContext(), context.getRenderContext(), name, description,
62 (useIndexBuffer ? DRAWTYPE_INDEXED_BUFFER :
63 drawArrays ? DRAWTYPE_NOT_INDEXED :
64 DRAWTYPE_INDEXED_USER_PTR), drawCallCount, triangleCount)
66 DE_ASSERT(!useIndexBuffer || !drawArrays);
69 RedundantStateChangeCase::~RedundantStateChangeCase (void)
73 void RedundantStateChangeCase::renderTest (const glw::Functions& gl)
75 for (int callNdx = 0; callNdx < m_callCount; callNdx++)
82 void RedundantStateChangeCase::renderReference (const glw::Functions& gl)
86 for (int callNdx = 0; callNdx < m_callCount; callNdx++)
92 RedundantStateChangeTests::RedundantStateChangeTests (Context& context)
93 : TestCaseGroup(context, "redundant_state_change_draw", "Test performance with redundant sate changes between rendering.")
97 RedundantStateChangeTests::~RedundantStateChangeTests (void)
101 #define MACRO_BLOCK(...) __VA_ARGS__
103 #define ADD_TESTCASE(NAME, DESC, DRAWARRAYS, INDEXBUFFER, INIT_FUNC, CHANGE_FUNC)\
105 class RedundantStateChangeCase_ ## NAME : public RedundantStateChangeCase\
108 RedundantStateChangeCase_ ## NAME (Context& context, int drawCallCount, int triangleCount, const char* name, const char* description)\
109 : RedundantStateChangeCase(context, drawCallCount, triangleCount, (DRAWARRAYS), (INDEXBUFFER), name, description)\
111 virtual void setupInitialState (const glw::Functions& gl)\
115 virtual void changeState (const glw::Functions& gl)\
120 manySmallCallsGroup->addChild (new RedundantStateChangeCase_ ## NAME (m_context,1000,2,#NAME,(DESC)));\
121 fewBigCallsGroup->addChild (new RedundantStateChangeCase_ ## NAME (m_context,10,200,#NAME,(DESC)));\
124 void RedundantStateChangeTests::init (void)
126 tcu::TestCaseGroup* const manySmallCallsGroup = new tcu::TestCaseGroup(m_testCtx, "many_small_calls", "1000 calls, 2 triangles in each");
127 tcu::TestCaseGroup* const fewBigCallsGroup = new tcu::TestCaseGroup(m_testCtx, "few_big_calls", "10 calls, 200 triangles in each");
129 addChild(manySmallCallsGroup);
130 addChild(fewBigCallsGroup);
132 ADD_TESTCASE(blend, "Enable/Disable blending.",
136 requireCoordBuffers(1);
140 gl.useProgram(m_programs[0]->getProgram());
141 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
142 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
143 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
145 gl.enableVertexAttribArray(coordLoc);
146 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
147 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
148 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
149 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
150 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
152 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
153 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
155 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
156 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
158 gl.uniform1i(samplerLoc, 0);
159 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
161 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
162 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
169 ADD_TESTCASE(depth_test, "Enable/Disable depth test.",
173 requireCoordBuffers(1);
177 gl.useProgram(m_programs[0]->getProgram());
178 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
180 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
181 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
183 gl.enableVertexAttribArray(coordLoc);
184 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
186 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
187 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
188 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
189 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
191 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
192 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
194 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
195 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
197 gl.uniform1i(samplerLoc, 0);
198 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
200 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
201 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
203 gl.depthFunc(GL_LEQUAL);
204 GLU_EXPECT_NO_ERROR(gl.getError(), "glDepthFunc()");
207 gl.enable(GL_DEPTH_TEST);
211 ADD_TESTCASE(stencil_test, "Enable/Disable stencil test.",
215 requireCoordBuffers(1);
219 gl.useProgram(m_programs[0]->getProgram());
220 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
221 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
222 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
224 gl.enableVertexAttribArray(coordLoc);
225 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
226 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
227 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
228 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
229 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
231 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
232 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
234 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
235 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
237 gl.uniform1i(samplerLoc, 0);
238 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
240 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
241 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
243 gl.stencilFunc(GL_LEQUAL, 0, 0);
244 GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
246 gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
247 GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
250 GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
251 gl.clear(GL_STENCIL_BUFFER_BIT);
253 GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
256 gl.enable(GL_STENCIL_TEST);
260 ADD_TESTCASE(scissor_test, "Enable/Disable scissor test.",
264 requireCoordBuffers(1);
268 gl.useProgram(m_programs[0]->getProgram());
269 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
270 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
271 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
273 gl.enableVertexAttribArray(coordLoc);
274 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
275 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
276 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
277 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
278 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
280 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
281 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
283 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
284 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
286 gl.uniform1i(samplerLoc, 0);
287 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
289 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
290 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
292 gl.scissor(2, 3, 12, 13);
293 GLU_EXPECT_NO_ERROR(gl.getError(), "glScissor()");
296 gl.enable(GL_SCISSOR_TEST);
300 ADD_TESTCASE(dither, "Enable/Disable dithering.",
304 requireCoordBuffers(1);
308 gl.useProgram(m_programs[0]->getProgram());
309 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
310 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
311 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
313 gl.enableVertexAttribArray(coordLoc);
314 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
315 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
316 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
317 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
318 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
320 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
321 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
323 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
324 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
326 gl.uniform1i(samplerLoc, 0);
327 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
329 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
330 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
333 gl.enable(GL_DITHER);
337 ADD_TESTCASE(culling, "Enable/Disable culling.",
341 requireCoordBuffers(1);
345 gl.useProgram(m_programs[0]->getProgram());
346 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
347 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
348 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
350 gl.enableVertexAttribArray(coordLoc);
351 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
352 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
353 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
354 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
355 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
357 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
358 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
360 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
361 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
363 gl.uniform1i(samplerLoc, 0);
364 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
366 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
367 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
370 GLU_EXPECT_NO_ERROR(gl.getError(), "glFrontFace()");
372 gl.cullFace(GL_FRONT);
373 GLU_EXPECT_NO_ERROR(gl.getError(), "glCullFace()");
376 gl.enable(GL_CULL_FACE);
380 ADD_TESTCASE(rasterizer_discard, "Disable RASTERIZER_DISCARD.",
384 requireCoordBuffers(1);
388 gl.useProgram(m_programs[0]->getProgram());
389 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
390 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
391 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
393 gl.enableVertexAttribArray(coordLoc);
394 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
395 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
396 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
397 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
398 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
400 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
401 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
403 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
404 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
406 gl.uniform1i(samplerLoc, 0);
407 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
409 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
410 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
413 gl.disable(GL_RASTERIZER_DISCARD);
417 ADD_TESTCASE(primitive_restart_fixed_index, "Enable PRIMITIVE_RESTART_FIXED_INDEX.",
421 requireCoordBuffers(1);
425 gl.useProgram(m_programs[0]->getProgram());
426 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
427 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
428 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
430 gl.enableVertexAttribArray(coordLoc);
431 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
432 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
433 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
434 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
435 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
437 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
438 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
440 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
441 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
443 gl.uniform1i(samplerLoc, 0);
444 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
446 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
447 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
450 gl.enable(GL_PRIMITIVE_RESTART_FIXED_INDEX);
454 ADD_TESTCASE(depth_func, "Change depth func.",
458 requireCoordBuffers(1);
462 gl.useProgram(m_programs[0]->getProgram());
463 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
464 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
465 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
467 gl.enableVertexAttribArray(coordLoc);
468 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
469 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
470 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
471 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
472 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
474 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
475 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
477 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
478 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
480 gl.uniform1i(samplerLoc, 0);
481 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
483 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
484 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
486 gl.enable(GL_DEPTH_TEST);
487 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
490 gl.depthFunc(GL_GEQUAL);
495 ADD_TESTCASE(depth_mask, "Toggle depth mask.",
499 requireCoordBuffers(1);
503 gl.useProgram(m_programs[0]->getProgram());
504 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
505 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
506 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
508 gl.enableVertexAttribArray(coordLoc);
509 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
510 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
511 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
512 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
513 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
515 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
516 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
518 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
519 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
521 gl.uniform1i(samplerLoc, 0);
522 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
524 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
525 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
527 gl.enable(GL_DEPTH_TEST);
528 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
530 gl.depthFunc(GL_LEQUAL);
531 GLU_EXPECT_NO_ERROR(gl.getError(), "glDepthFunc()");
534 gl.depthMask(GL_FALSE);
538 ADD_TESTCASE(depth_rangef, "Change depth range.",
542 requireCoordBuffers(1);
546 gl.useProgram(m_programs[0]->getProgram());
547 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
548 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
549 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
551 gl.enableVertexAttribArray(coordLoc);
552 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
553 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
554 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
555 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
556 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
558 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
559 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
561 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
562 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
564 gl.uniform1i(samplerLoc, 0);
565 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
567 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
568 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
571 gl.depthRangef(0.0f, 1.0f);
575 ADD_TESTCASE(blend_equation, "Change blend equation.",
579 requireCoordBuffers(1);
583 gl.useProgram(m_programs[0]->getProgram());
584 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
585 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
586 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
588 gl.enableVertexAttribArray(coordLoc);
589 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
590 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
591 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
592 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
593 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
595 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
596 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
598 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
599 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
601 gl.uniform1i(samplerLoc, 0);
602 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
604 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
605 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
608 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
611 gl.blendEquation(GL_FUNC_SUBTRACT);
615 ADD_TESTCASE(blend_func, "Change blend function.",
619 requireCoordBuffers(1);
623 gl.useProgram(m_programs[0]->getProgram());
624 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
625 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
626 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
628 gl.enableVertexAttribArray(coordLoc);
629 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
630 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
631 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
632 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
633 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
635 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
636 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
638 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
639 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
641 gl.uniform1i(samplerLoc, 0);
642 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
644 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
645 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
648 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
651 gl.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
655 ADD_TESTCASE(polygon_offset, "Change polygon offset.",
659 requireCoordBuffers(1);
663 gl.useProgram(m_programs[0]->getProgram());
664 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
665 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
666 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
668 gl.enableVertexAttribArray(coordLoc);
669 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
670 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
671 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
672 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
673 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
675 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
676 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
678 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
679 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
681 gl.uniform1i(samplerLoc, 0);
682 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
684 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
685 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
687 gl.enable(GL_POLYGON_OFFSET_FILL);
688 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
691 gl.polygonOffset(0.0f, 0.0f);
695 ADD_TESTCASE(sample_coverage, "Sample coverage.",
699 requireCoordBuffers(1);
703 gl.useProgram(m_programs[0]->getProgram());
704 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
705 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
706 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
708 gl.enableVertexAttribArray(coordLoc);
709 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
710 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
711 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
712 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
713 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
715 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
716 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
718 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
719 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
721 gl.uniform1i(samplerLoc, 0);
722 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
724 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
725 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
728 gl.sampleCoverage(0.25f, GL_TRUE);
732 ADD_TESTCASE(viewport, "Change viewport.",
736 requireCoordBuffers(1);
740 gl.useProgram(m_programs[0]->getProgram());
741 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
742 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
743 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
745 gl.enableVertexAttribArray(coordLoc);
746 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
747 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
748 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
749 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
750 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
752 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
753 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
755 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
756 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
758 gl.uniform1i(samplerLoc, 0);
759 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
761 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
762 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
765 gl.viewport(10, 11, 5, 6);
769 ADD_TESTCASE(scissor, "Change scissor box.",
773 requireCoordBuffers(1);
777 gl.useProgram(m_programs[0]->getProgram());
778 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
779 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
780 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
782 gl.enableVertexAttribArray(coordLoc);
783 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
784 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
785 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
786 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
787 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
789 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
790 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
792 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
793 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
795 gl.uniform1i(samplerLoc, 0);
796 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
798 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
799 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
801 gl.enable(GL_SCISSOR_TEST);
802 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
805 gl.scissor(17, 13, 5, 8);
809 ADD_TESTCASE(color_mask, "Change color mask.",
813 requireCoordBuffers(1);
817 gl.useProgram(m_programs[0]->getProgram());
818 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
819 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
820 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
822 gl.enableVertexAttribArray(coordLoc);
823 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
824 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
825 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
826 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
827 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
829 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
830 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
832 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
833 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
835 gl.uniform1i(samplerLoc, 0);
836 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
838 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
839 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
842 gl.colorMask(GL_TRUE, GL_FALSE, GL_TRUE, GL_FALSE);
846 ADD_TESTCASE(cull_face, "Change culling mode.",
850 requireCoordBuffers(1);
854 gl.useProgram(m_programs[0]->getProgram());
855 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
856 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
857 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
859 gl.enableVertexAttribArray(coordLoc);
860 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
861 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
862 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
863 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
864 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
866 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
867 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
869 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
870 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
872 gl.uniform1i(samplerLoc, 0);
873 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
875 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
876 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
878 gl.enable(GL_CULL_FACE);
879 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
882 gl.cullFace(GL_FRONT);
886 ADD_TESTCASE(front_face, "Change front face.",
890 requireCoordBuffers(1);
894 gl.useProgram(m_programs[0]->getProgram());
895 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
896 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
897 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
899 gl.enableVertexAttribArray(coordLoc);
900 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
901 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
902 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
903 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
904 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
906 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
907 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
909 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
910 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
912 gl.uniform1i(samplerLoc, 0);
913 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
915 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
916 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
918 gl.enable(GL_CULL_FACE);
919 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
922 gl.frontFace(GL_CCW);
926 ADD_TESTCASE(stencil_mask, "Change stencil mask.",
930 requireCoordBuffers(1);
934 gl.useProgram(m_programs[0]->getProgram());
935 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
936 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
937 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
939 gl.enableVertexAttribArray(coordLoc);
940 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
941 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
942 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
943 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
944 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
946 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
947 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
949 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
950 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
952 gl.uniform1i(samplerLoc, 0);
953 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
955 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
956 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
958 gl.enable(GL_STENCIL_TEST);
959 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
961 gl.stencilFunc(GL_LEQUAL, 0, 0);
962 GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
964 gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
965 GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
968 GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
969 gl.clear(GL_STENCIL_BUFFER_BIT);
970 GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
973 gl.stencilMask(0xDD);
977 ADD_TESTCASE(stencil_func, "Change stencil func.",
981 requireCoordBuffers(1);
985 gl.useProgram(m_programs[0]->getProgram());
986 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
987 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
988 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
990 gl.enableVertexAttribArray(coordLoc);
991 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
992 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
993 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
994 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
995 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
997 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
998 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1000 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1001 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1003 gl.uniform1i(samplerLoc, 0);
1004 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1006 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1007 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1009 gl.enable(GL_STENCIL_TEST);
1010 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
1012 gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
1013 GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
1015 GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
1016 gl.clear(GL_STENCIL_BUFFER_BIT);
1017 GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
1020 gl.stencilFunc(GL_LEQUAL, 0, 0xFF);
1024 ADD_TESTCASE(stencil_op, "Change stencil op.",
1028 requireCoordBuffers(1);
1032 gl.useProgram(m_programs[0]->getProgram());
1033 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1034 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1035 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1037 gl.enableVertexAttribArray(coordLoc);
1038 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1039 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1040 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1041 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1042 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1044 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1045 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1047 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1048 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1050 gl.uniform1i(samplerLoc, 0);
1051 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1053 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1054 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1056 gl.enable(GL_STENCIL_TEST);
1057 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
1059 gl.stencilFunc(GL_LEQUAL, 0, 0);
1060 GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
1063 GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
1065 gl.clear(GL_STENCIL_BUFFER_BIT);
1066 GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
1069 gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
1073 ADD_TESTCASE(bind_array_buffer, "Change array buffer and refresh vertex attrib pointer.",
1077 requireCoordBuffers(1);
1081 gl.bindAttribLocation(m_programs[0]->getProgram(), 0, "a_coord");
1082 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindAttribLocation()");
1083 gl.linkProgram(m_programs[0]->getProgram());
1084 GLU_EXPECT_NO_ERROR(gl.getError(), "glLinkProgram()");
1086 gl.useProgram(m_programs[0]->getProgram());
1087 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1089 gl.enableVertexAttribArray(0);
1090 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1091 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1092 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1093 gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1094 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1096 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1097 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1099 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1100 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1102 gl.uniform1i(samplerLoc, 0);
1103 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1105 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1106 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1109 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1110 gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1114 ADD_TESTCASE(element_array_buffer, "Change element array buffer.",
1118 requireCoordBuffers(1);
1119 requireIndexBuffers(1);
1123 gl.useProgram(m_programs[0]->getProgram());
1124 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1125 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1126 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1128 gl.enableVertexAttribArray(coordLoc);
1129 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1130 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1131 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1132 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1133 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1135 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1136 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1138 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1139 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1141 gl.uniform1i(samplerLoc, 0);
1142 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1144 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1145 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1147 gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[0]);
1148 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1151 gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[0]);
1155 ADD_TESTCASE(bind_texture, "Change texture binding.",
1159 requireCoordBuffers(1);
1163 gl.useProgram(m_programs[0]->getProgram());
1164 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1165 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1166 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1168 gl.enableVertexAttribArray(coordLoc);
1169 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1170 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1171 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1172 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1173 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1175 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1176 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1178 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1179 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1181 gl.uniform1i(samplerLoc, 0);
1182 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1184 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1185 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1188 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1192 ADD_TESTCASE(use_program, "Change used program.",
1196 requireCoordBuffers(1);
1200 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1201 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1203 gl.enableVertexAttribArray(coordLoc);
1204 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1205 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1206 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1207 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1208 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1210 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1211 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1213 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1214 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1215 gl.useProgram(m_programs[0]->getProgram());
1216 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1217 gl.uniform1i(samplerLoc, 0);
1218 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1220 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1221 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1224 gl.useProgram(m_programs[0]->getProgram());
1228 ADD_TESTCASE(tex_parameter_min_filter, "Change texture parameter min filter.",
1232 requireCoordBuffers(1);
1236 gl.useProgram(m_programs[0]->getProgram());
1237 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1238 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1239 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1241 gl.enableVertexAttribArray(coordLoc);
1242 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1243 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1244 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1245 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1246 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1248 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1249 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1251 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1252 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1254 gl.uniform1i(samplerLoc, 0);
1255 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1257 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1258 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1261 gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
1265 ADD_TESTCASE(tex_parameter_mag_filter, "Change texture parameter mag filter.",
1269 requireCoordBuffers(1);
1273 gl.useProgram(m_programs[0]->getProgram());
1274 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1275 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1276 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1278 gl.enableVertexAttribArray(coordLoc);
1279 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1280 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1281 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1282 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1283 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1285 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1286 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1288 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1289 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1291 gl.uniform1i(samplerLoc, 0);
1292 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1294 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1295 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1298 gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
1302 ADD_TESTCASE(tex_parameter_wrap, "Change texture parameter wrap filter.",
1306 requireCoordBuffers(1);
1310 gl.useProgram(m_programs[0]->getProgram());
1311 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1312 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1313 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1315 gl.enableVertexAttribArray(coordLoc);
1316 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1317 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1318 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1319 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1320 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1322 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1323 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1325 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1326 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1328 gl.uniform1i(samplerLoc, 0);
1329 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1331 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1332 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1335 gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
1339 ADD_TESTCASE(bind_framebuffer, "Change framebuffer.",
1343 requireCoordBuffers(1);
1345 requireFramebuffers(1);
1348 gl.useProgram(m_programs[0]->getProgram());
1349 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1350 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1351 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1353 gl.enableVertexAttribArray(coordLoc);
1354 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1355 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1356 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1357 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1358 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1360 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1361 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1363 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1364 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1366 gl.uniform1i(samplerLoc, 0);
1367 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1369 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1370 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1372 gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[0]);
1373 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindFramebuffer()");
1376 gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[0]);
1380 ADD_TESTCASE(blend_color, "Change blend color.",
1384 requireCoordBuffers(1);
1388 gl.useProgram(m_programs[0]->getProgram());
1389 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1390 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1391 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1393 gl.enableVertexAttribArray(coordLoc);
1394 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1395 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1396 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1397 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1398 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1400 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1401 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1403 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1404 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1406 gl.uniform1i(samplerLoc, 0);
1407 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1409 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1410 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1412 gl.enable(GL_BLEND);
1413 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
1415 gl.blendFunc(GL_CONSTANT_COLOR, GL_CONSTANT_COLOR);
1416 GLU_EXPECT_NO_ERROR(gl.getError(), "glBlendFunc()");
1419 gl.blendColor(0.75f, 0.75f, 0.75f, 0.75f);
1423 ADD_TESTCASE(sampler, "Change sampler binding.",
1427 requireCoordBuffers(1);
1432 gl.useProgram(m_programs[0]->getProgram());
1433 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1434 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1435 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1437 gl.enableVertexAttribArray(coordLoc);
1438 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1439 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1440 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1441 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1442 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1444 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1445 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1447 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1448 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1450 gl.uniform1i(samplerLoc, 0);
1451 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1453 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1454 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1456 gl.bindSampler(0, m_samplers[0]);
1457 gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
1458 GLU_EXPECT_NO_ERROR(gl.getError(), "Sampler setup");
1461 gl.bindSampler(0, m_samplers[0]);
1465 ADD_TESTCASE(bind_vertex_array, "Change vertex array binding.",
1469 requireCoordBuffers(1);
1472 requireVertexArrays(1);
1474 gl.bindAttribLocation(m_programs[0]->getProgram(), 0, "a_coord");
1475 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindAttribLocation()");
1476 gl.linkProgram(m_programs[0]->getProgram());
1477 GLU_EXPECT_NO_ERROR(gl.getError(), "glLinkProgram()");
1479 gl.useProgram(m_programs[0]->getProgram());
1480 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1482 gl.bindVertexArray(m_vertexArrays[0]);
1483 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindVertexArray()");
1484 gl.enableVertexAttribArray(0);
1485 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1486 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1487 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1488 gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1489 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1491 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1492 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1494 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1495 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1497 gl.uniform1i(samplerLoc, 0);
1498 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1500 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1501 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1504 gl.bindVertexArray(m_vertexArrays[0]);