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:
@@ -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 */
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user