diff --git a/CMakeLists.txt b/CMakeLists.txt index 93e34f45854..cdef12cb923 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -403,6 +403,7 @@ option(WITH_GL_EGL "Use the EGL OpenGL system library instead of th option(WITH_GL_PROFILE_COMPAT "Support using the OpenGL 'compatibility' profile. (deprecated)" ON ) option(WITH_GL_PROFILE_CORE "Support using the OpenGL 3.2+ 'core' profile." OFF) option(WITH_GL_PROFILE_ES20 "Support using OpenGL ES 2.0. (thru either EGL or the AGL/WGL/XGL 'es20' profile)" OFF) +option(WITH_GPU_DEBUG "Create a debug OpenGL context (allows inserting custom messages and getting notifications for bad GL use)" OFF) mark_as_advanced( WITH_GLEW_MX @@ -411,6 +412,7 @@ mark_as_advanced( WITH_GL_PROFILE_COMPAT WITH_GL_PROFILE_CORE WITH_GL_PROFILE_ES20 + WITH_GPU_DEBUG ) if(WITH_GL_PROFILE_COMPAT) @@ -2350,6 +2352,10 @@ if(WITH_GL_EGL) list(APPEND GL_DEFINITIONS -DWITH_EGL) endif() +if(WITH_GPU_DEBUG) + list(APPEND GL_DEFINITIONS -DWITH_GPU_DEBUG) +endif() + #----------------------------------------------------------------------------- # Configure OpenMP. if(WITH_OPENMP) @@ -2832,6 +2838,7 @@ if(FIRST_RUN) info_cfg_option(WITH_GL_PROFILE_COMPAT) info_cfg_option(WITH_GL_PROFILE_CORE) info_cfg_option(WITH_GL_PROFILE_ES20) + info_cfg_option(WITH_GPU_DEBUG) if(WIN32) info_cfg_option(WITH_GL_ANGLE) endif() diff --git a/intern/ghost/intern/GHOST_ContextGLX.h b/intern/ghost/intern/GHOST_ContextGLX.h index e2169ac6adb..b33c0b5252a 100644 --- a/intern/ghost/intern/GHOST_ContextGLX.h +++ b/intern/ghost/intern/GHOST_ContextGLX.h @@ -46,7 +46,11 @@ extern "C" GLXEWContext *glxewContext; #ifndef GHOST_OPENGL_GLX_CONTEXT_FLAGS -#define GHOST_OPENGL_GLX_CONTEXT_FLAGS 0 +# ifdef WITH_GPU_DEBUG +# define GHOST_OPENGL_GLX_CONTEXT_FLAGS GLX_CONTEXT_DEBUG_BIT_ARB +# else +# define GHOST_OPENGL_GLX_CONTEXT_FLAGS 0 +# endif #endif #ifndef GHOST_OPENGL_GLX_RESET_NOTIFICATION_STRATEGY diff --git a/intern/ghost/intern/GHOST_ContextSDL.h b/intern/ghost/intern/GHOST_ContextSDL.h index c151d8e9f9d..61f339c1bc2 100644 --- a/intern/ghost/intern/GHOST_ContextSDL.h +++ b/intern/ghost/intern/GHOST_ContextSDL.h @@ -40,7 +40,11 @@ extern "C" { #ifndef GHOST_OPENGL_SDL_CONTEXT_FLAGS -#define GHOST_OPENGL_SDL_CONTEXT_FLAGS 0 +# ifdef WITH_GPU_DEBUG +# define GHOST_OPENGL_SDL_CONTEXT_FLAGS SDL_GL_CONTEXT_DEBUG_FLAG +# else +# define GHOST_OPENGL_SDL_CONTEXT_FLAGS 0 +# endif #endif #ifndef GHOST_OPENGL_SDL_RESET_NOTIFICATION_STRATEGY diff --git a/intern/ghost/intern/GHOST_ContextWGL.h b/intern/ghost/intern/GHOST_ContextWGL.h index 189121d7d5d..98a8059b242 100644 --- a/intern/ghost/intern/GHOST_ContextWGL.h +++ b/intern/ghost/intern/GHOST_ContextWGL.h @@ -45,7 +45,11 @@ extern "C" WGLEWContext *wglewContext; #endif #ifndef GHOST_OPENGL_WGL_CONTEXT_FLAGS -#define GHOST_OPENGL_WGL_CONTEXT_FLAGS 0 +# ifdef WITH_GPU_DEBUG +# define GHOST_OPENGL_WGL_CONTEXT_FLAGS WGL_CONTEXT_DEBUG_BIT_ARB +# else +# define GHOST_OPENGL_WGL_CONTEXT_FLAGS 0 +# endif #endif #ifndef GHOST_OPENGL_WGL_RESET_NOTIFICATION_STRATEGY diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 12b7f864469..b5d9028a8ae 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -55,6 +55,7 @@ set(SRC intern/gpu_simple_shader.c intern/gpu_select.c intern/gpu_compositing.c + intern/gpu_debug.c shaders/gpu_shader_fx_lib.glsl shaders/gpu_shader_fx_ssao_frag.glsl @@ -73,6 +74,7 @@ set(SRC GPU_buffers.h GPU_draw.h + GPU_debug.h GPU_extensions.h GPU_glew.h GPU_init_exit.h @@ -81,7 +83,7 @@ set(SRC GPU_select.h GPU_compositing.h intern/gpu_codegen.h - intern/gpu_extensions_private.h + intern/gpu_private.h ) data_to_c_simple(shaders/gpu_shader_material.glsl SRC) diff --git a/source/blender/gpu/GPU_debug.h b/source/blender/gpu/GPU_debug.h new file mode 100644 index 00000000000..02c5df013af --- /dev/null +++ b/source/blender/gpu/GPU_debug.h @@ -0,0 +1,78 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2005 Blender Foundation. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Jason Wilkins. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file source/blender/gpu/GPU_debug.h + * \ingroup gpu + */ + +#ifndef __GPU_DEBUG_H__ +#define __GPU_DEBUG_H__ + +#include "GPU_glew.h" + +#include "BLI_utildefines.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* prints something if debug mode is active only */ +void GPU_print_error_debug(const char *str); + +/* replacement for gluErrorString */ +const char *gpuErrorString(GLenum err); + +/* prints current OpenGL state */ +void GPU_state_print(void); + +void gpu_assert_no_gl_errors(const char *file, int line, const char *str); + +# define GPU_ASSERT_NO_GL_ERRORS(str) gpu_assert_no_gl_errors(__FILE__, __LINE__, (str)) + +# define GPU_CHECK_ERRORS_AROUND(glProcCall) \ + ( \ + GPU_ASSERT_NO_GL_ERRORS("Pre: " #glProcCall), \ + (glProcCall), \ + GPU_ASSERT_NO_GL_ERRORS("Post: " #glProcCall) \ + ) + + +#ifdef WITH_GPU_DEBUG +/* inserts a debug marker message for the debug context messaging system */ +void gpu_string_marker (size_t size, const char *str); + +# define GPU_STRING_MARKER(size, str) gpu_string_marker((size), (str)) +#else /* WITH_GPU_DEBUG */ +# define GPU_STRING_MARKER(len, str) ((void)(size),(void)(str)) +#endif /* WITH_GPU_DEBUG */ + +#ifdef __cplusplus +} +#endif + + +#endif /* __GPU_DEBUG_H__ */ \ No newline at end of file diff --git a/source/blender/gpu/GPU_draw.h b/source/blender/gpu/GPU_draw.h index 3ddec157c49..4329127407f 100644 --- a/source/blender/gpu/GPU_draw.h +++ b/source/blender/gpu/GPU_draw.h @@ -57,10 +57,6 @@ struct SmokeModifierData; void GPU_state_init(void); -/* Debugging */ - -void GPU_state_print(void); - /* Material drawing * - first the state is initialized by a particular object and * it's materials diff --git a/source/blender/gpu/GPU_extensions.h b/source/blender/gpu/GPU_extensions.h index 739d45663f8..186db85d31a 100644 --- a/source/blender/gpu/GPU_extensions.h +++ b/source/blender/gpu/GPU_extensions.h @@ -55,7 +55,6 @@ typedef struct GPUShader GPUShader; /* GPU extensions support */ void GPU_extensions_disable(void); -int GPU_print_error(const char *str); int GPU_glsl_support(void); int GPU_non_power_of_two_support(void); diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c index 9e4d0d5f823..47d2ac2d2e5 100644 --- a/source/blender/gpu/intern/gpu_codegen.c +++ b/source/blender/gpu/intern/gpu_codegen.c @@ -31,8 +31,6 @@ * Convert material node-trees to GLSL. */ -#include "GPU_glew.h" - #include "MEM_guardedalloc.h" #include "DNA_customdata_types.h" @@ -44,6 +42,7 @@ #include "BLI_dynstr.h" #include "BLI_ghash.h" +#include "GPU_glew.h" #include "GPU_material.h" #include "GPU_extensions.h" diff --git a/source/blender/gpu/intern/gpu_debug.c b/source/blender/gpu/intern/gpu_debug.c new file mode 100644 index 00000000000..fb772748989 --- /dev/null +++ b/source/blender/gpu/intern/gpu_debug.c @@ -0,0 +1,748 @@ +/* + * ***** BEGIN GPL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + * The Original Code is Copyright (C) 2005 Blender Foundation. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): Brecht Van Lommel, Jason Wilkins. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file source/blender/gpu/GPU_debug.h + * \ingroup gpu + */ + +#include "BLI_sys_types.h" + +#include "BKE_global.h" + +#include "GPU_glew.h" +#include "GPU_debug.h" +#include "intern/gpu_private.h" + +#include +#include + +#define CASE_CODE_RETURN_STR(code) case code: return #code; + +static const char* gpu_gl_error_symbol(GLenum err) +{ + switch(err) { + CASE_CODE_RETURN_STR(GL_NO_ERROR) + CASE_CODE_RETURN_STR(GL_INVALID_ENUM) + CASE_CODE_RETURN_STR(GL_INVALID_VALUE) + CASE_CODE_RETURN_STR(GL_INVALID_OPERATION) + CASE_CODE_RETURN_STR(GL_STACK_OVERFLOW) + CASE_CODE_RETURN_STR(GL_STACK_UNDERFLOW) + CASE_CODE_RETURN_STR(GL_OUT_OF_MEMORY) + +#if GL_ARB_imaging + CASE_CODE_RETURN_STR(GL_TABLE_TOO_LARGE) +#endif + +#if defined(WITH_GLU) + CASE_CODE_RETURN_STR(GLU_INVALID_ENUM) + CASE_CODE_RETURN_STR(GLU_INVALID_VALUE) + CASE_CODE_RETURN_STR(GLU_OUT_OF_MEMORY) +#endif + + default: + return ""; + } +} + +#undef CASE_CODE_RETURN_STR + + +static bool gpu_report_gl_errors(const char *file, int line, const char *str) +{ + GLenum gl_error = glGetError(); + + if (gl_error == GL_NO_ERROR) { + return true; + } + else { + /* glGetError should have cleared the error flag, so if we get the + same flag twice that means glGetError itself probably triggered + the error. This happens on Windows if the GL context is invalid. + */ + { + GLenum new_error = glGetError(); + if (gl_error == new_error) { + fprintf(stderr, "GL: Possible context invalidation issue\n"); + return false; + } + } + + fprintf( + stderr, + "%s(%d): ``%s'' -> GL Error (0x%04X - %s): %s\n", + file, + line, + str, + gl_error, + gpu_gl_error_symbol(gl_error), + gpuErrorString(gl_error)); + + return false; + } +} + + +const char* gpuErrorString(GLenum err) +{ + switch(err) { + case GL_NO_ERROR: + return "No Error"; + + case GL_INVALID_ENUM: + return "Invalid Enumeration"; + + case GL_INVALID_VALUE: + return "Invalid Value"; + + case GL_INVALID_OPERATION: + return "Invalid Operation"; + + case GL_STACK_OVERFLOW: + return "Stack Overflow"; + + case GL_STACK_UNDERFLOW: + return "Stack Underflow"; + + case GL_OUT_OF_MEMORY: + return "Out of Memory"; + +#if GL_ARB_imaging + case GL_TABLE_TOO_LARGE: + return "Table Too Large"; +#endif + +#if defined(WITH_GLU) + case GLU_INVALID_ENUM: + return "Invalid Enum (GLU)"; + + case GLU_INVALID_VALUE: + return "Invalid Value (GLU)"; + + case GLU_OUT_OF_MEMORY: + return "Out of Memory (GLU)"; +#endif + + default: + return ""; + } +} + + +#ifdef WITH_GPU_DEBUG + +/* Debug callbacks need the same calling convention as OpenGL functions. + */ +#if defined(_WIN32) && !defined(_WIN32_WCE) && !defined(__SCITECH_SNAP__) + /* Win32 but not WinCE */ +# define APIENTRY __stdcall +#else +# define APIENTRY +#endif + + +static void APIENTRY gpu_debug_proc(GLenum UNUSED(source), GLenum UNUSED(type), GLuint UNUSED(id), + GLenum UNUSED(severity), GLsizei UNUSED(length), + const GLchar *message, GLvoid *UNUSED(userParm)) +{ + fprintf(stderr, "GL: %s\n", message); +} + + +#ifndef GLEW_ES_ONLY +static void APIENTRY gpu_debug_proc_amd(GLuint UNUSED(id), GLenum UNUSED(category), + GLenum UNUSED(severity), GLsizei UNUSED(length), + const GLchar *message, GLvoid *UNUSED(userParm)) +{ + fprintf(stderr, "GL: %s\n", message); +} +#endif + + +#undef APIENTRY + +void gpu_debug_init(void) +{ + const char success[] = "Successfully hooked OpenGL debug callback."; + +#if !defined(WITH_GLEW_ES) && !defined(GLEW_ES_ONLY) + if (GLEW_VERSION_4_3) { + glDebugMessageCallback(gpu_debug_proc, mxGetCurrentContext()); + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE); + GPU_STRING_MARKER(sizeof(success), success); + return; + } +#endif + + if (GLEW_KHR_debug) { +#ifndef GLEW_NO_ES + if (MX_profile_es20) + { + glDebugMessageCallbackKHR(gpu_debug_proc, mxGetCurrentContext()); + glDebugMessageControlKHR(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE); + GPU_STRING_MARKER(sizeof(success), success); + } + else +#endif + { +#ifndef GLEW_ES_ONLY + glDebugMessageCallback(gpu_debug_proc, mxGetCurrentContext()); + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE); + GPU_STRING_MARKER(sizeof(success), success); +#endif + } + + return; + } + +#ifndef GLEW_ES_ONLY + if (GLEW_ARB_debug_output) { + glDebugMessageCallbackARB(gpu_debug_proc, mxGetCurrentContext()); + glDebugMessageControlARB(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE); + GPU_STRING_MARKER(sizeof(success), success); + + return; + } + + if (GLEW_AMD_debug_output) { + glDebugMessageCallbackAMD(gpu_debug_proc_amd, mxGetCurrentContext()); + glDebugMessageEnableAMD(GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE); + GPU_STRING_MARKER(sizeof(success), success); + + return; + } +#endif + + fprintf(stderr, "Failed to hook OpenGL debug callback.\n"); + + return; +} + + +void gpu_debug_exit(void) +{ +#ifndef WITH_GLEW_ES +#ifndef GLEW_ES_ONLY + if (GLEW_VERSION_4_3) { + glDebugMessageCallback(NULL, NULL); + + return; + } +#endif +#endif + + if (GLEW_KHR_debug) { +#ifndef GLEW_NO_ES + if (MX_profile_es20) + { + glDebugMessageCallbackKHR(NULL, NULL); + } + else +#endif + { +#ifndef GLEW_ES_ONLY + glDebugMessageCallback(NULL, NULL); +#endif + } + + return; + } + +#ifndef GLEW_ES_ONLY + if (GLEW_ARB_debug_output) { + glDebugMessageCallbackARB(NULL, NULL); + + return; + } + + if (GLEW_AMD_debug_output) { + glDebugMessageCallbackAMD(NULL, NULL); + + return; + } +#endif + + return; +} + +void gpu_string_marker(size_t length, const char *buf) +{ +#ifndef WITH_GLEW_ES +#ifndef GLEW_ES_ONLY + if (GLEW_VERSION_4_3) { + glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, 0, GL_DEBUG_SEVERITY_NOTIFICATION, length, buf); + + return; + } +#endif +#endif + + if (GLEW_KHR_debug) { +#ifndef GLEW_NO_ES + if (MX_profile_es20) + { + glDebugMessageInsertKHR(GL_DEBUG_SOURCE_APPLICATION_KHR, GL_DEBUG_TYPE_MARKER_KHR, 0, GL_DEBUG_SEVERITY_NOTIFICATION_KHR, length, buf); + } + else +#endif + { +#ifndef GLEW_ES_ONLY + glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION, GL_DEBUG_TYPE_MARKER, 0, GL_DEBUG_SEVERITY_NOTIFICATION, length, buf); +#endif + } + + return; + } + +#ifndef GLEW_ES_ONLY + if (GLEW_ARB_debug_output) { + glDebugMessageInsertARB(GL_DEBUG_SOURCE_APPLICATION_ARB, GL_DEBUG_TYPE_OTHER_ARB, 0, GL_DEBUG_SEVERITY_LOW_ARB, length, buf); + + return; + } + + if (GLEW_AMD_debug_output) { + glDebugMessageInsertAMD(GL_DEBUG_CATEGORY_APPLICATION_AMD, GL_DEBUG_SEVERITY_LOW_AMD, 0, length, buf); + + return; + } + + if (GLEW_GREMEDY_string_marker) { + glStringMarkerGREMEDY(length, buf); + + return; + } +#endif + + return; +} + +#endif /* WITH_GPU_DEBUG */ + +void GPU_print_error_debug(const char *str) +{ + if (G.debug & G_DEBUG) + fprintf(stderr, "GPU: %s\n", str); +} + + +void gpu_assert_no_gl_errors(const char* file, int line, const char* str) +{ + if (G.debug) { + GLboolean gl_ok = gpu_report_gl_errors(file, line, str); + + BLI_assert(gl_ok); + } +} + + +static void gpu_state_print_fl_ex(const char *name, GLenum type) +{ + const unsigned char err_mark[4] = {0xff, 0xff, 0xff, 0xff}; + + float value[32]; + int a; + + memset(value, 0xff, sizeof(value)); + glGetFloatv(type, value); + + if (glGetError() == GL_NO_ERROR) { + printf("%s: ", name); + for (a = 0; a < 32; a++) { + if (memcmp(&value[a], err_mark, sizeof(value[a])) == 0) { + break; + } + printf("%.2f ", value[a]); + } + printf("\n"); + } +} + +#define gpu_state_print_fl(val) gpu_state_print_fl_ex(#val, val) + +void GPU_state_print(void) +{ + GPU_ASSERT_NO_GL_ERRORS("GPU_state_print"); /* clear any errors */ + + gpu_state_print_fl(GL_ACCUM_ALPHA_BITS); + gpu_state_print_fl(GL_ACCUM_BLUE_BITS); + gpu_state_print_fl(GL_ACCUM_CLEAR_VALUE); + gpu_state_print_fl(GL_ACCUM_GREEN_BITS); + gpu_state_print_fl(GL_ACCUM_RED_BITS); + gpu_state_print_fl(GL_ACTIVE_TEXTURE); + gpu_state_print_fl(GL_ALIASED_LINE_WIDTH_RANGE); + gpu_state_print_fl(GL_ALIASED_POINT_SIZE_RANGE); + gpu_state_print_fl(GL_ALPHA_BIAS); + gpu_state_print_fl(GL_ALPHA_BITS); + gpu_state_print_fl(GL_ALPHA_SCALE); + gpu_state_print_fl(GL_ALPHA_TEST); + gpu_state_print_fl(GL_ALPHA_TEST_FUNC); + gpu_state_print_fl(GL_ALPHA_TEST_REF); + gpu_state_print_fl(GL_ARRAY_BUFFER_BINDING); + gpu_state_print_fl(GL_ATTRIB_STACK_DEPTH); + gpu_state_print_fl(GL_AUTO_NORMAL); + gpu_state_print_fl(GL_AUX_BUFFERS); + gpu_state_print_fl(GL_BLEND); + gpu_state_print_fl(GL_BLEND_COLOR); + gpu_state_print_fl(GL_BLEND_DST_ALPHA); + gpu_state_print_fl(GL_BLEND_DST_RGB); + gpu_state_print_fl(GL_BLEND_EQUATION_ALPHA); + gpu_state_print_fl(GL_BLEND_EQUATION_RGB); + gpu_state_print_fl(GL_BLEND_SRC_ALPHA); + gpu_state_print_fl(GL_BLEND_SRC_RGB); + gpu_state_print_fl(GL_BLUE_BIAS); + gpu_state_print_fl(GL_BLUE_BITS); + gpu_state_print_fl(GL_BLUE_SCALE); + gpu_state_print_fl(GL_CLIENT_ACTIVE_TEXTURE); + gpu_state_print_fl(GL_CLIENT_ATTRIB_STACK_DEPTH); + gpu_state_print_fl(GL_CLIP_PLANE0); + gpu_state_print_fl(GL_COLOR_ARRAY); + gpu_state_print_fl(GL_COLOR_ARRAY_BUFFER_BINDING); + gpu_state_print_fl(GL_COLOR_ARRAY_SIZE); + gpu_state_print_fl(GL_COLOR_ARRAY_STRIDE); + gpu_state_print_fl(GL_COLOR_ARRAY_TYPE); + gpu_state_print_fl(GL_COLOR_CLEAR_VALUE); + gpu_state_print_fl(GL_COLOR_LOGIC_OP); + gpu_state_print_fl(GL_COLOR_MATERIAL); + gpu_state_print_fl(GL_COLOR_MATERIAL_FACE); + gpu_state_print_fl(GL_COLOR_MATERIAL_PARAMETER); + gpu_state_print_fl(GL_COLOR_MATRIX); + gpu_state_print_fl(GL_COLOR_MATRIX_STACK_DEPTH); + gpu_state_print_fl(GL_COLOR_SUM); + gpu_state_print_fl(GL_COLOR_TABLE); + gpu_state_print_fl(GL_COLOR_WRITEMASK); + gpu_state_print_fl(GL_COMPRESSED_TEXTURE_FORMATS); + gpu_state_print_fl(GL_CONVOLUTION_1D); + gpu_state_print_fl(GL_CONVOLUTION_2D); + gpu_state_print_fl(GL_CULL_FACE); + gpu_state_print_fl(GL_CULL_FACE_MODE); + gpu_state_print_fl(GL_CURRENT_COLOR); + gpu_state_print_fl(GL_CURRENT_FOG_COORD); + gpu_state_print_fl(GL_CURRENT_INDEX); + gpu_state_print_fl(GL_CURRENT_NORMAL); + gpu_state_print_fl(GL_CURRENT_PROGRAM); + gpu_state_print_fl(GL_CURRENT_RASTER_COLOR); + gpu_state_print_fl(GL_CURRENT_RASTER_DISTANCE); + gpu_state_print_fl(GL_CURRENT_RASTER_INDEX); + gpu_state_print_fl(GL_CURRENT_RASTER_POSITION); + gpu_state_print_fl(GL_CURRENT_RASTER_POSITION_VALID); + gpu_state_print_fl(GL_CURRENT_RASTER_SECONDARY_COLOR); + gpu_state_print_fl(GL_CURRENT_RASTER_TEXTURE_COORDS); + gpu_state_print_fl(GL_CURRENT_SECONDARY_COLOR); + gpu_state_print_fl(GL_CURRENT_TEXTURE_COORDS); + gpu_state_print_fl(GL_DEPTH_BIAS); + gpu_state_print_fl(GL_DEPTH_BITS); + gpu_state_print_fl(GL_DEPTH_CLEAR_VALUE); + gpu_state_print_fl(GL_DEPTH_FUNC); + gpu_state_print_fl(GL_DEPTH_RANGE); + gpu_state_print_fl(GL_DEPTH_SCALE); + gpu_state_print_fl(GL_DEPTH_TEST); + gpu_state_print_fl(GL_DEPTH_WRITEMASK); + gpu_state_print_fl(GL_DITHER); + gpu_state_print_fl(GL_DOUBLEBUFFER); + gpu_state_print_fl(GL_DRAW_BUFFER); + gpu_state_print_fl(GL_DRAW_BUFFER0); + gpu_state_print_fl(GL_EDGE_FLAG); + gpu_state_print_fl(GL_EDGE_FLAG_ARRAY); + gpu_state_print_fl(GL_EDGE_FLAG_ARRAY_BUFFER_BINDING); + gpu_state_print_fl(GL_EDGE_FLAG_ARRAY_STRIDE); + gpu_state_print_fl(GL_ELEMENT_ARRAY_BUFFER_BINDING); + gpu_state_print_fl(GL_FEEDBACK_BUFFER_SIZE); + gpu_state_print_fl(GL_FEEDBACK_BUFFER_TYPE); + gpu_state_print_fl(GL_FOG); + gpu_state_print_fl(GL_FOG_COLOR); + gpu_state_print_fl(GL_FOG_COORD_ARRAY); + gpu_state_print_fl(GL_FOG_COORD_ARRAY_BUFFER_BINDING); + gpu_state_print_fl(GL_FOG_COORD_ARRAY_STRIDE); + gpu_state_print_fl(GL_FOG_COORD_ARRAY_TYPE); + gpu_state_print_fl(GL_FOG_COORD_SRC); + gpu_state_print_fl(GL_FOG_DENSITY); + gpu_state_print_fl(GL_FOG_END); + gpu_state_print_fl(GL_FOG_HINT); + gpu_state_print_fl(GL_FOG_INDEX); + gpu_state_print_fl(GL_FOG_MODE); + gpu_state_print_fl(GL_FOG_START); + gpu_state_print_fl(GL_FRAGMENT_PROGRAM_ARB); + gpu_state_print_fl(GL_FRAGMENT_SHADER_DERIVATIVE_HINT); + gpu_state_print_fl(GL_FRONT_FACE); + gpu_state_print_fl(GL_GENERATE_MIPMAP_HINT); + gpu_state_print_fl(GL_GREEN_BIAS); + gpu_state_print_fl(GL_GREEN_BITS); + gpu_state_print_fl(GL_GREEN_SCALE); + gpu_state_print_fl(GL_HISTOGRAM); + gpu_state_print_fl(GL_INDEX_ARRAY); + gpu_state_print_fl(GL_INDEX_ARRAY_BUFFER_BINDING); + gpu_state_print_fl(GL_INDEX_ARRAY_STRIDE); + gpu_state_print_fl(GL_INDEX_ARRAY_TYPE); + gpu_state_print_fl(GL_INDEX_BITS); + gpu_state_print_fl(GL_INDEX_CLEAR_VALUE); + gpu_state_print_fl(GL_INDEX_LOGIC_OP); + gpu_state_print_fl(GL_INDEX_MODE); + gpu_state_print_fl(GL_INDEX_OFFSET); + gpu_state_print_fl(GL_INDEX_SHIFT); + gpu_state_print_fl(GL_INDEX_WRITEMASK); + gpu_state_print_fl(GL_LIGHT0); + gpu_state_print_fl(GL_LIGHT1); + gpu_state_print_fl(GL_LIGHT2); + gpu_state_print_fl(GL_LIGHT3); + gpu_state_print_fl(GL_LIGHT4); + gpu_state_print_fl(GL_LIGHT5); + gpu_state_print_fl(GL_LIGHT6); + gpu_state_print_fl(GL_LIGHT7); + gpu_state_print_fl(GL_LIGHTING); + gpu_state_print_fl(GL_LIGHT_MODEL_AMBIENT); + gpu_state_print_fl(GL_LIGHT_MODEL_COLOR_CONTROL); + gpu_state_print_fl(GL_LIGHT_MODEL_LOCAL_VIEWER); + gpu_state_print_fl(GL_LIGHT_MODEL_TWO_SIDE); + gpu_state_print_fl(GL_LINE_SMOOTH); + gpu_state_print_fl(GL_LINE_SMOOTH_HINT); + gpu_state_print_fl(GL_LINE_STIPPLE); + gpu_state_print_fl(GL_LINE_STIPPLE_PATTERN); + gpu_state_print_fl(GL_LINE_STIPPLE_REPEAT); + gpu_state_print_fl(GL_LINE_WIDTH); + gpu_state_print_fl(GL_LINE_WIDTH_GRANULARITY); + gpu_state_print_fl(GL_LINE_WIDTH_RANGE); + gpu_state_print_fl(GL_LIST_BASE); + gpu_state_print_fl(GL_LIST_INDEX); + gpu_state_print_fl(GL_LIST_MODE); + gpu_state_print_fl(GL_LOGIC_OP); + gpu_state_print_fl(GL_LOGIC_OP_MODE); + gpu_state_print_fl(GL_MAP1_COLOR_4); + gpu_state_print_fl(GL_MAP1_GRID_DOMAIN); + gpu_state_print_fl(GL_MAP1_GRID_SEGMENTS); + gpu_state_print_fl(GL_MAP1_INDEX); + gpu_state_print_fl(GL_MAP1_NORMAL); + gpu_state_print_fl(GL_MAP1_TEXTURE_COORD_1); + gpu_state_print_fl(GL_MAP1_TEXTURE_COORD_2); + gpu_state_print_fl(GL_MAP1_TEXTURE_COORD_3); + gpu_state_print_fl(GL_MAP1_TEXTURE_COORD_4); + gpu_state_print_fl(GL_MAP1_VERTEX_3); + gpu_state_print_fl(GL_MAP1_VERTEX_4); + gpu_state_print_fl(GL_MAP2_COLOR_4); + gpu_state_print_fl(GL_MAP2_GRID_DOMAIN); + gpu_state_print_fl(GL_MAP2_GRID_SEGMENTS); + gpu_state_print_fl(GL_MAP2_INDEX); + gpu_state_print_fl(GL_MAP2_NORMAL); + gpu_state_print_fl(GL_MAP2_TEXTURE_COORD_1); + gpu_state_print_fl(GL_MAP2_TEXTURE_COORD_2); + gpu_state_print_fl(GL_MAP2_TEXTURE_COORD_3); + gpu_state_print_fl(GL_MAP2_TEXTURE_COORD_4); + gpu_state_print_fl(GL_MAP2_VERTEX_3); + gpu_state_print_fl(GL_MAP2_VERTEX_4); + gpu_state_print_fl(GL_MAP_COLOR); + gpu_state_print_fl(GL_MAP_STENCIL); + gpu_state_print_fl(GL_MATRIX_MODE); + gpu_state_print_fl(GL_MAX_3D_TEXTURE_SIZE); + gpu_state_print_fl(GL_MAX_ATTRIB_STACK_DEPTH); + gpu_state_print_fl(GL_MAX_CLIENT_ATTRIB_STACK_DEPTH); + gpu_state_print_fl(GL_MAX_CLIP_PLANES); + gpu_state_print_fl(GL_MAX_COLOR_MATRIX_STACK_DEPTH); + gpu_state_print_fl(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS); + gpu_state_print_fl(GL_MAX_CUBE_MAP_TEXTURE_SIZE); + gpu_state_print_fl(GL_MAX_DRAW_BUFFERS); + gpu_state_print_fl(GL_MAX_ELEMENTS_INDICES); + gpu_state_print_fl(GL_MAX_ELEMENTS_VERTICES); + gpu_state_print_fl(GL_MAX_EVAL_ORDER); + gpu_state_print_fl(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS); + gpu_state_print_fl(GL_MAX_LIGHTS); + gpu_state_print_fl(GL_MAX_LIST_NESTING); + gpu_state_print_fl(GL_MAX_MODELVIEW_STACK_DEPTH); + gpu_state_print_fl(GL_MAX_NAME_STACK_DEPTH); + gpu_state_print_fl(GL_MAX_PIXEL_MAP_TABLE); + gpu_state_print_fl(GL_MAX_PROJECTION_STACK_DEPTH); + gpu_state_print_fl(GL_MAX_TEXTURE_COORDS); + gpu_state_print_fl(GL_MAX_TEXTURE_IMAGE_UNITS); + gpu_state_print_fl(GL_MAX_TEXTURE_LOD_BIAS); + gpu_state_print_fl(GL_MAX_TEXTURE_SIZE); + gpu_state_print_fl(GL_MAX_TEXTURE_STACK_DEPTH); + gpu_state_print_fl(GL_MAX_TEXTURE_UNITS); + gpu_state_print_fl(GL_MAX_VARYING_FLOATS); + gpu_state_print_fl(GL_MAX_VERTEX_ATTRIBS); + gpu_state_print_fl(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS); + gpu_state_print_fl(GL_MAX_VERTEX_UNIFORM_COMPONENTS); + gpu_state_print_fl(GL_MAX_VIEWPORT_DIMS); + gpu_state_print_fl(GL_MINMAX); + gpu_state_print_fl(GL_MODELVIEW_MATRIX); + gpu_state_print_fl(GL_MODELVIEW_STACK_DEPTH); + gpu_state_print_fl(GL_MULTISAMPLE); + gpu_state_print_fl(GL_MULTISAMPLE_ARB); + gpu_state_print_fl(GL_NAME_STACK_DEPTH); + gpu_state_print_fl(GL_NORMALIZE); + gpu_state_print_fl(GL_NORMAL_ARRAY); + gpu_state_print_fl(GL_NORMAL_ARRAY_BUFFER_BINDING); + gpu_state_print_fl(GL_NORMAL_ARRAY_STRIDE); + gpu_state_print_fl(GL_NORMAL_ARRAY_TYPE); + gpu_state_print_fl(GL_NUM_COMPRESSED_TEXTURE_FORMATS); + gpu_state_print_fl(GL_PACK_ALIGNMENT); + gpu_state_print_fl(GL_PACK_IMAGE_HEIGHT); + gpu_state_print_fl(GL_PACK_LSB_FIRST); + gpu_state_print_fl(GL_PACK_ROW_LENGTH); + gpu_state_print_fl(GL_PACK_SKIP_IMAGES); + gpu_state_print_fl(GL_PACK_SKIP_PIXELS); + gpu_state_print_fl(GL_PACK_SKIP_ROWS); + gpu_state_print_fl(GL_PACK_SWAP_BYTES); + gpu_state_print_fl(GL_PERSPECTIVE_CORRECTION_HINT); + gpu_state_print_fl(GL_PIXEL_MAP_A_TO_A_SIZE); + gpu_state_print_fl(GL_PIXEL_MAP_B_TO_B_SIZE); + gpu_state_print_fl(GL_PIXEL_MAP_G_TO_G_SIZE); + gpu_state_print_fl(GL_PIXEL_MAP_I_TO_A_SIZE); + gpu_state_print_fl(GL_PIXEL_MAP_I_TO_B_SIZE); + gpu_state_print_fl(GL_PIXEL_MAP_I_TO_G_SIZE); + gpu_state_print_fl(GL_PIXEL_MAP_I_TO_I_SIZE); + gpu_state_print_fl(GL_PIXEL_MAP_I_TO_R_SIZE); + gpu_state_print_fl(GL_PIXEL_MAP_R_TO_R_SIZE); + gpu_state_print_fl(GL_PIXEL_MAP_S_TO_S_SIZE); + gpu_state_print_fl(GL_PIXEL_PACK_BUFFER_BINDING); + gpu_state_print_fl(GL_PIXEL_UNPACK_BUFFER_BINDING); + gpu_state_print_fl(GL_POINT_DISTANCE_ATTENUATION); + gpu_state_print_fl(GL_POINT_FADE_THRESHOLD_SIZE); + gpu_state_print_fl(GL_POINT_SIZE); + gpu_state_print_fl(GL_POINT_SIZE_GRANULARITY); + gpu_state_print_fl(GL_POINT_SIZE_MAX); + gpu_state_print_fl(GL_POINT_SIZE_MIN); + gpu_state_print_fl(GL_POINT_SIZE_RANGE); + gpu_state_print_fl(GL_POINT_SMOOTH); + gpu_state_print_fl(GL_POINT_SMOOTH_HINT); + gpu_state_print_fl(GL_POINT_SPRITE); + gpu_state_print_fl(GL_POLYGON_MODE); + gpu_state_print_fl(GL_POLYGON_OFFSET_FACTOR); + gpu_state_print_fl(GL_POLYGON_OFFSET_FILL); + gpu_state_print_fl(GL_POLYGON_OFFSET_LINE); + gpu_state_print_fl(GL_POLYGON_OFFSET_POINT); + gpu_state_print_fl(GL_POLYGON_OFFSET_UNITS); + gpu_state_print_fl(GL_POLYGON_SMOOTH); + gpu_state_print_fl(GL_POLYGON_SMOOTH_HINT); + gpu_state_print_fl(GL_POLYGON_STIPPLE); + gpu_state_print_fl(GL_POST_COLOR_MATRIX_ALPHA_BIAS); + gpu_state_print_fl(GL_POST_COLOR_MATRIX_ALPHA_SCALE); + gpu_state_print_fl(GL_POST_COLOR_MATRIX_BLUE_BIAS); + gpu_state_print_fl(GL_POST_COLOR_MATRIX_BLUE_SCALE); + gpu_state_print_fl(GL_POST_COLOR_MATRIX_COLOR_TABLE); + gpu_state_print_fl(GL_POST_COLOR_MATRIX_GREEN_BIAS); + gpu_state_print_fl(GL_POST_COLOR_MATRIX_GREEN_SCALE); + gpu_state_print_fl(GL_POST_COLOR_MATRIX_RED_BIAS); + gpu_state_print_fl(GL_POST_COLOR_MATRIX_RED_SCALE); + gpu_state_print_fl(GL_POST_CONVOLUTION_ALPHA_BIAS); + gpu_state_print_fl(GL_POST_CONVOLUTION_ALPHA_SCALE); + gpu_state_print_fl(GL_POST_CONVOLUTION_BLUE_BIAS); + gpu_state_print_fl(GL_POST_CONVOLUTION_BLUE_SCALE); + gpu_state_print_fl(GL_POST_CONVOLUTION_COLOR_TABLE); + gpu_state_print_fl(GL_POST_CONVOLUTION_GREEN_BIAS); + gpu_state_print_fl(GL_POST_CONVOLUTION_GREEN_SCALE); + gpu_state_print_fl(GL_POST_CONVOLUTION_RED_BIAS); + gpu_state_print_fl(GL_POST_CONVOLUTION_RED_SCALE); + gpu_state_print_fl(GL_PROJECTION_MATRIX); + gpu_state_print_fl(GL_PROJECTION_STACK_DEPTH); + gpu_state_print_fl(GL_READ_BUFFER); + gpu_state_print_fl(GL_RED_BIAS); + gpu_state_print_fl(GL_RED_BITS); + gpu_state_print_fl(GL_RED_SCALE); + gpu_state_print_fl(GL_RENDER_MODE); + gpu_state_print_fl(GL_RESCALE_NORMAL); + gpu_state_print_fl(GL_RGBA_MODE); + gpu_state_print_fl(GL_SAMPLES); + gpu_state_print_fl(GL_SAMPLE_BUFFERS); + gpu_state_print_fl(GL_SAMPLE_COVERAGE_INVERT); + gpu_state_print_fl(GL_SAMPLE_COVERAGE_VALUE); + gpu_state_print_fl(GL_SCISSOR_BOX); + gpu_state_print_fl(GL_SCISSOR_TEST); + gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY); + gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING); + gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY_SIZE); + gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY_STRIDE); + gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY_TYPE); + gpu_state_print_fl(GL_SELECTION_BUFFER_SIZE); + gpu_state_print_fl(GL_SEPARABLE_2D); + gpu_state_print_fl(GL_SHADE_MODEL); + gpu_state_print_fl(GL_SMOOTH_LINE_WIDTH_GRANULARITY); + gpu_state_print_fl(GL_SMOOTH_LINE_WIDTH_RANGE); + gpu_state_print_fl(GL_SMOOTH_POINT_SIZE_GRANULARITY); + gpu_state_print_fl(GL_SMOOTH_POINT_SIZE_RANGE); + gpu_state_print_fl(GL_STENCIL_BACK_FAIL); + gpu_state_print_fl(GL_STENCIL_BACK_FUNC); + gpu_state_print_fl(GL_STENCIL_BACK_PASS_DEPTH_FAIL); + gpu_state_print_fl(GL_STENCIL_BACK_PASS_DEPTH_PASS); + gpu_state_print_fl(GL_STENCIL_BACK_REF); + gpu_state_print_fl(GL_STENCIL_BACK_VALUE_MASK); + gpu_state_print_fl(GL_STENCIL_BACK_WRITEMASK); + gpu_state_print_fl(GL_STENCIL_BITS); + gpu_state_print_fl(GL_STENCIL_CLEAR_VALUE); + gpu_state_print_fl(GL_STENCIL_FAIL); + gpu_state_print_fl(GL_STENCIL_FUNC); + gpu_state_print_fl(GL_STENCIL_PASS_DEPTH_FAIL); + gpu_state_print_fl(GL_STENCIL_PASS_DEPTH_PASS); + gpu_state_print_fl(GL_STENCIL_REF); + gpu_state_print_fl(GL_STENCIL_TEST); + gpu_state_print_fl(GL_STENCIL_VALUE_MASK); + gpu_state_print_fl(GL_STENCIL_WRITEMASK); + gpu_state_print_fl(GL_STEREO); + gpu_state_print_fl(GL_SUBPIXEL_BITS); + gpu_state_print_fl(GL_TEXTURE_1D); + gpu_state_print_fl(GL_TEXTURE_2D); + gpu_state_print_fl(GL_TEXTURE_3D); + gpu_state_print_fl(GL_TEXTURE_BINDING_1D); + gpu_state_print_fl(GL_TEXTURE_BINDING_2D); + gpu_state_print_fl(GL_TEXTURE_BINDING_3D); + gpu_state_print_fl(GL_TEXTURE_BINDING_CUBE_MAP); + gpu_state_print_fl(GL_TEXTURE_COMPRESSION_HINT); + gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY); + gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING); + gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY_SIZE); + gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY_STRIDE); + gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY_TYPE); + gpu_state_print_fl(GL_TEXTURE_CUBE_MAP); + gpu_state_print_fl(GL_TEXTURE_CUBE_MAP_ARB); + gpu_state_print_fl(GL_TEXTURE_GEN_Q); + gpu_state_print_fl(GL_TEXTURE_GEN_R); + gpu_state_print_fl(GL_TEXTURE_GEN_S); + gpu_state_print_fl(GL_TEXTURE_GEN_T); + gpu_state_print_fl(GL_TEXTURE_MATRIX); + gpu_state_print_fl(GL_TEXTURE_STACK_DEPTH); + gpu_state_print_fl(GL_TRANSPOSE_COLOR_MATRIX); + gpu_state_print_fl(GL_TRANSPOSE_MODELVIEW_MATRIX); + gpu_state_print_fl(GL_TRANSPOSE_PROJECTION_MATRIX); + gpu_state_print_fl(GL_TRANSPOSE_TEXTURE_MATRIX); + gpu_state_print_fl(GL_UNPACK_ALIGNMENT); + gpu_state_print_fl(GL_UNPACK_IMAGE_HEIGHT); + gpu_state_print_fl(GL_UNPACK_LSB_FIRST); + gpu_state_print_fl(GL_UNPACK_ROW_LENGTH); + gpu_state_print_fl(GL_UNPACK_SKIP_IMAGES); + gpu_state_print_fl(GL_UNPACK_SKIP_PIXELS); + gpu_state_print_fl(GL_UNPACK_SKIP_ROWS); + gpu_state_print_fl(GL_UNPACK_SWAP_BYTES); + gpu_state_print_fl(GL_VERTEX_ARRAY); + gpu_state_print_fl(GL_VERTEX_ARRAY_BUFFER_BINDING); + gpu_state_print_fl(GL_VERTEX_ARRAY_SIZE); + gpu_state_print_fl(GL_VERTEX_ARRAY_STRIDE); + gpu_state_print_fl(GL_VERTEX_ARRAY_TYPE); + gpu_state_print_fl(GL_VERTEX_PROGRAM_POINT_SIZE); + gpu_state_print_fl(GL_VERTEX_PROGRAM_TWO_SIDE); + gpu_state_print_fl(GL_VIEWPORT); + gpu_state_print_fl(GL_ZOOM_X); + gpu_state_print_fl(GL_ZOOM_Y); +} + +#undef gpu_state_print_fl diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c index 4a93fbac48e..7c047d9229b 100644 --- a/source/blender/gpu/intern/gpu_draw.c +++ b/source/blender/gpu/intern/gpu_draw.c @@ -39,6 +39,7 @@ #include #include "GPU_glew.h" +#include "GPU_debug.h" #include "BLI_blenlib.h" #include "BLI_linklist.h" @@ -796,12 +797,12 @@ bool GPU_upload_dxt_texture(ImBuf *ibuf) } if (format == 0) { - printf("Unable to find a suitable DXT compression, falling back to uncompressed\n"); + fprintf(stderr, "Unable to find a suitable DXT compression, falling back to uncompressed\n"); return false; } if (!is_power_of_2_resolution(width, height)) { - printf("Unable to load non-power-of-two DXT image resolution, falling back to uncompressed\n"); + fprintf(stderr, "Unable to load non-power-of-two DXT image resolution, falling back to uncompressed\n"); return false; } @@ -2013,390 +2014,3 @@ void GPU_state_init(void) gpu_multisample(false); } -#ifdef DEBUG -/* debugging aid */ -static void gpu_state_print_fl_ex(const char *name, GLenum type) -{ - const unsigned char err_mark[4] = {0xff, 0xff, 0xff, 0xff}; - - float value[32]; - int a; - - memset(value, 0xff, sizeof(value)); - glGetFloatv(type, value); - - printf("%s: ", name); - for (a = 0; a < 32; a++) { - if (memcmp(&value[a], err_mark, sizeof(value[a])) == 0) { - break; - } - printf("%.2f ", value[a]); - } - printf("\n"); -} - -#define gpu_state_print_fl(val) gpu_state_print_fl_ex(#val, val) - -void GPU_state_print(void) -{ - gpu_state_print_fl(GL_ACCUM_ALPHA_BITS); - gpu_state_print_fl(GL_ACCUM_BLUE_BITS); - gpu_state_print_fl(GL_ACCUM_CLEAR_VALUE); - gpu_state_print_fl(GL_ACCUM_GREEN_BITS); - gpu_state_print_fl(GL_ACCUM_RED_BITS); - gpu_state_print_fl(GL_ACTIVE_TEXTURE); - gpu_state_print_fl(GL_ALIASED_LINE_WIDTH_RANGE); - gpu_state_print_fl(GL_ALIASED_POINT_SIZE_RANGE); - gpu_state_print_fl(GL_ALPHA_BIAS); - gpu_state_print_fl(GL_ALPHA_BITS); - gpu_state_print_fl(GL_ALPHA_SCALE); - gpu_state_print_fl(GL_ALPHA_TEST); - gpu_state_print_fl(GL_ALPHA_TEST_FUNC); - gpu_state_print_fl(GL_ALPHA_TEST_REF); - gpu_state_print_fl(GL_ARRAY_BUFFER_BINDING); - gpu_state_print_fl(GL_ATTRIB_STACK_DEPTH); - gpu_state_print_fl(GL_AUTO_NORMAL); - gpu_state_print_fl(GL_AUX_BUFFERS); - gpu_state_print_fl(GL_BLEND); - gpu_state_print_fl(GL_BLEND_COLOR); - gpu_state_print_fl(GL_BLEND_DST_ALPHA); - gpu_state_print_fl(GL_BLEND_DST_RGB); - gpu_state_print_fl(GL_BLEND_EQUATION_ALPHA); - gpu_state_print_fl(GL_BLEND_EQUATION_RGB); - gpu_state_print_fl(GL_BLEND_SRC_ALPHA); - gpu_state_print_fl(GL_BLEND_SRC_RGB); - gpu_state_print_fl(GL_BLUE_BIAS); - gpu_state_print_fl(GL_BLUE_BITS); - gpu_state_print_fl(GL_BLUE_SCALE); - gpu_state_print_fl(GL_CLIENT_ACTIVE_TEXTURE); - gpu_state_print_fl(GL_CLIENT_ATTRIB_STACK_DEPTH); - gpu_state_print_fl(GL_CLIP_PLANE0); - gpu_state_print_fl(GL_COLOR_ARRAY); - gpu_state_print_fl(GL_COLOR_ARRAY_BUFFER_BINDING); - gpu_state_print_fl(GL_COLOR_ARRAY_SIZE); - gpu_state_print_fl(GL_COLOR_ARRAY_STRIDE); - gpu_state_print_fl(GL_COLOR_ARRAY_TYPE); - gpu_state_print_fl(GL_COLOR_CLEAR_VALUE); - gpu_state_print_fl(GL_COLOR_LOGIC_OP); - gpu_state_print_fl(GL_COLOR_MATERIAL); - gpu_state_print_fl(GL_COLOR_MATERIAL_FACE); - gpu_state_print_fl(GL_COLOR_MATERIAL_PARAMETER); - gpu_state_print_fl(GL_COLOR_MATRIX); - gpu_state_print_fl(GL_COLOR_MATRIX_STACK_DEPTH); - gpu_state_print_fl(GL_COLOR_SUM); - gpu_state_print_fl(GL_COLOR_TABLE); - gpu_state_print_fl(GL_COLOR_WRITEMASK); - gpu_state_print_fl(GL_COMPRESSED_TEXTURE_FORMATS); - gpu_state_print_fl(GL_CONVOLUTION_1D); - gpu_state_print_fl(GL_CONVOLUTION_2D); - gpu_state_print_fl(GL_CULL_FACE); - gpu_state_print_fl(GL_CULL_FACE_MODE); - gpu_state_print_fl(GL_CURRENT_COLOR); - gpu_state_print_fl(GL_CURRENT_FOG_COORD); - gpu_state_print_fl(GL_CURRENT_INDEX); - gpu_state_print_fl(GL_CURRENT_NORMAL); - gpu_state_print_fl(GL_CURRENT_PROGRAM); - gpu_state_print_fl(GL_CURRENT_RASTER_COLOR); - gpu_state_print_fl(GL_CURRENT_RASTER_DISTANCE); - gpu_state_print_fl(GL_CURRENT_RASTER_INDEX); - gpu_state_print_fl(GL_CURRENT_RASTER_POSITION); - gpu_state_print_fl(GL_CURRENT_RASTER_POSITION_VALID); - gpu_state_print_fl(GL_CURRENT_RASTER_SECONDARY_COLOR); - gpu_state_print_fl(GL_CURRENT_RASTER_TEXTURE_COORDS); - gpu_state_print_fl(GL_CURRENT_SECONDARY_COLOR); - gpu_state_print_fl(GL_CURRENT_TEXTURE_COORDS); - gpu_state_print_fl(GL_DEPTH_BIAS); - gpu_state_print_fl(GL_DEPTH_BITS); - gpu_state_print_fl(GL_DEPTH_CLEAR_VALUE); - gpu_state_print_fl(GL_DEPTH_FUNC); - gpu_state_print_fl(GL_DEPTH_RANGE); - gpu_state_print_fl(GL_DEPTH_SCALE); - gpu_state_print_fl(GL_DEPTH_TEST); - gpu_state_print_fl(GL_DEPTH_WRITEMASK); - gpu_state_print_fl(GL_DITHER); - gpu_state_print_fl(GL_DOUBLEBUFFER); - gpu_state_print_fl(GL_DRAW_BUFFER); - gpu_state_print_fl(GL_DRAW_BUFFER0); - gpu_state_print_fl(GL_EDGE_FLAG); - gpu_state_print_fl(GL_EDGE_FLAG_ARRAY); - gpu_state_print_fl(GL_EDGE_FLAG_ARRAY_BUFFER_BINDING); - gpu_state_print_fl(GL_EDGE_FLAG_ARRAY_STRIDE); - gpu_state_print_fl(GL_ELEMENT_ARRAY_BUFFER_BINDING); - gpu_state_print_fl(GL_FEEDBACK_BUFFER_SIZE); - gpu_state_print_fl(GL_FEEDBACK_BUFFER_TYPE); - gpu_state_print_fl(GL_FOG); - gpu_state_print_fl(GL_FOG_COLOR); - gpu_state_print_fl(GL_FOG_COORD_ARRAY); - gpu_state_print_fl(GL_FOG_COORD_ARRAY_BUFFER_BINDING); - gpu_state_print_fl(GL_FOG_COORD_ARRAY_STRIDE); - gpu_state_print_fl(GL_FOG_COORD_ARRAY_TYPE); - gpu_state_print_fl(GL_FOG_COORD_SRC); - gpu_state_print_fl(GL_FOG_DENSITY); - gpu_state_print_fl(GL_FOG_END); - gpu_state_print_fl(GL_FOG_HINT); - gpu_state_print_fl(GL_FOG_INDEX); - gpu_state_print_fl(GL_FOG_MODE); - gpu_state_print_fl(GL_FOG_START); - gpu_state_print_fl(GL_FRAGMENT_PROGRAM_ARB); - gpu_state_print_fl(GL_FRAGMENT_SHADER_DERIVATIVE_HINT); - gpu_state_print_fl(GL_FRONT_FACE); - gpu_state_print_fl(GL_GENERATE_MIPMAP_HINT); - gpu_state_print_fl(GL_GREEN_BIAS); - gpu_state_print_fl(GL_GREEN_BITS); - gpu_state_print_fl(GL_GREEN_SCALE); - gpu_state_print_fl(GL_HISTOGRAM); - gpu_state_print_fl(GL_INDEX_ARRAY); - gpu_state_print_fl(GL_INDEX_ARRAY_BUFFER_BINDING); - gpu_state_print_fl(GL_INDEX_ARRAY_STRIDE); - gpu_state_print_fl(GL_INDEX_ARRAY_TYPE); - gpu_state_print_fl(GL_INDEX_BITS); - gpu_state_print_fl(GL_INDEX_CLEAR_VALUE); - gpu_state_print_fl(GL_INDEX_LOGIC_OP); - gpu_state_print_fl(GL_INDEX_MODE); - gpu_state_print_fl(GL_INDEX_OFFSET); - gpu_state_print_fl(GL_INDEX_SHIFT); - gpu_state_print_fl(GL_INDEX_WRITEMASK); - gpu_state_print_fl(GL_LIGHT0); - gpu_state_print_fl(GL_LIGHT1); - gpu_state_print_fl(GL_LIGHT2); - gpu_state_print_fl(GL_LIGHT3); - gpu_state_print_fl(GL_LIGHT4); - gpu_state_print_fl(GL_LIGHT5); - gpu_state_print_fl(GL_LIGHT6); - gpu_state_print_fl(GL_LIGHT7); - gpu_state_print_fl(GL_LIGHTING); - gpu_state_print_fl(GL_LIGHT_MODEL_AMBIENT); - gpu_state_print_fl(GL_LIGHT_MODEL_COLOR_CONTROL); - gpu_state_print_fl(GL_LIGHT_MODEL_LOCAL_VIEWER); - gpu_state_print_fl(GL_LIGHT_MODEL_TWO_SIDE); - gpu_state_print_fl(GL_LINE_SMOOTH); - gpu_state_print_fl(GL_LINE_SMOOTH_HINT); - gpu_state_print_fl(GL_LINE_STIPPLE); - gpu_state_print_fl(GL_LINE_STIPPLE_PATTERN); - gpu_state_print_fl(GL_LINE_STIPPLE_REPEAT); - gpu_state_print_fl(GL_LINE_WIDTH); - gpu_state_print_fl(GL_LINE_WIDTH_GRANULARITY); - gpu_state_print_fl(GL_LINE_WIDTH_RANGE); - gpu_state_print_fl(GL_LIST_BASE); - gpu_state_print_fl(GL_LIST_INDEX); - gpu_state_print_fl(GL_LIST_MODE); - gpu_state_print_fl(GL_LOGIC_OP); - gpu_state_print_fl(GL_LOGIC_OP_MODE); - gpu_state_print_fl(GL_MAP1_COLOR_4); - gpu_state_print_fl(GL_MAP1_GRID_DOMAIN); - gpu_state_print_fl(GL_MAP1_GRID_SEGMENTS); - gpu_state_print_fl(GL_MAP1_INDEX); - gpu_state_print_fl(GL_MAP1_NORMAL); - gpu_state_print_fl(GL_MAP1_TEXTURE_COORD_1); - gpu_state_print_fl(GL_MAP1_TEXTURE_COORD_2); - gpu_state_print_fl(GL_MAP1_TEXTURE_COORD_3); - gpu_state_print_fl(GL_MAP1_TEXTURE_COORD_4); - gpu_state_print_fl(GL_MAP1_VERTEX_3); - gpu_state_print_fl(GL_MAP1_VERTEX_4); - gpu_state_print_fl(GL_MAP2_COLOR_4); - gpu_state_print_fl(GL_MAP2_GRID_DOMAIN); - gpu_state_print_fl(GL_MAP2_GRID_SEGMENTS); - gpu_state_print_fl(GL_MAP2_INDEX); - gpu_state_print_fl(GL_MAP2_NORMAL); - gpu_state_print_fl(GL_MAP2_TEXTURE_COORD_1); - gpu_state_print_fl(GL_MAP2_TEXTURE_COORD_2); - gpu_state_print_fl(GL_MAP2_TEXTURE_COORD_3); - gpu_state_print_fl(GL_MAP2_TEXTURE_COORD_4); - gpu_state_print_fl(GL_MAP2_VERTEX_3); - gpu_state_print_fl(GL_MAP2_VERTEX_4); - gpu_state_print_fl(GL_MAP_COLOR); - gpu_state_print_fl(GL_MAP_STENCIL); - gpu_state_print_fl(GL_MATRIX_MODE); - gpu_state_print_fl(GL_MAX_3D_TEXTURE_SIZE); - gpu_state_print_fl(GL_MAX_ATTRIB_STACK_DEPTH); - gpu_state_print_fl(GL_MAX_CLIENT_ATTRIB_STACK_DEPTH); - gpu_state_print_fl(GL_MAX_CLIP_PLANES); - gpu_state_print_fl(GL_MAX_COLOR_MATRIX_STACK_DEPTH); - gpu_state_print_fl(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS); - gpu_state_print_fl(GL_MAX_CUBE_MAP_TEXTURE_SIZE); - gpu_state_print_fl(GL_MAX_DRAW_BUFFERS); - gpu_state_print_fl(GL_MAX_ELEMENTS_INDICES); - gpu_state_print_fl(GL_MAX_ELEMENTS_VERTICES); - gpu_state_print_fl(GL_MAX_EVAL_ORDER); - gpu_state_print_fl(GL_MAX_FRAGMENT_UNIFORM_COMPONENTS); - gpu_state_print_fl(GL_MAX_LIGHTS); - gpu_state_print_fl(GL_MAX_LIST_NESTING); - gpu_state_print_fl(GL_MAX_MODELVIEW_STACK_DEPTH); - gpu_state_print_fl(GL_MAX_NAME_STACK_DEPTH); - gpu_state_print_fl(GL_MAX_PIXEL_MAP_TABLE); - gpu_state_print_fl(GL_MAX_PROJECTION_STACK_DEPTH); - gpu_state_print_fl(GL_MAX_TEXTURE_COORDS); - gpu_state_print_fl(GL_MAX_TEXTURE_IMAGE_UNITS); - gpu_state_print_fl(GL_MAX_TEXTURE_LOD_BIAS); - gpu_state_print_fl(GL_MAX_TEXTURE_SIZE); - gpu_state_print_fl(GL_MAX_TEXTURE_STACK_DEPTH); - gpu_state_print_fl(GL_MAX_TEXTURE_UNITS); - gpu_state_print_fl(GL_MAX_VARYING_FLOATS); - gpu_state_print_fl(GL_MAX_VERTEX_ATTRIBS); - gpu_state_print_fl(GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS); - gpu_state_print_fl(GL_MAX_VERTEX_UNIFORM_COMPONENTS); - gpu_state_print_fl(GL_MAX_VIEWPORT_DIMS); - gpu_state_print_fl(GL_MINMAX); - gpu_state_print_fl(GL_MODELVIEW_MATRIX); - gpu_state_print_fl(GL_MODELVIEW_STACK_DEPTH); - gpu_state_print_fl(GL_MULTISAMPLE); - gpu_state_print_fl(GL_MULTISAMPLE_ARB); - gpu_state_print_fl(GL_NAME_STACK_DEPTH); - gpu_state_print_fl(GL_NORMALIZE); - gpu_state_print_fl(GL_NORMAL_ARRAY); - gpu_state_print_fl(GL_NORMAL_ARRAY_BUFFER_BINDING); - gpu_state_print_fl(GL_NORMAL_ARRAY_STRIDE); - gpu_state_print_fl(GL_NORMAL_ARRAY_TYPE); - gpu_state_print_fl(GL_NUM_COMPRESSED_TEXTURE_FORMATS); - gpu_state_print_fl(GL_PACK_ALIGNMENT); - gpu_state_print_fl(GL_PACK_IMAGE_HEIGHT); - gpu_state_print_fl(GL_PACK_LSB_FIRST); - gpu_state_print_fl(GL_PACK_ROW_LENGTH); - gpu_state_print_fl(GL_PACK_SKIP_IMAGES); - gpu_state_print_fl(GL_PACK_SKIP_PIXELS); - gpu_state_print_fl(GL_PACK_SKIP_ROWS); - gpu_state_print_fl(GL_PACK_SWAP_BYTES); - gpu_state_print_fl(GL_PERSPECTIVE_CORRECTION_HINT); - gpu_state_print_fl(GL_PIXEL_MAP_A_TO_A_SIZE); - gpu_state_print_fl(GL_PIXEL_MAP_B_TO_B_SIZE); - gpu_state_print_fl(GL_PIXEL_MAP_G_TO_G_SIZE); - gpu_state_print_fl(GL_PIXEL_MAP_I_TO_A_SIZE); - gpu_state_print_fl(GL_PIXEL_MAP_I_TO_B_SIZE); - gpu_state_print_fl(GL_PIXEL_MAP_I_TO_G_SIZE); - gpu_state_print_fl(GL_PIXEL_MAP_I_TO_I_SIZE); - gpu_state_print_fl(GL_PIXEL_MAP_I_TO_R_SIZE); - gpu_state_print_fl(GL_PIXEL_MAP_R_TO_R_SIZE); - gpu_state_print_fl(GL_PIXEL_MAP_S_TO_S_SIZE); - gpu_state_print_fl(GL_PIXEL_PACK_BUFFER_BINDING); - gpu_state_print_fl(GL_PIXEL_UNPACK_BUFFER_BINDING); - gpu_state_print_fl(GL_POINT_DISTANCE_ATTENUATION); - gpu_state_print_fl(GL_POINT_FADE_THRESHOLD_SIZE); - gpu_state_print_fl(GL_POINT_SIZE); - gpu_state_print_fl(GL_POINT_SIZE_GRANULARITY); - gpu_state_print_fl(GL_POINT_SIZE_MAX); - gpu_state_print_fl(GL_POINT_SIZE_MIN); - gpu_state_print_fl(GL_POINT_SIZE_RANGE); - gpu_state_print_fl(GL_POINT_SMOOTH); - gpu_state_print_fl(GL_POINT_SMOOTH_HINT); - gpu_state_print_fl(GL_POINT_SPRITE); - gpu_state_print_fl(GL_POLYGON_MODE); - gpu_state_print_fl(GL_POLYGON_OFFSET_FACTOR); - gpu_state_print_fl(GL_POLYGON_OFFSET_FILL); - gpu_state_print_fl(GL_POLYGON_OFFSET_LINE); - gpu_state_print_fl(GL_POLYGON_OFFSET_POINT); - gpu_state_print_fl(GL_POLYGON_OFFSET_UNITS); - gpu_state_print_fl(GL_POLYGON_SMOOTH); - gpu_state_print_fl(GL_POLYGON_SMOOTH_HINT); - gpu_state_print_fl(GL_POLYGON_STIPPLE); - gpu_state_print_fl(GL_POST_COLOR_MATRIX_ALPHA_BIAS); - gpu_state_print_fl(GL_POST_COLOR_MATRIX_ALPHA_SCALE); - gpu_state_print_fl(GL_POST_COLOR_MATRIX_BLUE_BIAS); - gpu_state_print_fl(GL_POST_COLOR_MATRIX_BLUE_SCALE); - gpu_state_print_fl(GL_POST_COLOR_MATRIX_COLOR_TABLE); - gpu_state_print_fl(GL_POST_COLOR_MATRIX_GREEN_BIAS); - gpu_state_print_fl(GL_POST_COLOR_MATRIX_GREEN_SCALE); - gpu_state_print_fl(GL_POST_COLOR_MATRIX_RED_BIAS); - gpu_state_print_fl(GL_POST_COLOR_MATRIX_RED_SCALE); - gpu_state_print_fl(GL_POST_CONVOLUTION_ALPHA_BIAS); - gpu_state_print_fl(GL_POST_CONVOLUTION_ALPHA_SCALE); - gpu_state_print_fl(GL_POST_CONVOLUTION_BLUE_BIAS); - gpu_state_print_fl(GL_POST_CONVOLUTION_BLUE_SCALE); - gpu_state_print_fl(GL_POST_CONVOLUTION_COLOR_TABLE); - gpu_state_print_fl(GL_POST_CONVOLUTION_GREEN_BIAS); - gpu_state_print_fl(GL_POST_CONVOLUTION_GREEN_SCALE); - gpu_state_print_fl(GL_POST_CONVOLUTION_RED_BIAS); - gpu_state_print_fl(GL_POST_CONVOLUTION_RED_SCALE); - gpu_state_print_fl(GL_PROJECTION_MATRIX); - gpu_state_print_fl(GL_PROJECTION_STACK_DEPTH); - gpu_state_print_fl(GL_READ_BUFFER); - gpu_state_print_fl(GL_RED_BIAS); - gpu_state_print_fl(GL_RED_BITS); - gpu_state_print_fl(GL_RED_SCALE); - gpu_state_print_fl(GL_RENDER_MODE); - gpu_state_print_fl(GL_RESCALE_NORMAL); - gpu_state_print_fl(GL_RGBA_MODE); - gpu_state_print_fl(GL_SAMPLES); - gpu_state_print_fl(GL_SAMPLE_BUFFERS); - gpu_state_print_fl(GL_SAMPLE_COVERAGE_INVERT); - gpu_state_print_fl(GL_SAMPLE_COVERAGE_VALUE); - gpu_state_print_fl(GL_SCISSOR_BOX); - gpu_state_print_fl(GL_SCISSOR_TEST); - gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY); - gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY_BUFFER_BINDING); - gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY_SIZE); - gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY_STRIDE); - gpu_state_print_fl(GL_SECONDARY_COLOR_ARRAY_TYPE); - gpu_state_print_fl(GL_SELECTION_BUFFER_SIZE); - gpu_state_print_fl(GL_SEPARABLE_2D); - gpu_state_print_fl(GL_SHADE_MODEL); - gpu_state_print_fl(GL_SMOOTH_LINE_WIDTH_GRANULARITY); - gpu_state_print_fl(GL_SMOOTH_LINE_WIDTH_RANGE); - gpu_state_print_fl(GL_SMOOTH_POINT_SIZE_GRANULARITY); - gpu_state_print_fl(GL_SMOOTH_POINT_SIZE_RANGE); - gpu_state_print_fl(GL_STENCIL_BACK_FAIL); - gpu_state_print_fl(GL_STENCIL_BACK_FUNC); - gpu_state_print_fl(GL_STENCIL_BACK_PASS_DEPTH_FAIL); - gpu_state_print_fl(GL_STENCIL_BACK_PASS_DEPTH_PASS); - gpu_state_print_fl(GL_STENCIL_BACK_REF); - gpu_state_print_fl(GL_STENCIL_BACK_VALUE_MASK); - gpu_state_print_fl(GL_STENCIL_BACK_WRITEMASK); - gpu_state_print_fl(GL_STENCIL_BITS); - gpu_state_print_fl(GL_STENCIL_CLEAR_VALUE); - gpu_state_print_fl(GL_STENCIL_FAIL); - gpu_state_print_fl(GL_STENCIL_FUNC); - gpu_state_print_fl(GL_STENCIL_PASS_DEPTH_FAIL); - gpu_state_print_fl(GL_STENCIL_PASS_DEPTH_PASS); - gpu_state_print_fl(GL_STENCIL_REF); - gpu_state_print_fl(GL_STENCIL_TEST); - gpu_state_print_fl(GL_STENCIL_VALUE_MASK); - gpu_state_print_fl(GL_STENCIL_WRITEMASK); - gpu_state_print_fl(GL_STEREO); - gpu_state_print_fl(GL_SUBPIXEL_BITS); - gpu_state_print_fl(GL_TEXTURE_1D); - gpu_state_print_fl(GL_TEXTURE_2D); - gpu_state_print_fl(GL_TEXTURE_3D); - gpu_state_print_fl(GL_TEXTURE_BINDING_1D); - gpu_state_print_fl(GL_TEXTURE_BINDING_2D); - gpu_state_print_fl(GL_TEXTURE_BINDING_3D); - gpu_state_print_fl(GL_TEXTURE_BINDING_CUBE_MAP); - gpu_state_print_fl(GL_TEXTURE_COMPRESSION_HINT); - gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY); - gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY_BUFFER_BINDING); - gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY_SIZE); - gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY_STRIDE); - gpu_state_print_fl(GL_TEXTURE_COORD_ARRAY_TYPE); - gpu_state_print_fl(GL_TEXTURE_CUBE_MAP); - gpu_state_print_fl(GL_TEXTURE_CUBE_MAP_ARB); - gpu_state_print_fl(GL_TEXTURE_GEN_Q); - gpu_state_print_fl(GL_TEXTURE_GEN_R); - gpu_state_print_fl(GL_TEXTURE_GEN_S); - gpu_state_print_fl(GL_TEXTURE_GEN_T); - gpu_state_print_fl(GL_TEXTURE_MATRIX); - gpu_state_print_fl(GL_TEXTURE_STACK_DEPTH); - gpu_state_print_fl(GL_TRANSPOSE_COLOR_MATRIX); - gpu_state_print_fl(GL_TRANSPOSE_MODELVIEW_MATRIX); - gpu_state_print_fl(GL_TRANSPOSE_PROJECTION_MATRIX); - gpu_state_print_fl(GL_TRANSPOSE_TEXTURE_MATRIX); - gpu_state_print_fl(GL_UNPACK_ALIGNMENT); - gpu_state_print_fl(GL_UNPACK_IMAGE_HEIGHT); - gpu_state_print_fl(GL_UNPACK_LSB_FIRST); - gpu_state_print_fl(GL_UNPACK_ROW_LENGTH); - gpu_state_print_fl(GL_UNPACK_SKIP_IMAGES); - gpu_state_print_fl(GL_UNPACK_SKIP_PIXELS); - gpu_state_print_fl(GL_UNPACK_SKIP_ROWS); - gpu_state_print_fl(GL_UNPACK_SWAP_BYTES); - gpu_state_print_fl(GL_VERTEX_ARRAY); - gpu_state_print_fl(GL_VERTEX_ARRAY_BUFFER_BINDING); - gpu_state_print_fl(GL_VERTEX_ARRAY_SIZE); - gpu_state_print_fl(GL_VERTEX_ARRAY_STRIDE); - gpu_state_print_fl(GL_VERTEX_ARRAY_TYPE); - gpu_state_print_fl(GL_VERTEX_PROGRAM_POINT_SIZE); - gpu_state_print_fl(GL_VERTEX_PROGRAM_TWO_SIDE); - gpu_state_print_fl(GL_VIEWPORT); - gpu_state_print_fl(GL_ZOOM_X); - gpu_state_print_fl(GL_ZOOM_Y); -} - -#undef gpu_state_print_fl - -#endif diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c index 1d081875c9b..c7e89e50b7e 100644 --- a/source/blender/gpu/intern/gpu_extensions.c +++ b/source/blender/gpu/intern/gpu_extensions.c @@ -33,8 +33,6 @@ */ -#include "GPU_glew.h" - #include "DNA_image_types.h" #include "MEM_guardedalloc.h" @@ -45,12 +43,14 @@ #include "BKE_global.h" +#include "GPU_glew.h" +#include "GPU_debug.h" #include "GPU_draw.h" #include "GPU_extensions.h" #include "GPU_compositing.h" #include "GPU_simple_shader.h" -#include "intern/gpu_extensions_private.h" +#include "intern/gpu_private.h" #include #include @@ -273,20 +273,6 @@ int GPU_color_depth(void) return GG.colordepth; } -int GPU_print_error(const char *str) -{ - GLenum errCode; - - if ((G.debug & G_DEBUG)) { - if ((errCode = glGetError()) != GL_NO_ERROR) { - fprintf(stderr, "%s opengl error: %s\n", str, gluErrorString(errCode)); - return 1; - } - } - - return 0; -} - static void GPU_print_framebuffer_error(GLenum status, char err_out[256]) { const char *err= "unknown"; @@ -552,7 +538,7 @@ GPUTexture *GPU_texture_create_3D(int w, int h, int depth, int channels, float * tex->number = 0; glBindTexture(tex->target, tex->bindcode); - GPU_print_error("3D glBindTexture"); + GPU_ASSERT_NO_GL_ERRORS("3D glBindTexture"); type = GL_FLOAT; if (channels == 4) { @@ -569,7 +555,7 @@ GPUTexture *GPU_texture_create_3D(int w, int h, int depth, int channels, float * glTexImage3D(tex->target, 0, internalformat, tex->w, tex->h, tex->depth, 0, format, type, NULL); - GPU_print_error("3D glTexImage3D"); + GPU_ASSERT_NO_GL_ERRORS("3D glTexImage3D"); if (fpixels) { if (!GPU_non_power_of_two_support() && (w != tex->w || h != tex->h || depth != tex->depth)) { @@ -580,19 +566,19 @@ GPUTexture *GPU_texture_create_3D(int w, int h, int depth, int channels, float * } glTexSubImage3D(tex->target, 0, 0, 0, 0, w, h, depth, format, type, fpixels); - GPU_print_error("3D glTexSubImage3D"); + GPU_ASSERT_NO_GL_ERRORS("3D glTexSubImage3D"); } glTexParameterfv(GL_TEXTURE_3D, GL_TEXTURE_BORDER_COLOR, vfBorderColor); - GPU_print_error("3D GL_TEXTURE_BORDER_COLOR"); + GPU_ASSERT_NO_GL_ERRORS("3D GL_TEXTURE_BORDER_COLOR"); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); - GPU_print_error("3D GL_LINEAR"); + GPU_ASSERT_NO_GL_ERRORS("3D GL_LINEAR"); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); - GPU_print_error("3D GL_CLAMP_TO_BORDER"); + GPU_ASSERT_NO_GL_ERRORS("3D GL_CLAMP_TO_BORDER"); if (pixels) MEM_freeN(pixels); @@ -629,7 +615,7 @@ GPUTexture *GPU_texture_from_blender(Image *ima, ImageUser *iuser, bool is_data, ima->gputexture= tex; if (!glIsTexture(tex->bindcode)) { - GPU_print_error("Blender Texture Not Loaded"); + GPU_ASSERT_NO_GL_ERRORS("Blender Texture Not Loaded"); } else { glBindTexture(GL_TEXTURE_2D, tex->bindcode); @@ -676,7 +662,7 @@ GPUTexture *GPU_texture_from_preview(PreviewImage *prv, int mipmap) prv->gputexture[0]= tex; if (!glIsTexture(tex->bindcode)) { - GPU_print_error("Blender Texture Not Loaded"); + GPU_ASSERT_NO_GL_ERRORS("Blender Texture Not Loaded"); } else { glBindTexture(GL_TEXTURE_2D, tex->bindcode); @@ -813,7 +799,7 @@ void GPU_texture_bind(GPUTexture *tex, int number) GLenum arbnumber; if (number >= GG.maxtextures) { - GPU_print_error("Not enough texture slots."); + fprintf(stderr, "Not enough texture slots."); return; } @@ -826,7 +812,7 @@ void GPU_texture_bind(GPUTexture *tex, int number) if (number < 0) return; - GPU_print_error("Pre Texture Bind"); + GPU_ASSERT_NO_GL_ERRORS("Pre Texture Bind"); arbnumber = (GLenum)((GLuint)GL_TEXTURE0_ARB + number); if (number != 0) glActiveTextureARB(arbnumber); @@ -840,7 +826,7 @@ void GPU_texture_bind(GPUTexture *tex, int number) tex->number = number; - GPU_print_error("Post Texture Bind"); + GPU_ASSERT_NO_GL_ERRORS("Post Texture Bind"); } void GPU_texture_unbind(GPUTexture *tex) @@ -848,14 +834,14 @@ void GPU_texture_unbind(GPUTexture *tex) GLenum arbnumber; if (tex->number >= GG.maxtextures) { - GPU_print_error("Not enough texture slots."); + fprintf(stderr, "Not enough texture slots."); return; } if (tex->number == -1) return; - GPU_print_error("Pre Texture Unbind"); + GPU_ASSERT_NO_GL_ERRORS("Pre Texture Unbind"); arbnumber = (GLenum)((GLuint)GL_TEXTURE0_ARB + tex->number); if (tex->number != 0) glActiveTextureARB(arbnumber); @@ -865,7 +851,7 @@ void GPU_texture_unbind(GPUTexture *tex) tex->number = -1; - GPU_print_error("Post Texture Unbind"); + GPU_ASSERT_NO_GL_ERRORS("Post Texture Unbind"); } void GPU_depth_texture_mode(GPUTexture *tex, bool compare, bool use_filter) @@ -873,19 +859,19 @@ void GPU_depth_texture_mode(GPUTexture *tex, bool compare, bool use_filter) GLenum arbnumber; if (tex->number >= GG.maxtextures) { - GPU_print_error("Not enough texture slots."); + fprintf(stderr, "Not enough texture slots."); return; } if (!tex->depth) { - GPU_print_error("Not a depth texture."); + fprintf(stderr, "Not a depth texture."); return; } if (tex->number == -1) return; - GPU_print_error("Pre Texture Unbind"); + GPU_ASSERT_NO_GL_ERRORS("Pre Texture Unbind"); arbnumber = (GLenum)((GLuint)GL_TEXTURE0_ARB + tex->number); if (tex->number != 0) glActiveTextureARB(arbnumber); @@ -904,7 +890,7 @@ void GPU_depth_texture_mode(GPUTexture *tex, bool compare, bool use_filter) } if (tex->number != 0) glActiveTextureARB(GL_TEXTURE0_ARB); - GPU_print_error("Post Texture Unbind"); + GPU_ASSERT_NO_GL_ERRORS("Post Texture Unbind"); } void GPU_texture_free(GPUTexture *tex) @@ -1606,16 +1592,16 @@ GPUShader *GPU_shader_create_lib(const char *code) void GPU_shader_bind(GPUShader *shader) { - GPU_print_error("Pre Shader Bind"); + GPU_ASSERT_NO_GL_ERRORS("Pre Shader Bind"); glUseProgramObjectARB(shader->object); - GPU_print_error("Post Shader Bind"); + GPU_ASSERT_NO_GL_ERRORS("Post Shader Bind"); } void GPU_shader_unbind(void) { - GPU_print_error("Pre Shader Unbind"); + GPU_ASSERT_NO_GL_ERRORS("Pre Shader Unbind"); glUseProgramObjectARB(0); - GPU_print_error("Post Shader Unbind"); + GPU_ASSERT_NO_GL_ERRORS("Post Shader Unbind"); } void GPU_shader_free(GPUShader *shader) @@ -1641,7 +1627,7 @@ void GPU_shader_uniform_vector(GPUShader *UNUSED(shader), int location, int leng if (location == -1) return; - GPU_print_error("Pre Uniform Vector"); + GPU_ASSERT_NO_GL_ERRORS("Pre Uniform Vector"); if (length == 1) glUniform1fvARB(location, arraysize, value); else if (length == 2) glUniform2fvARB(location, arraysize, value); @@ -1650,7 +1636,7 @@ void GPU_shader_uniform_vector(GPUShader *UNUSED(shader), int location, int leng else if (length == 9) glUniformMatrix3fvARB(location, arraysize, 0, value); else if (length == 16) glUniformMatrix4fvARB(location, arraysize, 0, value); - GPU_print_error("Post Uniform Vector"); + GPU_ASSERT_NO_GL_ERRORS("Post Uniform Vector"); } void GPU_shader_uniform_int(GPUShader *UNUSED(shader), int location, int value) @@ -1658,9 +1644,7 @@ void GPU_shader_uniform_int(GPUShader *UNUSED(shader), int location, int value) if (location == -1) return; - GPU_print_error("Pre Uniform Int"); - glUniform1iARB(location, value); - GPU_print_error("Post Uniform Int"); + GPU_CHECK_ERRORS_AROUND(glUniform1iARB(location, value)); } void GPU_shader_uniform_texture(GPUShader *UNUSED(shader), int location, GPUTexture *tex) @@ -1668,7 +1652,7 @@ void GPU_shader_uniform_texture(GPUShader *UNUSED(shader), int location, GPUText GLenum arbnumber; if (tex->number >= GG.maxtextures) { - GPU_print_error("Not enough texture slots."); + fprintf(stderr, "Not enough texture slots."); return; } @@ -1678,7 +1662,7 @@ void GPU_shader_uniform_texture(GPUShader *UNUSED(shader), int location, GPUText if (location == -1) return; - GPU_print_error("Pre Uniform Texture"); + GPU_ASSERT_NO_GL_ERRORS("Pre Uniform Texture"); arbnumber = (GLenum)((GLuint)GL_TEXTURE0_ARB + tex->number); @@ -1691,18 +1675,14 @@ void GPU_shader_uniform_texture(GPUShader *UNUSED(shader), int location, GPUText glEnable(tex->target); if (tex->number != 0) glActiveTextureARB(GL_TEXTURE0_ARB); - GPU_print_error("Post Uniform Texture"); + GPU_ASSERT_NO_GL_ERRORS("Post Uniform Texture"); } int GPU_shader_get_attribute(GPUShader *shader, const char *name) { int index; - GPU_print_error("Pre Get Attribute"); - - index = glGetAttribLocationARB(shader->object, name); - - GPU_print_error("Post Get Attribute"); + GPU_CHECK_ERRORS_AROUND(index = glGetAttribLocationARB(shader->object, name)); return index; } diff --git a/source/blender/gpu/intern/gpu_init_exit.c b/source/blender/gpu/intern/gpu_init_exit.c index fd99595b6a4..a93c1a21130 100644 --- a/source/blender/gpu/intern/gpu_init_exit.c +++ b/source/blender/gpu/intern/gpu_init_exit.c @@ -33,7 +33,7 @@ #include "GPU_init_exit.h" /* interface */ #include "intern/gpu_codegen.h" -#include "intern/gpu_extensions_private.h" +#include "intern/gpu_private.h" /** * although the order of initialization and shutdown should not matter @@ -53,12 +53,15 @@ void GPU_init(void) gpu_extensions_init(); /* must come first */ gpu_codegen_init(); + + GPU_DEBUG_INIT(); } void GPU_exit(void) { + GPU_DEBUG_EXIT(); gpu_codegen_exit(); gpu_extensions_exit(); /* must come last */ diff --git a/source/blender/gpu/intern/gpu_extensions_private.h b/source/blender/gpu/intern/gpu_private.h similarity index 73% rename from source/blender/gpu/intern/gpu_extensions_private.h rename to source/blender/gpu/intern/gpu_private.h index a4124b8fa3d..11bc2bd3119 100644 --- a/source/blender/gpu/intern/gpu_extensions_private.h +++ b/source/blender/gpu/intern/gpu_private.h @@ -22,11 +22,28 @@ * \ingroup gpu */ -#ifndef __GPU_EXTENSIONS_PRIVATE_H__ -#define __GPU_EXTENSIONS_PRIVATE_H__ +#ifndef __GPU_PRIVATE_H__ +#define __GPU_PRIVATE_H__ /* call this before running any of the functions below */ void gpu_extensions_init(void); void gpu_extensions_exit(void); -#endif /* __GPU_EXTENSIONS_PRIVATE_H__ */ + +/* gpu_debug.c */ +#ifdef WITH_GPU_DEBUG + +void gpu_debug_init(void); +void gpu_debug_exit(void); + +# define GPU_DEBUG_INIT() gpu_debug_init() +# define GPU_DEBUG_EXIT() gpu_debug_exit() + +#else + +# define GPU_DEBUG_INIT() ((void)0) +# define GPU_DEBUG_EXIT() ((void)0) + +#endif + +#endif /* __GPU_PRIVATE_H__ */ diff --git a/source/blender/windowmanager/intern/wm_event_system.c b/source/blender/windowmanager/intern/wm_event_system.c index 4b8af999205..8ddc5d77a42 100644 --- a/source/blender/windowmanager/intern/wm_event_system.c +++ b/source/blender/windowmanager/intern/wm_event_system.c @@ -71,6 +71,8 @@ #include "BIF_gl.h" +#include "GPU_debug.h" + #include "UI_interface.h" #include "PIL_time.h" @@ -2417,12 +2419,7 @@ void wm_event_do_handlers(bContext *C) /* update key configuration after handling events */ WM_keyconfig_update(wm); - if (G.debug) { - GLenum error = glGetError(); - if (error != GL_NO_ERROR) { - printf("GL error: %s\n", gluErrorString(error)); - } - } + GPU_ASSERT_NO_GL_ERRORS("wm_event_do_handlers"); } /* ********** filesector handling ************ */