13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*------------------------------------------------------------------------- 23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES 3.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 "es3pStateChangeTests.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 gles3 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(rasterizer_discard, "Enable/Disable RASTERIZER_DISCARD.", 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 MACRO_BLOCK({ 4523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 4533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_RASTERIZER_DISCARD); 4543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 4553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.disable(GL_RASTERIZER_DISCARD); 4563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 4573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 4583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 4593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 4603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(primitive_restart_fixed_index, "Enable/Disable PRIMITIVE_RESTART_FIXED_INDEX.", 4623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 4633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 4643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 4653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 4663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 4673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 4683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 4703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 4713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 4723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 4733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 4753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 4763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 4773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 4783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 4793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 4803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 4823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 4833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 4853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 4863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 4883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 4893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 4903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 4913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 4923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 4933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 4943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 4953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_PRIMITIVE_RESTART_FIXED_INDEX); 4963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 4973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.disable(GL_PRIMITIVE_RESTART_FIXED_INDEX); 4983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 4993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 5003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 5013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 5023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(depth_func, "Change depth func.", 5043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 5053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 5063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 5073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 5083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 5093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 5103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 5123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 5133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 5143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 5153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 5173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 5183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 5193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 5203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 5213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 5223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 5243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 5253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 5273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 5283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 5303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 5313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 5333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 5343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_DEPTH_TEST); 5363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 5373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 5383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 5393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 5403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthFunc(GL_GEQUAL); 5413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 5423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthFunc(GL_LEQUAL); 5433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 5443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 5453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 5463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 5473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(depth_mask, "Toggle depth mask.", 5503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 5513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 5523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 5533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 5543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 5553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 5563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 5583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 5593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 5603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 5613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 5633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 5643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 5653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 5663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 5673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 5683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 5703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 5713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 5733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 5743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 5763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 5773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 5793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 5803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_DEPTH_TEST); 5823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 5833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthFunc(GL_LEQUAL); 5853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glDepthFunc()"); 5863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 5873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 5883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 5893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthMask(GL_FALSE); 5903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 5913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthMask(GL_TRUE); 5923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 5933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 5943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 5953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 5963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 5973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(depth_rangef, "Change depth range.", 5983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 5993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 6003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 6013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 6023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 6033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 6043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 6063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 6073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 6083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 6093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 6113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 6123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 6133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 6143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 6153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 6163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 6183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 6193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 6213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 6223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 6243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 6253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 6273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 6283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 6293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 6303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 6313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthRangef(0.0f, 1.0f); 6323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 6333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.depthRangef(0.25f, 0.75f); 6343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 6363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 6373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 6383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(blend_equation, "Change blend equation.", 6403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 6413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 6423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 6433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 6443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 6453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 6463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 6483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 6493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 6503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 6513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 6533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 6543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 6553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 6563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 6573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 6583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 6603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 6613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 6633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 6643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 6663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 6673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 6693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 6703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_BLEND); 6723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 6733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 6743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 6753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 6763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.blendEquation(GL_FUNC_SUBTRACT); 6773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 6783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.blendEquation(GL_FUNC_ADD); 6793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 6803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 6813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 6823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 6833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(blend_func, "Change blend function.", 6853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 6863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 6873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 6883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 6893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 6903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 6913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 6933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 6943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 6953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 6963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 6973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 6983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 6993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 7003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 7013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 7023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 7033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 7053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 7063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 7083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 7093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 7113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 7123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 7143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 7153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_BLEND); 7173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 7183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 7193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 7203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 7213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.blendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 7223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 7233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.blendFunc(GL_ONE, GL_ONE); 7243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 7253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 7263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 7273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 7283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(polygon_offset, "Change polygon offset.", 7303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 7313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 7323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 7333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 7343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 7353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 7363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 7383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 7393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 7403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 7413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 7433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 7443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 7453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 7463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 7473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 7483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 7503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 7513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 7533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 7543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 7563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 7573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 7593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 7603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_POLYGON_OFFSET_FILL); 7623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 7633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 7643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 7653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 7663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.polygonOffset(0.0f, 0.0f); 7673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 7683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.polygonOffset(0.1f, 0.1f); 7693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 7703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 7713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 7723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 7733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 7743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(sample_coverage, "Sample coverage.", 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 MACRO_BLOCK({ 8073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 8083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.sampleCoverage(0.25f, GL_TRUE); 8093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 8103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.sampleCoverage(0.75f, GL_FALSE); 8113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 8123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 8133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 8143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 8153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(viewport, "Change viewport.", 8173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 8183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 8193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 8203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 8213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 8223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 8233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 8253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 8263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 8273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 8283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 8303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 8313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 8323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 8333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 8343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 8353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 8373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 8383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 8403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 8413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 8433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 8443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 8463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 8473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 8483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 8493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 8503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(10, 11, 5, 6); 8513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 8523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(2, 3, 17, 14); 8533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 8543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 8553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 8563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 8573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(scissor, "Change scissor box.", 8593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 8603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 8613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 8623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 8633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 8643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 8653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 8673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 8683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 8693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 8703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 8723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 8733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 8743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 8753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 8763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 8773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 8793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 8803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 8823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 8833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 8853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 8863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 8883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 8893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 8903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_SCISSOR_TEST); 8913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 8923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 8933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 8943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 8953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.scissor(17, 13, 5, 8); 8963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 8973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.scissor(7, 3, 13, 13); 8983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 8993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 9003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 9013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 9023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(color_mask, "Change color mask.", 9043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 9053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 9063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 9073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 9083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 9093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 9103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 9123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 9133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 9143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 9153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 9173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 9183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 9193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 9203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 9213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 9223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 9243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 9253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 9273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 9283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 9303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 9313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 9333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 9343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 9353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 9363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 9373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.colorMask(GL_TRUE, GL_FALSE, GL_TRUE, GL_FALSE); 9383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 9393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.colorMask(GL_FALSE, GL_TRUE, GL_FALSE, GL_TRUE); 9403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 9413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 9423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 9433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 9443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(cull_face, "Change culling mode.", 9463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 9473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 9483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 9493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 9503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 9513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 9523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 9543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 9553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 9563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 9573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 9593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 9603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 9613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 9623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 9633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 9643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 9663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 9673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 9693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 9703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 9723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 9733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 9753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 9763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_CULL_FACE); 9783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 9793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 9803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 9813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 9823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.cullFace(GL_FRONT); 9833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 9843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.cullFace(GL_BACK); 9853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 9863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 9873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 9883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 9893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(front_face, "Change front face.", 9913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 9923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 9933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 9943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 9953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 9963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 9973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 9983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 9993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 10003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 10013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 10023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 10043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 10053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 10063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 10073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 10083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 10093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 10113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 10123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 10143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 10153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 10173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 10183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 10203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 10213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_CULL_FACE); 10233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 10243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 10253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 10263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 10273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.frontFace(GL_CCW); 10283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 10293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.frontFace(GL_CW); 10303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 10313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 10323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 10333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 10343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(stencil_mask, "Change stencil mask.", 10363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 10373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 10383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 10393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 10403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 10413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 10423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 10443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 10453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 10463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 10473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 10493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 10503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 10513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 10523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 10533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 10543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 10563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 10573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 10593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 10603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 10623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 10633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 10653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 10663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_STENCIL_TEST); 10683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 10693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilFunc(GL_LEQUAL, 0, 0); 10713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()"); 10723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE); 10743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()"); 10753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.clearStencil(0); 10773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()"); 10783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.clear(GL_STENCIL_BUFFER_BIT); 10793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()"); 10803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 10813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 10823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 10833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilMask(0xDD); 10843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 10853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilMask(~0xDD); 10863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 10873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 10883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 10893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 10903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(stencil_func, "Change stencil func.", 10923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 10933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 10943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 10953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 10963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 10973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 10983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 10993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 11003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 11013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 11023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 11033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 11053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 11063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 11073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 11083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 11093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 11103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 11123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 11133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 11153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 11163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 11183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 11193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 11213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 11223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_STENCIL_TEST); 11243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 11253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE); 11273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilOp()"); 11283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.clearStencil(0); 11293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()"); 11303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.clear(GL_STENCIL_BUFFER_BIT); 11313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()"); 11323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 11333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 11343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 11353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilFunc(GL_LEQUAL, 0, 0xFF); 11363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 11373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilFunc(GL_GEQUAL, 0, 0x00); 11383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 11393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 11403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 11413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 11423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(stencil_op, "Change stencil op.", 11443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 11453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 11463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 11473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 11483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 11493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 11503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 11523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 11533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 11543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 11553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 11573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 11583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 11593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 11603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 11613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 11623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 11643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 11653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 11673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 11683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 11703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 11713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 11733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 11743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_STENCIL_TEST); 11763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 11773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilFunc(GL_LEQUAL, 0, 0); 11793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glStencilFunc()"); 11803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.clearStencil(0); 11823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glClearStencil()"); 11833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.clear(GL_STENCIL_BUFFER_BIT); 11853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glClear()"); 11863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 11873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 11883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 11893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilOp(GL_KEEP, GL_REPLACE, GL_REPLACE); 11903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 11913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.stencilOp(GL_REPLACE, GL_KEEP, GL_KEEP); 11923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 11933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 11943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 11953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 11963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 11973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(bind_array_buffer, "Change array buffer and refresh vertex attrib pointer.", 11983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 11993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 12003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 12013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(2); 12023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 12033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 12043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindAttribLocation(m_programs[0]->getProgram(), 0, "a_coord"); 12063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindAttribLocation()"); 12073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.linkProgram(m_programs[0]->getProgram()); 12083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glLinkProgram()"); 12093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 12113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 12123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(0); 12143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 12153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 12163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 12173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL); 12183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 12193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 12213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 12223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 12243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 12253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 12273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 12283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 12303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 12313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 12323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 12333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 12343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 12363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL); 12373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 12393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 12403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[1]); 12413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL); 12423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 12433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 12443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 12453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 12463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 12473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(element_array_buffer, "Change element array buffer.", 12493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 12503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 12513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 12523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 12533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireIndexBuffers(2); 12543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 12553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 12563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 12583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 12593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 12603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 12613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 12633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 12643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 12653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 12663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 12673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 12683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 12703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 12713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 12733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 12743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 12763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 12773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 12793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 12803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[0]); 12823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 12833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 12843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 12853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 12863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[0]); 12873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 12883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_indexBuffers[1]); 12893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 12903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 12913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 12923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 12933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 12943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(bind_texture, "Change texture binding.", 12953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 12963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 12973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 12983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 12993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(2); 13003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 13013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 13033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 13043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 13053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 13063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 13083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 13093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 13103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 13113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 13123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 13133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 13153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 13163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 13183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 13193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 13213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 13223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 13243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 13253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 13263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 13273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 13283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 13293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 13303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[1]); 13313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 13323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 13333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 13343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 13353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(use_program, "Change used program.", 13373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 13383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 13393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 13403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 13413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 13423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(2); 13433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 13453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 13463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 13483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 13493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 13503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 13513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 13523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 13533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 13553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 13563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 13593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 13603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 13613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 13623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 13633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 13643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 13653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 13673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[1]->getProgram(), "u_sampler"); 13683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 13693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[1]->getProgram()); 13703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 13713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 13723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 13733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 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.useProgram(m_programs[0]->getProgram()); 13813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 13823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[1]->getProgram()); 13833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 13843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 13853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 13863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 13873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 13883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(tex_parameter_min_filter, "Change texture parameter min 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_MIN_FILTER, GL_NEAREST); 14233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 14243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 14253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 14263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 14273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 14283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 14293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(tex_parameter_mag_filter, "Change texture parameter mag filter.", 14313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 14323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 14333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 14343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 14353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 14363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 14373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 14393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 14403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 14413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 14423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 14443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 14453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 14463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 14473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 14483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 14493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 14513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 14523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 14543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 14553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 14573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 14583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 14603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 14613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 14623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 14633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 14643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 14653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 14663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 14673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 14683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 14693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 14703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 14713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(tex_parameter_wrap, "Change texture parameter wrap filter.", 14733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 14743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 14753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 14763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 14773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 14783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 14793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 14813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 14823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 14833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 14843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 14863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 14873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 14883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 14893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 14903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 14913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 14933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 14943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 14963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 14973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 14983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 14993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 15003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 15023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 15033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 15043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 15053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 15063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); 15073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 15083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 15093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 15103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 15113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 15123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 15133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(bind_framebuffer, "Change framebuffer.", 15153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 15163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 15173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 15183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 15193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 15203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireFramebuffers(2); 15213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 15223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 15243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 15253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 15263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 15273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 15293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 15303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 15313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 15323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 15333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 15343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 15363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 15373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 15393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 15403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 15423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 15433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 15453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 15463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[0]); 15483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindFramebuffer()"); 15493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 15503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 15513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 15523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[0]); 15533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 15543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindFramebuffer(GL_FRAMEBUFFER, m_framebuffers[1]); 15553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 15563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 15573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 15583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 15593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(blend_color, "Change blend color.", 15613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 15623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 15633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 15643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 15653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 15663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 15673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 15693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 15703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 15713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 15723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 15743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 15753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 15763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 15773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 15783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 15793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 15813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 15823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 15843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 15853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 15873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 15883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 15903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 15913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enable(GL_BLEND); 15933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnable()"); 15943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 15953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.blendFunc(GL_CONSTANT_COLOR, GL_CONSTANT_COLOR); 15963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBlendFunc()"); 15973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 15983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 15993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry if (stateId == 0) 16003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.blendColor(0.25f, 0.25f, 0.25f, 0.25f); 16013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else if (stateId == 1) 16023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.blendColor(0.75f, 0.75f, 0.75f, 0.75f); 16033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry else 16043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(false); 16053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 16063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 16073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(sampler, "Change sampler binding.", 16093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 16103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 16113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 16123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(1); 16133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 16143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 16153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireSamplers(2); 16163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 16183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 16193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint coordLoc = gl.getAttribLocation(m_programs[0]->getProgram(), "a_coord"); 16203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetAttribLocation()"); 16213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(coordLoc); 16233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 16243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[0]); 16253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 16263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(coordLoc, 2, GL_FLOAT, GL_FALSE, 0, NULL); 16273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 16283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 16303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 16313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 16333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 16343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 16363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 16373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 16393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 16403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < 2; ndx++) 16423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindSampler(0, m_samplers[ndx]); 16443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, ndx == 0 ? GL_NEAREST : GL_LINEAR); 16453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.texParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, ndx == 0 ? GL_LINEAR : GL_NEAREST); 16463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "Sampler setup"); 16473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 16493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 16503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(de::inBounds(stateId, 0, 2)); 16513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindSampler(0, m_samplers[stateId]); 16523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 16533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 16543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ADD_TESTCASE(bind_vertex_array, "Change vertex array binding.", 16563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry true, 16573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry false, 16583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 16593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireCoordBuffers(2); 16603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireTextures(1); 16613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requirePrograms(1); 16623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry requireVertexArrays(2); 16633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindAttribLocation(m_programs[0]->getProgram(), 0, "a_coord"); 16653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindAttribLocation()"); 16663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.linkProgram(m_programs[0]->getProgram()); 16673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glLinkProgram()"); 16683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.useProgram(m_programs[0]->getProgram()); 16703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUseProgram()"); 16713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry for (int ndx = 0; ndx < 2; ndx++) 16733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry { 16743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindVertexArray(m_vertexArrays[ndx]); 16753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindVertexArray()"); 16763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.enableVertexAttribArray(0); 16773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glEnableVertexAttribArray()"); 16783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindBuffer(GL_ARRAY_BUFFER, m_coordBuffers[ndx]); 16793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindBuffer()"); 16803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.vertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL); 16813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glVertexAttribPointer()"); 16823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry } 16833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLint samplerLoc = gl.getUniformLocation(m_programs[0]->getProgram(), "u_sampler"); 16853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glGetUniformLocation()"); 16863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindTexture(GL_TEXTURE_2D, m_textures[0]); 16883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glBindTexture()"); 16893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.uniform1i(samplerLoc, 0); 16913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glUniform1i()"); 16923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 16933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.viewport(0, 0, VIEWPORT_WIDTH, VIEWPORT_HEIGHT); 16943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry GLU_EXPECT_NO_ERROR(gl.getError(), "glViewport()"); 16953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }), 16963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry MACRO_BLOCK({ 16973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry DE_ASSERT(de::inRange(stateId, 0, 2)); 16983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry gl.bindVertexArray(m_vertexArrays[stateId]); 16993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry }) 17003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry ) 17013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} 17023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry 17033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // Performance 17043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // gles3 17053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // deqp 1706