13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES 2.0 Module 33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ------------------------------------------------- 43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project 63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License"); 83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License. 93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at 103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * http://www.apache.org/licenses/LICENSE-2.0 123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software 143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS, 153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and 173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License. 183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * 193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*! 203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file 213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief State change performance tests. 223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/ 233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "es2pStateChangeTests.hpp" 253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glsStateChangePerfTestCases.hpp" 263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluShaderProgram.hpp" 273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwFunctions.hpp" 283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "glwEnums.hpp" 293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 303c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace deqp 313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 323c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace gles2 333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 343c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace Performance 353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 373c827367444ee418f129b2c238299f49d3264554Jarkko Poyryusing namespace glw; // GL types 383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 393c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace 403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 423c827367444ee418f129b2c238299f49d3264554Jarkko Poyryenum 433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry VIEWPORT_WIDTH = 24, 453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry VIEWPORT_HEIGHT = 24 463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 483c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass StateChangeCase : public gls::StateChangePerformanceCase 493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 503c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic: 513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateChangeCase (Context& context, int drawCallCount, int triangleCount, bool drawArrays, bool useIndexBuffer, const char* name, const char* description); 523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ~StateChangeCase (void); 533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 543c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprotected: 553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void renderTest (const glw::Functions& gl); 563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void renderReference (const glw::Functions& gl); 573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void changeState (const glw::Functions& gl, int stateId) = 0; 593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry}; 603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 613c827367444ee418f129b2c238299f49d3264554Jarkko PoyryStateChangeCase::StateChangeCase (Context& context, int drawCallCount, int triangleCount, bool drawArrays, bool useIndexBuffer, const char* name, const char* description) 623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : gls::StateChangePerformanceCase(context.getTestContext(), context.getRenderContext(), name, description, 633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry (useIndexBuffer ? DRAWTYPE_INDEXED_BUFFER : 643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry drawArrays ? DRAWTYPE_NOT_INDEXED : 653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DRAWTYPE_INDEXED_USER_PTR), drawCallCount, triangleCount) 663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(!useIndexBuffer || !drawArrays); 683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 703c827367444ee418f129b2c238299f49d3264554Jarkko PoyryStateChangeCase::~StateChangeCase (void) 713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 743c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid StateChangeCase::renderTest (const glw::Functions& gl) 753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int callNdx = 0; callNdx < m_callCount; callNdx++) 773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry changeState(gl, 0); 793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry callDraw(gl); 803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry changeState(gl, 1); 823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry callDraw(gl); 833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 863c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid StateChangeCase::renderReference (const glw::Functions& gl) 873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry changeState(gl, 0); 893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int callNdx = 0; callNdx < m_callCount; callNdx++) 913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry callDraw(gl); 923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry changeState(gl, 1); 943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int callNdx = 0; callNdx < m_callCount; callNdx++) 963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry callDraw(gl); 973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // anonymous 1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1013c827367444ee418f129b2c238299f49d3264554Jarkko PoyryStateChangeTests::StateChangeTests (Context& context) 1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : TestCaseGroup(context, "state_change_draw", "Test state change perfomance with draw calls.") 1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1063c827367444ee418f129b2c238299f49d3264554Jarkko PoyryStateChangeTests::~StateChangeTests (void) 1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define MACRO_BLOCK(...) __VA_ARGS__ 1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define ADD_TESTCASE(NAME, DESC, DRAWARRAYS, INDEXBUFFER, INIT_FUNC, CHANGE_FUNC)\ 1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyrydo {\ 1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry class StateChangeCase_ ## NAME : public StateChangeCase\ 1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {\ 1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry public:\ 1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry StateChangeCase_ ## NAME (Context& context, int drawCallCount, int triangleCount, const char* name, const char* description)\ 1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry : StateChangeCase(context, drawCallCount, triangleCount, (DRAWARRAYS), (INDEXBUFFER), name, description)\ 1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {}\ 1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void setupInitialState (const glw::Functions& gl)\ 1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {\ 1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry INIT_FUNC\ 1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }\ 1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry virtual void changeState (const glw::Functions& gl, int stateId)\ 1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry {\ 1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry CHANGE_FUNC\ 1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }\ 1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry };\ 1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry manySmallCallsGroup->addChild (new StateChangeCase_ ## NAME (m_context,1000,2,#NAME,(DESC)));\ 1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry fewBigCallsGroup->addChild (new StateChangeCase_ ## NAME (m_context,10,200,#NAME,(DESC)));\ 1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} while (0); 1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyryvoid StateChangeTests::init (void) 1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{ 1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestCaseGroup* const manySmallCallsGroup = new tcu::TestCaseGroup(m_testCtx, "many_small_calls", "1000 calls, 2 triangles in each"); 1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry tcu::TestCaseGroup* const fewBigCallsGroup = new tcu::TestCaseGroup(m_testCtx, "few_big_calls", "10 calls, 200 triangles in each"); 1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(manySmallCallsGroup); 1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry addChild(fewBigCallsGroup); 1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(blend, "Enable/Disable blending.", 1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_BLEND); 1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.disable(GL_BLEND); 1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(depth_test, "Enable/Disable depth test.", 1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthFunc(GL_LEQUAL); 2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glDepthFunc()"); 2193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 2203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 2213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 2223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_DEPTH_TEST); 2233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 2243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.disable(GL_DEPTH_TEST); 2253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 2263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 2273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 2283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 2293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(stencil_test, "Enable/Disable stencil test.", 2313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 2323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 2333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 2343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 2353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 2363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 2373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 2393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 2403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 2413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 2423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 2443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 2453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 2463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 2473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 2483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 2493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 2513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 2523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 2543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 2553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 2573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 2583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 2603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 2613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilFunc(GL_LEQUAL, 0, 0); 2633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()"); 2643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE); 2663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()"); 2673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.clearStencil(0); 2693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()"); 2703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.clear(GL_STENCIL_BUFFER_BIT); 2713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()"); 2733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 2743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 2753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 2763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_STENCIL_TEST); 2773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 2783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.disable(GL_STENCIL_TEST); 2793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 2803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 2813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 2823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 2833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(scissor_test, "Enable/Disable scissor test.", 2853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 2863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 2873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 2883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 2893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 2903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 2913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 2933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 2943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 2953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 2963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 2973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 2983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 2993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 3003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 3013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 3023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 3033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 3053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 3063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 3083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 3093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 3113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 3123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 3143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 3153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.scissor(2, 3, 12, 13); 3173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glScissor()"); 3183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 3193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 3203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 3213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_SCISSOR_TEST); 3223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 3233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.disable(GL_SCISSOR_TEST); 3243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 3253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 3263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 3273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 3283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(dither, "Enable/Disable dithering.", 3303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 3313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 3323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 3333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 3343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 3353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 3363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 3383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 3393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 3403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 3413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 3433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 3443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 3453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 3463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 3473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 3483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 3503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 3513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 3533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 3543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 3563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 3573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 3593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 3603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 3613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 3623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 3633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_DITHER); 3643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 3653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.disable(GL_DITHER); 3663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 3673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 3683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 3693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 3703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(culling, "Enable/Disable culling.", 3723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 3733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 3743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 3753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 3763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 3773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 3783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 3803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 3813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 3823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 3833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 3853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 3863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 3873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 3883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 3893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 3903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 3923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 3933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 3953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 3963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 3973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 3983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 3993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 4013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 4023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.frontFace(GL_CW); 4043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glFrontFace()"); 4053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.cullFace(GL_FRONT); 4073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glCullFace()"); 4083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 4093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 4103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 4113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_CULL_FACE); 4123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 4133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.disable(GL_CULL_FACE); 4143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 4153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 4163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 4173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 4183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(depth_func, "Change depth func.", 4203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 4213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 4223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 4233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 4243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 4253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 4263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 4283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 4293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 4303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 4313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 4333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 4343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 4353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 4363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 4373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 4383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 4403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 4413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 4433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 4443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 4463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 4473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 4493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 4503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_DEPTH_TEST); 4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthFunc(GL_GEQUAL); 4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthFunc(GL_LEQUAL); 4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(depth_mask, "Toggle depth mask.", 4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_DEPTH_TEST); 4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthFunc(GL_LEQUAL); 5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glDepthFunc()"); 5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthMask(GL_FALSE); 5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthMask(GL_TRUE); 5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(depth_rangef, "Change depth range.", 5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthRangef(0.0f, 1.0f); 5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthRangef(0.25f, 0.75f); 5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(blend_equation, "Change blend equation.", 5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_BLEND); 5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.blendEquation(GL_FUNC_SUBTRACT); 5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.blendEquation(GL_FUNC_ADD); 5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(blend_func, "Change blend function.", 6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_BLEND); 6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.blendFunc(GL_ONE, GL_ONE); 6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(polygon_offset, "Change polygon offset.", 6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 6523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_POLYGON_OFFSET_FILL); 6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 6793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.polygonOffset(0.0f, 0.0f); 6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.polygonOffset(0.1f, 0.1f); 6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(sample_coverage, "Sample coverage.", 6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 7213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.sampleCoverage(0.25f, GL_TRUE); 7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.sampleCoverage(0.75f, GL_FALSE); 7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(viewport, "Change viewport.", 7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 7593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(10, 11, 5, 6); 7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(2, 3, 17, 14); 7693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 7703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 7713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 7723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(scissor, "Change scissor box.", 7753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 7763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 7773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 7783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 7793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 7803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 7813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 7833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 7843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 7853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 7863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 7883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 7893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 7903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 7913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 7923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 7933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 7953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 7963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 7983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 7993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 8013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 8023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 8043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 8053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_SCISSOR_TEST); 8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 8093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.scissor(17, 13, 5, 8); 8123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.scissor(7, 3, 13, 13); 8143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 8163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(color_mask, "Change color mask.", 8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 8293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 8303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 8383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 8403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 8413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 8433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 8463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 8533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.colorMask(GL_TRUE, GL_FALSE, GL_TRUE, GL_FALSE); 8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 8553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.colorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE); 8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 8603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(cull_face, "Change culling mode.", 8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 8633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 8683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 8803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 8913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_CULL_FACE); 8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 8953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.cullFace(GL_FRONT); 8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.cullFace(GL_BACK); 9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(front_face, "Change front face.", 9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 9273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_CULL_FACE); 9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.frontFace(GL_CCW); 9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.frontFace(GL_CW); 9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(stencil_mask, "Change stencil mask.", 9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 9553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 9613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 9633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 9673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 9683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 9783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 9793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 9813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_STENCIL_TEST); 9843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 9853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilFunc(GL_LEQUAL, 0, 0); 9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()"); 9883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE); 9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()"); 9913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.clearStencil(0); 9933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()"); 9943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.clear(GL_STENCIL_BUFFER_BIT); 9953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()"); 9963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 9973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 9983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 9993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilMask(0xDD); 10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 10013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilMask(~0xDD); 10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 10043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(stencil_func, "Change stencil func.", 10083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 10133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 10223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 10243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 10253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 10263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 10283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 10323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 10353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_STENCIL_TEST); 10403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE); 10433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()"); 10443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.clearStencil(0); 10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()"); 10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.clear(GL_STENCIL_BUFFER_BIT); 10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()"); 10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 10513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilFunc(GL_LEQUAL, 0, 0xFF); 10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilFunc(GL_GEQUAL, 0, 0x00); 10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 10553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 10563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(stencil_op, "Change stencil op.", 10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 10633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 10653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 10773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 10863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_STENCIL_TEST); 10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilFunc(GL_LEQUAL, 0, 0); 10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()"); 10963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.clearStencil(0); 10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()"); 10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.clear(GL_STENCIL_BUFFER_BIT); 11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()"); 11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE); 11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilOp(GL_REPLACE, GL_KEEP, GL_KEEP); 11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 11113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(bind_array_buffer, "Change array buffer and refresh vertex attrib pointer.", 11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 11153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 11163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 11173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(2); 11183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 11193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 11203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindAttribLocation(m_programs[0]->getProgram(), 0, "a_coord"); 11223fdee359c9eee4d6c1d823b23f7f64631b5945f8Jarkko Pöyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindAttribLocation()"); 11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.linkProgram(m_programs[0]->getProgram()); 11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glLinkProgram()"); 11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(0); 11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL); 11343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 11373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 11433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 11443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 11463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 11473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 11483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 11493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 11503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 11523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL); 11533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 11553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 11563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[1]); 11573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL); 11583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 11593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 11603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 11613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 11623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 11633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(element_array_buffer, "Change element array buffer.", 11653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 11663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 11673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 11683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 11693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireIndexBuffers(2); 11703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 11713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 11723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 11743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 11753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 11763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 11773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 11793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 11803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 11813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 11823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 11833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 11843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 11863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 11873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 11893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 11903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 11923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 11933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 11953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 11963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[0]); 11983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 11993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 12003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 12013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 12023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[0]); 12033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 12043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[1]); 12053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 12063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 12073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 12083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 12093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(bind_texture, "Change texture binding.", 12113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 12123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 12133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 12143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 12153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(2); 12163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 12173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 12193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 12203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 12213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 12223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 12243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 12253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 12263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 12273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 12283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 12293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 12313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 12323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 12343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 12353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 12373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 12383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 12403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 12413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 12423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 12433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 12443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 12453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 12463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[1]); 12473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 12483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 12493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 12503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 12513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(use_program, "Change used program.", 12533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 12543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 12553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 12563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 12573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 12583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(2); 12593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 12613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 12623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 12643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 12653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 12663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 12673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 12683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 12693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 12713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 12723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 12753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 12763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 12773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 12783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 12793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 12803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[1]->getProgram(), "u_sampler"); 12843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 12853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[1]->getProgram()); 12863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 12873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 12883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 12893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 12923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 12933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 12943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 12953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 12963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 12973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 12983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[1]->getProgram()); 12993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 13003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 13013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 13023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 13033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(tex_parameter_min_filter, "Change texture parameter min filter.", 13053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 13063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 13073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 13083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 13093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 13103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 13113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 13133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 13143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 13153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 13163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 13183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 13193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 13203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 13213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 13223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 13233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 13253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 13263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 13283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 13293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 13313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 13323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 13343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 13353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 13363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 13373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 13383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 13393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 13403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 13413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 13423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 13433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 13443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 13453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(tex_parameter_mag_filter, "Change texture parameter mag filter.", 13473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 13483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 13493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 13503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 13513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 13523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 13533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 13553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 13563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 13573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 13583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 13603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 13613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 13623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 13633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 13643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 13653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 13673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 13683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 13703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 13713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 13733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 13743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 13763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 13773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 13783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 13793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 13803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 13813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 13823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 13833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 13843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 13853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 13863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 13873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(tex_parameter_wrap, "Change texture parameter wrap filter.", 13893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 13903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 13913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 13923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 13933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 13943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 13953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 13973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 13983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 13993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 14003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 14023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 14033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 14043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 14053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 14063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 14073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 14093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 14103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 14123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 14133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 14153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 14163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 14183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 14193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 14203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 14213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 14223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 14233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 14243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 14253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 14263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 14273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 14283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 14293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(bind_framebuffer, "Change framebuffer.", 14313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 14323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 14333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 14343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 14353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 14363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireFramebuffers(2); 14373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 14383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 14403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 14413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 14423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 14433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 14453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 14463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 14473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 14483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 14493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 14503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 14523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 14533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 14553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 14563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 14583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 14593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 14613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 14623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[0]); 14643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindFramebuffer()"); 14653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 14663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 14673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 14683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[0]); 14693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 14703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[1]); 14713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 14723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 14733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 14743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 14753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(blend_color, "Change blend color.", 14773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 14783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 14793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 14803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 14813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 14823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 14833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 14853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 14863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 14873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 14883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 14903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 14913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 14923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 14933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 14943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 14953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 14973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 14983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 15003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 15013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 15033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 15043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 15063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 15073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_BLEND); 15093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 15103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.blendFunc(GL_CONSTANT_COLOR, GL_CONSTANT_COLOR); 15123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBlendFunc()"); 15133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 15143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 15153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 15163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.blendColor(0.25f, 0.25f, 0.25f, 0.25f); 15173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 15183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.blendColor(0.75f, 0.75f, 0.75f, 0.75f); 15193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 15203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 15213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 15223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 15233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 15243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Performance 15263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // gles2 15273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 1528