Enabled use of client-side memory in vertex, element, indirect, and count buffer

Added support for glArrayElement(EXT|) to the immediate mode layer.
    Support NUM_EXTENSIONS in glGet(Integer|Float|Double|Boolean|Integer64)v(EXT|)
    Added interception for glGetStringi and glGetIntergerv
    Improve loading of GLES and EGL libraries on Android
    Various bug fixes...
    Merged pull requests:
     #131  NaCL Pepper now uses GLES2 prefix for ES2.0 functions, rather than gl
     #130  Copyright bump to 2014
     #129  NaCL-related build tweaks for regaltest, nacl example and pnacl.
     #128  GLEW refresh
     #126  boost::print fix for mapping 'long' and 'long long' to 32-bit or 64-bit for length purposes
     #125  Resolve clang compilation error: lookup of 'Depth' in member access expression is ambiguous
     #124  Add Makefile support for gcc-4.4, gcc-4.6 and clang toolchains on Linux.
     #116  Make it compile with Visual Studio 2013 (VC12)
This commit is contained in:
Scott Nations 2014-08-07 12:24:42 -05:00
parent 1ba938a5f0
commit bc7e48247e
79 changed files with 2379 additions and 585 deletions

View file

@ -39,6 +39,7 @@ include Makefile.dreamtorus
include Makefile.dreamtorus_static
include Makefile.alphatorus
include Makefile.tiger
include Makefile.nacl
# Testing

View file

@ -6,6 +6,7 @@ MAKEFILE_NACL_INCLUDED := 1
#
ifneq ($(filter nacl%,$(SYSTEM)),)
ifeq ($(filter nacl-pnacl,$(SYSTEM)),)
.PHONY: nacl.bin nacl.clean
@ -36,8 +37,9 @@ NACL.SRCS.NAMES := $(notdir $(NACL.SRCS))
NACL.OBJS := $(addprefix tmp/$(SYSTEM)/nacl/static/,$(NACL.SRCS.NAMES))
NACL.OBJS := $(NACL.OBJS:.c=.o)
NACL.CFLAGS := -Iinclude
NACL.LIBS += -Llib/$(SYSTEM) -lRegal
NACL.LIBS += -lpng -lz -lm -pthread -lppapi -lppapi_gles2 -lstdc++
NACL.CFLAGS += -DREGAL_NAMESPACE=1
NACL.LIBS += -Llib/$(SYSTEM) -lRegallib -lglslopt -lpnglib -lzlib
NACL.LIBS += -lm -pthread -lppapi -lppapi_gles2 -lstdc++
-include $(NACL.DEPS)
@ -45,7 +47,7 @@ tmp/$(SYSTEM)/nacl/static/%.o: examples/nacl/%.c
@mkdir -p $(dir $@)
$(LOG_CC)$(CC) $(CFLAGS) -std=gnu99 $(NACL.CFLAGS) $(CFLAGS.SO) -o $@ -c $<
bin/$(SYSTEM)/nacl$(BIN_EXTENSION): lib/$(SYSTEM)/$(REGAL.STATIC) $(NACL.OBJS)
bin/$(SYSTEM)/nacl$(BIN_EXTENSION): lib/$(SYSTEM)/$(REGAL.STATIC) lib/$(SYSTEM)/$(GLSLOPT.STATIC) $(NACL.OBJS)
@mkdir -p $(dir $@)
$(LOG_LD)$(LD) $(LDFLAGS.EXTRA) -o $@ $(NACL.OBJS) $(NACL.LIBS)
ifneq ($(STRIP),)
@ -57,3 +59,4 @@ examples/nacl/nacl.nmf: bin/$(SYSTEM)/nacl$(BIN_EXTENSION)
endif
endif
endif

View file

@ -35,7 +35,13 @@ all:: regal.lib
clean:: regal.clean
REGAL.LDFLAGS := -lstdc++ -pthread -lm
REGAL.LDFLAGS :=
ifeq ($(filter nacl%,$(SYSTEM)),)
REGAL.LDFLAGS += -lstdc++
endif
REGAL.LDFLAGS += -pthread -lm
REGAL.LIBS :=
ifeq ($(filter nacl%,$(SYSTEM)),)
@ -103,16 +109,16 @@ endif
ifeq ($(MODE),custom)
endif
# Emscripten options
# NaCL options
ifneq ($(filter nacl% emscripten%,$(SYSTEM)),)
REGAL.CFLAGS += -DREGAL_SYS_EMSCRIPTEN=1 -DREGAL_SYS_EGL=1 -DREGAL_SYS_ES2=1
ifneq ($(filter nacl%,$(SYSTEM)),)
REGAL.CFLAGS += -DREGAL_SYS_ES2=1
REGAL.CFLAGS += -DREGAL_HTTP=0
REGAL.CFLAGS += -DREGAL_STATISTICS=0
REGAL.CFLAGS += -Wno-constant-logical-operand
REGAL.CFLAGS += -DREGAL_PLUGIN=0
REGAL.CFLAGS += -DREGAL_TRACE=0
REGAL.CFLAGS += -DREGAL_NAMESPACE=1 -DREGAL_STATIC_ES2 -DREGAL_STATIC_EGL
REGAL.CFLAGS += -DREGAL_NAMESPACE=1 -DREGAL_STATIC_ES2
REGAL_LOG = 0
REGAL_NO_TLS = 1

View file

@ -5,9 +5,9 @@ MAKEFILE_REGALTEST_INCLUDED := 1
include build/common.inc
# Not supported for NaCL - Revisit
# Not supported for Emscripten - Revisit
ifeq ($(filter nacl% emscripten%,$(SYSTEM)),)
ifeq ($(filter emscripten% nacl-pnacl,$(SYSTEM)),)
include build/regaltest.inc
@ -49,7 +49,7 @@ REGALTEST.LIBS := -Llib/$(SYSTEM) $(LDFLAGS.X11) -lm
ifeq ($(filter nacl%,$(SYSTEM)),)
REGALTEST.LIBS += -ldl
else
REGALTEST.LIBS += -lnacl_io
REGALTEST.LIBS += -lnacl_io -lppapi -lppapi_gles2
endif
-include $(REGALTEST.DEPS)
@ -61,9 +61,9 @@ tmp/$(SYSTEM)/regaltest/static/%.o: tests/%.cpp
bin/$(SYSTEM)/regaltest$(BIN_EXTENSION): $(REGALTEST.OBJS) lib/$(SYSTEM)/$(GTEST.STATIC) lib/$(SYSTEM)/$(REGAL.STATIC) lib/$(SYSTEM)/$(PCRE.STATIC) $(REGAL.SHARED.DEPEND)
@mkdir -p $(dir $@)
ifdef APITRACE.STATIC
$(LOG_LD)$(CCACHE) $(LD) $(LDFLAGS.EXTRA) -o $@ $(REGALTEST.OBJS) $(REGALTEST.LIBS) $(LDFLAGS.STARTGROUP) lib/$(SYSTEM)/$(REGAL.STATIC) lib/$(SYSTEM)/$(APITRACE.STATIC) $(LDFLAGS.ENDGROUP) $(REGAL.SHARED.DEPEND) $(REGAL.LIBS) lib/$(SYSTEM)/$(PCRE.STATIC) lib/$(SYSTEM)/$(GTEST.STATIC) $(REGAL.LDFLAGS)
$(LOG_LD)$(CCACHE) $(LD) $(LDFLAGS.EXTRA) -o $@ $(REGALTEST.OBJS) $(LDFLAGS.STARTGROUP) lib/$(SYSTEM)/$(REGAL.STATIC) lib/$(SYSTEM)/$(APITRACE.STATIC) $(LDFLAGS.ENDGROUP) $(REGAL.SHARED.DEPEND) $(REGAL.LIBS) $(REGALTEST.LIBS) lib/$(SYSTEM)/$(PCRE.STATIC) lib/$(SYSTEM)/$(GTEST.STATIC) $(REGAL.LDFLAGS)
else
$(LOG_LD)$(CCACHE) $(LD) $(LDFLAGS.EXTRA) -o $@ $(REGALTEST.OBJS) $(REGALTEST.LIBS) lib/$(SYSTEM)/$(REGAL.STATIC) lib/$(SYSTEM)/$(PCRE.STATIC) $(REGAL.SHARED.DEPEND) $(REGAL.LIBS) lib/$(SYSTEM)/$(GTEST.STATIC) $(REGAL.LDFLAGS)
$(LOG_LD)$(CCACHE) $(LD) $(LDFLAGS.EXTRA) -o $@ $(REGALTEST.OBJS) lib/$(SYSTEM)/$(REGAL.STATIC) lib/$(SYSTEM)/$(PCRE.STATIC) $(REGAL.SHARED.DEPEND) $(REGAL.LIBS) $(REGALTEST.LIBS) lib/$(SYSTEM)/$(GTEST.STATIC) $(REGAL.LDFLAGS)
endif
ifneq ($(STRIP),)
$(LOG_STRIP)$(STRIP) -x $@
@ -75,7 +75,7 @@ test: bin/$(SYSTEM)/regaltest$(BIN_EXTENSION)
ifeq ($(filter nacl%,$(SYSTEM)),)
$^
else
"$(NACL_SEL_LDR)" -a -B "$(NACL_IRT)" -- $^
"$(NACL_SDK_ROOT)/tools/sel_ldr.py" $^
endif
endif

View file

@ -380,9 +380,7 @@ PPAPI and NaCl
* NACL_SDK_ROOT needs to be set
* NACL_LIBC=newlib is the default, specify NACL_LIBC=glibc as an alternative
* regaltest requires pepper_26 or newer
* NACL_LIBC=newlib is the default, specify glibc or pnacl as alternatives
Questions and Answers
=====================

View file

@ -51,12 +51,12 @@ OPT ?= $(CFLAGS.RELEASE)
endif
ifndef V
LOG_CXX ?= @echo " [CXX] $@";
LOG_CC ?= @echo " [CC] $@";
LOG_LD ?= @echo " [LD] $@";
LOG_AR ?= @echo " [AR] $@";
LOG_CXX ?= @echo " [CXX] $@";
LOG_CC ?= @echo " [CC] $@";
LOG_LD ?= @echo " [LD] $@";
LOG_AR ?= @echo " [AR] $@";
LOG_RANLIB ?= @echo " [RANLIB] $@";
LOG_STRIP ?= @echo " [STRIP] $@";
LOG_STRIP ?= @echo " [STRIP] $@";
endif
INCLUDE ?= -Iinclude

View file

@ -93,15 +93,14 @@ GLSLOPT.CXX += src/glsl/src/glsl/../mesa/program/symbol_table.c
GLSLOPT.CXX += src/glsl/src/glsl/../mesa/program/prog_hash_table.c
# Internal Headers
# seth: is this used for dependencies?
GLSLOPT.H :=
# Other Headers
# seth: do all of these need to be specified?
GLSLOPT.H.OTHER :=
#
# Includes
#
GLSLOPT.INCLUDE :=
GLSLOPT.INCLUDE += -Isrc/glsl/include

View file

@ -65,7 +65,7 @@ PCRE.C += src/pcre/pcre_get.c
PCRE.C += src/pcre/pcre_globals.c
#PCRE.C += src/pcre/pcregrep.c
PCRE.C += src/pcre/pcre_jit_compile.c
PCRE.C += src/pcre/pcre_jit_test.c
#PCRE.C += src/pcre/pcre_jit_test.c
PCRE.C += src/pcre/pcre_maketables.c
PCRE.C += src/pcre/pcre_newline.c
PCRE.C += src/pcre/pcre_ord2utf8.c

View file

@ -0,0 +1,9 @@
# Use clang 3.5 toolchain on Ubuntu 14.04 / Debian
include config/Makefile.linux
CC = clang
CXX = clang++
LD = clang
WARN += -Wno-constant-logical-operand

View file

@ -0,0 +1,7 @@
# Use gcc 4.4 toolchain on Ubuntu 14.04 / Debian
include config/Makefile.linux
CC = gcc-4.4
CXX = g++-4.4
LD = gcc-4.4

View file

@ -0,0 +1,7 @@
# Use gcc 4.6 toolchain on Ubuntu 14.04 / Debian
include config/Makefile.linux
CC = gcc-4.6
CXX = g++-4.6
LD = gcc-4.6

View file

@ -2,7 +2,7 @@ NACL_ARCH := pnacl
include config/nacl.inc
NACL_TOOLCHAIN := $(NACL_SDK_ROOT)/toolchain/$(NACL_OS)_x86_pnacl/$(NACL_LIBC)
NACL_TOOLCHAIN := $(NACL_SDK_ROOT)/toolchain/$(NACL_OS)_pnacl
CC := $(NACL_TOOLCHAIN)/bin/pnacl-clang
CXX := $(NACL_TOOLCHAIN)/bin/pnacl-clang++
@ -13,7 +13,6 @@ STRIP ?=
BIN_EXTENSION = .pexe
EXT.DYNAMIC = so
LDFLAGS.EXTRA =
LIBDIR =
CFLAGS.EXTRA +=
LDFLAGS.EXTRA +=

View file

@ -48,8 +48,12 @@ export CCACHE_COMPILERCHECK=echo $(SYSTEM)$(NACL_LIBC)$(NACL_SDK_ROOT)
ifeq ($(NACL_ARCH),i686)
NACL_LIBTYPE=$(NACL_LIBC)_x86_32
else
ifeq ($(NACL_ARCH),pnacl)
NACL_LIBTYPE=$(NACL_ARCH)
else
NACL_LIBTYPE=$(NACL_LIBC)_$(NACL_ARCH)
endif
endif
ifeq ($(MODE),debug)
LDFLAGS.EXTRA += -L$(NACL_SDK_ROOT)/ports/lib/$(NACL_LIBTYPE)/Debug

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -1,6 +1,6 @@
/*
** The OpenGL Extension Wrangler Library
** Copyright (C) 2008-2013, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2008-2014, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
** Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
** Copyright (C) 2002, Lev Povalahev
@ -1184,6 +1184,15 @@ GLAPI void GLAPIENTRY glViewport (GLint x, GLint y, GLsizei width, GLsizei heigh
/* ---------------------------------- GLU ---------------------------------- */
#ifndef GLEW_NO_GLU
# ifdef __APPLE__
# include <Availability.h>
# if defined(__IPHONE_OS_VERSION_MIN_REQUIRED)
# define GLEW_NO_GLU
# endif
# endif
#endif
#ifndef GLEW_NO_GLU
/* this is where we can safely include GLU */
# if defined(__APPLE__) && defined(__MACH__)
@ -1612,18 +1621,18 @@ typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVPROC) (const GLshort *p);
#ifndef GL_VERSION_1_5
#define GL_VERSION_1_5 1
#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE
#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE
#define GL_FOG_COORD GL_FOG_COORDINATE
#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY
#define GL_SRC0_RGB GL_SOURCE0_RGB
#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER
#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE
#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA
#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE
#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE
#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA
#define GL_SRC1_RGB GL_SOURCE1_RGB
#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER
#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE
#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE
#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE
#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA
#define GL_SRC0_RGB GL_SOURCE0_RGB
#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA
#define GL_SRC1_RGB GL_SOURCE1_RGB
#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA
#define GL_SRC2_RGB GL_SOURCE2_RGB
#define GL_BUFFER_SIZE 0x8764
@ -2044,14 +2053,14 @@ typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei
#ifndef GL_VERSION_3_0
#define GL_VERSION_3_0 1
#define GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES
#define GL_CLIP_DISTANCE5 GL_CLIP_PLANE5
#define GL_CLIP_DISTANCE1 GL_CLIP_PLANE1
#define GL_CLIP_DISTANCE3 GL_CLIP_PLANE3
#define GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB
#define GL_CLIP_DISTANCE0 GL_CLIP_PLANE0
#define GL_CLIP_DISTANCE4 GL_CLIP_PLANE4
#define GL_CLIP_DISTANCE1 GL_CLIP_PLANE1
#define GL_CLIP_DISTANCE2 GL_CLIP_PLANE2
#define GL_CLIP_DISTANCE3 GL_CLIP_PLANE3
#define GL_CLIP_DISTANCE4 GL_CLIP_PLANE4
#define GL_CLIP_DISTANCE5 GL_CLIP_PLANE5
#define GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB
#define GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES
#define GL_MAX_VARYING_COMPONENTS GL_MAX_VARYING_FLOATS
#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001
#define GL_MAJOR_VERSION 0x821B
@ -2585,6 +2594,24 @@ typedef void (GLAPIENTRY * PFNGLBLENDFUNCSEPARATEINDEXEDAMDPROC) (GLuint buf, GL
#endif /* GL_AMD_draw_buffers_blend */
/* --------------------------- GL_AMD_gcn_shader --------------------------- */
#ifndef GL_AMD_gcn_shader
#define GL_AMD_gcn_shader 1
#define GLEW_AMD_gcn_shader GLEW_GET_VAR(__GLEW_AMD_gcn_shader)
#endif /* GL_AMD_gcn_shader */
/* ------------------------ GL_AMD_gpu_shader_int64 ------------------------ */
#ifndef GL_AMD_gpu_shader_int64
#define GL_AMD_gpu_shader_int64 1
#define GLEW_AMD_gpu_shader_int64 GLEW_GET_VAR(__GLEW_AMD_gpu_shader_int64)
#endif /* GL_AMD_gpu_shader_int64 */
/* ---------------------- GL_AMD_interleaved_elements ---------------------- */
#ifndef GL_AMD_interleaved_elements
@ -2854,6 +2881,17 @@ typedef void (GLAPIENTRY * PFNGLSTENCILOPVALUEAMDPROC) (GLenum face, GLuint valu
#endif /* GL_AMD_transform_feedback3_lines_triangles */
/* ----------------------- GL_AMD_transform_feedback4 ---------------------- */
#ifndef GL_AMD_transform_feedback4
#define GL_AMD_transform_feedback4 1
#define GL_STREAM_RASTERIZATION_AMD 0x91A0
#define GLEW_AMD_transform_feedback4 GLEW_GET_VAR(__GLEW_AMD_transform_feedback4)
#endif /* GL_AMD_transform_feedback4 */
/* ----------------------- GL_AMD_vertex_shader_layer ---------------------- */
#ifndef GL_AMD_vertex_shader_layer
@ -6807,6 +6845,7 @@ typedef void (GLAPIENTRY * PFNGLVERTEXATTRIBLPOINTERPROC) (GLuint index, GLint s
#define GL_VERTEX_BINDING_STRIDE 0x82D8
#define GL_MAX_VERTEX_ATTRIB_RELATIVE_OFFSET 0x82D9
#define GL_MAX_VERTEX_ATTRIB_BINDINGS 0x82DA
#define GL_VERTEX_BINDING_BUFFER 0x8F4F
typedef void (GLAPIENTRY * PFNGLBINDVERTEXBUFFERPROC) (GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
typedef void (GLAPIENTRY * PFNGLVERTEXARRAYBINDVERTEXBUFFEREXTPROC) (GLuint vaobj, GLuint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride);
@ -7547,13 +7586,13 @@ typedef void (GLAPIENTRY * PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint
#ifndef GL_ATI_fragment_shader
#define GL_ATI_fragment_shader 1
#define GL_RED_BIT_ATI 0x00000001
#define GL_2X_BIT_ATI 0x00000001
#define GL_RED_BIT_ATI 0x00000001
#define GL_4X_BIT_ATI 0x00000002
#define GL_GREEN_BIT_ATI 0x00000002
#define GL_COMP_BIT_ATI 0x00000002
#define GL_BLUE_BIT_ATI 0x00000004
#define GL_GREEN_BIT_ATI 0x00000002
#define GL_8X_BIT_ATI 0x00000004
#define GL_BLUE_BIT_ATI 0x00000004
#define GL_NEGATE_BIT_ATI 0x00000004
#define GL_BIAS_BIT_ATI 0x00000008
#define GL_HALF_BIT_ATI 0x00000008
@ -9748,6 +9787,15 @@ typedef void (GLAPIENTRY * PFNGLUSESHADERPROGRAMEXTPROC) (GLenum type, GLuint pr
#endif /* GL_EXT_separate_specular_color */
/* ------------------- GL_EXT_shader_image_load_formatted ------------------ */
#ifndef GL_EXT_shader_image_load_formatted
#define GL_EXT_shader_image_load_formatted 1
#define GLEW_EXT_shader_image_load_formatted GLEW_GET_VAR(__GLEW_EXT_shader_image_load_formatted)
#endif /* GL_EXT_shader_image_load_formatted */
/* --------------------- GL_EXT_shader_image_load_store -------------------- */
#ifndef GL_EXT_shader_image_load_store
@ -12449,8 +12497,8 @@ typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target,
#define GL_ITALIC_BIT_NV 0x02
#define GL_MOVE_TO_NV 0x02
#define GL_RELATIVE_MOVE_TO_NV 0x03
#define GL_LINE_TO_NV 0x04
#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04
#define GL_LINE_TO_NV 0x04
#define GL_RELATIVE_LINE_TO_NV 0x05
#define GL_HORIZONTAL_LINE_TO_NV 0x06
#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07
@ -12938,6 +12986,28 @@ typedef void (GLAPIENTRY * PFNGLUNIFORMUI64VNVPROC) (GLint location, GLsizei cou
#endif /* GL_NV_shader_storage_buffer_object */
/* ----------------------- GL_NV_shader_thread_group ----------------------- */
#ifndef GL_NV_shader_thread_group
#define GL_NV_shader_thread_group 1
#define GL_WARP_SIZE_NV 0x9339
#define GL_WARPS_PER_SM_NV 0x933A
#define GL_SM_COUNT_NV 0x933B
#define GLEW_NV_shader_thread_group GLEW_GET_VAR(__GLEW_NV_shader_thread_group)
#endif /* GL_NV_shader_thread_group */
/* ---------------------- GL_NV_shader_thread_shuffle ---------------------- */
#ifndef GL_NV_shader_thread_shuffle
#define GL_NV_shader_thread_shuffle 1
#define GLEW_NV_shader_thread_shuffle GLEW_GET_VAR(__GLEW_NV_shader_thread_shuffle)
#endif /* GL_NV_shader_thread_shuffle */
/* ---------------------- GL_NV_tessellation_program5 ---------------------- */
#ifndef GL_NV_tessellation_program5
@ -13086,8 +13156,8 @@ typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture
#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1
#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2
#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2
#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3
#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3
#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3
#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4
#define GL_CONST_EYE_NV 0x86E5
#define GL_PASS_THROUGH_NV 0x86E6
@ -14556,9 +14626,9 @@ typedef void (GLAPIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void);
#ifndef GL_SGIX_fog_texture
#define GL_SGIX_fog_texture 1
#define GL_TEXTURE_FOG_SGIX 0
#define GL_FOG_PATCHY_FACTOR_SGIX 0
#define GL_FRAGMENT_FOG_SGIX 0
#define GL_TEXTURE_FOG_SGIX 0
typedef void (GLAPIENTRY * PFNGLTEXTUREFOGSGIXPROC) (GLenum pname);
@ -17722,6 +17792,8 @@ GLEW_VAR_EXPORT GLboolean __GLEW_AMD_conservative_depth;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_debug_output;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_depth_clamp_separate;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_draw_buffers_blend;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_gcn_shader;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_gpu_shader_int64;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_interleaved_elements;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_multi_draw_indirect;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_name_gen_delete;
@ -17739,6 +17811,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_AMD_sparse_texture;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_stencil_operation_extended;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_texture_texture4;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_transform_feedback3_lines_triangles;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_transform_feedback4;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_layer;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_tessellator;
GLEW_VAR_EXPORT GLboolean __GLEW_AMD_vertex_shader_viewport_index;
@ -17995,6 +18068,7 @@ GLEW_VAR_EXPORT GLboolean __GLEW_EXT_scene_marker;
GLEW_VAR_EXPORT GLboolean __GLEW_EXT_secondary_color;
GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_shader_objects;
GLEW_VAR_EXPORT GLboolean __GLEW_EXT_separate_specular_color;
GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_image_load_formatted;
GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_image_load_store;
GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shader_integer_mix;
GLEW_VAR_EXPORT GLboolean __GLEW_EXT_shadow_funcs;
@ -18117,6 +18191,8 @@ GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_counters;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_atomic_float;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_buffer_load;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_storage_buffer_object;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_thread_group;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_shader_thread_shuffle;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_tessellation_program5;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_emboss;
GLEW_VAR_EXPORT GLboolean __GLEW_NV_texgen_reflection;

View file

@ -1,6 +1,6 @@
/*
** The OpenGL Extension Wrangler Library
** Copyright (C) 2008-2013, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2008-2014, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
** Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
** Copyright (C) 2002, Lev Povalahev
@ -201,18 +201,18 @@ typedef Display* ( * PFNGLXGETCURRENTDISPLAYPROC) (void);
#ifndef GLX_VERSION_1_3
#define GLX_VERSION_1_3 1
#define GLX_RGBA_BIT 0x00000001
#define GLX_FRONT_LEFT_BUFFER_BIT 0x00000001
#define GLX_RGBA_BIT 0x00000001
#define GLX_WINDOW_BIT 0x00000001
#define GLX_COLOR_INDEX_BIT 0x00000002
#define GLX_PIXMAP_BIT 0x00000002
#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002
#define GLX_PIXMAP_BIT 0x00000002
#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004
#define GLX_PBUFFER_BIT 0x00000004
#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008
#define GLX_AUX_BUFFERS_BIT 0x00000010
#define GLX_CONFIG_CAVEAT 0x20
#define GLX_DEPTH_BUFFER_BIT 0x00000020
#define GLX_CONFIG_CAVEAT 0x20
#define GLX_X_VISUAL_TYPE 0x22
#define GLX_TRANSPARENT_TYPE 0x23
#define GLX_TRANSPARENT_INDEX_VALUE 0x24
@ -666,6 +666,19 @@ typedef int ( * PFNGLXQUERYCONTEXTINFOEXTPROC) (Display* dpy, GLXContext context
#endif /* GLX_EXT_scene_marker */
/* -------------------------- GLX_EXT_stereo_tree -------------------------- */
#ifndef GLX_EXT_stereo_tree
#define GLX_EXT_stereo_tree 1
#define GLX_STEREO_NOTIFY_EXT 0x00000000
#define GLX_STEREO_NOTIFY_MASK_EXT 0x00000001
#define GLX_STEREO_TREE_EXT 0x20F5
#define GLXEW_EXT_stereo_tree GLXEW_GET_VAR(__GLXEW_EXT_stereo_tree)
#endif /* GLX_EXT_stereo_tree */
/* -------------------------- GLX_EXT_swap_control ------------------------- */
#ifndef GLX_EXT_swap_control
@ -1039,10 +1052,10 @@ typedef void ( * PFNGLXRELEASEVIDEOCAPTUREDEVICENVPROC) (Display* dpy, GLXVideoC
#endif /* GLX_NV_video_capture */
/* -------------------------- GLX_NV_video_output -------------------------- */
/* ---------------------------- GLX_NV_video_out --------------------------- */
#ifndef GLX_NV_video_output
#define GLX_NV_video_output 1
#ifndef GLX_NV_video_out
#define GLX_NV_video_out 1
#define GLX_VIDEO_OUT_COLOR_NV 0x20C3
#define GLX_VIDEO_OUT_ALPHA_NV 0x20C4
@ -1069,9 +1082,9 @@ typedef int ( * PFNGLXSENDPBUFFERTOVIDEONVPROC) (Display* dpy, GLXPbuffer pbuf,
#define glXReleaseVideoImageNV GLXEW_GET_FUN(__glewXReleaseVideoImageNV)
#define glXSendPbufferToVideoNV GLXEW_GET_FUN(__glewXSendPbufferToVideoNV)
#define GLXEW_NV_video_output GLXEW_GET_VAR(__GLXEW_NV_video_output)
#define GLXEW_NV_video_out GLXEW_GET_VAR(__GLXEW_NV_video_out)
#endif /* GLX_NV_video_output */
#endif /* GLX_NV_video_out */
/* -------------------------- GLX_OML_swap_method -------------------------- */
@ -1157,10 +1170,10 @@ typedef Bool ( * PFNGLXWAITFORSBCOMLPROC) (Display* dpy, GLXDrawable drawable, i
#ifndef GLX_SGIX_fbconfig
#define GLX_SGIX_fbconfig 1
#define GLX_WINDOW_BIT_SGIX 0x00000001
#define GLX_RGBA_BIT_SGIX 0x00000001
#define GLX_PIXMAP_BIT_SGIX 0x00000002
#define GLX_WINDOW_BIT_SGIX 0x00000001
#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002
#define GLX_PIXMAP_BIT_SGIX 0x00000002
#define GLX_SCREEN_EXT 0x800C
#define GLX_DRAWABLE_TYPE_SGIX 0x8010
#define GLX_RENDER_TYPE_SGIX 0x8011
@ -1197,8 +1210,8 @@ typedef XVisualInfo* ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLX
#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001
#define GLX_PIPE_RECT_SGIX 0x00000001
#define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002
#define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002
#define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002
#define GLX_HYPERPIPE_STEREO_SGIX 0x00000003
#define GLX_HYPERPIPE_PIXEL_AVERAGE_SGIX 0x00000004
#define GLX_HYPERPIPE_PIPE_NAME_LENGTH_SGIX 80
@ -1264,8 +1277,8 @@ typedef GLXHyperpipeNetworkSGIX * ( * PFNGLXQUERYHYPERPIPENETWORKSGIXPROC) (Disp
#define GLX_FRONT_LEFT_BUFFER_BIT_SGIX 0x00000001
#define GLX_FRONT_RIGHT_BUFFER_BIT_SGIX 0x00000002
#define GLX_PBUFFER_BIT_SGIX 0x00000004
#define GLX_BACK_LEFT_BUFFER_BIT_SGIX 0x00000004
#define GLX_PBUFFER_BIT_SGIX 0x00000004
#define GLX_BACK_RIGHT_BUFFER_BIT_SGIX 0x00000008
#define GLX_AUX_BUFFERS_BIT_SGIX 0x00000010
#define GLX_DEPTH_BUFFER_BIT_SGIX 0x00000020
@ -1646,6 +1659,7 @@ GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_fbconfig_packed_float;
GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_framebuffer_sRGB;
GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_import_context;
GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_scene_marker;
GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_stereo_tree;
GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_swap_control;
GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_swap_control_tear;
GLXEW_VAR_EXPORT GLboolean __GLXEW_EXT_texture_from_pixmap;
@ -1667,7 +1681,7 @@ GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_present_video;
GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_swap_group;
GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_vertex_array_range;
GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_video_capture;
GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_video_output;
GLXEW_VAR_EXPORT GLboolean __GLXEW_NV_video_out;
GLXEW_VAR_EXPORT GLboolean __GLXEW_OML_swap_method;
GLXEW_VAR_EXPORT GLboolean __GLXEW_OML_sync_control;
GLXEW_VAR_EXPORT GLboolean __GLXEW_SGIS_blended_overlay;

View file

@ -1,6 +1,6 @@
/*
** The OpenGL Extension Wrangler Library
** Copyright (C) 2008-2013, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2008-2014, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
** Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
** Copyright (C) 2002, Lev Povalahev

View file

@ -26,3 +26,6 @@ if [ "$NACL_LIBC" != "glibc" ]; then
echo "Building ARM"
make -f Makefile SYSTEM=nacl-arm $*
fi
echo "Building pnacl"
make -f Makefile SYSTEM=nacl-pnacl $*

View file

@ -365,11 +365,7 @@ dsaFormulae = {
},
'BindVertexArray' : {
'entries' : [ 'glBindVertexArray' ],
'impl' : [
'if (!_context->dsa->ShadowVao( ${arg0} )) {',
' _dispatch.call(&_dispatch.glBindVertexArray)( ${arg0} );',
'}',
],
'impl' : [ '_context->dsa->ShadowVao( _context, ${arg0} ); '],
},
# TODO - GL_ARB_base_instance ?
'RestoreEverything' : {

View file

@ -212,7 +212,12 @@ return;'''
'glDrawRangeElementsBaseVertex' : {
'entries' : [ 'glDrawRangeElementsBaseVertex' ],
'impl' : [
'if (REGAL_FORCE_ES2_PROFILE || !_context->info->gl_arb_draw_elements_base_vertex)',
'// WAR: Our Tegra driver GL 4 core profile supports DrawRangeElementsBaseVertex but does not',
'// advertise ARB_draw_elements_base_vertex in the extension list so here we check whether the',
'// driver has glDrawRangeElementsBaseVertex instead of looking for the extension flag.',
'// (leaving original line here, just commented out)',
'// if (REGAL_FORCE_ES2_PROFILE || !_context->info->gl_arb_draw_elements_base_vertex)',
'if (REGAL_FORCE_ES2_PROFILE || !_context->dispatcher.driver.glDrawRangeElementsBaseVertex)',
'{',
' if (basevertex==0)',
' {',
@ -222,7 +227,7 @@ return;'''
' }',
' else',
' {',
' Warning("Regal does not support ${name} (GL_ARB_draw_elements_base_vertex extension not available) for basevertex!=0 for ES 2.0 - skipping.");',
' Warning("Regal does not support ${name} (GL_ARB_draw_elements_base_vertex extension not available) for basevertex!=0 - skipping.");',
' return;',
' }',
'}'
@ -284,7 +289,7 @@ return;'''
# ARB assembly programs not supported or emulated for ES 2.0 (yet)
'GL_ARB_vertex_program' : {
'entries' : [ 'glGenProgramsARB', 'glBindProgramARB', 'glProgramStringARB', 'glGetProgramivARB' ],
'entries' : [ 'glGenProgramsARB', 'glBindProgramARB', 'glGetProgramivARB' ],
'impl' : [
'if (_context->isES2())',
'{',
@ -294,6 +299,20 @@ return;'''
]
},
'glProgramStringARB' : {
'entries' : [ 'glProgramStringARB' ],
'impl' : [
'// nothing to do if len <= 0 so just return',
'if (${arg2} <= 0)',
' return;',
'if (_context->isES2())',
'{',
' Warning("Regal does not support ${name} (GL_ARB_vertex_program) for ES 2.0 context - skipping.");',
' return;',
'}'
]
},
# Remap GL_ARB_shader_objects to GL 2.0 API
# http://www.opengl.org/registry/specs/ARB/shader_objects.txt
#

View file

@ -11,7 +11,37 @@ switch (name)
case GL_VENDOR: return reinterpret_cast<const GLubyte *>(_context->emuInfo->vendor.c_str());
case GL_RENDERER: return reinterpret_cast<const GLubyte *>(_context->emuInfo->renderer.c_str());
case GL_VERSION: return reinterpret_cast<const GLubyte *>(_context->emuInfo->version.c_str());
case GL_EXTENSIONS: return reinterpret_cast<const GLubyte *>(_context->emuInfo->extensions.c_str());
case GL_EXTENSIONS: return reinterpret_cast<const GLubyte *>(_context->extensions.c_str());
default:
break;
}'''
},
'GetStringi' : {
'entries' : [ 'glGetStringi' ],
'impl' : '''
// Regal interceptions
switch (name)
{
case GL_EXTENSIONS:
{
std::set<std::string>::iterator it = _context->extensionsSet.begin();
std::advance(it, index);
return reinterpret_cast<const GLubyte *>(it->c_str());
};
default:
break;
}'''
},
'Get' : {
'entries' : [ 'glGet(Integer|Float|Double|Boolean|Integer64)v(EXT|)' ],
'impl' : '''
// Regal interceptions
switch (pname)
{
case GL_NUM_EXTENSIONS:
_context->numExtensions( ${arg1} );
return;
default:
break;
}'''

View file

@ -76,6 +76,10 @@ iffFormulae = {
'entries' : [ 'gl(SecondaryColor|Color|Normal)(2|3|4)(b|i|s|ub|ui|us)(v|)(EXT|)?' ],
'impl' : [ '_context->iff->AttrN<${m2}>( _context, _context->iff->AttrIndex( RFF2A_${m1} ), ${arg0plus} );', ],
},
'ImmArrayElement' : {
'entries' : [ 'glArrayElement(EXT|)' ],
'impl' : [ '_context->iff->ProvokeElement( _context, ${arg0} );', ],
},
'ImmTexCoord' : {
'entries' : [ 'glTexCoord(1|2|3|4)(d|f|i|s)(v|)' ],
'impl' : [ '_context->iff->Attr<${m1}>( _context, _context->iff->AttrIndex( RFF2A_TexCoord ), ${arg0plus} );', ],

View file

@ -30,9 +30,7 @@ quadsFormulae = {
'impl' : [
'''
if ( ! _context->quads->glDrawArrays( _context, ${arg0plus} ) ) {
DispatchTableGL *_next = _context->dispatcher.emulation.next();
RegalAssert(_next);
return _next->call(&_next->glDrawArrays)( ${arg0plus} );
_context->dispatcher.emulation.glDrawArrays( ${arg0plus} );
}
'''
],

View file

@ -2,10 +2,6 @@
vaoFormulae = {
# TODO - GL_ARB_base_instance ?
'Validate' : {
'entries' : [ 'gl(Multi|)Draw(Arrays|Element|Elements)(Instanced|Indirect|BaseVertex|InstancedBaseVertex|Array|)(ARB|EXT|AMD|ATI|APPLE|)' ],
'prefix' : [ '// _context->vao->Validate(*_context );' ],
},
'BufferBinding' : {
'entries' : [ 'glBindBuffer(ARB|)' ],
'prefix' : [ '_context->vao->ShadowBufferBinding( ${arg0}, ${arg1} );' ],
@ -20,7 +16,7 @@ vaoFormulae = {
},
'DeleteVertexArrays' : {
'entries' : [ 'glDeleteVertexArrays(ARB|)' ],
'impl' : [ '_context->vao->DeleteVertexArrays( ${arg0}, ${arg1} );' ],
'impl' : [ '_context->vao->DeleteVertexArrays( *_context, ${arg0}, ${arg1} );' ],
},
'IsVertexArray' : {
'entries' : [ 'glIsVertexArray(ARB|)' ],
@ -38,6 +34,10 @@ vaoFormulae = {
'entries' : [ 'glVertexAttribPointer(ARB|)' ],
'impl' : [ 'return _context->vao->AttribPointer(*_context, ${arg0}, ${arg1plus} );' ],
},
'AttribIPointer' : {
'entries' : [ 'glVertexAttribIPointer(ARB|)' ],
'impl' : [ 'return _context->vao->AttribPointer(*_context, ${arg0}, ${arg1}, ${arg2}, GL_FALSE, ${arg3plus} );' ],
},
'GetAttrib' : {
'entries' : [ 'glGetVertexAttrib(d|f|i|Pointer)v(ARB|)' ],
'impl' : [ '_context->vao->GetAttrib( ${arg0}, ${arg1}, ${arg2} );' ],

View file

@ -56,11 +56,11 @@ from RegalDispatchTrace import *
regalLicense = '''
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

247
scripts/glew2py.py Executable file
View file

@ -0,0 +1,247 @@
#!/usr/bin/python -B
#
# Utility script for converting GLEW extension
# specifications into .py Python-format API
# database.
#
# For help:
# glew2py.py -help
#
# Example usage:
# private/glew2py.py -a gl -o gl.py ~/dev/glew/auto/extensions/gles/*
import sys
sys.path.insert(0,'scripts/api')
from ApiGLEW import *
from optparse import OptionParser
import re
options = None
# paramSplit - split a parameter into (name,type) tuple
paramRE1 = re.compile('((const )?[a-zA-Z][a-zA-Z0-9_]*[ \*]+(const )?)(.+)(\[.*\])?')
paramRE2 = re.compile('((const )?[a-zA-Z][a-zA-Z0-9_]*)')
def splitParam(param):
if param=='void':
return None, 'void'
m = paramRE1.match(param)
if m:
if m.group(5):
return m.group(4), '%s%s'%(m.group(1),m.group(5))
else:
return m.group(4), m.group(1)
m = paramRE2.match(param)
if m:
return '', m.group(1)
return None, None
def tidyNameType(name, type):
tmp = ''
if type:
for i in type:
if i=='*' and tmp[-1]!=' ' and tmp[-1]!='*':
tmp += ' *'
else:
tmp += i
# Fixups for GLEW parsespec bugs
if name and type and name.strip()=='GLsync' and type.strip()=='GLsync':
return 'sync','GLsync'
if type:
tmp = tmp.strip()
if tmp=='void *':
return name, 'GLvoid *'
if tmp=='void **':
return name, 'GLvoid **'
if tmp=='const void *':
return name, 'const GLvoid *'
if tmp=='const void **':
return name, 'const GLvoid **'
if tmp.startswith('void*'):
return name, 'GLvoid *%s'%tmp[5:]
if tmp=='GLchar*':
return name, 'GLchar *'
if tmp=='const GLchar*':
return name, 'const GLchar *'
return name, tmp.strip()
else:
return name,type
# splitFunction
functionRE = re.compile('((const )?[a-zA-Z][a-zA-Z0-9_ ]*[ \*]+(const )?)([^\(]+)(\([^\)]*\))')
def splitFunction(f):
m = functionRE.match(f)
if m:
return (m.group(1).strip(),m.group(4).strip(),m.group(5).strip())
else:
return ()
# extensionToPyCode
#
# Return a tuple Python code representation of an
# extension specification:
#
# ( enums, enumsAdd, functions, functionsAdd)
#
def extensionToPyCode(ext):
category = ext[0]
enums = ext[3]
functions = ext[4]
enums = [ (i.split(' ')[0].strip(), i.split(' ')[1].strip()) for i in enums ]
functions = [ splitFunction(i) for i in functions ]
pyEnums = []
for i in enums:
code = []
value = i[1]
if not i[1].startswith('0x'):
try:
value = '0x%04x'%(long(value))
except:
value = '\'%s\''%i[1]
i = ( i[0], '\'%s\''%i[1] )
code.append( '%-45s = Enumerant(\'%s\',%s,\'%s\')'%(i[0],i[0],value,category) )
pyEnums.append( tuple(code) )
pyEnumsAdd = []
for i in enums:
code = []
code.append( 'defines.add(%s)'%(i[0]) )
pyEnumsAdd.append( tuple(code) )
pyFunctions = []
for i in functions:
ret = i[0]
ret = tidyNameType('foo',i[0])[1]
name = i[1]
params = i[2].replace('(','').replace(')','').split(',')
params = [ j.strip() for j in params ]
params = [ splitParam(j) for j in params ]
params = [ tidyNameType(j[0],j[1]) for j in params ]
code = []
code.append( '%s = Function(\'%s\')'%(name,name) )
code.append( '%s.ret = Return(\'%s\')'%(name,ret) )
for i in params:
if i[1]!=None and not (i[0]==None and i[1]=='void'):
code.append( '%s.add(Input(\'%s\',\'%s\'))'%(name,i[0],i[1]) )
code.append( '%s.category = \'%s\''%(name,category) )
pyFunctions.append( tuple(code) )
pyFunctionsAdd = []
for i in functions:
code = []
code.append( '%s.add(%s)'%(options.api,i[1]) )
pyFunctionsAdd.append( tuple(code) )
return tuple(pyEnums), tuple(pyEnumsAdd), tuple(pyFunctions), tuple(pyFunctionsAdd)
#
#
#
# main
if __name__ == "__main__":
parser = OptionParser('usage: %prog [options] [SOURCES...]')
parser.add_option('-a', '--api', dest = 'api', help = 'API name', default = 'gl')
parser.add_option('-i', '--input', dest = 'input', metavar = 'FILE', action = 'append', help = 'input file(s) in GLEW extension format', default = [])
parser.add_option('-o', '--output', dest = 'output', metavar = 'FILE', help = 'Python output file', default = [])
(options, args) = parser.parse_args()
options.input.extend(args)
if not options.input:
options.input = '-'
# Read input files, convert to list of strings, and strip line endings
if options.input!='-':
files = [ [ j.rstrip() for j in open(i, 'r').readlines() ] for i in options.input ]
else:
files = [ j.rstrip() for j in sys.stdin.readlines() ]
# convert to .py
# ( category, URL, namestring, ( enums ), ( functions ), (handles) , (typedefs))
ext = []
for i in files:
e = readGLEWextension(i)
e = ( e[0], e[1], e[2], sorted(e[3]), sorted(e[4]), sorted(e[5]), sorted(e[6]))
ext.append(tuple([e,(extensionToPyCode(e))]))
# output file
if options.output:
file = open(options.output, 'w')
else:
file = sys.stdout
print >>file, '''import Api
from Api import Api
from Api import Function, Typedef, Enum
from Api import Return, Parameter, Input, Output, InputOutput
from Api import Enumerant
from Api import Extension
%s = Api()
defines = Enum('defines')
%s.add(defines)
'''%(options.api,options.api)
for i in ext:
print >>file, '# %s'%(i[0][0])
print >>file, ''
for j in i[1][0]:
print >>file, '\n'.join(j)
print >>file, ''
for i in ext:
print >>file, '# %s'%(i[0][0])
print >>file, ''
for j in i[1][1]:
print >>file, '\n'.join(j)
print >>file, ''
for i in ext:
print >>file, '# %s'%(i[0][0])
print >>file, ''
for j in i[1][2]:
print >>file, '%s\n'%('\n'.join(j))
print >>file, ''
for i in ext:
print >>file, '# %s'%(i[0][0])
print >>file, ''
for j in i[1][3]:
print >>file, '\n'.join(j)
print >>file, ''
# Output Extensions
for i in ext:
print >>file, '%-45s = Extension(\'%s\',\'%s\')'%(i[0][0],i[0][0],i[0][1])
print >>file, ''
for i in ext:
if len(i[0][4]):
print >>file, '%s.functions = [\'%s\']'%(i[0][0],'\',\''.join([j.split(' ')[1] for j in i[0][4]]))
print >>file, ''
for i in ext:
if len(i[0][3]):
print >>file, '%s.enumerants = [\'%s\']'%(i[0][0],'\',\''.join([j.split(' ')[0] for j in i[0][3]]))
print >>file, ''
for i in ext:
print >>file, '%s.add(%s)'%(options.api,i[0][0])
print >>file, ''

View file

@ -150,6 +150,19 @@ struct RegalContext
scoped_ptr<DebugInfo> dbg;
scoped_ptr<ContextInfo> info;
scoped_ptr<EmuInfo> emuInfo;
std::set<std::string> extensionsSet;
std::string extensions;
inline void numExtensions(GLboolean *params)
{
*params = !!extensionsSet.size();
}
template <typename T> inline void numExtensions(T *params)
{
*params = static_cast<T>(extensionsSet.size());
}
#if REGAL_STATISTICS
scoped_ptr<Statistics> statistics;
@ -235,6 +248,9 @@ ${LICENSE}
#include "RegalUtil.h"
#include <boost/print/string_list.hpp>
using namespace boost::print;
REGAL_GLOBAL_BEGIN
#include "RegalConfig.h"
@ -370,6 +386,13 @@ ${EMU_MEMBER_INIT}
http.Init( this );
#endif
if (info && emuInfo)
{
extensionsSet.insert(info->extensionsSet.begin(), info->extensionsSet.end());
extensionsSet.insert(emuInfo->extensionsSet.begin(), emuInfo->extensionsSet.end());
extensions = ::boost::print::detail::join(extensionsSet,std::string(" "));
}
initialized = true;
}

View file

@ -40,6 +40,8 @@ def generateStaticES2Source(apis, args):
for api in apis:
if api.name=='gl':
# undefine the glFoo macros
for function in api.functions:
if not function.needsContext:
continue
@ -48,6 +50,20 @@ def generateStaticES2Source(apis, args):
name = function.name
code += '#undef %s\n' % ( name )
# For NaCL, define glFoo -> GLES2Foo
# This is to match GLES/gl2.h in pepper_35
code += '\n'
code += '#if REGAL_SYS_PPAPI\n'
for function in api.functions:
if not function.needsContext:
continue
if getattr(function,'esVersions',None)==None or 2.0 not in function.esVersions:
continue
name = function.name
code += '#define %s GLES2%s\n' % ( name, name[2:] )
code += '#endif\n'
code += '\n'
code += 'extern "C"\n'
code += '{\n'

View file

@ -27,6 +27,9 @@ REGAL_GLOBAL_BEGIN
#include <set>
#include <string>
#include <algorithm>
#include <sstream>
#include <iterator>
REGAL_GLOBAL_END

View file

@ -35,7 +35,7 @@
#define bool _Bool
/* For compilers that don't have the builtin _Bool type. */
#if defined(_MSC_VER) || (__STDC_VERSION__ < 199901L && __GNUC__ < 3)
#if ((defined(_MSC_VER) && (_MSC_VER < 1800)) || (!defined(_MSC_VER) && __STDC_VERSION__ < 199901L && __GNUC__ < 3)) && !defined(_lint)
typedef unsigned char _Bool;
#endif

View file

@ -257,14 +257,14 @@ private:
// 8-bit unsigned integer
inline size_t unsigned_length(const boost::uint8_t val)
inline size_t unsigned_length_uint8(const boost::uint8_t &val)
{
return val<10 ? 1 : (val<100 ? 2 : 3);
}
// 16-bit unsigned integer
inline size_t unsigned_length(const boost::uint16_t val)
inline size_t unsigned_length_uint16(const boost::uint16_t &val)
{
if (val<1000)
return val<10 ? 1 : (val<100 ? 2 : 3);
@ -274,7 +274,7 @@ inline size_t unsigned_length(const boost::uint16_t val)
// 32-bit unsigned integer
inline size_t unsigned_length(const boost::uint32_t val)
inline size_t unsigned_length_uint32(const boost::uint32_t &val)
{
if (val<10000)
return val<100 ? (val<10 ? 1 : 2) : (val<1000 ? 3 : 4);
@ -286,7 +286,7 @@ inline size_t unsigned_length(const boost::uint32_t val)
// 64-bit unsigned integer
inline size_t unsigned_length(const boost::uint64_t val)
inline size_t unsigned_length_uint64(const boost::uint64_t &val)
{
if (val<100000000ll)
{
@ -309,65 +309,20 @@ inline size_t unsigned_length(const boost::uint64_t val)
}
}
#if defined(__APPLE__) && defined(__i386)
inline size_t unsigned_length(const unsigned long val) { return unsigned_length(static_cast<boost::uint32_t>(val)); }
#endif
// Determine the number of digits of an unsigned integer
#if defined(__APPLE__) && defined(__x86_64)
inline size_t unsigned_length(const unsigned long val) { return unsigned_length(static_cast<boost::uint64_t>(val)); }
#endif
#if defined(__APPLE__) && defined(__ppc__)
inline size_t unsigned_length(const unsigned long val) { return unsigned_length(static_cast<boost::uint32_t>(val)); }
#endif
#if defined(__APPLE__) && defined(__arm__)
inline size_t unsigned_length(const unsigned long val) { return unsigned_length(static_cast<boost::uint32_t>(val)); }
#endif
#if defined(__native_client__) && (defined(__i386) || defined(__x86_64) || defined(__arm__))
inline size_t unsigned_length(const unsigned long val) { return unsigned_length(static_cast<boost::uint32_t>(val)); }
#endif
#if defined(__ANDROID__) && defined(__i386__)
inline size_t unsigned_length(const unsigned long val) { return unsigned_length(static_cast<boost::uint32_t>(val)); }
#endif
#if defined(__ANDROID__) && defined(__ARM_ARCH__)
inline size_t unsigned_length(const unsigned long val) { return unsigned_length(static_cast<boost::uint32_t>(val)); }
#endif
#if defined(__linux) && defined(__i386) && !defined(__native_client__) && !defined(__ANDROID__)
inline size_t unsigned_length(const unsigned long val) { return unsigned_length(static_cast<boost::uint32_t>(val)); }
#endif
#if defined(__linux) && defined(__x86_64) && !defined(__native_client__) && !defined(__ANDROID__)
inline size_t unsigned_length(const unsigned long long val) { return unsigned_length(static_cast<boost::uint64_t>(val)); }
#endif
#if defined(__linux) && defined(__arm__) && !defined(__native_client__) && !defined(__ANDROID__)
inline size_t unsigned_length(const unsigned long val) { return unsigned_length(static_cast<boost::uint32_t>(val)); }
#endif
#if (defined(__SUNPRO_C) || defined(__SUNPRO_CC) || defined(__sun)) && defined(__i386)
inline size_t unsigned_length(const unsigned int val) { return unsigned_length(static_cast<boost::uint32_t>(val)); }
#endif
#if (defined(__SUNPRO_C) || defined(__SUNPRO_CC) || defined(__sun)) && defined(__x86_64)
inline size_t unsigned_length(const unsigned long val) { return unsigned_length(static_cast<boost::uint64_t>(val)); }
#endif
#if defined(WIN32) && !defined(_WIN64)
inline size_t unsigned_length(const unsigned long val) { return unsigned_length(static_cast<boost::uint32_t>(val)); }
#endif
#if defined(WIN32) && defined(_WIN64)
inline size_t unsigned_length(const unsigned long val) { return unsigned_length(static_cast<boost::uint64_t>(val)); }
#endif
#if defined(EMSCRIPTEN)
inline size_t unsigned_length(const unsigned long val) {return unsigned_length(static_cast<boost::uint32_t>(val)); }
#endif
template<typename U>
inline size_t unsigned_length(const U &val)
{
switch (sizeof(U))
{
case 1: return unsigned_length_uint8 (static_cast<const boost::uint8_t >(val));
case 2: return unsigned_length_uint16(static_cast<const boost::uint16_t>(val));
case 4: return unsigned_length_uint32(static_cast<const boost::uint32_t>(val));
case 8: return unsigned_length_uint64(static_cast<const boost::uint64_t>(val));
default: return 0; /* oops... */
}
}
// Determine the number of digits of a signed integer
@ -377,7 +332,7 @@ inline size_t signed_length(S val)
const bool negative = val<0;
if (negative)
val = -val;
return unsigned_length(static_cast<U>(val)) + (negative ? 1 : 0);
return unsigned_length<U>(static_cast<U>(val)) + (negative ? 1 : 0);
}
inline size_t sprintf_length(const char *fmt, ...)

View file

@ -155,11 +155,11 @@ using ::boost::print::detail::write_iterator;
inline size_t length(bool val) { return val ? 4 : 5; /* true or false */ }
inline size_t length(unsigned char val) { return unsigned_length(val); }
inline size_t length(unsigned short val) { return unsigned_length(val); }
inline size_t length(unsigned int val) { return unsigned_length(val); }
inline size_t length(unsigned long val) { return unsigned_length(val); }
inline size_t length(unsigned long long val) { return unsigned_length(val); }
inline size_t length(unsigned char val) { return unsigned_length<unsigned char >(val); }
inline size_t length(unsigned short val) { return unsigned_length<unsigned short >(val); }
inline size_t length(unsigned int val) { return unsigned_length<unsigned int >(val); }
inline size_t length(unsigned long val) { return unsigned_length<unsigned long >(val); }
inline size_t length(unsigned long long val) { return unsigned_length<unsigned long long>(val); }
inline size_t length(signed char val) { return signed_length<unsigned char >(val); }
inline size_t length(signed short val) { return signed_length<unsigned short >(val); }

View file

@ -1,6 +1,6 @@
/*
** The OpenGL Extension Wrangler Library
** Copyright (C) 2008-2013, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2008-2014, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
** Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
** Copyright (C) 2002, Lev Povalahev
@ -1621,20 +1621,20 @@ typedef void (GLAPIENTRY * PFNGLWINDOWPOS3SVPROC) (const GLshort *p);
#ifndef GL_VERSION_1_5
#define GL_VERSION_1_5 1
#define GL_SRC1_RGB GL_SOURCE1_RGB
#define GL_FOG_COORD GL_FOG_COORDINATE
#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA
#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
#define GL_SRC2_RGB GL_SOURCE2_RGB
#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA
#define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE
#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE
#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE
#define GL_FOG_COORD GL_FOG_COORDINATE
#define GL_FOG_COORD_ARRAY GL_FOG_COORDINATE_ARRAY
#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE
#define GL_SRC0_RGB GL_SOURCE0_RGB
#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA
#define GL_FOG_COORD_ARRAY_BUFFER_BINDING GL_FOG_COORDINATE_ARRAY_BUFFER_BINDING
#define GL_FOG_COORD_ARRAY_POINTER GL_FOG_COORDINATE_ARRAY_POINTER
#define GL_FOG_COORD_ARRAY_STRIDE GL_FOG_COORDINATE_ARRAY_STRIDE
#define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE
#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE
#define GL_SRC0_ALPHA GL_SOURCE0_ALPHA
#define GL_SRC0_RGB GL_SOURCE0_RGB
#define GL_SRC1_ALPHA GL_SOURCE1_ALPHA
#define GL_SRC1_RGB GL_SOURCE1_RGB
#define GL_SRC2_ALPHA GL_SOURCE2_ALPHA
#define GL_SRC2_RGB GL_SOURCE2_RGB
#define GL_BUFFER_SIZE 0x8764
#define GL_BUFFER_USAGE 0x8765
#define GL_QUERY_COUNTER_BITS 0x8864
@ -2053,15 +2053,15 @@ typedef void (GLAPIENTRY * PFNGLUNIFORMMATRIX4X3FVPROC) (GLint location, GLsizei
#ifndef GL_VERSION_3_0
#define GL_VERSION_3_0 1
#define GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES
#define GL_CLIP_DISTANCE2 GL_CLIP_PLANE2
#define GL_CLIP_DISTANCE5 GL_CLIP_PLANE5
#define GL_MAX_VARYING_COMPONENTS GL_MAX_VARYING_FLOATS
#define GL_CLIP_DISTANCE1 GL_CLIP_PLANE1
#define GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB
#define GL_CLIP_DISTANCE3 GL_CLIP_PLANE3
#define GL_CLIP_DISTANCE0 GL_CLIP_PLANE0
#define GL_CLIP_DISTANCE1 GL_CLIP_PLANE1
#define GL_CLIP_DISTANCE2 GL_CLIP_PLANE2
#define GL_CLIP_DISTANCE3 GL_CLIP_PLANE3
#define GL_CLIP_DISTANCE4 GL_CLIP_PLANE4
#define GL_CLIP_DISTANCE5 GL_CLIP_PLANE5
#define GL_COMPARE_REF_TO_TEXTURE GL_COMPARE_R_TO_TEXTURE_ARB
#define GL_MAX_CLIP_DISTANCES GL_MAX_CLIP_PLANES
#define GL_MAX_VARYING_COMPONENTS GL_MAX_VARYING_FLOATS
#define GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT 0x0001
#define GL_MAJOR_VERSION 0x821B
#define GL_MINOR_VERSION 0x821C
@ -4147,8 +4147,8 @@ typedef void (GLAPIENTRY * PFNGLNAMEDFRAMEBUFFERPARAMETERIEXTPROC) (GLuint frame
#define GL_TEXTURE_STENCIL_SIZE 0x88F1
#define GL_UNSIGNED_NORMALIZED 0x8C17
#define GL_SRGB 0x8C40
#define GL_FRAMEBUFFER_BINDING 0x8CA6
#define GL_DRAW_FRAMEBUFFER_BINDING 0x8CA6
#define GL_FRAMEBUFFER_BINDING 0x8CA6
#define GL_RENDERBUFFER_BINDING 0x8CA7
#define GL_READ_FRAMEBUFFER 0x8CA8
#define GL_DRAW_FRAMEBUFFER 0x8CA9
@ -7588,12 +7588,12 @@ typedef void (GLAPIENTRY * PFNGLTEXBUMPPARAMETERIVATIPROC) (GLenum pname, GLint
#define GL_2X_BIT_ATI 0x00000001
#define GL_RED_BIT_ATI 0x00000001
#define GL_GREEN_BIT_ATI 0x00000002
#define GL_COMP_BIT_ATI 0x00000002
#define GL_4X_BIT_ATI 0x00000002
#define GL_COMP_BIT_ATI 0x00000002
#define GL_GREEN_BIT_ATI 0x00000002
#define GL_8X_BIT_ATI 0x00000004
#define GL_NEGATE_BIT_ATI 0x00000004
#define GL_BLUE_BIT_ATI 0x00000004
#define GL_NEGATE_BIT_ATI 0x00000004
#define GL_BIAS_BIT_ATI 0x00000008
#define GL_HALF_BIT_ATI 0x00000008
#define GL_QUARTER_BIT_ATI 0x00000010
@ -12491,19 +12491,19 @@ typedef void (GLAPIENTRY * PFNGLPROGRAMBUFFERPARAMETERSFVNVPROC) (GLenum target,
#define GL_NV_path_rendering 1
#define GL_CLOSE_PATH_NV 0x00
#define GL_GLYPH_WIDTH_BIT_NV 0x01
#define GL_BOLD_BIT_NV 0x01
#define GL_GLYPH_WIDTH_BIT_NV 0x01
#define GL_GLYPH_HEIGHT_BIT_NV 0x02
#define GL_MOVE_TO_NV 0x02
#define GL_ITALIC_BIT_NV 0x02
#define GL_MOVE_TO_NV 0x02
#define GL_RELATIVE_MOVE_TO_NV 0x03
#define GL_GLYPH_HORIZONTAL_BEARING_X_BIT_NV 0x04
#define GL_LINE_TO_NV 0x04
#define GL_RELATIVE_LINE_TO_NV 0x05
#define GL_HORIZONTAL_LINE_TO_NV 0x06
#define GL_RELATIVE_HORIZONTAL_LINE_TO_NV 0x07
#define GL_VERTICAL_LINE_TO_NV 0x08
#define GL_GLYPH_HORIZONTAL_BEARING_Y_BIT_NV 0x08
#define GL_VERTICAL_LINE_TO_NV 0x08
#define GL_RELATIVE_VERTICAL_LINE_TO_NV 0x09
#define GL_QUADRATIC_CURVE_TO_NV 0x0A
#define GL_RELATIVE_QUADRATIC_CURVE_TO_NV 0x0B
@ -13154,8 +13154,8 @@ typedef void (GLAPIENTRY * PFNGLTEXTUREIMAGE3DMULTISAMPLENVPROC) (GLuint texture
#define GL_CULL_MODES_NV 0x86E0
#define GL_OFFSET_TEXTURE_2D_MATRIX_NV 0x86E1
#define GL_OFFSET_TEXTURE_MATRIX_NV 0x86E1
#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2
#define GL_OFFSET_TEXTURE_2D_SCALE_NV 0x86E2
#define GL_OFFSET_TEXTURE_SCALE_NV 0x86E2
#define GL_OFFSET_TEXTURE_2D_BIAS_NV 0x86E3
#define GL_OFFSET_TEXTURE_BIAS_NV 0x86E3
#define GL_PREVIOUS_TEXTURE_INPUT_NV 0x86E4
@ -14626,9 +14626,9 @@ typedef void (GLAPIENTRY * PFNGLFLUSHRASTERSGIXPROC) (void);
#ifndef GL_SGIX_fog_texture
#define GL_SGIX_fog_texture 1
#define GL_TEXTURE_FOG_SGIX 0
#define GL_FRAGMENT_FOG_SGIX 0
#define GL_FOG_PATCHY_FACTOR_SGIX 0
#define GL_FRAGMENT_FOG_SGIX 0
#define GL_TEXTURE_FOG_SGIX 0
typedef void (GLAPIENTRY * PFNGLTEXTUREFOGSGIXPROC) (GLenum pname);

View file

@ -1,6 +1,6 @@
/*
** The OpenGL Extension Wrangler Library
** Copyright (C) 2008-2013, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2008-2014, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
** Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
** Copyright (C) 2002, Lev Povalahev
@ -205,10 +205,10 @@ typedef Display* ( * PFNGLXGETCURRENTDISPLAYPROC) (void);
#define GLX_RGBA_BIT 0x00000001
#define GLX_WINDOW_BIT 0x00000001
#define GLX_COLOR_INDEX_BIT 0x00000002
#define GLX_PIXMAP_BIT 0x00000002
#define GLX_FRONT_RIGHT_BUFFER_BIT 0x00000002
#define GLX_PBUFFER_BIT 0x00000004
#define GLX_PIXMAP_BIT 0x00000002
#define GLX_BACK_LEFT_BUFFER_BIT 0x00000004
#define GLX_PBUFFER_BIT 0x00000004
#define GLX_BACK_RIGHT_BUFFER_BIT 0x00000008
#define GLX_AUX_BUFFERS_BIT 0x00000010
#define GLX_DEPTH_BUFFER_BIT 0x00000020
@ -1170,10 +1170,10 @@ typedef Bool ( * PFNGLXWAITFORSBCOMLPROC) (Display* dpy, GLXDrawable drawable, i
#ifndef GLX_SGIX_fbconfig
#define GLX_SGIX_fbconfig 1
#define GLX_WINDOW_BIT_SGIX 0x00000001
#define GLX_RGBA_BIT_SGIX 0x00000001
#define GLX_PIXMAP_BIT_SGIX 0x00000002
#define GLX_WINDOW_BIT_SGIX 0x00000001
#define GLX_COLOR_INDEX_BIT_SGIX 0x00000002
#define GLX_PIXMAP_BIT_SGIX 0x00000002
#define GLX_SCREEN_EXT 0x800C
#define GLX_DRAWABLE_TYPE_SGIX 0x8010
#define GLX_RENDER_TYPE_SGIX 0x8011
@ -1208,8 +1208,8 @@ typedef XVisualInfo* ( * PFNGLXGETVISUALFROMFBCONFIGSGIXPROC) (Display *dpy, GLX
#ifndef GLX_SGIX_hyperpipe
#define GLX_SGIX_hyperpipe 1
#define GLX_PIPE_RECT_SGIX 0x00000001
#define GLX_HYPERPIPE_DISPLAY_PIPE_SGIX 0x00000001
#define GLX_PIPE_RECT_SGIX 0x00000001
#define GLX_HYPERPIPE_RENDER_PIPE_SGIX 0x00000002
#define GLX_PIPE_RECT_LIMITS_SGIX 0x00000002
#define GLX_HYPERPIPE_STEREO_SGIX 0x00000003

View file

@ -1,6 +1,6 @@
/*
** The OpenGL Extension Wrangler Library
** Copyright (C) 2008-2013, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2008-2014, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
** Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
** Copyright (C) 2002, Lev Povalahev

View file

@ -1,6 +1,6 @@
/*
** The OpenGL Extension Wrangler Library
** Copyright (C) 2008-2013, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2008-2014, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
** Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
** Copyright (C) 2002, Lev Povalahev

View file

@ -1,6 +1,6 @@
/*
** The OpenGL Extension Wrangler Library
** Copyright (C) 2008-2013, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2008-2014, Nigel Stewart <nigels[]users sourceforge net>
** Copyright (C) 2002-2008, Milan Ikits <milan ikits[]ieee org>
** Copyright (C) 2002-2008, Marcelo E. Magallon <mmagallo[]debian org>
** Copyright (C) 2002, Lev Povalahev

View file

@ -35,7 +35,7 @@
#define bool _Bool
/* For compilers that don't have the builtin _Bool type. */
#if (defined(_MSC_VER) || (__STDC_VERSION__ < 199901L && __GNUC__ < 3)) && !defined(_lint)
#if ((defined(_MSC_VER) && (_MSC_VER < 1800)) || (!defined(_MSC_VER) && __STDC_VERSION__ < 199901L && __GNUC__ < 3)) && !defined(_lint)
typedef unsigned char _Bool;
#endif

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.
@ -1429,6 +1429,16 @@ extern "C" {
#endif
App("glGetBooleanv","(", toString(pname), ")");
if (!_context) return;
// Regal interceptions
switch (pname)
{
case GL_NUM_EXTENSIONS:
_context->numExtensions( params );
return;
default:
break;
}
DispatchTableGL *_next = &_context->dispatcher.front();
RegalAssert(_next);
_next->call(&_next->glGetBooleanv)(pname, params);
@ -1457,6 +1467,16 @@ extern "C" {
#endif
App("glGetDoublev","(", toString(pname), ")");
if (!_context) return;
// Regal interceptions
switch (pname)
{
case GL_NUM_EXTENSIONS:
_context->numExtensions( params );
return;
default:
break;
}
DispatchTableGL *_next = &_context->dispatcher.front();
RegalAssert(_next);
_next->call(&_next->glGetDoublev)(pname, params);
@ -1485,6 +1505,16 @@ extern "C" {
#endif
App("glGetFloatv","(", toString(pname), ")");
if (!_context) return;
// Regal interceptions
switch (pname)
{
case GL_NUM_EXTENSIONS:
_context->numExtensions( params );
return;
default:
break;
}
DispatchTableGL *_next = &_context->dispatcher.front();
RegalAssert(_next);
_next->call(&_next->glGetFloatv)(pname, params);
@ -1499,6 +1529,16 @@ extern "C" {
#endif
App("glGetIntegerv","(", toString(pname), ")");
if (!_context) return;
// Regal interceptions
switch (pname)
{
case GL_NUM_EXTENSIONS:
_context->numExtensions( params );
return;
default:
break;
}
DispatchTableGL *_next = &_context->dispatcher.front();
RegalAssert(_next);
_next->call(&_next->glGetIntegerv)(pname, params);
@ -1674,7 +1714,7 @@ extern "C" {
case GL_VENDOR: return reinterpret_cast<const GLubyte *>(_context->emuInfo->vendor.c_str());
case GL_RENDERER: return reinterpret_cast<const GLubyte *>(_context->emuInfo->renderer.c_str());
case GL_VERSION: return reinterpret_cast<const GLubyte *>(_context->emuInfo->version.c_str());
case GL_EXTENSIONS: return reinterpret_cast<const GLubyte *>(_context->emuInfo->extensions.c_str());
case GL_EXTENSIONS: return reinterpret_cast<const GLubyte *>(_context->extensions.c_str());
default:
break;
}
@ -8310,6 +8350,18 @@ extern "C" {
#endif
App("glGetStringi","(", toString(name), ", ", index, ")");
if (!_context) return NULL;
// Regal interceptions
switch (name)
{
case GL_EXTENSIONS:
{
std::set<std::string>::iterator it = _context->extensionsSet.begin();
std::advance(it, index);
return reinterpret_cast<const GLubyte *>(it->c_str());
};
default:
break;
}
DispatchTableGL *_next = &_context->dispatcher.front();
RegalAssert(_next);
return _next->call(&_next->glGetStringi)(name, index);
@ -15846,6 +15898,16 @@ extern "C" {
#endif
App("glGetInteger64v","(", toString(pname), ")");
if (!_context) return;
// Regal interceptions
switch (pname)
{
case GL_NUM_EXTENSIONS:
_context->numExtensions( params );
return;
default:
break;
}
DispatchTableGL *_next = &_context->dispatcher.front();
RegalAssert(_next);
_next->call(&_next->glGetInteger64v)(pname, params);

View file

@ -162,60 +162,215 @@ struct BaseVertex : public ClientState::VertexArray
dt.call(&dt.glBindBuffer)(GL_ARRAY_BUFFER, ClientState::VertexArray::arrayBufferBinding);
}
template<typename T>
GLvoid* adjust_indices(GLsizei count, const GLvoid *indices, GLint basevertex)
{
T* ptr = (T*)malloc(count * sizeof(T));
if(!ptr) return 0;
for(GLsizei i = 0; i < count; i++) ptr[i] = ((T*)indices)[i] + (T) basevertex;
return (GLvoid*) ptr;
}
GLvoid* adjust_indices(GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex)
{
switch(type)
{
case GL_UNSIGNED_BYTE:
return adjust_indices<GLubyte>(count, indices, basevertex);
case GL_UNSIGNED_SHORT:
return adjust_indices<GLushort>(count, indices, basevertex);
case GL_UNSIGNED_INT:
return adjust_indices<GLuint>(count, indices, basevertex);
default:
RegalAssert( "Unknown <type> in for adjust_indices." );
return 0;
}
}
bool glDrawElementsBaseVertex(RegalContext &ctx, GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex)
{
if (ClientState::VertexArray::vertexArrayBinding)
return false;
DispatchTableGL &dt = ctx.dispatcher.emulation;
GLvoid* adjusted_indices = 0;
if (basevertex)
adjust(ctx, dt, basevertex);
dt.call(&dt.glDrawElements)(mode, count, type, indices);
{
if (ClientState::VertexArray::elementArrayBufferBinding)
{
adjust(ctx, dt, basevertex);
}
else
{
adjusted_indices = adjust_indices(count, type, indices, basevertex);
if (!adjusted_indices)
return false;
}
}
if (basevertex && adjusted_indices)
dt.call(&dt.glDrawElements)(mode, count, type, adjusted_indices);
else
dt.call(&dt.glDrawElements)(mode, count, type, indices);
if (basevertex)
adjust(ctx, dt, 0);
{
if (ClientState::VertexArray::elementArrayBufferBinding)
adjust(ctx, dt, 0);
else
free(adjusted_indices);
}
return true;
}
bool glDrawRangeElementsBaseVertex(RegalContext &ctx, GLenum mode, GLuint start, GLuint end, GLsizei count, GLenum type, const GLvoid *indices, GLint basevertex)
{
if (ClientState::VertexArray::vertexArrayBinding)
return false;
DispatchTableGL &dt = ctx.dispatcher.emulation;
GLvoid* adjusted_indices = 0;
if (basevertex)
adjust(ctx, dt, basevertex);
dt.call(&dt.glDrawRangeElements)(mode, start, end, count, type, indices);
{
if (ClientState::VertexArray::elementArrayBufferBinding)
{
adjust(ctx, dt, basevertex);
}
else
{
adjusted_indices = adjust_indices(count, type, indices, basevertex);
if (!adjusted_indices)
return false;
}
}
if (basevertex && adjusted_indices)
dt.call(&dt.glDrawRangeElements)(mode, start, end, count, type, adjusted_indices);
else
dt.call(&dt.glDrawRangeElements)(mode, start, end, count, type, indices);
if (basevertex)
adjust(ctx, dt, 0);
{
if (ClientState::VertexArray::elementArrayBufferBinding)
adjust(ctx, dt, 0);
else
free(adjusted_indices);
}
return true;
}
bool glDrawElementsInstancedBaseVertex(RegalContext &ctx, GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex)
{
if (ClientState::VertexArray::vertexArrayBinding)
return false;
DispatchTableGL &dt = ctx.dispatcher.emulation;
GLvoid* adjusted_indices = 0;
if (basevertex)
adjust(ctx, dt, basevertex);
dt.call(&dt.glDrawElementsInstanced)(mode, count, type, indices, primcount);
{
if (ClientState::VertexArray::elementArrayBufferBinding)
{
adjust(ctx, dt, basevertex);
}
else
{
adjusted_indices = adjust_indices(count, type, indices, basevertex);
if (!adjusted_indices)
return false;
}
}
if (basevertex && adjusted_indices)
dt.call(&dt.glDrawElementsInstanced)(mode, count, type, adjusted_indices, primcount);
else
dt.call(&dt.glDrawElementsInstanced)(mode, count, type, indices, primcount);
if (basevertex)
adjust(ctx, dt, 0);
{
if (ClientState::VertexArray::elementArrayBufferBinding)
adjust(ctx, dt, 0);
else
free(adjusted_indices);
}
return true;
}
bool glDrawElementsInstancedBaseVertexBaseInstance(RegalContext &ctx, GLenum mode, GLsizei count, GLenum type, const GLvoid *indices, GLsizei primcount, GLint basevertex, GLuint baseinstance)
{
if (ClientState::VertexArray::vertexArrayBinding)
return false;
DispatchTableGL &dt = ctx.dispatcher.emulation;
GLvoid* adjusted_indices = 0;
if (basevertex)
adjust(ctx, dt, basevertex);
dt.call(&dt.glDrawElementsInstancedBaseInstance)(mode, count, type, indices, primcount, baseinstance);
{
if (ClientState::VertexArray::elementArrayBufferBinding)
{
adjust(ctx, dt, basevertex);
}
else
{
adjusted_indices = adjust_indices(count, type, indices, basevertex);
if (!adjusted_indices)
return false;
}
}
if (basevertex && adjusted_indices)
dt.call(&dt.glDrawElementsInstancedBaseInstance)(mode, count, type, adjusted_indices, primcount, baseinstance);
else
dt.call(&dt.glDrawElementsInstancedBaseInstance)(mode, count, type, indices, primcount, baseinstance);
if (basevertex)
adjust(ctx, dt, 0);
{
if (ClientState::VertexArray::elementArrayBufferBinding)
adjust(ctx, dt, 0);
else
free(adjusted_indices);
}
return true;
}
bool glMultiDrawElementsBaseVertex(RegalContext &ctx, GLenum mode, const GLsizei *count, GLenum type, const GLvoid * const* indices, GLsizei primcount, const GLint *basevertex)
{
if (ClientState::VertexArray::vertexArrayBinding)
return false;
DispatchTableGL &dt = ctx.dispatcher.emulation;
for (GLsizei ii=0; ii<primcount; ii++)
{
GLvoid* adjusted_indices = 0;
if (basevertex[ii])
adjust(ctx, dt, basevertex[ii]);
dt.call(&dt.glDrawElements)(mode, count[ii], type, indices[ii]);
{
if (ClientState::VertexArray::elementArrayBufferBinding)
{
adjust(ctx, dt, basevertex[ii]);
}
else
{
adjusted_indices = adjust_indices(count[ii], type, indices[ii], basevertex[ii]);
if (!adjusted_indices)
return false;
}
}
if (basevertex[ii] && adjusted_indices)
dt.call(&dt.glDrawElements)(mode, count[ii], type, adjusted_indices);
else
dt.call(&dt.glDrawElements)(mode, count[ii], type, indices[ii]);
if (basevertex[ii])
adjust(ctx, dt, 0);
{
if (ClientState::VertexArray::elementArrayBufferBinding)
adjust(ctx, dt, 0);
else
free(adjusted_indices);
}
}
return true;
}

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.
@ -42,6 +42,9 @@
#include "RegalUtil.h"
#include <boost/print/string_list.hpp>
using namespace boost::print;
REGAL_GLOBAL_BEGIN
#include "RegalConfig.h"
@ -497,6 +500,13 @@ RegalContext::Init()
http.Init( this );
#endif
if (info && emuInfo)
{
extensionsSet.insert(info->extensionsSet.begin(), info->extensionsSet.end());
extensionsSet.insert(emuInfo->extensionsSet.begin(), emuInfo->extensionsSet.end());
extensions = ::boost::print::detail::join(extensionsSet,std::string(" "));
}
initialized = true;
}

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.
@ -116,6 +116,18 @@ struct RegalContext
scoped_ptr<DebugInfo> dbg;
scoped_ptr<ContextInfo> info;
scoped_ptr<EmuInfo> emuInfo;
std::set<std::string> extensionsSet;
std::string extensions;
inline void numExtensions(GLboolean *params)
{
*params = !!extensionsSet.size();
}
template <typename T> inline void numExtensions(T *params)
{
*params = static_cast<T>(extensionsSet.size());
}
#if REGAL_STATISTICS
scoped_ptr<Statistics> statistics;

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.
@ -19312,6 +19312,68 @@ static void REGAL_CALL emu_glViewport(GLint x, GLint y, GLsizei width, GLsizei h
// GL_VERSION_1_1
static void REGAL_CALL emu_glArrayElement(GLint index)
{
RegalContext *_context = REGAL_GET_CONTEXT();
RegalAssert(_context);
DispatchTableGL &_dispatch = _context->dispatcher.emulation;
// prefix
switch( _context->emuLevel )
{
case 16 :
case 15 :
case 14 :
case 13 :
case 12 :
case 11 :
case 10 :
case 9 :
case 8 :
case 7 :
#if REGAL_EMU_IFF
if (_context->iff) break;
#endif
case 1 :
default:
break;
}
// impl
switch( _context->emuLevel )
{
case 16 :
case 15 :
case 14 :
case 13 :
case 12 :
case 11 :
case 10 :
case 9 :
case 8 :
case 7 :
#if REGAL_EMU_IFF
if (_context->iff)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 6;
_context->iff->ProvokeElement( _context, index );
return;
}
#endif
case 1 :
default:
{
DispatchTableGL *_next = _dispatch.next();
RegalAssert(_next);
_next->call(&_next->glArrayElement)(index);
break;
}
}
}
static void REGAL_CALL emu_glBindTexture(GLenum target, GLuint texture)
{
RegalContext *_context = REGAL_GET_CONTEXT();
@ -19848,15 +19910,6 @@ static void REGAL_CALL emu_glDrawArrays(GLenum mode, GLint first, GLsizei count)
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -19883,9 +19936,7 @@ static void REGAL_CALL emu_glDrawArrays(GLenum mode, GLint first, GLsizei count)
_context->emuLevel = 5;
if ( ! _context->quads->glDrawArrays( _context, mode, first, count ) ) {
DispatchTableGL *_next = _context->dispatcher.emulation.next();
RegalAssert(_next);
return _next->call(&_next->glDrawArrays)( mode, first, count );
_context->dispatcher.emulation.glDrawArrays( mode, first, count );
}
return;
@ -19951,15 +20002,6 @@ static void REGAL_CALL emu_glDrawElements(GLenum mode, GLsizei count, GLenum typ
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -24066,15 +24108,6 @@ static void REGAL_CALL emu_glMultiDrawArrays(GLenum mode, const GLint *first, co
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -24132,15 +24165,6 @@ static void REGAL_CALL emu_glMultiDrawElements(GLenum mode, const GLsizei *count
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -32995,14 +33019,56 @@ static void REGAL_CALL emu_glVertexAttribIPointer(GLuint index, GLint size, GLen
_context->bv->glVertexAttribIPointer( index, size, type, stride, pointer );
}
#endif
case 8 :
case 7 :
case 6 :
case 5 :
case 4 :
case 3 :
#if REGAL_EMU_VAO
if (_context->vao) break;
#endif
case 1 :
default:
break;
}
DispatchTableGL *_next = _dispatch.next();
RegalAssert(_next);
_next->call(& _next->glVertexAttribIPointer)(index, size, type, stride, pointer);
// impl
switch( _context->emuLevel )
{
case 16 :
case 15 :
case 14 :
case 13 :
case 12 :
case 11 :
case 10 :
case 9 :
case 8 :
case 7 :
case 6 :
case 5 :
case 4 :
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
return _context->vao->AttribPointer(*_context, index, size, type, GL_FALSE, stride, pointer );
}
#endif
case 1 :
default:
{
DispatchTableGL *_next = _dispatch.next();
RegalAssert(_next);
_next->call(&_next->glVertexAttribIPointer)(index, size, type, stride, pointer);
break;
}
}
}
// GL_VERSION_3_1
@ -33054,15 +33120,6 @@ static void REGAL_CALL emu_glDrawArraysInstanced(GLenum mode, GLint start, GLsiz
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -33120,15 +33177,6 @@ static void REGAL_CALL emu_glDrawElementsInstanced(GLenum mode, GLsizei count, G
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -33489,15 +33537,6 @@ static void REGAL_CALL emu_glMultiDrawArraysIndirectAMD(GLenum mode, const GLvoi
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -33555,15 +33594,6 @@ static void REGAL_CALL emu_glMultiDrawElementsIndirectAMD(GLenum mode, GLenum ty
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -33725,15 +33755,6 @@ static void REGAL_CALL emu_glDrawElementArrayAPPLE(GLenum mode, GLint first, GLs
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -33839,15 +33860,6 @@ static void REGAL_CALL emu_glMultiDrawElementArrayAPPLE(GLenum mode, const GLint
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -34391,15 +34403,6 @@ static void REGAL_CALL emu_glDrawElementsBaseVertex(GLenum mode, GLsizei count,
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -34490,15 +34493,6 @@ static void REGAL_CALL emu_glDrawElementsInstancedBaseVertex(GLenum mode, GLsize
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -34626,7 +34620,12 @@ static void REGAL_CALL emu_glDrawRangeElementsBaseVertex(GLenum mode, GLuint sta
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 0;
if (REGAL_FORCE_ES2_PROFILE || !_context->info->gl_arb_draw_elements_base_vertex)
// WAR: Our Tegra driver GL 4 core profile supports DrawRangeElementsBaseVertex but does not
// advertise ARB_draw_elements_base_vertex in the extension list so here we check whether the
// driver has glDrawRangeElementsBaseVertex instead of looking for the extension flag.
// (leaving original line here, just commented out)
// if (REGAL_FORCE_ES2_PROFILE || !_context->info->gl_arb_draw_elements_base_vertex)
if (REGAL_FORCE_ES2_PROFILE || !_context->dispatcher.driver.glDrawRangeElementsBaseVertex)
{
if (basevertex==0)
{
@ -34636,7 +34635,7 @@ static void REGAL_CALL emu_glDrawRangeElementsBaseVertex(GLenum mode, GLuint sta
}
else
{
Warning("Regal does not support glDrawRangeElementsBaseVertex (GL_ARB_draw_elements_base_vertex extension not available) for basevertex!=0 for ES 2.0 - skipping.");
Warning("Regal does not support glDrawRangeElementsBaseVertex (GL_ARB_draw_elements_base_vertex extension not available) for basevertex!=0 - skipping.");
return;
}
}
@ -34704,15 +34703,6 @@ static void REGAL_CALL emu_glMultiDrawElementsBaseVertex(GLenum mode, const GLsi
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -34802,15 +34792,6 @@ static void REGAL_CALL emu_glDrawArraysIndirect(GLenum mode, const GLvoid *indir
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -34868,15 +34849,6 @@ static void REGAL_CALL emu_glDrawElementsIndirect(GLenum mode, GLenum type, cons
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -34936,15 +34908,6 @@ static void REGAL_CALL emu_glDrawArraysInstancedARB(GLenum mode, GLint start, GL
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -35002,15 +34965,6 @@ static void REGAL_CALL emu_glDrawElementsInstancedARB(GLenum mode, GLsizei count
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -38049,15 +38003,6 @@ static void REGAL_CALL emu_glMultiDrawArraysIndirect(GLenum mode, const GLvoid *
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -38115,15 +38060,6 @@ static void REGAL_CALL emu_glMultiDrawElementsIndirect(GLenum mode, GLenum type,
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -44605,9 +44541,7 @@ static void REGAL_CALL emu_glBindVertexArray(GLuint array)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 3;
if (!_context->dsa->ShadowVao( array )) {
_dispatch.call(&_dispatch.glBindVertexArray)( array );
}
_context->dsa->ShadowVao( _context, array );
return;
}
#endif
@ -44727,7 +44661,7 @@ static void REGAL_CALL emu_glDeleteVertexArrays(GLsizei n, const GLuint *arrays)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
_context->vao->DeleteVertexArrays( n, arrays );
_context->vao->DeleteVertexArrays( *_context, n, arrays );
return;
}
#endif
@ -47015,6 +46949,9 @@ static void REGAL_CALL emu_glProgramStringARB(GLenum target, GLenum format, GLsi
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 0;
// nothing to do if len <= 0 so just return
if (len <= 0)
return;
if (_context->isES2())
{
Warning("Regal does not support glProgramStringARB (GL_ARB_vertex_program) for ES 2.0 context - skipping.");
@ -48990,15 +48927,6 @@ static void REGAL_CALL emu_glDrawElementArrayATI(GLenum mode, GLsizei count)
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -66278,15 +66206,6 @@ static void REGAL_CALL emu_glDrawArraysInstancedEXT(GLenum mode, GLint start, GL
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -66344,15 +66263,6 @@ static void REGAL_CALL emu_glDrawElementsInstancedEXT(GLenum mode, GLsizei count
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -68314,15 +68224,6 @@ static void REGAL_CALL emu_glMultiDrawArraysEXT(GLenum mode, const GLint *first,
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -68380,15 +68281,6 @@ static void REGAL_CALL emu_glMultiDrawElementsEXT(GLenum mode, const GLsizei *co
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -70308,6 +70200,68 @@ static void REGAL_CALL emu_glTexStorage3DEXT(GLenum target, GLsizei levels, GLen
// GL_EXT_vertex_array
static void REGAL_CALL emu_glArrayElementEXT(GLint i)
{
RegalContext *_context = REGAL_GET_CONTEXT();
RegalAssert(_context);
DispatchTableGL &_dispatch = _context->dispatcher.emulation;
// prefix
switch( _context->emuLevel )
{
case 16 :
case 15 :
case 14 :
case 13 :
case 12 :
case 11 :
case 10 :
case 9 :
case 8 :
case 7 :
#if REGAL_EMU_IFF
if (_context->iff) break;
#endif
case 1 :
default:
break;
}
// impl
switch( _context->emuLevel )
{
case 16 :
case 15 :
case 14 :
case 13 :
case 12 :
case 11 :
case 10 :
case 9 :
case 8 :
case 7 :
#if REGAL_EMU_IFF
if (_context->iff)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 6;
_context->iff->ProvokeElement( _context, i );
return;
}
#endif
case 1 :
default:
{
DispatchTableGL *_next = _dispatch.next();
RegalAssert(_next);
_next->call(&_next->glArrayElementEXT)(i);
break;
}
}
}
static void REGAL_CALL emu_glColorPointerEXT(GLint size, GLenum type, GLsizei stride, GLsizei count, const GLvoid *pointer)
{
RegalContext *_context = REGAL_GET_CONTEXT();
@ -70440,15 +70394,6 @@ static void REGAL_CALL emu_glDrawArraysEXT(GLenum mode, GLint first, GLsizei cou
_context->dsa->Restore( _context );
}
#endif
case 3 :
#if REGAL_EMU_VAO
if (_context->vao)
{
Push<int> pushLevel(_context->emuLevel);
_context->emuLevel = 2;
// _context->vao->Validate(*_context );
}
#endif
case 1 :
default:
break;
@ -70475,9 +70420,7 @@ static void REGAL_CALL emu_glDrawArraysEXT(GLenum mode, GLint first, GLsizei cou
_context->emuLevel = 5;
if ( ! _context->quads->glDrawArrays( _context, mode, first, count ) ) {
DispatchTableGL *_next = _context->dispatcher.emulation.next();
RegalAssert(_next);
return _next->call(&_next->glDrawArrays)( mode, first, count );
_context->dispatcher.emulation.glDrawArrays( mode, first, count );
}
return;
@ -72841,6 +72784,7 @@ void InitDispatchTableEmu(DispatchTableGL &tbl)
// GL_VERSION_1_1
tbl.glArrayElement = emu_glArrayElement;
tbl.glBindTexture = emu_glBindTexture;
tbl.glColorPointer = emu_glColorPointer;
tbl.glCopyTexImage2D = emu_glCopyTexImage2D;
@ -73837,6 +73781,7 @@ void InitDispatchTableEmu(DispatchTableGL &tbl)
// GL_EXT_vertex_array
tbl.glArrayElementEXT = emu_glArrayElementEXT;
tbl.glColorPointerEXT = emu_glColorPointerEXT;
tbl.glDrawArraysEXT = emu_glDrawArraysEXT;
tbl.glEdgeFlagPointerEXT = emu_glEdgeFlagPointerEXT;

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.
@ -204,6 +204,151 @@ using namespace std;
#undef glIsRenderbuffer
#undef glRenderbufferStorage
#if REGAL_SYS_PPAPI
#define glBlendFunc GLES2BlendFunc
#define glClear GLES2Clear
#define glClearColor GLES2ClearColor
#define glClearStencil GLES2ClearStencil
#define glColorMask GLES2ColorMask
#define glCullFace GLES2CullFace
#define glDepthFunc GLES2DepthFunc
#define glDepthMask GLES2DepthMask
#define glDisable GLES2Disable
#define glEnable GLES2Enable
#define glFinish GLES2Finish
#define glFlush GLES2Flush
#define glFrontFace GLES2FrontFace
#define glGetBooleanv GLES2GetBooleanv
#define glGetError GLES2GetError
#define glGetFloatv GLES2GetFloatv
#define glGetIntegerv GLES2GetIntegerv
#define glGetString GLES2GetString
#define glGetTexParameterfv GLES2GetTexParameterfv
#define glGetTexParameteriv GLES2GetTexParameteriv
#define glHint GLES2Hint
#define glIsEnabled GLES2IsEnabled
#define glLineWidth GLES2LineWidth
#define glPixelStorei GLES2PixelStorei
#define glReadPixels GLES2ReadPixels
#define glScissor GLES2Scissor
#define glStencilFunc GLES2StencilFunc
#define glStencilMask GLES2StencilMask
#define glStencilOp GLES2StencilOp
#define glTexImage2D GLES2TexImage2D
#define glTexParameterf GLES2TexParameterf
#define glTexParameterfv GLES2TexParameterfv
#define glTexParameteri GLES2TexParameteri
#define glTexParameteriv GLES2TexParameteriv
#define glViewport GLES2Viewport
#define glBindTexture GLES2BindTexture
#define glCopyTexImage2D GLES2CopyTexImage2D
#define glCopyTexSubImage2D GLES2CopyTexSubImage2D
#define glDeleteTextures GLES2DeleteTextures
#define glDrawArrays GLES2DrawArrays
#define glDrawElements GLES2DrawElements
#define glGenTextures GLES2GenTextures
#define glIsTexture GLES2IsTexture
#define glPolygonOffset GLES2PolygonOffset
#define glTexSubImage2D GLES2TexSubImage2D
#define glBlendColor GLES2BlendColor
#define glBlendEquation GLES2BlendEquation
#define glActiveTexture GLES2ActiveTexture
#define glCompressedTexImage2D GLES2CompressedTexImage2D
#define glCompressedTexSubImage2D GLES2CompressedTexSubImage2D
#define glSampleCoverage GLES2SampleCoverage
#define glBlendFuncSeparate GLES2BlendFuncSeparate
#define glBindBuffer GLES2BindBuffer
#define glBufferData GLES2BufferData
#define glBufferSubData GLES2BufferSubData
#define glDeleteBuffers GLES2DeleteBuffers
#define glGenBuffers GLES2GenBuffers
#define glGetBufferParameteriv GLES2GetBufferParameteriv
#define glIsBuffer GLES2IsBuffer
#define glAttachShader GLES2AttachShader
#define glBindAttribLocation GLES2BindAttribLocation
#define glBlendEquationSeparate GLES2BlendEquationSeparate
#define glCompileShader GLES2CompileShader
#define glCreateProgram GLES2CreateProgram
#define glCreateShader GLES2CreateShader
#define glDeleteProgram GLES2DeleteProgram
#define glDeleteShader GLES2DeleteShader
#define glDetachShader GLES2DetachShader
#define glDisableVertexAttribArray GLES2DisableVertexAttribArray
#define glEnableVertexAttribArray GLES2EnableVertexAttribArray
#define glGetActiveAttrib GLES2GetActiveAttrib
#define glGetActiveUniform GLES2GetActiveUniform
#define glGetAttachedShaders GLES2GetAttachedShaders
#define glGetAttribLocation GLES2GetAttribLocation
#define glGetProgramInfoLog GLES2GetProgramInfoLog
#define glGetProgramiv GLES2GetProgramiv
#define glGetShaderInfoLog GLES2GetShaderInfoLog
#define glGetShaderSource GLES2GetShaderSource
#define glGetShaderiv GLES2GetShaderiv
#define glGetUniformLocation GLES2GetUniformLocation
#define glGetUniformfv GLES2GetUniformfv
#define glGetUniformiv GLES2GetUniformiv
#define glGetVertexAttribPointerv GLES2GetVertexAttribPointerv
#define glGetVertexAttribfv GLES2GetVertexAttribfv
#define glGetVertexAttribiv GLES2GetVertexAttribiv
#define glIsProgram GLES2IsProgram
#define glIsShader GLES2IsShader
#define glLinkProgram GLES2LinkProgram
#define glShaderSource GLES2ShaderSource
#define glStencilFuncSeparate GLES2StencilFuncSeparate
#define glStencilMaskSeparate GLES2StencilMaskSeparate
#define glStencilOpSeparate GLES2StencilOpSeparate
#define glUniform1f GLES2Uniform1f
#define glUniform1fv GLES2Uniform1fv
#define glUniform1i GLES2Uniform1i
#define glUniform1iv GLES2Uniform1iv
#define glUniform2f GLES2Uniform2f
#define glUniform2fv GLES2Uniform2fv
#define glUniform2i GLES2Uniform2i
#define glUniform2iv GLES2Uniform2iv
#define glUniform3f GLES2Uniform3f
#define glUniform3fv GLES2Uniform3fv
#define glUniform3i GLES2Uniform3i
#define glUniform3iv GLES2Uniform3iv
#define glUniform4f GLES2Uniform4f
#define glUniform4fv GLES2Uniform4fv
#define glUniform4i GLES2Uniform4i
#define glUniform4iv GLES2Uniform4iv
#define glUniformMatrix2fv GLES2UniformMatrix2fv
#define glUniformMatrix3fv GLES2UniformMatrix3fv
#define glUniformMatrix4fv GLES2UniformMatrix4fv
#define glUseProgram GLES2UseProgram
#define glValidateProgram GLES2ValidateProgram
#define glVertexAttrib1f GLES2VertexAttrib1f
#define glVertexAttrib1fv GLES2VertexAttrib1fv
#define glVertexAttrib2f GLES2VertexAttrib2f
#define glVertexAttrib2fv GLES2VertexAttrib2fv
#define glVertexAttrib3f GLES2VertexAttrib3f
#define glVertexAttrib3fv GLES2VertexAttrib3fv
#define glVertexAttrib4f GLES2VertexAttrib4f
#define glVertexAttrib4fv GLES2VertexAttrib4fv
#define glVertexAttribPointer GLES2VertexAttribPointer
#define glClearDepthf GLES2ClearDepthf
#define glDepthRangef GLES2DepthRangef
#define glGetShaderPrecisionFormat GLES2GetShaderPrecisionFormat
#define glReleaseShaderCompiler GLES2ReleaseShaderCompiler
#define glShaderBinary GLES2ShaderBinary
#define glBindFramebuffer GLES2BindFramebuffer
#define glBindRenderbuffer GLES2BindRenderbuffer
#define glCheckFramebufferStatus GLES2CheckFramebufferStatus
#define glDeleteFramebuffers GLES2DeleteFramebuffers
#define glDeleteRenderbuffers GLES2DeleteRenderbuffers
#define glFramebufferRenderbuffer GLES2FramebufferRenderbuffer
#define glFramebufferTexture2D GLES2FramebufferTexture2D
#define glGenFramebuffers GLES2GenFramebuffers
#define glGenRenderbuffers GLES2GenRenderbuffers
#define glGenerateMipmap GLES2GenerateMipmap
#define glGetFramebufferAttachmentParameteriv GLES2GetFramebufferAttachmentParameteriv
#define glGetRenderbufferParameteriv GLES2GetRenderbufferParameteriv
#define glIsFramebuffer GLES2IsFramebuffer
#define glIsRenderbuffer GLES2IsRenderbuffer
#define glRenderbufferStorage GLES2RenderbufferStorage
#endif
extern "C"
{
extern void REGAL_CALL glBlendFunc(GLenum sfactor, GLenum dfactor);

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -379,10 +379,14 @@ struct Dsa
bool NotVao( GLuint vao ) const {
return vao != ( dsa.vao != REGAL_DSA_INVALID ? dsa.vao : drv.vao );
}
bool ShadowVao( GLuint vao ) {
void ShadowVao( RegalContext * ctx, GLuint vao ) {
drv.vao = vao;
return dsa.vao != REGAL_DSA_INVALID;
if(dsa.vao == REGAL_DSA_INVALID) {
ctx->dispatcher.emulation.glBindVertexArray( vao );
ctx->dispatcher.emulation.glGetIntegerv(GL_ARRAY_BUFFER_BINDING, reinterpret_cast<GLint*>(&drv.buffer));
}
}
void DsaVao( RegalContext * ctx, GLuint vao ) {
if( NotVao( vao ) ) {
dsa.vao = vao;

View file

@ -54,6 +54,9 @@ namespace Emu
// In ES2 mode, 16 texture units only?
// No. of fixed function texture units. 2 minimum.
// Note that this should never be greater than 4 as described here:
//
// http://www.nvidia.com/object/General_FAQ.html#t6
#ifndef REGAL_EMU_MAX_TEXTURE_UNITS
#define REGAL_EMU_MAX_TEXTURE_UNITS 4

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.
@ -56,6 +56,9 @@ REGAL_GLOBAL_BEGIN
#include <set>
#include <string>
#include <algorithm>
#include <sstream>
#include <iterator>
REGAL_GLOBAL_END

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -2010,6 +2010,7 @@ Iff::Iff()
, immCurrent(0)
, immPrim(GL_POINTS)
, immVbo(0)
, immVboElement(0)
, immVao(0)
, immShadowVao(0)
, shadowMatrixMode(GL_MODELVIEW)
@ -2057,6 +2058,7 @@ void Iff::Cleanup( RegalContext &ctx )
DispatchTableGL &tbl = ctx.dispatcher.emulation;
tbl.call(&tbl.glDeleteBuffers)(1, &immVbo);
tbl.call(&tbl.glDeleteBuffers)(1, &immVboElement);
tbl.call(&tbl.glDeleteVertexArrays)(1, &immVao);
size_t n = array_size( ffprogs );
@ -2370,11 +2372,14 @@ void Iff::InitImmediate(RegalContext &ctx)
BindVertexArray( &ctx, immVao ); // to keep ffn current
tbl.glGenBuffers( 1, & immVbo );
tbl.glBindBuffer( GL_ARRAY_BUFFER, immVbo );
tbl.glGenBuffers( 1, & immVboElement );
tbl.glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, immVboElement );
#if REGAL_SYS_EMSCRIPTEN
// We need this to be an allocated buffer for WebGL, because a dangling VertexAttribPointer
// doesn't work. XXX -- this might be a Firefox bug, check?
tbl.glBufferData( GL_ARRAY_BUFFER, sizeof( immArray ), NULL, GL_STATIC_DRAW );
tbl.glBufferData( GL_ELEMENT_ARRAY_BUFFER, sizeof( immArrayElement ), NULL, GL_STATIC_DRAW );
#endif
for (GLuint i = 0; i < max_vertex_attribs; i++)
@ -2430,7 +2435,7 @@ void Iff::glDeleteBuffers( RegalContext * ctx, GLsizei n, const GLuint * buffers
for (GLsizei i = 0; i < n; i++)
{
GLuint name = buffers[ i ];
if (name != immVbo)
if (name != immVbo && name != immVboElement)
ctx->dispatcher.emulation.glDeleteBuffers( 1, &name );
}
}
@ -2472,12 +2477,14 @@ void Iff::Begin( RegalContext * ctx, GLenum mode )
}
PreDraw( ctx );
immCurrent = 0;
immCurrentElement = 0;
immPrim = mode;
}
void Iff::End( RegalContext * ctx )
{
Flush( ctx );
RestoreVao( ctx );
}
void Iff::RestoreVao( RegalContext * ctx )
@ -2502,6 +2509,35 @@ void Iff::Flush( RegalContext * ctx )
derivedPrim = GL_TRIANGLE_FAN;
tbl.glDrawArrays( derivedPrim, 0, immCurrent );
}
if (immCurrentElement > 0)
{
DispatchTableGL &tbl = ctx->dispatcher.emulation;
if(immShadowVao != immVao)
{
tbl.glBindVertexArray( immShadowVao );
BindVertexArray( ctx, immShadowVao );
}
GLuint immShadowVboElement = 0;
ctx->dispatcher.emulation.glGetIntegerv( GL_ELEMENT_ARRAY_BUFFER_BINDING, reinterpret_cast<GLint*>(&immShadowVboElement) );
if(immShadowVboElement != immVboElement) tbl.glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, immVboElement );
tbl.glBufferData( GL_ELEMENT_ARRAY_BUFFER, immCurrentElement * sizeof(GLint), immArrayElement, GL_DYNAMIC_DRAW );
GLenum derivedPrim = immPrim;
if (( immPrim == GL_POLYGON ) && ( ctx->info->core == true || ctx->info->es2 ))
derivedPrim = GL_TRIANGLE_FAN;
tbl.glDrawElements( derivedPrim, immCurrentElement, GL_UNSIGNED_INT, 0 );
if(immShadowVboElement != immVboElement) tbl.glBindBuffer( GL_ELEMENT_ARRAY_BUFFER, immShadowVboElement );
if(immShadowVao != immVao)
{
tbl.glBindVertexArray( immVao );
BindVertexArray( ctx, immVao );
}
}
}
void Iff::Provoke( RegalContext * ctx )
@ -2554,6 +2590,55 @@ void Iff::Provoke( RegalContext * ctx )
}
}
void Iff::ProvokeElement( RegalContext * ctx, GLint i )
{
immArrayElement[immCurrentElement++] = i;
if ( immCurrentElement >= REGAL_IMMEDIATE_BUFFER_SIZE )
{
Flush( ctx );
int restartVerts = 0;
switch( immPrim )
{
case GL_QUADS:
restartVerts = REGAL_IMMEDIATE_BUFFER_SIZE % 4;
break;
case GL_TRIANGLES:
restartVerts = REGAL_IMMEDIATE_BUFFER_SIZE % 3;
break;
case GL_LINES:
restartVerts = REGAL_IMMEDIATE_BUFFER_SIZE % 2;
break;
case GL_QUAD_STRIP:
restartVerts = 2;
break;
case GL_TRIANGLE_STRIP:
restartVerts = 2;
break;
case GL_LINE_STRIP:
restartVerts = 1;
break;
default:
break;
}
// For triangle fan we need the first and last vertices
// for restarting. All others concern the most recent n.
if (immPrim==GL_TRIANGLE_FAN)
{
immArrayElement[1] = immArrayElement[REGAL_IMMEDIATE_BUFFER_SIZE - 1];
immCurrentElement = 2;
}
else
{
int offset = REGAL_IMMEDIATE_BUFFER_SIZE - restartVerts;
memcpy( immArrayElement, immArrayElement + offset * sizeof(GLint), restartVerts * sizeof(GLint));
immCurrentElement = restartVerts;
}
}
}
GLuint Iff::AttrIndex( RegalFixedFunctionAttrib attr, int cat ) const
{
if (attr < RFF2A_TexCoord)
@ -2775,7 +2860,8 @@ void Iff::ShadowMultiTexBinding( GLenum texunit, GLenum target, GLuint obj )
Internal("Regal::Iff::ShadowMultiTexBinding",toString(texunit)," ",toString(target)," ",obj);
// texture unit state is only set when the active texture index is <4 (for fixed function)
if ( texunit - GL_TEXTURE0 > ( REGAL_EMU_MAX_TEXTURE_UNITS - 1 ) )
if ( texunit - GL_TEXTURE0 >= REGAL_EMU_MAX_TEXTURE_COORDS
|| texunit - GL_TEXTURE0 >= REGAL_EMU_MAX_TEXTURE_UNITS )
return;
activeTextureIndex = texunit - GL_TEXTURE0;

View file

@ -815,11 +815,14 @@ struct Iff
bool immActive;
GLuint immProvoking;
GLuint immCurrent;
GLuint immCurrentElement;
GLenum immPrim;
Float4 immVab[ REGAL_EMU_MAX_VERTEX_ATTRIBS ];
GLubyte immArray[ REGAL_IMMEDIATE_BUFFER_SIZE * REGAL_EMU_MAX_VERTEX_ATTRIBS * sizeof(Float4) ];
GLint immArrayElement[ REGAL_IMMEDIATE_BUFFER_SIZE ];
GLuint immVbo;
GLuint immVboElement;
GLuint immVao;
GLuint immShadowVao;
@ -834,6 +837,7 @@ struct Iff
void RestoreVao( RegalContext * ctx );
void Flush( RegalContext * ctx );
void Provoke( RegalContext * ctx );
void ProvokeElement( RegalContext * ctx, GLint i );
template <int N, bool Norm, typename T> void Attribute( RegalContext * ctx, GLuint idx, const T * v )
{

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -227,7 +227,18 @@ const char *libraryLocation(const Library &library)
if (!ret)
{
#if REGAL_SYS_ANDROID
return "/System/lib/libGLESv1_CM.so";
const char * const candidates[] = {
"/vendor/lib/egl/libGLESv1_CM.so.1",
"/system/lib/egl/libGLESv1_CM.so.1",
"/system/lib/libGLESv1_CM.so.1",
"/vendor/lib/libGLESv1_CM.so.1",
"/System/lib/libGLESv1_CM.so.1",
NULL
};
for (const char * const *i = candidates; *i; ++i) {
if (fileExists(*i))
return *i;
}
#elif REGAL_SYS_EGL || REGAL_SYS_GLX
// TODO - ES1 for Linux?
#endif
@ -263,7 +274,18 @@ const char *libraryLocation(const Library &library)
{
#if REGAL_SYS_EGL || REGAL_SYS_GLX
#if defined(__arm__)
return "/usr/lib/libGLESv2.so";
const char * const candidates[] = {
"/vendor/lib/egl/libGLESv2.so",
"/system/lib/egl/libGLESv2.so",
"/system/lib/libGLESv2.so",
"/vendor/lib/libGLESv2.so",
"/usr/lib/libGLESv2.so",
NULL
};
for (const char * const *i = candidates; *i; ++i) {
if (fileExists(*i))
return *i;
}
#elif defined(__x86_64__) || defined(__x86_64)
return "/usr/lib/x86_64-linux-gnu/mesa-egl/libGLESv2.so.2";
#else
@ -287,7 +309,18 @@ const char *libraryLocation(const Library &library)
{
#if REGAL_SYS_EGL
#if defined(__arm__)
return "/usr/lib/libEGL.so";
const char * const candidates[] = {
"/vendor/lib/egl/libEGL.so",
"/system/lib/egl/libEGL.so",
"/system/lib/libEGL.so",
"/vendor/lib/libEGL.so",
"/usr/lib/libEGL.so",
NULL
};
for (const char * const *i = candidates; *i; ++i) {
if (fileExists(*i))
return *i;
}
#elif defined(__x86_64__) || defined(__x86_64)
return "/usr/lib/x86_64-linux-gnu/mesa-egl/libEGL.so";
#else

File diff suppressed because it is too large Load diff

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -3,11 +3,11 @@
*/
/*
Copyright (c) 2011-2013 NVIDIA Corporation
Copyright (c) 2011-2014 NVIDIA Corporation
Copyright (c) 2012-2014 Scott Nations
Copyright (c) 2012-2014 Nigel Stewart
Copyright (c) 2011-2013 Cass Everitt
Copyright (c) 2012-2013 Scott Nations
Copyright (c) 2012 Mathias Schott
Copyright (c) 2012-2013 Nigel Stewart
Copyright (c) 2012-2013 Google Inc.
All rights reserved.

View file

@ -241,10 +241,10 @@ TEST( RegalPpa, PushPopDepthBufferBit )
ppa.glClearDepth( 0.0 );
// check for expected values
EXPECT_EQ( static_cast<GLboolean>( GL_TRUE ), ppa.Depth::enable );
EXPECT_EQ( static_cast<GLenum>( GL_NEVER ), ppa.Depth::func );
EXPECT_EQ( static_cast<GLboolean>( GL_FALSE ), ppa.Depth::mask );
EXPECT_EQ( static_cast<GLclampd>( 0.0 ), ppa.Depth::clear );
EXPECT_EQ( static_cast<GLboolean>( GL_TRUE ), ppa.Ppa::Depth::enable );
EXPECT_EQ( static_cast<GLenum>( GL_NEVER ), ppa.Ppa::Depth::func );
EXPECT_EQ( static_cast<GLboolean>( GL_FALSE ), ppa.Ppa::Depth::mask );
EXPECT_EQ( static_cast<GLclampd>( 0.0 ), ppa.Ppa::Depth::clear );
// push this state
ppa.PushAttrib( &ctx, GL_DEPTH_BUFFER_BIT );
@ -262,13 +262,13 @@ TEST( RegalPpa, PushPopDepthBufferBit )
ppa.glClearDepth( 0.25 );
// check for expected values
EXPECT_EQ( static_cast<GLboolean>( GL_FALSE ), ppa.Depth::enable );
EXPECT_EQ( static_cast<GLenum>( GL_GREATER ), ppa.Depth::func );
EXPECT_EQ( static_cast<GLboolean>( GL_TRUE ), ppa.Depth::mask );
EXPECT_EQ( static_cast<GLclampd>( 0.25 ), ppa.Depth::clear );
EXPECT_EQ( static_cast<GLboolean>( GL_FALSE ), ppa.Ppa::Depth::enable );
EXPECT_EQ( static_cast<GLenum>( GL_GREATER ), ppa.Ppa::Depth::func );
EXPECT_EQ( static_cast<GLboolean>( GL_TRUE ), ppa.Ppa::Depth::mask );
EXPECT_EQ( static_cast<GLclampd>( 0.25 ), ppa.Ppa::Depth::clear );
ppa.glClearDepth( 0.5f );
EXPECT_EQ( static_cast<GLclampd>( 0.5 ), ppa.Depth::clear );
EXPECT_EQ( static_cast<GLclampd>( 0.5 ), ppa.Ppa::Depth::clear );
// pop attrib
EXPECT_CALL( mock, glEnable(_) ).Times(AnyNumber());
@ -285,10 +285,10 @@ TEST( RegalPpa, PushPopDepthBufferBit )
EXPECT_EQ( 0u, ppa.polygonStack.size() );
EXPECT_EQ( 0u, ppa.transformStack.size() );
EXPECT_EQ( static_cast<GLboolean>( GL_TRUE ), ppa.Depth::enable );
EXPECT_EQ( static_cast<GLenum>( GL_NEVER ), ppa.Depth::func );
EXPECT_EQ( static_cast<GLboolean>( GL_FALSE ), ppa.Depth::mask );
EXPECT_EQ( static_cast<GLclampd>( 0.0 ), ppa.Depth::clear );
EXPECT_EQ( static_cast<GLboolean>( GL_TRUE ), ppa.Ppa::Depth::enable );
EXPECT_EQ( static_cast<GLenum>( GL_NEVER ), ppa.Ppa::Depth::func );
EXPECT_EQ( static_cast<GLboolean>( GL_FALSE ), ppa.Ppa::Depth::mask );
EXPECT_EQ( static_cast<GLclampd>( 0.0 ), ppa.Ppa::Depth::clear );
// pop attrib
EXPECT_CALL( mock, glEnable(_) ).Times(AnyNumber());
@ -305,10 +305,10 @@ TEST( RegalPpa, PushPopDepthBufferBit )
EXPECT_EQ( 0u, ppa.polygonStack.size() );
EXPECT_EQ( 0u, ppa.transformStack.size() );
EXPECT_EQ( static_cast<GLboolean>( GL_FALSE ), ppa.Depth::enable );
EXPECT_EQ( static_cast<GLenum>( GL_LESS ), ppa.Depth::func );
EXPECT_EQ( static_cast<GLboolean>( GL_TRUE ), ppa.Depth::mask );
EXPECT_EQ( static_cast<GLclampd>( 1.0 ), ppa.Depth::clear );
EXPECT_EQ( static_cast<GLboolean>( GL_FALSE ), ppa.Ppa::Depth::enable );
EXPECT_EQ( static_cast<GLenum>( GL_LESS ), ppa.Ppa::Depth::func );
EXPECT_EQ( static_cast<GLboolean>( GL_TRUE ), ppa.Ppa::Depth::mask );
EXPECT_EQ( static_cast<GLclampd>( 1.0 ), ppa.Ppa::Depth::clear );
}
} // namespace