diff options
-rw-r--r-- | source/blender/gpu/GPU_extensions.h | 4 | ||||
-rw-r--r-- | source/blender/gpu/intern/gpu_extensions.c | 10 | ||||
-rw-r--r-- | source/blender/windowmanager/intern/wm_draw.c | 2 |
3 files changed, 15 insertions, 1 deletions
diff --git a/source/blender/gpu/GPU_extensions.h b/source/blender/gpu/GPU_extensions.h index 686e89b8310..6b98ffdede7 100644 --- a/source/blender/gpu/GPU_extensions.h +++ b/source/blender/gpu/GPU_extensions.h @@ -57,9 +57,11 @@ typedef struct GPUShader GPUShader; void GPU_extensions_disable(void); void GPU_extensions_init(void); /* call this before running any of the functions below */ void GPU_extensions_exit(void); +int GPU_print_error(char *str); + int GPU_glsl_support(void); int GPU_non_power_of_two_support(void); -int GPU_print_error(char *str); +int GPU_24bit_color_support(void); /* GPU Types */ diff --git a/source/blender/gpu/intern/gpu_extensions.c b/source/blender/gpu/intern/gpu_extensions.c index 8e0a23ccfeb..d53b8e67c56 100644 --- a/source/blender/gpu/intern/gpu_extensions.c +++ b/source/blender/gpu/intern/gpu_extensions.c @@ -71,6 +71,7 @@ static struct GPUGlobal { GLuint currentfb; int glslsupport; int extdisabled; + int color24bit; GPUDeviceType device; GPUOSType os; GPUDriverType driver; @@ -92,6 +93,7 @@ void GPU_extensions_disable() void GPU_extensions_init() { + GLint bits; const char *vendor, *renderer; glewInit(); @@ -106,6 +108,9 @@ void GPU_extensions_init() if (!GLEW_ARB_vertex_shader) GG.glslsupport = 0; if (!GLEW_ARB_fragment_shader) GG.glslsupport = 0; + glGetIntegerv(GL_RED_BITS, &bits); + GG.color24bit = (bits >= 8); + vendor = (const char*)glGetString(GL_VENDOR); renderer = (const char*)glGetString(GL_RENDERER); @@ -170,6 +175,11 @@ int GPU_non_power_of_two_support() return GLEW_ARB_texture_non_power_of_two; } +int GPU_24bit_color_support() +{ + return GG.color24bit; +} + int GPU_print_error(char *str) { GLenum errCode; diff --git a/source/blender/windowmanager/intern/wm_draw.c b/source/blender/windowmanager/intern/wm_draw.c index fec46d32a08..008abceba4c 100644 --- a/source/blender/windowmanager/intern/wm_draw.c +++ b/source/blender/windowmanager/intern/wm_draw.c @@ -674,6 +674,8 @@ static int wm_automatic_draw_method(wmWindow *win) /* Windows software driver darkens color on each redraw */ else if(GPU_type_matches(GPU_DEVICE_SOFTWARE, GPU_OS_WIN, GPU_DRIVER_SOFTWARE)) return USER_DRAW_OVERLAP_FLIP; + else if(!GPU_24bit_color_support()) + return USER_DRAW_OVERLAP; else return USER_DRAW_TRIPLE; } |