mirror of
https://github.com/3b1b/manim.git
synced 2025-04-13 09:47:07 +00:00
Stop pretending to support non-winding fill in the fill shader.
Possibly, if we want to reintroduce it later on, it should have its own dedicated shader, and maybe a distinct Mobject type too
This commit is contained in:
parent
09d147c8ef
commit
195264f079
3 changed files with 16 additions and 43 deletions
|
@ -372,13 +372,6 @@ class VShaderWrapper(ShaderWrapper):
|
||||||
if self.fill_vao is None:
|
if self.fill_vao is None:
|
||||||
return
|
return
|
||||||
|
|
||||||
# TODO, need a new test here...or to just kill non-winding fill?
|
|
||||||
winding = True
|
|
||||||
self.fill_program['winding'].value = winding
|
|
||||||
if not winding:
|
|
||||||
self.fill_vao.render()
|
|
||||||
return
|
|
||||||
|
|
||||||
original_fbo = self.ctx.fbo
|
original_fbo = self.ctx.fbo
|
||||||
texture_fbo, depth_texture_fbo, texture_vao = self.fill_canvas
|
texture_fbo, depth_texture_fbo, texture_vao = self.fill_canvas
|
||||||
|
|
||||||
|
|
|
@ -29,17 +29,15 @@ void main() {
|
||||||
cap is to make sure the original fragment color can be recovered even after
|
cap is to make sure the original fragment color can be recovered even after
|
||||||
blending with an (alpha = 1) color.
|
blending with an (alpha = 1) color.
|
||||||
*/
|
*/
|
||||||
if(winding){
|
float a = 0.95 * frag_color.a;
|
||||||
float a = 0.95 * frag_color.a;
|
if(orientation < 0) a = -a / (1 - a);
|
||||||
if(orientation < 0) a = -a / (1 - a);
|
frag_color.a = a;
|
||||||
frag_color.a = a;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bool(fill_all)) return;
|
if (bool(fill_all)) return;
|
||||||
|
|
||||||
float x = uv_coords.x;
|
float x = uv_coords.x;
|
||||||
float y = uv_coords.y;
|
float y = uv_coords.y;
|
||||||
float Fxy = (y - x * x);
|
float Fxy = (y - x * x);
|
||||||
if(!winding && orientation < 0) Fxy *= -1;
|
// if(!winding && orientation < 0) Fxy *= -1;
|
||||||
if(Fxy < 0) discard;
|
if(Fxy < 0) discard;
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,8 +3,6 @@
|
||||||
layout (triangles) in;
|
layout (triangles) in;
|
||||||
layout (triangle_strip, max_vertices = 6) out;
|
layout (triangle_strip, max_vertices = 6) out;
|
||||||
|
|
||||||
uniform bool winding;
|
|
||||||
|
|
||||||
in vec3 verts[3];
|
in vec3 verts[3];
|
||||||
in vec4 v_color[3];
|
in vec4 v_color[3];
|
||||||
in vec3 v_base_point[3];
|
in vec3 v_base_point[3];
|
||||||
|
@ -48,14 +46,6 @@ void emit_triangle(vec3 points[3], vec4 v_color[3]){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void emit_simple_triangle(){
|
|
||||||
emit_triangle(
|
|
||||||
vec3[3](verts[0], verts[1], verts[2]),
|
|
||||||
vec4[3](v_color[0], v_color[1], v_color[2])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void main(){
|
void main(){
|
||||||
// Vector graphic shaders use TRIANGLE_STRIP, but only
|
// Vector graphic shaders use TRIANGLE_STRIP, but only
|
||||||
// every other one needs to be rendered
|
// every other one needs to be rendered
|
||||||
|
@ -68,25 +58,17 @@ void main(){
|
||||||
// Check zero fill
|
// Check zero fill
|
||||||
if (vec3(v_color[0].a, v_color[1].a, v_color[2].a) == vec3(0.0, 0.0, 0.0)) return;
|
if (vec3(v_color[0].a, v_color[1].a, v_color[2].a) == vec3(0.0, 0.0, 0.0)) return;
|
||||||
|
|
||||||
|
// Emit main triangle
|
||||||
if(winding){
|
fill_all = 1.0;
|
||||||
// Emit main triangle
|
emit_triangle(
|
||||||
fill_all = 1.0;
|
vec3[3](v_base_point[0], verts[0], verts[2]),
|
||||||
emit_triangle(
|
vec4[3](v_color[1], v_color[0], v_color[2])
|
||||||
vec3[3](v_base_point[0], verts[0], verts[2]),
|
);
|
||||||
vec4[3](v_color[1], v_color[0], v_color[2])
|
// Edge triangle
|
||||||
);
|
fill_all = 0.0;
|
||||||
// Edge triangle
|
emit_triangle(
|
||||||
fill_all = 0.0;
|
vec3[3](verts[0], verts[1], verts[2]),
|
||||||
emit_simple_triangle();
|
vec4[3](v_color[0], v_color[1], v_color[2])
|
||||||
}else{
|
);
|
||||||
// In this case, one should fill all if the vertices are
|
|
||||||
// not in sequential order
|
|
||||||
fill_all = float(
|
|
||||||
(v_vert_index[1] - v_vert_index[0]) != 1.0 ||
|
|
||||||
(v_vert_index[2] - v_vert_index[1]) != 1.0
|
|
||||||
);
|
|
||||||
emit_simple_triangle();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue