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:
Nikita Smith
2026-06-02 12:10:30 -07:00
committed by Ryan Fleury
parent 15bf343168
commit 1e0f1d026b
3 changed files with 40 additions and 22 deletions
@@ -202,23 +202,23 @@ str8_lit_comp(
" rect.xy,\n"
" rect.zw,\n"
" rect.zy);\n"
" float corner_radii_px[] = float[](corner_radii_px.y,\n"
" corner_radii_px.x,\n"
" corner_radii_px.w,\n"
" corner_radii_px.z);\n"
" float corner_radii[] = float[](corner_radii_px.y,\n"
" corner_radii_px.x,\n"
" corner_radii_px.w,\n"
" corner_radii_px.z);\n"
" vec2 cornercoords_pct = vec2((gl_VertexID >> 1) != 0 ? 1.f : 0.f,\n"
" (gl_VertexID & 1) != 0 ? 0.f : 1.f);\n"
" \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"
" \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"
" 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"
" sdf_sample_pos = (2.f * cornercoords_pct - 1.f) * rect_half_size;\n"
" rect_half_size = rect_half_size - 2.f;\n"
" corner_radius = corner_radii_px[gl_VertexID];\n"
" sdf_sample_pos = (2.f * cornercoords_pct - 1.f) * rect_half_size_local;\n"
" rect_half_size = rect_half_size_local - 2.f;\n"
" corner_radius = corner_radii[gl_VertexID];\n"
"}\n"
""
);
+24 -6
View File
@@ -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);
}
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
@@ -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.y1 != 0)
{
Rng2F32 clip = group_params->clip;
glScissor(clip.x0, viewport_dim.y - clip.y1, (clip.x1-clip.x0) + 1, (clip.y1-clip.y0)+1);
glEnable(GL_SCISSOR_TEST);
if(r_ogl_scissor(group_params->clip, viewport_dim))
{
glEnable(GL_SCISSOR_TEST);
}
}
//- 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.y1 != 0)
{
Rng2F32 clip = params->clip;
glScissor(clip.x0, viewport_dim.y - clip.y1, (clip.x1-clip.x0) + 1, (clip.y1-clip.y0)+1);
glEnable(GL_SCISSOR_TEST);
if(r_ogl_scissor(params->clip, viewport_dim))
{
glEnable(GL_SCISSOR_TEST);
}
}
//- rjf: pass 1: stage -(horizontal)-> stage_scratch
+8 -8
View File
@@ -226,23 +226,23 @@ void main(void)
rect.xy,
rect.zw,
rect.zy);
float corner_radii_px[] = float[](corner_radii_px.y,
corner_radii_px.x,
corner_radii_px.w,
corner_radii_px.z);
float corner_radii[] = float[](corner_radii_px.y,
corner_radii_px.x,
corner_radii_px.w,
corner_radii_px.z);
vec2 cornercoords_pct = vec2((gl_VertexID >> 1) != 0 ? 1.f : 0.f,
(gl_VertexID & 1) != 0 ? 0.f : 1.f);
vec2 vertex_position_pct = vertex_positions_scrn[gl_VertexID] / viewport_size;
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);
texcoord = vec2(vertex_position_pct.x, 1-vertex_position_pct.y);
sdf_sample_pos = (2.f * cornercoords_pct - 1.f) * rect_half_size;
rect_half_size = rect_half_size - 2.f;
corner_radius = corner_radii_px[gl_VertexID];
sdf_sample_pos = (2.f * cornercoords_pct - 1.f) * rect_half_size_local;
rect_half_size = rect_half_size_local - 2.f;
corner_radius = corner_radii[gl_VertexID];
}
```