diff options
Diffstat (limited to 'source/blender/gpu/intern')
-rw-r--r-- | source/blender/gpu/intern/gpu_buffers.c | 2 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_codegen.c | 6 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_codegen.h | 10 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_draw.c | 37 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_extensions.c | 21 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_extensions_private.h | 32 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_init_exit.c | 68 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_material.c | 2 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_select.c | 5 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_simple_shader.c | 2 |
10 files changed, 151 insertions, 34 deletions
diff --git a/source/blender/gpu/intern/gpu_buffers.c b/source/blender/gpu/intern/gpu_buffers.c index 5d2c9cd3a90..b5a576b509c 100644 --- a/source/blender/gpu/intern/gpu_buffers.c +++ b/source/blender/gpu/intern/gpu_buffers.c @@ -36,7 +36,7 @@ #include <stddef.h> #include <string.h> -#include "GL/glew.h" +#include "GPU_glew.h" #include "MEM_guardedalloc.h" diff --git a/source/blender/gpu/intern/gpu_codegen.c b/source/blender/gpu/intern/gpu_codegen.c index 6b46db89a93..322d37055db 100644 --- a/source/blender/gpu/intern/gpu_codegen.c +++ b/source/blender/gpu/intern/gpu_codegen.c @@ -31,7 +31,7 @@ * Convert material node-trees to GLSL. */ -#include "GL/glew.h" +#include "GPU_glew.h" #include "MEM_guardedalloc.h" @@ -242,12 +242,12 @@ GPUFunction *GPU_lookup_function(const char *name) return (GPUFunction*)BLI_ghash_lookup(FUNCTION_HASH, (void *)name); } -void GPU_codegen_init(void) +void gpu_codegen_init(void) { GPU_code_generate_glsl_lib(); } -void GPU_codegen_exit(void) +void gpu_codegen_exit(void) { extern Material defmaterial; // render module abuse... diff --git a/source/blender/gpu/intern/gpu_codegen.h b/source/blender/gpu/intern/gpu_codegen.h index b6db923e5c2..69213925931 100644 --- a/source/blender/gpu/intern/gpu_codegen.h +++ b/source/blender/gpu/intern/gpu_codegen.h @@ -35,7 +35,7 @@ #include "DNA_listBase.h" #include "GPU_material.h" -#include "GL/glew.h" +#include "GPU_glew.h" struct ListBase; struct GPUShader; @@ -106,7 +106,7 @@ struct GPUNodeLink { int type; int users; - GPUTexture *dynamictex; + struct GPUTexture *dynamictex; GPUBuiltin builtin; GPUOpenGLBuiltin oglbuiltin; @@ -146,7 +146,7 @@ typedef struct GPUInput { float *dynamicvec; /* vector data in case it is dynamic */ int dynamictype; /* origin of the dynamic uniform (GPUDynamicType) */ void *dynamicdata; /* data source of the dynamic uniform */ - GPUTexture *tex; /* input texture, only set at runtime */ + struct GPUTexture *tex; /* input texture, only set at runtime */ int shaderloc; /* id from opengl */ char shadername[32]; /* name in shader */ @@ -185,8 +185,8 @@ void GPU_pass_unbind(GPUPass *pass); void GPU_pass_free(GPUPass *pass); -void GPU_codegen_init(void); -void GPU_codegen_exit(void); +void gpu_codegen_init(void); +void gpu_codegen_exit(void); /* Material calls */ diff --git a/source/blender/gpu/intern/gpu_draw.c b/source/blender/gpu/intern/gpu_draw.c index 7295f0259c5..a4435a7d276 100644 --- a/source/blender/gpu/intern/gpu_draw.c +++ b/source/blender/gpu/intern/gpu_draw.c @@ -38,7 +38,7 @@ #include <string.h> -#include "GL/glew.h" +#include "GPU_glew.h" #include "BLI_blenlib.h" #include "BLI_linklist.h" @@ -1878,6 +1878,37 @@ int GPU_scene_object_lights(Scene *scene, Object *ob, int lay, float viewmat[4][ return count; } +static void gpu_multisample(bool enable) +{ + if (GLEW_VERSION_1_3 || GLEW_ARB_multisample) { +#ifdef __linux__ + /* changing multisample enablement from the default (enabled) causes problems on some + * systems (NVIDIA/Linux) when the pixel format doesn't have a multisample buffer */ + bool toggle_ok = true; + + if (GPU_type_matches(GPU_DEVICE_NVIDIA, GPU_OS_UNIX, GPU_DRIVER_ANY)) { + int samples = 0; + glGetIntegerv(GL_SAMPLES, &samples); + + if (samples == 0) + toggle_ok = false; + } + + if (toggle_ok) { + if (enable) + glEnable(GL_MULTISAMPLE); + else + glDisable(GL_MULTISAMPLE); + } +#else + if (enable) + glEnable(GL_MULTISAMPLE); + else + glDisable(GL_MULTISAMPLE); +#endif + } +} + /* Default OpenGL State */ void GPU_state_init(void) @@ -1950,9 +1981,7 @@ void GPU_state_init(void) glCullFace(GL_BACK); glDisable(GL_CULL_FACE); - /* calling this makes drawing very slow when AA is not set up in ghost - * on Linux/NVIDIA. */ - // glDisable(GL_MULTISAMPLE); + gpu_multisample(false); } #ifdef DEBUG diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c index 7fabb2feb51..04f8e68431a 100644 --- a/source/blender/gpu/intern/gpu_extensions.c +++ b/source/blender/gpu/intern/gpu_extensions.c @@ -33,7 +33,7 @@ */ -#include "GL/glew.h" +#include "GPU_glew.h" #include "DNA_image_types.h" @@ -48,7 +48,9 @@ #include "GPU_draw.h" #include "GPU_extensions.h" #include "GPU_simple_shader.h" -#include "gpu_codegen.h" + +#include "intern/gpu_codegen.h" +#include "intern/gpu_extensions_private.h" #include <stdlib.h> #include <stdio.h> @@ -110,8 +112,6 @@ int GPU_type_matches(GPUDeviceType device, GPUOSType os, GPUDriverType driver) /* GPU Extensions */ -static int gpu_extensions_init = 0; - void GPU_extensions_disable(void) { GG.extdisabled = 1; @@ -122,18 +122,11 @@ int GPU_max_texture_size(void) return GG.maxtexsize; } -void GPU_extensions_init(void) +void gpu_extensions_init(void) { GLint r, g, b; const char *vendor, *renderer; - /* can't avoid calling this multiple times, see wm_window_add_ghostwindow */ - if (gpu_extensions_init) return; - gpu_extensions_init= 1; - - glewInit(); - GPU_codegen_init(); - /* glewIsSupported("GL_VERSION_2_0") */ if (GLEW_ARB_multitexture) @@ -233,10 +226,8 @@ void GPU_extensions_init(void) GPU_simple_shaders_init(); } -void GPU_extensions_exit(void) +void gpu_extensions_exit(void) { - gpu_extensions_init = 0; - GPU_codegen_exit(); GPU_simple_shaders_exit(); GPU_invalid_tex_free(); } diff --git a/source/blender/gpu/intern/gpu_extensions_private.h b/source/blender/gpu/intern/gpu_extensions_private.h new file mode 100644 index 00000000000..a4124b8fa3d --- /dev/null +++ b/source/blender/gpu/intern/gpu_extensions_private.h @@ -0,0 +1,32 @@ +/* + * ***** 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. + * + * ***** END GPL LICENSE BLOCK ***** + */ + +/** \file gpu_extensions_private.h + * \ingroup gpu + */ + +#ifndef __GPU_EXTENSIONS_PRIVATE_H__ +#define __GPU_EXTENSIONS_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__ */ diff --git a/source/blender/gpu/intern/gpu_init_exit.c b/source/blender/gpu/intern/gpu_init_exit.c new file mode 100644 index 00000000000..912774cd345 --- /dev/null +++ b/source/blender/gpu/intern/gpu_init_exit.c @@ -0,0 +1,68 @@ +/* + * ***** 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) 2013 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/intern/gpu_init_exit.c + * \ingroup gpu + */ + +#include "BLI_sys_types.h" +#include "GPU_init_exit.h" /* interface */ +#include "GPU_extensions.h" /* library */ + +#include "intern/gpu_codegen.h" +#include "intern/gpu_extensions_private.h" + +/** + * although the order of initialization and shutdown should not matter + * (except for the extensions), I chose alphabetical and reverse alphabetical order + */ + +static bool initialized = false; + +void GPU_init(void) +{ + /* can't avoid calling this multiple times, see wm_window_add_ghostwindow */ + if (initialized) + return; + + initialized = true; + + gpu_extensions_init(); /* must come first */ + + gpu_codegen_init(); +} + + + +void GPU_exit(void) +{ + gpu_codegen_exit(); + + gpu_extensions_exit(); /* must come last */ + + initialized = false; +} diff --git a/source/blender/gpu/intern/gpu_material.c b/source/blender/gpu/intern/gpu_material.c index 75fed46f62a..f91fd7a8c1e 100644 --- a/source/blender/gpu/intern/gpu_material.c +++ b/source/blender/gpu/intern/gpu_material.c @@ -35,8 +35,6 @@ #include <math.h> #include <string.h> -#include "GL/glew.h" - #include "MEM_guardedalloc.h" #include "DNA_lamp_types.h" diff --git a/source/blender/gpu/intern/gpu_select.c b/source/blender/gpu/intern/gpu_select.c index 1d448231dda..afd6af9efae 100644 --- a/source/blender/gpu/intern/gpu_select.c +++ b/source/blender/gpu/intern/gpu_select.c @@ -31,15 +31,14 @@ */ #include "GPU_select.h" #include "GPU_extensions.h" - +#include "GPU_glew.h" + #include "BLI_utildefines.h" #include "MEM_guardedalloc.h" #include "DNA_userdef_types.h" -#include <GL/glew.h> - /* Ad hoc number of queries to allocate to skip doing many glGenQueries */ #define ALLOC_QUERIES 200 diff --git a/source/blender/gpu/intern/gpu_simple_shader.c b/source/blender/gpu/intern/gpu_simple_shader.c index 0cb712d220f..c0d7ebd4abb 100644 --- a/source/blender/gpu/intern/gpu_simple_shader.c +++ b/source/blender/gpu/intern/gpu_simple_shader.c @@ -42,7 +42,7 @@ * - Optimize for case where no texture matrix is used. */ -#include "GL/glew.h" +#include "GPU_glew.h" #include "BLI_math.h" #include "BLI_utildefines.h" |