13c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#ifndef _SGLRCONTEXT_HPP
23c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#define _SGLRCONTEXT_HPP
33c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*-------------------------------------------------------------------------
43c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * drawElements Quality Program OpenGL ES Utilities
53c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * ------------------------------------------------
63c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
73c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Copyright 2014 The Android Open Source Project
83c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
93c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Licensed under the Apache License, Version 2.0 (the "License");
103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * you may not use this file except in compliance with the License.
113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * You may obtain a copy of the License at
123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *      http://www.apache.org/licenses/LICENSE-2.0
143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * Unless required by applicable law or agreed to in writing, software
163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * distributed under the License is distributed on an "AS IS" BASIS,
173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * See the License for the specific language governing permissions and
193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * limitations under the License.
203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *
213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*!
223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \file
233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Simplified GLES reference context.
243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuDefs.hpp"
273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "tcuSurface.hpp"
283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "gluRenderContext.hpp"
293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#include "sglrShaderProgram.hpp"
303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry/*--------------------------------------------------------------------*//*!
333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry * \brief Reference OpenGL API implementation
343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry *//*--------------------------------------------------------------------*/
353c827367444ee418f129b2c238299f49d3264554Jarkko Poyrynamespace sglr
363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry// Abstract drawing context with GL-style API
393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
403c827367444ee418f129b2c238299f49d3264554Jarkko Poyryclass Context
413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry{
423c827367444ee418f129b2c238299f49d3264554Jarkko Poyrypublic:
433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry						Context					(glu::ContextType type) : m_type(type) {}
443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual				~Context				(void) {}
453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual int			getWidth				(void) const												= DE_NULL;
473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual int			getHeight				(void) const												= DE_NULL;
483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		activeTexture			(deUint32 texture)											= DE_NULL;
503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		viewport				(int x, int y, int width, int height)						= DE_NULL;
513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		bindTexture				(deUint32 target, deUint32 texture)							= DE_NULL;
533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		genTextures				(int numTextures, deUint32* textures)						= DE_NULL;
543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		deleteTextures			(int numTextures, const deUint32* textures)					= DE_NULL;
553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		bindFramebuffer			(deUint32 target, deUint32 framebuffer)						= DE_NULL;
573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		genFramebuffers			(int numFramebuffers, deUint32* framebuffers)				= DE_NULL;
583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		deleteFramebuffers		(int numFramebuffers, const deUint32* framebuffers)			= DE_NULL;
593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		bindRenderbuffer		(deUint32 target, deUint32 renderbuffer)					= DE_NULL;
613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		genRenderbuffers		(int numRenderbuffers, deUint32* renderbuffers)				= DE_NULL;
623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		deleteRenderbuffers		(int numRenderbuffers, const deUint32* renderbuffers)		= DE_NULL;
633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		pixelStorei				(deUint32 pname, int param)									= DE_NULL;
653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		texImage1D				(deUint32 target, int level, deUint32 internalFormat, int width, int border, deUint32 format, deUint32 type, const void* data)							= DE_NULL;
663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		texImage2D				(deUint32 target, int level, deUint32 internalFormat, int width, int height, int border, deUint32 format, deUint32 type, const void* data)				= DE_NULL;
673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		texImage3D				(deUint32 target, int level, deUint32 internalFormat, int width, int height, int depth, int border, deUint32 format, deUint32 type, const void* data)	= DE_NULL;
683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		texSubImage1D			(deUint32 target, int level, int xoffset, int width, deUint32 format, deUint32 type, const void* data)										= DE_NULL;
693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		texSubImage2D			(deUint32 target, int level, int xoffset, int yoffset, int width, int height, deUint32 format, deUint32 type, const void* data)							= DE_NULL;
703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		texSubImage3D			(deUint32 target, int level, int xoffset, int yoffset, int zoffset, int width, int height, int depth, deUint32 format, deUint32 type, const void* data)	= DE_NULL;
713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		copyTexImage1D			(deUint32 target, int level, deUint32 internalFormat, int x, int y, int width, int border)																= DE_NULL;
723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		copyTexImage2D			(deUint32 target, int level, deUint32 internalFormat, int x, int y, int width, int height, int border)													= DE_NULL;
733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		copyTexSubImage1D		(deUint32 target, int level, int xoffset, int x, int y, int width)																			= DE_NULL;
743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		copyTexSubImage2D		(deUint32 target, int level, int xoffset, int yoffset, int x, int y, int width, int height)																= DE_NULL;
753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		copyTexSubImage3D		(deUint32 target, int level, int xoffset, int yoffset, int zoffset, int x, int y, int width, int height)												= DE_NULL;
763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		texStorage2D			(deUint32 target, int levels, deUint32 internalFormat, int width, int height)				= DE_NULL;
783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		texStorage3D			(deUint32 target, int levels, deUint32 internalFormat, int width, int height, int depth)	= DE_NULL;
793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		texParameteri			(deUint32 target, deUint32 pname, int value)					= DE_NULL;
813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		framebufferTexture2D	(deUint32 target, deUint32 attachment, deUint32 textarget, deUint32 texture, int level)	= DE_NULL;
833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		framebufferTextureLayer	(deUint32 target, deUint32 attachment, deUint32 texture, int level, int layer)	= DE_NULL;
843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		framebufferRenderbuffer	(deUint32 target, deUint32 attachment, deUint32 renderbuffertarget, deUint32 renderbuffer) = DE_NULL;
853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual deUint32	checkFramebufferStatus	(deUint32 target)												= DE_NULL;
863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		getFramebufferAttachmentParameteriv	(deUint32 target, deUint32 attachment, deUint32 pname, int* params) = DE_NULL;
883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		renderbufferStorage				(deUint32 target, deUint32 internalformat, int width, int height) = DE_NULL;
903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		renderbufferStorageMultisample	(deUint32 target, int samples, deUint32 internalFormat, int width, int height) = DE_NULL;
913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		bindBuffer				(deUint32 target, deUint32 buffer)							= DE_NULL;
933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		genBuffers				(int numBuffers, deUint32* buffers)							= DE_NULL;
943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		deleteBuffers			(int numBuffers, const deUint32* buffers)					= DE_NULL;
953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		bufferData				(deUint32 target, deIntptr size, const void* data, deUint32 usage)	= DE_NULL;
973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		bufferSubData			(deUint32 target, deIntptr offset, deIntptr size, const void* data)	= DE_NULL;
983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		clearColor				(float red, float green, float blue, float alpha)			= DE_NULL;
1003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		clearDepthf				(float depth)												= DE_NULL;
1013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		clearStencil			(int stencil)												= DE_NULL;
1023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		clear					(deUint32 buffers)											= DE_NULL;
1043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		clearBufferiv			(deUint32 buffer, int drawbuffer, const int* value)			= DE_NULL;
1053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		clearBufferfv			(deUint32 buffer, int drawbuffer, const float* value)		= DE_NULL;
1063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		clearBufferuiv			(deUint32 buffer, int drawbuffer, const deUint32* value)	= DE_NULL;
1073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		clearBufferfi			(deUint32 buffer, int drawbuffer, float depth, int stencil)	= DE_NULL;
1083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		scissor					(int x, int y, int width, int height)						= DE_NULL;
1093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		enable					(deUint32 cap)												= DE_NULL;
1113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		disable					(deUint32 cap)												= DE_NULL;
1123c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		stencilFunc				(deUint32 func, int ref, deUint32 mask)						= DE_NULL;
1143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		stencilOp				(deUint32 sfail, deUint32 dpfail, deUint32 dppass)			= DE_NULL;
1153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		stencilFuncSeparate		(deUint32 face, deUint32 func, int ref, deUint32 mask)		= DE_NULL;
1163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		stencilOpSeparate		(deUint32 face, deUint32 sfail, deUint32 dpfail, deUint32 dppass) = DE_NULL;
1173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		depthFunc				(deUint32 func)												= DE_NULL;
1193c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		depthRangef				(float n, float f)											= DE_NULL;
1203c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		depthRange				(double n, double f)										= DE_NULL;
1213c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1223c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		polygonOffset			(float factor, float units)									= DE_NULL;
1233c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		provokingVertex			(deUint32 convention)										= DE_NULL;
1243c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		primitiveRestartIndex	(deUint32 index)											= DE_NULL;
1253c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1263c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		blendEquation			(deUint32 mode)												= DE_NULL;
1273c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		blendEquationSeparate	(deUint32 modeRGB, deUint32 modeAlpha)						= DE_NULL;
1283c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		blendFunc				(deUint32 src, deUint32 dst)								= DE_NULL;
1293c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		blendFuncSeparate		(deUint32 srcRGB, deUint32 dstRGB, deUint32 srcAlpha, deUint32 dstAlpha) = DE_NULL;
1303c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		blendColor				(float red, float green, float blue, float alpha)			= DE_NULL;
1313c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1323c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		colorMask				(deBool r, deBool g, deBool b, deBool a)					= DE_NULL;
1333c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		depthMask				(deBool mask)												= DE_NULL;
1343c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		stencilMask				(deUint32 mask)												= DE_NULL;
1353c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		stencilMaskSeparate		(deUint32 face, deUint32 mask)								= DE_NULL;
1363c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1373c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		blitFramebuffer			(int srcX0, int srcY0, int srcX1, int srcY1, int dstX0, int dstY0, int dstX1, int dstY1, deUint32 mask, deUint32 filter) = DE_NULL;
1383c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1393c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		invalidateSubFramebuffer(deUint32 target, int numAttachments, const deUint32* attachments, int x, int y, int width, int height)	= DE_NULL;
1403c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		invalidateFramebuffer	(deUint32 target, int numAttachments, const deUint32* attachments)										= DE_NULL;
1413c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1423c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		bindVertexArray			(deUint32 array)											= DE_NULL;
1433c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		genVertexArrays			(int numArrays, deUint32* vertexArrays)						= DE_NULL;
1443c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		deleteVertexArrays		(int numArrays, const deUint32* vertexArrays)				= DE_NULL;
1453c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1463c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		vertexAttribPointer		(deUint32 index, int size, deUint32 type, deBool normalized, int stride, const void *pointer)	= DE_NULL;
1473c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		vertexAttribIPointer	(deUint32 index, int size, deUint32 type, int stride, const void *pointer)						= DE_NULL;
1483c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		enableVertexAttribArray	(deUint32 index)											= DE_NULL;
1493c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		disableVertexAttribArray(deUint32 index)											= DE_NULL;
1503c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		vertexAttribDivisor		(deUint32 index, deUint32 divisor)							= DE_NULL;
1513c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1523c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		vertexAttrib1f			(deUint32 index, float)										= DE_NULL;
1533c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		vertexAttrib2f			(deUint32 index, float, float)								= DE_NULL;
1543c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		vertexAttrib3f			(deUint32 index, float, float, float)						= DE_NULL;
1553c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		vertexAttrib4f			(deUint32 index, float, float, float, float)				= DE_NULL;
1563c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		vertexAttribI4i			(deUint32 index, deInt32, deInt32, deInt32, deInt32)		= DE_NULL;
1573c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		vertexAttribI4ui		(deUint32 index, deUint32, deUint32, deUint32, deUint32)	= DE_NULL;
1583c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1593c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual deInt32		getAttribLocation		(deUint32 program, const char *name)						= DE_NULL;
1603c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1613c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		uniform1f				(deInt32 index, float)										= DE_NULL;
1623c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		uniform1i				(deInt32 index, deInt32)									= DE_NULL;
1633c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		uniform1fv				(deInt32 index, deInt32 count, const float*)				= DE_NULL;
1643c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		uniform2fv				(deInt32 index, deInt32 count, const float*)				= DE_NULL;
1653c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		uniform3fv				(deInt32 index, deInt32 count, const float*)				= DE_NULL;
1663c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		uniform4fv				(deInt32 index, deInt32 count, const float*)				= DE_NULL;
1673c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		uniform1iv				(deInt32 index, deInt32 count, const deInt32*)				= DE_NULL;
1683c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		uniform2iv				(deInt32 index, deInt32 count, const deInt32*)				= DE_NULL;
1693c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		uniform3iv				(deInt32 index, deInt32 count, const deInt32*)				= DE_NULL;
1703c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		uniform4iv				(deInt32 index, deInt32 count, const deInt32*)				= DE_NULL;
1713c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		uniformMatrix3fv		(deInt32 location, deInt32 count, deInt32 transpose, const float *value)	= DE_NULL;
1723c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		uniformMatrix4fv		(deInt32 location, deInt32 count, deInt32 transpose, const float *value)	= DE_NULL;
1733c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual deInt32		getUniformLocation		(deUint32 program, const char *name)						= DE_NULL;
1743c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1753c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		lineWidth				(float)														= DE_NULL;
1763c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1773c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		drawArrays				(deUint32 mode, int first, int count)															= DE_NULL;
1783c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		drawArraysInstanced		(deUint32 mode, int first, int count, int instanceCount)										= DE_NULL;
1793c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		drawElements			(deUint32 mode, int count, deUint32 type, const void *indices)									= DE_NULL;
1803c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		drawElementsInstanced	(deUint32 mode, int count, deUint32 type, const void *indices, int instanceCount)				= DE_NULL;
1813c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		drawElementsBaseVertex	(deUint32 mode, int count, deUint32 type, const void *indices, int baseVertex)					= DE_NULL;
1823c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		drawElementsInstancedBaseVertex	(deUint32 mode, int count, deUint32 type, const void *indices, int instanceCount, int baseVertex) = DE_NULL;
1833c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		drawRangeElements		(deUint32 mode, deUint32 start, deUint32 end, int count, deUint32 type, const void *indices)	= DE_NULL;
1843c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		drawRangeElementsBaseVertex	(deUint32 mode, deUint32 start, deUint32 end, int count, deUint32 type, const void *indices, int baseVertex) = DE_NULL;
1853c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		drawArraysIndirect		(deUint32 mode, const void *indirect)															= DE_NULL;
1863c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		drawElementsIndirect	(deUint32 mode, deUint32 type, const void *indirect)											= DE_NULL;
1873c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1883c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		multiDrawArrays			(deUint32 mode, const int* first, const int* count, int primCount)								= DE_NULL;
1893c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		multiDrawElements		(deUint32 mode, const int* count, deUint32 type, const void** indices, int primCount)			= DE_NULL;
1903c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		multiDrawElementsBaseVertex (deUint32 mode, const int* count, deUint32 type, const void** indices, int primCount, const int* baseVertex) = DE_NULL;
1913c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1923c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual deUint32	createProgram			(ShaderProgram* program)															= DE_NULL;
1933c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		useProgram				(deUint32 program)																	= DE_NULL;
1943c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		deleteProgram			(deUint32 program)																	= DE_NULL;
1953c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1963c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
1973c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		readPixels				(int x, int y, int width, int height, deUint32 format, deUint32 type, void* data)	= DE_NULL;
1983c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual deUint32	getError				(void)																				= DE_NULL;
1993c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		finish					(void)																				= DE_NULL;
2003c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2013c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		getIntegerv				(deUint32 pname, int* params)														= DE_NULL;
2023c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual const char*	getString				(deUint32 pname)																	= DE_NULL;
2033c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2043c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	// Helpers implemented by Context.
2053c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		texImage2D				(deUint32 target, int level, deUint32 internalFormat, const tcu::Surface& src);
2063c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		texImage2D				(deUint32 target, int level, deUint32 internalFormat, int width, int height);
2073c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		texSubImage2D			(deUint32 target, int level, int xoffset, int yoffset, const tcu::Surface& src);
2083c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	virtual void		readPixels				(tcu::Surface& dst, int x, int y, int width, int height);
2093c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2103c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	glu::ContextType	getType					(void)	{ return m_type; }
2113c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2123c827367444ee418f129b2c238299f49d3264554Jarkko Poyryprivate:
2133c827367444ee418f129b2c238299f49d3264554Jarkko Poyry	const glu::ContextType	m_type;
2143c827367444ee418f129b2c238299f49d3264554Jarkko Poyry};
2153c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2163c827367444ee418f129b2c238299f49d3264554Jarkko Poyry} // sglr
2173c827367444ee418f129b2c238299f49d3264554Jarkko Poyry
2183c827367444ee418f129b2c238299f49d3264554Jarkko Poyry#endif // _SGLRCONTEXT_HPP
219