Fix #21349: triple buffer drawing doesn't work well with thousands of

colors setting on Mac, just disabled it in that case.
This commit is contained in:
2010-04-05 10:25:40 +00:00
parent 8b7d1775c3
commit ec5527cb52
3 changed files with 15 additions and 1 deletions

View File

@@ -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 */

View File

@@ -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;

View File

@@ -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;
}