forked from bartvdbraak/blender
GPU: Fix for glDrawPixels drawing w/ glsl shader
The basic shader needs to be temporarily disabled in this case. Add macros for temp store/restoring the state.
This commit is contained in:
parent
cf8a0d08b0
commit
f3d33a1a0f
@ -1220,8 +1220,13 @@ static void icon_draw_rect(float x, float y, int w, int h, float UNUSED(aspect),
|
||||
glaDrawPixelsSafe(draw_x, draw_y, draw_w, draw_h, draw_w, GL_RGBA, GL_UNSIGNED_BYTE, rect);
|
||||
}
|
||||
else {
|
||||
int bound_options;
|
||||
GPU_BASIC_SHADER_DISABLE_AND_STORE(bound_options);
|
||||
|
||||
glRasterPos2f(draw_x, draw_y);
|
||||
glDrawPixels(draw_w, draw_h, GL_RGBA, GL_UNSIGNED_BYTE, rect);
|
||||
|
||||
GPU_BASIC_SHADER_ENABLE_AND_RESTORE(bound_options);
|
||||
}
|
||||
|
||||
if (ima)
|
||||
|
@ -579,6 +579,10 @@ void glaDrawPixelsSafe(float x, float y, int img_w, int img_h, int row_w, int fo
|
||||
draw_h = min_ii(img_h - off_y, ceil((scissor[3] - rast_y) / yzoom));
|
||||
|
||||
if (draw_w > 0 && draw_h > 0) {
|
||||
|
||||
int bound_options;
|
||||
GPU_BASIC_SHADER_DISABLE_AND_STORE(bound_options);
|
||||
|
||||
/* Don't use safe RasterPos (slower) if we can avoid it. */
|
||||
if (rast_x >= 0 && rast_y >= 0) {
|
||||
glRasterPos2f(rast_x, rast_y);
|
||||
@ -610,6 +614,8 @@ void glaDrawPixelsSafe(float x, float y, int img_w, int img_h, int row_w, int fo
|
||||
}
|
||||
|
||||
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
|
||||
|
||||
GPU_BASIC_SHADER_ENABLE_AND_RESTORE(bound_options);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -76,6 +76,22 @@ void GPU_basic_shaders_exit(void);
|
||||
void GPU_basic_shader_bind(int options);
|
||||
int GPU_basic_shader_bound_options(void);
|
||||
|
||||
/* Only use for small blocks of code that don't support glsl shader. */
|
||||
#define GPU_BASIC_SHADER_DISABLE_AND_STORE(bound_options) \
|
||||
if (GPU_basic_shader_use_glsl_get()) { \
|
||||
if ((bound_options = GPU_basic_shader_bound_options())) { \
|
||||
GPU_basic_shader_bind(0); \
|
||||
} \
|
||||
} \
|
||||
else { bound_options = 0; } ((void)0)
|
||||
#define GPU_BASIC_SHADER_ENABLE_AND_RESTORE(bound_options) \
|
||||
if (GPU_basic_shader_use_glsl_get()) { \
|
||||
if (bound_options) { \
|
||||
GPU_basic_shader_bind(bound_options); \
|
||||
} \
|
||||
} ((void)0)
|
||||
|
||||
|
||||
void GPU_basic_shader_colors(const float diffuse[3], const float specular[3],
|
||||
int shininess, float alpha);
|
||||
|
||||
|
@ -281,6 +281,9 @@ static void draw_filled_lasso(wmWindow *win, wmGesture *gt)
|
||||
(const int (*)[2])moves, tot,
|
||||
draw_filled_lasso_px_cb, &lasso_fill_data);
|
||||
|
||||
int bound_options;
|
||||
GPU_BASIC_SHADER_DISABLE_AND_STORE(bound_options);
|
||||
|
||||
glEnable(GL_BLEND);
|
||||
// glColor4f(1.0, 1.0, 1.0, 0.05);
|
||||
|
||||
@ -288,6 +291,8 @@ static void draw_filled_lasso(wmWindow *win, wmGesture *gt)
|
||||
|
||||
glDrawPixels(w, h, GL_RGBA, GL_UNSIGNED_BYTE, pixel_buf);
|
||||
|
||||
GPU_BASIC_SHADER_ENABLE_AND_RESTORE(bound_options);
|
||||
|
||||
glDisable(GL_BLEND);
|
||||
MEM_freeN(pixel_buf);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user