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