1 /*-------------------------------------------------------------------------
2 * drawElements Quality Program OpenGL ES 2.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 State change performance tests.
22 *//*--------------------------------------------------------------------*/
24 #include "es2pStateChangeTests.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 StateChangeCase : public gls::StateChangePerformanceCase
51 StateChangeCase (Context& context, int drawCallCount, int triangleCount, bool drawArrays, bool useIndexBuffer, const char* name, const char* description);
52 ~StateChangeCase (void);
55 virtual void renderTest (const glw::Functions& gl);
56 virtual void renderReference (const glw::Functions& gl);
58 virtual void changeState (const glw::Functions& gl, int stateId) = 0;
61 StateChangeCase::StateChangeCase (Context& context, int drawCallCount, int triangleCount, bool drawArrays, bool useIndexBuffer, const char* name, const char* description)
62 : gls::StateChangePerformanceCase(context.getTestContext(), context.getRenderContext(), name, description,
63 (useIndexBuffer ? DRAWTYPE_INDEXED_BUFFER :
64 drawArrays ? DRAWTYPE_NOT_INDEXED :
65 DRAWTYPE_INDEXED_USER_PTR), drawCallCount, triangleCount)
67 DE_ASSERT(!useIndexBuffer || !drawArrays);
70 StateChangeCase::~StateChangeCase (void)
74 void StateChangeCase::renderTest (const glw::Functions& gl)
76 for (int callNdx = 0; callNdx < m_callCount; callNdx++)
86 void StateChangeCase::renderReference (const glw::Functions& gl)
90 for (int callNdx = 0; callNdx < m_callCount; callNdx++)
95 for (int callNdx = 0; callNdx < m_callCount; callNdx++)
101 StateChangeTests::StateChangeTests (Context& context)
102 : TestCaseGroup(context, "state_change_draw", "Test state change perfomance with draw calls.")
106 StateChangeTests::~StateChangeTests (void)
110 #define MACRO_BLOCK(...) __VA_ARGS__
112 #define ADD_TESTCASE(NAME, DESC, DRAWARRAYS, INDEXBUFFER, INIT_FUNC, CHANGE_FUNC)\
114 class StateChangeCase_ ## NAME : public StateChangeCase\
117 StateChangeCase_ ## NAME (Context& context, int drawCallCount, int triangleCount, const char* name, const char* description)\
118 : StateChangeCase(context, drawCallCount, triangleCount, (DRAWARRAYS), (INDEXBUFFER), name, description)\
120 virtual void setupInitialState (const glw::Functions& gl)\
124 virtual void changeState (const glw::Functions& gl, int stateId)\
129 manySmallCallsGroup->addChild (new StateChangeCase_ ## NAME (m_context,1000,2,#NAME,(DESC)));\
130 fewBigCallsGroup->addChild (new StateChangeCase_ ## NAME (m_context,10,200,#NAME,(DESC)));\
133 void StateChangeTests::init (void)
135 tcu::TestCaseGroup* const manySmallCallsGroup = new tcu::TestCaseGroup(m_testCtx, "many_small_calls", "1000 calls, 2 triangles in each");
136 tcu::TestCaseGroup* const fewBigCallsGroup = new tcu::TestCaseGroup(m_testCtx, "few_big_calls", "10 calls, 200 triangles in each");
138 addChild(manySmallCallsGroup);
139 addChild(fewBigCallsGroup);
141 ADD_TESTCASE(blend, "Enable/Disable blending.",
145 requireCoordBuffers(1);
149 gl.useProgram(m_programs[0]->getProgram());
150 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
151 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
152 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
154 gl.enableVertexAttribArray(coordLoc);
155 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
156 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
157 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
158 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
159 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
161 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
162 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
164 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
165 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
167 gl.uniform1i(samplerLoc, 0);
168 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
170 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
171 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
176 else if (stateId == 1)
177 gl.disable(GL_BLEND);
183 ADD_TESTCASE(depth_test, "Enable/Disable depth test.",
187 requireCoordBuffers(1);
191 gl.useProgram(m_programs[0]->getProgram());
192 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
194 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
195 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
197 gl.enableVertexAttribArray(coordLoc);
198 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
200 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
201 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
202 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
203 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
205 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
206 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
208 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
209 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
211 gl.uniform1i(samplerLoc, 0);
212 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
214 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
215 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
217 gl.depthFunc(GL_LEQUAL);
218 GLU_EXPECT_NO_ERROR(gl.getError(), "glDepthFunc()");
222 gl.enable(GL_DEPTH_TEST);
223 else if (stateId == 1)
224 gl.disable(GL_DEPTH_TEST);
230 ADD_TESTCASE(stencil_test, "Enable/Disable stencil test.",
234 requireCoordBuffers(1);
238 gl.useProgram(m_programs[0]->getProgram());
239 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
240 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
241 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
243 gl.enableVertexAttribArray(coordLoc);
244 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
245 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
246 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
247 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
248 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
250 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
251 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
253 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
254 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
256 gl.uniform1i(samplerLoc, 0);
257 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
259 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
260 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
262 gl.stencilFunc(GL_LEQUAL, 0, 0);
263 GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
265 gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
266 GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
269 GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
270 gl.clear(GL_STENCIL_BUFFER_BIT);
272 GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
276 gl.enable(GL_STENCIL_TEST);
277 else if (stateId == 1)
278 gl.disable(GL_STENCIL_TEST);
284 ADD_TESTCASE(scissor_test, "Enable/Disable scissor test.",
288 requireCoordBuffers(1);
292 gl.useProgram(m_programs[0]->getProgram());
293 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
294 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
295 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
297 gl.enableVertexAttribArray(coordLoc);
298 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
299 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
300 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
301 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
302 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
304 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
305 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
307 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
308 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
310 gl.uniform1i(samplerLoc, 0);
311 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
313 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
314 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
316 gl.scissor(2, 3, 12, 13);
317 GLU_EXPECT_NO_ERROR(gl.getError(), "glScissor()");
321 gl.enable(GL_SCISSOR_TEST);
322 else if (stateId == 1)
323 gl.disable(GL_SCISSOR_TEST);
329 ADD_TESTCASE(dither, "Enable/Disable dithering.",
333 requireCoordBuffers(1);
337 gl.useProgram(m_programs[0]->getProgram());
338 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
339 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
340 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
342 gl.enableVertexAttribArray(coordLoc);
343 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
344 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
345 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
346 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
347 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
349 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
350 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
352 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
353 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
355 gl.uniform1i(samplerLoc, 0);
356 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
358 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
359 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
363 gl.enable(GL_DITHER);
364 else if (stateId == 1)
365 gl.disable(GL_DITHER);
371 ADD_TESTCASE(culling, "Enable/Disable culling.",
375 requireCoordBuffers(1);
379 gl.useProgram(m_programs[0]->getProgram());
380 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
381 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
382 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
384 gl.enableVertexAttribArray(coordLoc);
385 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
386 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
387 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
388 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
389 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
391 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
392 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
394 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
395 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
397 gl.uniform1i(samplerLoc, 0);
398 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
400 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
401 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
404 GLU_EXPECT_NO_ERROR(gl.getError(), "glFrontFace()");
406 gl.cullFace(GL_FRONT);
407 GLU_EXPECT_NO_ERROR(gl.getError(), "glCullFace()");
411 gl.enable(GL_CULL_FACE);
412 else if (stateId == 1)
413 gl.disable(GL_CULL_FACE);
419 ADD_TESTCASE(depth_func, "Change depth func.",
423 requireCoordBuffers(1);
427 gl.useProgram(m_programs[0]->getProgram());
428 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
429 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
430 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
432 gl.enableVertexAttribArray(coordLoc);
433 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
434 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
435 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
436 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
437 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
439 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
440 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
442 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
443 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
445 gl.uniform1i(samplerLoc, 0);
446 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
448 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
449 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
451 gl.enable(GL_DEPTH_TEST);
452 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
456 gl.depthFunc(GL_GEQUAL);
457 else if (stateId == 1)
458 gl.depthFunc(GL_LEQUAL);
465 ADD_TESTCASE(depth_mask, "Toggle depth mask.",
469 requireCoordBuffers(1);
473 gl.useProgram(m_programs[0]->getProgram());
474 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
475 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
476 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
478 gl.enableVertexAttribArray(coordLoc);
479 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
480 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
481 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
482 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
483 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
485 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
486 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
488 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
489 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
491 gl.uniform1i(samplerLoc, 0);
492 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
494 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
495 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
497 gl.enable(GL_DEPTH_TEST);
498 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
500 gl.depthFunc(GL_LEQUAL);
501 GLU_EXPECT_NO_ERROR(gl.getError(), "glDepthFunc()");
505 gl.depthMask(GL_FALSE);
506 else if (stateId == 1)
507 gl.depthMask(GL_TRUE);
513 ADD_TESTCASE(depth_rangef, "Change depth range.",
517 requireCoordBuffers(1);
521 gl.useProgram(m_programs[0]->getProgram());
522 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
523 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
524 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
526 gl.enableVertexAttribArray(coordLoc);
527 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
528 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
529 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
530 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
531 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
533 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
534 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
536 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
537 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
539 gl.uniform1i(samplerLoc, 0);
540 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
542 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
543 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
547 gl.depthRangef(0.0f, 1.0f);
548 else if (stateId == 1)
549 gl.depthRangef(0.25f, 0.75f);
555 ADD_TESTCASE(blend_equation, "Change blend equation.",
559 requireCoordBuffers(1);
563 gl.useProgram(m_programs[0]->getProgram());
564 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
565 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
566 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
568 gl.enableVertexAttribArray(coordLoc);
569 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
570 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
571 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
572 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
573 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
575 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
576 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
578 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
579 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
581 gl.uniform1i(samplerLoc, 0);
582 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
584 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
585 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
588 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
592 gl.blendEquation(GL_FUNC_SUBTRACT);
593 else if (stateId == 1)
594 gl.blendEquation(GL_FUNC_ADD);
600 ADD_TESTCASE(blend_func, "Change blend function.",
604 requireCoordBuffers(1);
608 gl.useProgram(m_programs[0]->getProgram());
609 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
610 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
611 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
613 gl.enableVertexAttribArray(coordLoc);
614 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
615 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
616 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
617 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
618 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
620 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
621 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
623 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
624 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
626 gl.uniform1i(samplerLoc, 0);
627 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
629 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
630 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
633 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
637 gl.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
638 else if (stateId == 1)
639 gl.blendFunc(GL_ONE, GL_ONE);
645 ADD_TESTCASE(polygon_offset, "Change polygon offset.",
649 requireCoordBuffers(1);
653 gl.useProgram(m_programs[0]->getProgram());
654 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
655 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
656 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
658 gl.enableVertexAttribArray(coordLoc);
659 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
660 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
661 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
662 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
663 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
665 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
666 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
668 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
669 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
671 gl.uniform1i(samplerLoc, 0);
672 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
674 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
675 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
677 gl.enable(GL_POLYGON_OFFSET_FILL);
678 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
682 gl.polygonOffset(0.0f, 0.0f);
683 else if (stateId == 1)
684 gl.polygonOffset(0.1f, 0.1f);
690 ADD_TESTCASE(sample_coverage, "Sample coverage.",
694 requireCoordBuffers(1);
698 gl.useProgram(m_programs[0]->getProgram());
699 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
700 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
701 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
703 gl.enableVertexAttribArray(coordLoc);
704 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
705 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
706 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
707 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
708 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
710 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
711 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
713 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
714 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
716 gl.uniform1i(samplerLoc, 0);
717 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
719 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
720 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
724 gl.sampleCoverage(0.25f, GL_TRUE);
725 else if (stateId == 1)
726 gl.sampleCoverage(0.75f, GL_FALSE);
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()");
766 gl.viewport(10, 11, 5, 6);
767 else if (stateId == 1)
768 gl.viewport(2, 3, 17, 14);
774 ADD_TESTCASE(scissor, "Change scissor box.",
778 requireCoordBuffers(1);
782 gl.useProgram(m_programs[0]->getProgram());
783 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
784 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
785 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
787 gl.enableVertexAttribArray(coordLoc);
788 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
789 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
790 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
791 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
792 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
794 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
795 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
797 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
798 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
800 gl.uniform1i(samplerLoc, 0);
801 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
803 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
804 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
806 gl.enable(GL_SCISSOR_TEST);
807 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
811 gl.scissor(17, 13, 5, 8);
812 else if (stateId == 1)
813 gl.scissor(7, 3, 13, 13);
819 ADD_TESTCASE(color_mask, "Change color mask.",
823 requireCoordBuffers(1);
827 gl.useProgram(m_programs[0]->getProgram());
828 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
829 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
830 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
832 gl.enableVertexAttribArray(coordLoc);
833 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
834 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
835 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
836 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
837 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
839 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
840 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
842 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
843 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
845 gl.uniform1i(samplerLoc, 0);
846 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
848 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
849 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
853 gl.colorMask(GL_TRUE, GL_FALSE, GL_TRUE, GL_FALSE);
854 else if (stateId == 1)
855 gl.colorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE);
861 ADD_TESTCASE(cull_face, "Change culling mode.",
865 requireCoordBuffers(1);
869 gl.useProgram(m_programs[0]->getProgram());
870 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
871 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
872 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
874 gl.enableVertexAttribArray(coordLoc);
875 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
876 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
877 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
878 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
879 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
881 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
882 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
884 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
885 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
887 gl.uniform1i(samplerLoc, 0);
888 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
890 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
891 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
893 gl.enable(GL_CULL_FACE);
894 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
898 gl.cullFace(GL_FRONT);
899 else if (stateId == 1)
900 gl.cullFace(GL_BACK);
906 ADD_TESTCASE(front_face, "Change front face.",
910 requireCoordBuffers(1);
914 gl.useProgram(m_programs[0]->getProgram());
915 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
916 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
917 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
919 gl.enableVertexAttribArray(coordLoc);
920 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
921 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
922 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
923 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
924 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
926 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
927 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
929 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
930 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
932 gl.uniform1i(samplerLoc, 0);
933 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
935 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
936 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
938 gl.enable(GL_CULL_FACE);
939 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
943 gl.frontFace(GL_CCW);
944 else if (stateId == 1)
951 ADD_TESTCASE(stencil_mask, "Change stencil mask.",
955 requireCoordBuffers(1);
959 gl.useProgram(m_programs[0]->getProgram());
960 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
961 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
962 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
964 gl.enableVertexAttribArray(coordLoc);
965 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
966 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
967 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
968 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
969 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
971 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
972 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
974 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
975 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
977 gl.uniform1i(samplerLoc, 0);
978 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
980 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
981 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
983 gl.enable(GL_STENCIL_TEST);
984 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
986 gl.stencilFunc(GL_LEQUAL, 0, 0);
987 GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
989 gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
990 GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
993 GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
994 gl.clear(GL_STENCIL_BUFFER_BIT);
995 GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
999 gl.stencilMask(0xDD);
1000 else if (stateId == 1)
1001 gl.stencilMask(~0xDD);
1007 ADD_TESTCASE(stencil_func, "Change stencil func.",
1011 requireCoordBuffers(1);
1015 gl.useProgram(m_programs[0]->getProgram());
1016 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1017 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1018 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1020 gl.enableVertexAttribArray(coordLoc);
1021 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1022 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1023 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1024 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1025 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1027 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1028 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1030 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1031 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1033 gl.uniform1i(samplerLoc, 0);
1034 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1036 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1037 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1039 gl.enable(GL_STENCIL_TEST);
1040 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
1042 gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
1043 GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()");
1045 GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
1046 gl.clear(GL_STENCIL_BUFFER_BIT);
1047 GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
1051 gl.stencilFunc(GL_LEQUAL, 0, 0xFF);
1052 else if (stateId == 1)
1053 gl.stencilFunc(GL_GEQUAL, 0, 0x00);
1059 ADD_TESTCASE(stencil_op, "Change stencil op.",
1063 requireCoordBuffers(1);
1067 gl.useProgram(m_programs[0]->getProgram());
1068 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1069 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1070 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1072 gl.enableVertexAttribArray(coordLoc);
1073 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1074 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1075 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1076 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1077 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1079 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1080 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1082 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1083 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1085 gl.uniform1i(samplerLoc, 0);
1086 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1088 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1089 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1091 gl.enable(GL_STENCIL_TEST);
1092 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
1094 gl.stencilFunc(GL_LEQUAL, 0, 0);
1095 GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()");
1098 GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()");
1100 gl.clear(GL_STENCIL_BUFFER_BIT);
1101 GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()");
1105 gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE);
1106 else if (stateId == 1)
1107 gl.stencilOp(GL_REPLACE, GL_KEEP, GL_KEEP);
1113 ADD_TESTCASE(bind_array_buffer, "Change array buffer and refresh vertex attrib pointer.",
1117 requireCoordBuffers(2);
1121 gl.bindAttribLocation(m_programs[0]->getProgram(), 0, "a_coord");
1122 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindAttribLocation()");
1123 gl.linkProgram(m_programs[0]->getProgram());
1124 GLU_EXPECT_NO_ERROR(gl.getError(), "glLinkProgram()");
1126 gl.useProgram(m_programs[0]->getProgram());
1127 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1129 gl.enableVertexAttribArray(0);
1130 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1131 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1132 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1133 gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1134 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1136 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1137 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1139 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1140 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1142 gl.uniform1i(samplerLoc, 0);
1143 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1145 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1146 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1151 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1152 gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1154 else if (stateId == 1)
1156 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[1]);
1157 gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1164 ADD_TESTCASE(element_array_buffer, "Change element array buffer.",
1168 requireCoordBuffers(1);
1169 requireIndexBuffers(2);
1173 gl.useProgram(m_programs[0]->getProgram());
1174 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1175 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1176 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1178 gl.enableVertexAttribArray(coordLoc);
1179 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1180 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1181 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1182 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1183 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1185 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1186 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1188 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1189 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1191 gl.uniform1i(samplerLoc, 0);
1192 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1194 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1195 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1197 gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[0]);
1198 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1202 gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[0]);
1203 else if (stateId == 1)
1204 gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[1]);
1210 ADD_TESTCASE(bind_texture, "Change texture binding.",
1214 requireCoordBuffers(1);
1218 gl.useProgram(m_programs[0]->getProgram());
1219 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1220 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1221 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1223 gl.enableVertexAttribArray(coordLoc);
1224 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1225 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1226 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1227 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1228 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1230 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1231 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1233 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1234 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1236 gl.uniform1i(samplerLoc, 0);
1237 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1239 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1240 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1244 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1245 else if (stateId == 1)
1246 gl.bindTexture(GL_TEXTURE_2D, m_textures[1]);
1252 ADD_TESTCASE(use_program, "Change used program.",
1256 requireCoordBuffers(1);
1260 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1261 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1263 gl.enableVertexAttribArray(coordLoc);
1264 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1265 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1266 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1267 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1268 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1270 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1271 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1274 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1275 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1276 gl.useProgram(m_programs[0]->getProgram());
1277 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1278 gl.uniform1i(samplerLoc, 0);
1279 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1283 GLint samplerLoc = gl.getUniformLocation(m_programs[1]->getProgram(), "u_sampler");
1284 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1285 gl.useProgram(m_programs[1]->getProgram());
1286 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1287 gl.uniform1i(samplerLoc, 0);
1288 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1291 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1292 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1296 gl.useProgram(m_programs[0]->getProgram());
1297 else if (stateId == 1)
1298 gl.useProgram(m_programs[1]->getProgram());
1304 ADD_TESTCASE(tex_parameter_min_filter, "Change texture parameter min filter.",
1308 requireCoordBuffers(1);
1312 gl.useProgram(m_programs[0]->getProgram());
1313 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1314 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1315 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1317 gl.enableVertexAttribArray(coordLoc);
1318 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1319 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1320 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1321 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1322 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1324 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1325 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1327 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1328 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1330 gl.uniform1i(samplerLoc, 0);
1331 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1333 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1334 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1338 gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
1339 else if (stateId == 1)
1340 gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
1346 ADD_TESTCASE(tex_parameter_mag_filter, "Change texture parameter mag filter.",
1350 requireCoordBuffers(1);
1354 gl.useProgram(m_programs[0]->getProgram());
1355 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1356 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1357 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1359 gl.enableVertexAttribArray(coordLoc);
1360 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1361 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1362 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1363 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1364 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1366 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1367 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1369 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1370 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1372 gl.uniform1i(samplerLoc, 0);
1373 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1375 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1376 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1380 gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
1381 else if (stateId == 1)
1382 gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
1388 ADD_TESTCASE(tex_parameter_wrap, "Change texture parameter wrap filter.",
1392 requireCoordBuffers(1);
1396 gl.useProgram(m_programs[0]->getProgram());
1397 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1398 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1399 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1401 gl.enableVertexAttribArray(coordLoc);
1402 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1403 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1404 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1405 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1406 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1408 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1409 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1411 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1412 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1414 gl.uniform1i(samplerLoc, 0);
1415 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1417 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1418 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1422 gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
1423 else if (stateId == 1)
1424 gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
1430 ADD_TESTCASE(bind_framebuffer, "Change framebuffer.",
1434 requireCoordBuffers(1);
1436 requireFramebuffers(2);
1439 gl.useProgram(m_programs[0]->getProgram());
1440 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1441 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1442 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1444 gl.enableVertexAttribArray(coordLoc);
1445 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1446 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1447 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1448 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1449 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1451 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1452 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1454 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1455 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1457 gl.uniform1i(samplerLoc, 0);
1458 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1460 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1461 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1463 gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[0]);
1464 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindFramebuffer()");
1468 gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[0]);
1469 else if (stateId == 1)
1470 gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[1]);
1476 ADD_TESTCASE(blend_color, "Change blend color.",
1480 requireCoordBuffers(1);
1484 gl.useProgram(m_programs[0]->getProgram());
1485 GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()");
1486 GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord");
1487 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()");
1489 gl.enableVertexAttribArray(coordLoc);
1490 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()");
1491 gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]);
1492 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()");
1493 gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL);
1494 GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()");
1496 GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler");
1497 GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()");
1499 gl.bindTexture(GL_TEXTURE_2D, m_textures[0]);
1500 GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()");
1502 gl.uniform1i(samplerLoc, 0);
1503 GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()");
1505 gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT);
1506 GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()");
1508 gl.enable(GL_BLEND);
1509 GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()");
1511 gl.blendFunc(GL_CONSTANT_COLOR, GL_CONSTANT_COLOR);
1512 GLU_EXPECT_NO_ERROR(gl.getError(), "glBlendFunc()");
1516 gl.blendColor(0.25f, 0.25f, 0.25f, 0.25f);
1517 else if (stateId == 1)
1518 gl.blendColor(0.75f, 0.75f, 0.75f, 0.75f);