mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-10 15:58:09 +00:00
sanity-check scissor region, fix var shadowing bug in blur GLSL shader,
and remove 'blur_count' that causes linking issues [OpenGL] GL_INVALID_OPERATION in glGetUniformLocation(program not linked) [OpenGL] GL_INVALID_OPERATION in glUniform(program not linked) [OpenGL] GL_INVALID_VALUE in glScissor
This commit is contained in:
committed by
Ryan Fleury
parent
15bf343168
commit
1e0f1d026b
@@ -202,23 +202,23 @@ str8_lit_comp(
|
|||||||
" rect.xy,\n"
|
" rect.xy,\n"
|
||||||
" rect.zw,\n"
|
" rect.zw,\n"
|
||||||
" rect.zy);\n"
|
" rect.zy);\n"
|
||||||
" float corner_radii_px[] = float[](corner_radii_px.y,\n"
|
" float corner_radii[] = float[](corner_radii_px.y,\n"
|
||||||
" corner_radii_px.x,\n"
|
" corner_radii_px.x,\n"
|
||||||
" corner_radii_px.w,\n"
|
" corner_radii_px.w,\n"
|
||||||
" corner_radii_px.z);\n"
|
" corner_radii_px.z);\n"
|
||||||
" vec2 cornercoords_pct = vec2((gl_VertexID >> 1) != 0 ? 1.f : 0.f,\n"
|
" vec2 cornercoords_pct = vec2((gl_VertexID >> 1) != 0 ? 1.f : 0.f,\n"
|
||||||
" (gl_VertexID & 1) != 0 ? 0.f : 1.f);\n"
|
" (gl_VertexID & 1) != 0 ? 0.f : 1.f);\n"
|
||||||
" \n"
|
" \n"
|
||||||
" vec2 vertex_position_pct = vertex_positions_scrn[gl_VertexID] / viewport_size;\n"
|
" vec2 vertex_position_pct = vertex_positions_scrn[gl_VertexID] / viewport_size;\n"
|
||||||
" vec2 vertex_position_scr = 2.f * vertex_position_pct - 1.f;\n"
|
" vec2 vertex_position_scr = 2.f * vertex_position_pct - 1.f;\n"
|
||||||
" \n"
|
" \n"
|
||||||
" vec2 rect_half_size = vec2((rect.z-rect.x)/2, (rect.w-rect.y)/2);\n"
|
" vec2 rect_half_size_local = vec2((rect.z-rect.x)/2, (rect.w-rect.y)/2);\n"
|
||||||
" \n"
|
" \n"
|
||||||
" gl_Position = vec4(vertex_position_scr.x, -vertex_position_scr.y, 0.f, 1.f);\n"
|
" gl_Position = vec4(vertex_position_scr.x, -vertex_position_scr.y, 0.f, 1.f);\n"
|
||||||
" texcoord = vec2(vertex_position_pct.x, 1-vertex_position_pct.y);\n"
|
" texcoord = vec2(vertex_position_pct.x, 1-vertex_position_pct.y);\n"
|
||||||
" sdf_sample_pos = (2.f * cornercoords_pct - 1.f) * rect_half_size;\n"
|
" sdf_sample_pos = (2.f * cornercoords_pct - 1.f) * rect_half_size_local;\n"
|
||||||
" rect_half_size = rect_half_size - 2.f;\n"
|
" rect_half_size = rect_half_size_local - 2.f;\n"
|
||||||
" corner_radius = corner_radii_px[gl_VertexID];\n"
|
" corner_radius = corner_radii[gl_VertexID];\n"
|
||||||
"}\n"
|
"}\n"
|
||||||
""
|
""
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -95,6 +95,22 @@ r_ogl_debug_message_callback(GLenum source, GLenum type, GLuint id, GLenum sever
|
|||||||
fprintf(stderr, "[OpenGL] %.*s\n", (int)length, message);
|
fprintf(stderr, "[OpenGL] %.*s\n", (int)length, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal B32
|
||||||
|
r_ogl_scissor(Rng2F32 clip, Vec2F32 viewport_dim)
|
||||||
|
{
|
||||||
|
S32 x0 = Clamp(0, (S32)floor_f32(clip.x0), (S32)viewport_dim.x);
|
||||||
|
S32 y0 = Clamp(0, (S32)floor_f32(clip.y0), (S32)viewport_dim.y);
|
||||||
|
S32 x1 = Clamp(0, (S32)ceil_f32(clip.x1), (S32)viewport_dim.x);
|
||||||
|
S32 y1 = Clamp(0, (S32)ceil_f32(clip.y1), (S32)viewport_dim.y);
|
||||||
|
S32 width = x1 - x0;
|
||||||
|
S32 height = y1 - y0;
|
||||||
|
if(width > 0 && height > 0)
|
||||||
|
{
|
||||||
|
glScissor(x0, (S32)viewport_dim.y - y1, width, height);
|
||||||
|
}
|
||||||
|
return width > 0 && height > 0;
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
////////////////////////////////
|
||||||
//~ rjf: Backend Hooks
|
//~ rjf: Backend Hooks
|
||||||
|
|
||||||
@@ -560,9 +576,10 @@ r_window_submit(WM_Window window, R_Handle window_equip, R_PassList *passes)
|
|||||||
group_params->clip.y0 != 0 ||
|
group_params->clip.y0 != 0 ||
|
||||||
group_params->clip.y1 != 0)
|
group_params->clip.y1 != 0)
|
||||||
{
|
{
|
||||||
Rng2F32 clip = group_params->clip;
|
if(r_ogl_scissor(group_params->clip, viewport_dim))
|
||||||
glScissor(clip.x0, viewport_dim.y - clip.y1, (clip.x1-clip.x0) + 1, (clip.y1-clip.y0)+1);
|
{
|
||||||
glEnable(GL_SCISSOR_TEST);
|
glEnable(GL_SCISSOR_TEST);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: draw
|
//- rjf: draw
|
||||||
@@ -650,9 +667,10 @@ r_window_submit(WM_Window window, R_Handle window_equip, R_PassList *passes)
|
|||||||
params->clip.y0 != 0 ||
|
params->clip.y0 != 0 ||
|
||||||
params->clip.y1 != 0)
|
params->clip.y1 != 0)
|
||||||
{
|
{
|
||||||
Rng2F32 clip = params->clip;
|
if(r_ogl_scissor(params->clip, viewport_dim))
|
||||||
glScissor(clip.x0, viewport_dim.y - clip.y1, (clip.x1-clip.x0) + 1, (clip.y1-clip.y0)+1);
|
{
|
||||||
glEnable(GL_SCISSOR_TEST);
|
glEnable(GL_SCISSOR_TEST);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//- rjf: pass 1: stage -(horizontal)-> stage_scratch
|
//- rjf: pass 1: stage -(horizontal)-> stage_scratch
|
||||||
|
|||||||
@@ -226,23 +226,23 @@ void main(void)
|
|||||||
rect.xy,
|
rect.xy,
|
||||||
rect.zw,
|
rect.zw,
|
||||||
rect.zy);
|
rect.zy);
|
||||||
float corner_radii_px[] = float[](corner_radii_px.y,
|
float corner_radii[] = float[](corner_radii_px.y,
|
||||||
corner_radii_px.x,
|
corner_radii_px.x,
|
||||||
corner_radii_px.w,
|
corner_radii_px.w,
|
||||||
corner_radii_px.z);
|
corner_radii_px.z);
|
||||||
vec2 cornercoords_pct = vec2((gl_VertexID >> 1) != 0 ? 1.f : 0.f,
|
vec2 cornercoords_pct = vec2((gl_VertexID >> 1) != 0 ? 1.f : 0.f,
|
||||||
(gl_VertexID & 1) != 0 ? 0.f : 1.f);
|
(gl_VertexID & 1) != 0 ? 0.f : 1.f);
|
||||||
|
|
||||||
vec2 vertex_position_pct = vertex_positions_scrn[gl_VertexID] / viewport_size;
|
vec2 vertex_position_pct = vertex_positions_scrn[gl_VertexID] / viewport_size;
|
||||||
vec2 vertex_position_scr = 2.f * vertex_position_pct - 1.f;
|
vec2 vertex_position_scr = 2.f * vertex_position_pct - 1.f;
|
||||||
|
|
||||||
vec2 rect_half_size = vec2((rect.z-rect.x)/2, (rect.w-rect.y)/2);
|
vec2 rect_half_size_local = vec2((rect.z-rect.x)/2, (rect.w-rect.y)/2);
|
||||||
|
|
||||||
gl_Position = vec4(vertex_position_scr.x, -vertex_position_scr.y, 0.f, 1.f);
|
gl_Position = vec4(vertex_position_scr.x, -vertex_position_scr.y, 0.f, 1.f);
|
||||||
texcoord = vec2(vertex_position_pct.x, 1-vertex_position_pct.y);
|
texcoord = vec2(vertex_position_pct.x, 1-vertex_position_pct.y);
|
||||||
sdf_sample_pos = (2.f * cornercoords_pct - 1.f) * rect_half_size;
|
sdf_sample_pos = (2.f * cornercoords_pct - 1.f) * rect_half_size_local;
|
||||||
rect_half_size = rect_half_size - 2.f;
|
rect_half_size = rect_half_size_local - 2.f;
|
||||||
corner_radius = corner_radii_px[gl_VertexID];
|
corner_radius = corner_radii[gl_VertexID];
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user