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