Replace get_gl_Position -> emit_gl_Position

This commit is contained in:
Grant Sanderson 2023-01-30 18:43:28 -08:00
parent 215c21babf
commit e950286fa4
11 changed files with 49 additions and 23 deletions

View file

@ -10,10 +10,10 @@ out vec2 v_im_coords;
out float v_opacity; out float v_opacity;
// Analog of import for manim only // Analog of import for manim only
#INSERT get_gl_Position.glsl #INSERT emit_gl_Position.glsl
void main(){ void main(){
v_im_coords = im_coords; v_im_coords = im_coords;
v_opacity = opacity; v_opacity = opacity;
gl_Position = get_gl_Position(point); emit_gl_Position(point);
} }

View file

@ -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;
}

View file

@ -3,18 +3,21 @@ uniform mat4 view;
uniform float focal_distance; uniform float focal_distance;
const float DEFAULT_FRAME_HEIGHT = 8.0; 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); vec4 result = vec4(point, 1.0);
if(!bool(is_fixed_in_frame)){ if(!bool(is_fixed_in_frame)){
result = view * result; result = view * result;
} }
result.x *= 2.0 / DEFAULT_FRAME_WIDTH; // Essentially a projection matrix
result.y *= 2.0 / DEFAULT_FRAME_HEIGHT; result.x *= X_SCALE;
result.y *= Y_SCALE;
result.z /= focal_distance; result.z /= focal_distance;
result.w = 1.0 - result.z; result.w = 1.0 - result.z;
// Flip and scale to prevent premature clipping // Flip and scale to prevent premature clipping
result.z *= -0.1; result.z *= -0.1;
return result; gl_Position = result;
} }

View file

@ -6,9 +6,9 @@ out vec3 xyz_coords;
uniform float scale_factor; uniform float scale_factor;
uniform vec3 offset; uniform vec3 offset;
#INSERT get_gl_Position.glsl #INSERT emit_gl_Position.glsl
void main(){ void main(){
xyz_coords = (point - offset) / scale_factor; xyz_coords = (point - offset) / scale_factor;
gl_Position = get_gl_Position(point); emit_gl_Position(point);
} }

View file

@ -6,9 +6,9 @@ out vec3 xyz_coords;
uniform float scale_factor; uniform float scale_factor;
uniform vec3 offset; uniform vec3 offset;
#INSERT get_gl_Position.glsl #INSERT emit_gl_Position.glsl
void main(){ void main(){
xyz_coords = (point - offset) / scale_factor; xyz_coords = (point - offset) / scale_factor;
gl_Position = get_gl_Position(point); emit_gl_Position(point);
} }

View file

@ -27,7 +27,7 @@ const vec2 SIMPLE_QUADRATIC[3] = vec2[3](
); );
// Analog of import for manim only // 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]){ 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]; uv_coords = SIMPLE_QUADRATIC[i];
color = v_color[i]; color = v_color[i];
point = points[i]; point = points[i];
gl_Position = get_gl_Position(points[i]); emit_gl_Position(points[i]);
EmitVertex(); EmitVertex();
} }
EndPrimitive(); EndPrimitive();

View file

@ -36,7 +36,7 @@ const float COS_THRESHOLD = 0.99;
vec3 unit_normal = vec3(0.0, 0.0, 1.0); 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 get_xyz_to_uv.glsl
#INSERT finalize_color.glsl #INSERT finalize_color.glsl
@ -207,7 +207,7 @@ void main() {
} }
color = finalize_color(v_color[i / 2], corners[i], unit_normal); color = finalize_color(v_color[i / 2], corners[i], unit_normal);
gl_Position = get_gl_Position(corners[i]); emit_gl_Position(corners[i]);
EmitVertex(); EmitVertex();
} }
EndPrimitive(); EndPrimitive();

View file

@ -2,8 +2,8 @@
in vec3 point; in vec3 point;
#INSERT get_gl_Position.glsl #INSERT emit_gl_Position.glsl
void main(){ void main(){
gl_Position = get_gl_Position(point); emit_gl_Position(point);
} }

View file

@ -9,12 +9,12 @@ in vec4 rgba;
out vec4 v_color; out vec4 v_color;
#INSERT get_gl_Position.glsl #INSERT emit_gl_Position.glsl
#INSERT get_unit_normal.glsl #INSERT get_unit_normal.glsl
#INSERT finalize_color.glsl #INSERT finalize_color.glsl
void main(){ void main(){
gl_Position = get_gl_Position(point); emit_gl_Position(point);
vec3 normal = get_unit_normal(point, du_point, dv_point); vec3 normal = get_unit_normal(point, du_point, dv_point);
v_color = finalize_color(rgba, point, normal); v_color = finalize_color(rgba, point, normal);

View file

@ -11,7 +11,7 @@ out vec3 v_normal;
out vec2 v_im_coords; out vec2 v_im_coords;
out float v_opacity; out float v_opacity;
#INSERT get_gl_Position.glsl #INSERT emit_gl_Position.glsl
#INSERT get_unit_normal.glsl #INSERT get_unit_normal.glsl
void main(){ void main(){
@ -19,5 +19,5 @@ void main(){
v_normal = get_unit_normal(point, du_point, dv_point); v_normal = get_unit_normal(point, du_point, dv_point);
v_im_coords = im_coords; v_im_coords = im_coords;
v_opacity = opacity; v_opacity = opacity;
gl_Position = get_gl_Position(point); emit_gl_Position(point);
} }

View file

@ -12,14 +12,14 @@ out float scaled_aaw;
out vec3 v_point; out vec3 v_point;
out vec3 light_pos; out vec3 light_pos;
#INSERT get_gl_Position.glsl #INSERT emit_gl_Position.glsl
void main(){ void main(){
v_point = point; v_point = point;
color = rgba; color = rgba;
scaled_aaw = (anti_alias_width * pixel_size) / radius; 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 z = -10 * gl_Position.z;
float scaled_radius = radius * 1.0 / (1.0 - z); float scaled_radius = radius * 1.0 / (1.0 - z);
gl_PointSize = 2 * ((scaled_radius / pixel_size) + anti_alias_width); gl_PointSize = 2 * ((scaled_radius / pixel_size) + anti_alias_width);