From e950286fa47287239ad794751ae5b3699d2c5f72 Mon Sep 17 00:00:00 2001 From: Grant Sanderson Date: Mon, 30 Jan 2023 18:43:28 -0800 Subject: [PATCH] Replace get_gl_Position -> emit_gl_Position --- manimlib/shaders/image/vert.glsl | 4 ++-- .../shaders/inserts/emit_gl_Position.glsl | 23 +++++++++++++++++++ manimlib/shaders/inserts/get_gl_Position.glsl | 13 +++++++---- manimlib/shaders/mandelbrot_fractal/vert.glsl | 4 ++-- manimlib/shaders/newton_fractal/vert.glsl | 4 ++-- .../shaders/quadratic_bezier_fill/geom.glsl | 4 ++-- .../shaders/quadratic_bezier_stroke/geom.glsl | 4 ++-- manimlib/shaders/simple_vert.glsl | 4 ++-- manimlib/shaders/surface/vert.glsl | 4 ++-- manimlib/shaders/textured_surface/vert.glsl | 4 ++-- manimlib/shaders/true_dot/vert.glsl | 4 ++-- 11 files changed, 49 insertions(+), 23 deletions(-) create mode 100644 manimlib/shaders/inserts/emit_gl_Position.glsl diff --git a/manimlib/shaders/image/vert.glsl b/manimlib/shaders/image/vert.glsl index d3344931..4f7a812d 100644 --- a/manimlib/shaders/image/vert.glsl +++ b/manimlib/shaders/image/vert.glsl @@ -10,10 +10,10 @@ out vec2 v_im_coords; out float v_opacity; // Analog of import for manim only -#INSERT get_gl_Position.glsl +#INSERT emit_gl_Position.glsl void main(){ v_im_coords = im_coords; v_opacity = opacity; - gl_Position = get_gl_Position(point); + emit_gl_Position(point); } \ No newline at end of file diff --git a/manimlib/shaders/inserts/emit_gl_Position.glsl b/manimlib/shaders/inserts/emit_gl_Position.glsl new file mode 100644 index 00000000..8ad69d92 --- /dev/null +++ b/manimlib/shaders/inserts/emit_gl_Position.glsl @@ -0,0 +1,23 @@ +uniform float is_fixed_in_frame; +uniform mat4 view; +uniform float focal_distance; + +const float DEFAULT_FRAME_HEIGHT = 8.0; +const float ASPECT_RATIO = 16.0 / 9.0; +const float X_SCALE = 2.0 / DEFAULT_FRAME_HEIGHT / ASPECT_RATIO; +const float Y_SCALE = 2.0 / DEFAULT_FRAME_HEIGHT; + +void emit_gl_Position(vec3 point){ + vec4 result = vec4(point, 1.0); + if(!bool(is_fixed_in_frame)){ + result = view * result; + } + // Essentially a projection matrix + result.x *= X_SCALE; + result.y *= Y_SCALE; + result.z /= focal_distance; + result.w = 1.0 - result.z; + // Flip and scale to prevent premature clipping + result.z *= -0.1; + gl_Position = result; +} diff --git a/manimlib/shaders/inserts/get_gl_Position.glsl b/manimlib/shaders/inserts/get_gl_Position.glsl index 7789ae64..8ad69d92 100644 --- a/manimlib/shaders/inserts/get_gl_Position.glsl +++ b/manimlib/shaders/inserts/get_gl_Position.glsl @@ -3,18 +3,21 @@ uniform mat4 view; uniform float focal_distance; const float DEFAULT_FRAME_HEIGHT = 8.0; -const float DEFAULT_FRAME_WIDTH = DEFAULT_FRAME_HEIGHT * 16.0 / 9.0; +const float ASPECT_RATIO = 16.0 / 9.0; +const float X_SCALE = 2.0 / DEFAULT_FRAME_HEIGHT / ASPECT_RATIO; +const float Y_SCALE = 2.0 / DEFAULT_FRAME_HEIGHT; -vec4 get_gl_Position(vec3 point){ +void emit_gl_Position(vec3 point){ vec4 result = vec4(point, 1.0); if(!bool(is_fixed_in_frame)){ result = view * result; } - result.x *= 2.0 / DEFAULT_FRAME_WIDTH; - result.y *= 2.0 / DEFAULT_FRAME_HEIGHT; + // Essentially a projection matrix + result.x *= X_SCALE; + result.y *= Y_SCALE; result.z /= focal_distance; result.w = 1.0 - result.z; // Flip and scale to prevent premature clipping result.z *= -0.1; - return result; + gl_Position = result; } diff --git a/manimlib/shaders/mandelbrot_fractal/vert.glsl b/manimlib/shaders/mandelbrot_fractal/vert.glsl index 879df923..674abc67 100644 --- a/manimlib/shaders/mandelbrot_fractal/vert.glsl +++ b/manimlib/shaders/mandelbrot_fractal/vert.glsl @@ -6,9 +6,9 @@ out vec3 xyz_coords; uniform float scale_factor; uniform vec3 offset; -#INSERT get_gl_Position.glsl +#INSERT emit_gl_Position.glsl void main(){ xyz_coords = (point - offset) / scale_factor; - gl_Position = get_gl_Position(point); + emit_gl_Position(point); } \ No newline at end of file diff --git a/manimlib/shaders/newton_fractal/vert.glsl b/manimlib/shaders/newton_fractal/vert.glsl index 879df923..674abc67 100644 --- a/manimlib/shaders/newton_fractal/vert.glsl +++ b/manimlib/shaders/newton_fractal/vert.glsl @@ -6,9 +6,9 @@ out vec3 xyz_coords; uniform float scale_factor; uniform vec3 offset; -#INSERT get_gl_Position.glsl +#INSERT emit_gl_Position.glsl void main(){ xyz_coords = (point - offset) / scale_factor; - gl_Position = get_gl_Position(point); + emit_gl_Position(point); } \ No newline at end of file diff --git a/manimlib/shaders/quadratic_bezier_fill/geom.glsl b/manimlib/shaders/quadratic_bezier_fill/geom.glsl index 462f00aa..24723b9b 100644 --- a/manimlib/shaders/quadratic_bezier_fill/geom.glsl +++ b/manimlib/shaders/quadratic_bezier_fill/geom.glsl @@ -27,7 +27,7 @@ const vec2 SIMPLE_QUADRATIC[3] = vec2[3]( ); // Analog of import for manim only -#INSERT get_gl_Position.glsl +#INSERT emit_gl_Position.glsl void emit_triangle(vec3 points[3], vec4 v_color[3]){ @@ -41,7 +41,7 @@ void emit_triangle(vec3 points[3], vec4 v_color[3]){ uv_coords = SIMPLE_QUADRATIC[i]; color = v_color[i]; point = points[i]; - gl_Position = get_gl_Position(points[i]); + emit_gl_Position(points[i]); EmitVertex(); } EndPrimitive(); diff --git a/manimlib/shaders/quadratic_bezier_stroke/geom.glsl b/manimlib/shaders/quadratic_bezier_stroke/geom.glsl index 201ab4ab..6598c3ce 100644 --- a/manimlib/shaders/quadratic_bezier_stroke/geom.glsl +++ b/manimlib/shaders/quadratic_bezier_stroke/geom.glsl @@ -36,7 +36,7 @@ const float COS_THRESHOLD = 0.99; vec3 unit_normal = vec3(0.0, 0.0, 1.0); -#INSERT get_gl_Position.glsl +#INSERT emit_gl_Position.glsl #INSERT get_xyz_to_uv.glsl #INSERT finalize_color.glsl @@ -207,7 +207,7 @@ void main() { } color = finalize_color(v_color[i / 2], corners[i], unit_normal); - gl_Position = get_gl_Position(corners[i]); + emit_gl_Position(corners[i]); EmitVertex(); } EndPrimitive(); diff --git a/manimlib/shaders/simple_vert.glsl b/manimlib/shaders/simple_vert.glsl index b5e0c229..c8934dd0 100644 --- a/manimlib/shaders/simple_vert.glsl +++ b/manimlib/shaders/simple_vert.glsl @@ -2,8 +2,8 @@ in vec3 point; -#INSERT get_gl_Position.glsl +#INSERT emit_gl_Position.glsl void main(){ - gl_Position = get_gl_Position(point); + emit_gl_Position(point); } \ No newline at end of file diff --git a/manimlib/shaders/surface/vert.glsl b/manimlib/shaders/surface/vert.glsl index 7ea76b73..d351878b 100644 --- a/manimlib/shaders/surface/vert.glsl +++ b/manimlib/shaders/surface/vert.glsl @@ -9,12 +9,12 @@ in vec4 rgba; out vec4 v_color; -#INSERT get_gl_Position.glsl +#INSERT emit_gl_Position.glsl #INSERT get_unit_normal.glsl #INSERT finalize_color.glsl void main(){ - gl_Position = get_gl_Position(point); + emit_gl_Position(point); vec3 normal = get_unit_normal(point, du_point, dv_point); v_color = finalize_color(rgba, point, normal); diff --git a/manimlib/shaders/textured_surface/vert.glsl b/manimlib/shaders/textured_surface/vert.glsl index 92826b36..74c76515 100644 --- a/manimlib/shaders/textured_surface/vert.glsl +++ b/manimlib/shaders/textured_surface/vert.glsl @@ -11,7 +11,7 @@ out vec3 v_normal; out vec2 v_im_coords; out float v_opacity; -#INSERT get_gl_Position.glsl +#INSERT emit_gl_Position.glsl #INSERT get_unit_normal.glsl void main(){ @@ -19,5 +19,5 @@ void main(){ v_normal = get_unit_normal(point, du_point, dv_point); v_im_coords = im_coords; v_opacity = opacity; - gl_Position = get_gl_Position(point); + emit_gl_Position(point); } \ No newline at end of file diff --git a/manimlib/shaders/true_dot/vert.glsl b/manimlib/shaders/true_dot/vert.glsl index 2f408641..3dca6f24 100644 --- a/manimlib/shaders/true_dot/vert.glsl +++ b/manimlib/shaders/true_dot/vert.glsl @@ -12,14 +12,14 @@ out float scaled_aaw; out vec3 v_point; out vec3 light_pos; -#INSERT get_gl_Position.glsl +#INSERT emit_gl_Position.glsl void main(){ v_point = point; color = rgba; scaled_aaw = (anti_alias_width * pixel_size) / radius; - gl_Position = get_gl_Position(point); + emit_gl_Position(point); float z = -10 * gl_Position.z; float scaled_radius = radius * 1.0 / (1.0 - z); gl_PointSize = 2 * ((scaled_radius / pixel_size) + anti_alias_width);