Shader mm_contour - Correction to avoid z-fighting moved from fragment shader to vertex shader
This commit is contained in:
parent
b265e91df2
commit
0995cfc658
@ -1,13 +1,8 @@
|
|||||||
#version 110
|
#version 110
|
||||||
|
|
||||||
const float EPSILON = 0.0001;
|
|
||||||
|
|
||||||
uniform vec4 uniform_color;
|
uniform vec4 uniform_color;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_FragColor = uniform_color;
|
gl_FragColor = uniform_color;
|
||||||
// Values inside depth buffer for fragments of the contour of a selected area are offset
|
|
||||||
// by small epsilon to solve z-fighting between painted triangles and contour lines.
|
|
||||||
gl_FragDepth = gl_FragCoord.z - EPSILON;
|
|
||||||
}
|
}
|
||||||
|
@ -7,5 +7,8 @@ attribute vec3 v_position;
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0);
|
// Add small epsilon to z to solve z-fighting between painted triangles and contour lines.
|
||||||
|
vec4 clip_position = projection_matrix * view_model_matrix * vec4(v_position, 1.0);
|
||||||
|
clip_position.z -= 0.00001 * abs(clip_position.w);
|
||||||
|
gl_Position = clip_position;
|
||||||
}
|
}
|
||||||
|
@ -1,13 +1,8 @@
|
|||||||
#version 140
|
#version 140
|
||||||
|
|
||||||
const float EPSILON = 0.0001;
|
|
||||||
|
|
||||||
uniform vec4 uniform_color;
|
uniform vec4 uniform_color;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_FragColor = uniform_color;
|
gl_FragColor = uniform_color;
|
||||||
// Values inside depth buffer for fragments of the contour of a selected area are offset
|
|
||||||
// by small epsilon to solve z-fighting between painted triangles and contour lines.
|
|
||||||
gl_FragDepth = gl_FragCoord.z - EPSILON;
|
|
||||||
}
|
}
|
||||||
|
@ -7,5 +7,8 @@ in vec3 v_position;
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = projection_matrix * view_model_matrix * vec4(v_position, 1.0);
|
// Add small epsilon to z to solve z-fighting between painted triangles and contour lines.
|
||||||
|
vec4 clip_position = projection_matrix * view_model_matrix * vec4(v_position, 1.0);
|
||||||
|
clip_position.z -= 0.00001 * abs(clip_position.w);
|
||||||
|
gl_Position = clip_position;
|
||||||
}
|
}
|
||||||
|
@ -1,11 +1,6 @@
|
|||||||
#version 110
|
#version 110
|
||||||
|
|
||||||
const float EPSILON = 0.0001;
|
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
|
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
|
||||||
// Values inside depth buffer for fragments of the contour of a selected area are offset
|
|
||||||
// by small epsilon to solve z-fighting between painted triangles and contour lines.
|
|
||||||
gl_FragDepth = gl_FragCoord.z - EPSILON;
|
|
||||||
}
|
}
|
||||||
|
@ -2,5 +2,8 @@
|
|||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = ftransform();
|
// Add small epsilon to z to solve z-fighting between painted triangles and contour lines.
|
||||||
|
vec4 clip_position = gl_ModelViewProjectionMatrix * gl_Vertex;
|
||||||
|
clip_position.z -= 0.00001 * abs(clip_position.w);
|
||||||
|
gl_Position = clip_position;
|
||||||
}
|
}
|
||||||
|
@ -627,11 +627,7 @@ void TriangleSelectorMmGui::render(ImGuiWrapper *imgui)
|
|||||||
|
|
||||||
auto *contour_shader = wxGetApp().get_shader("mm_contour");
|
auto *contour_shader = wxGetApp().get_shader("mm_contour");
|
||||||
contour_shader->start_using();
|
contour_shader->start_using();
|
||||||
|
|
||||||
glsafe(::glDepthFunc(GL_LEQUAL));
|
|
||||||
m_paint_contour.render();
|
m_paint_contour.render();
|
||||||
glsafe(::glDepthFunc(GL_LESS));
|
|
||||||
|
|
||||||
contour_shader->stop_using();
|
contour_shader->stop_using();
|
||||||
}
|
}
|
||||||
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
|
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
|
@ -967,11 +967,7 @@ void TriangleSelectorGUI::render(ImGuiWrapper* imgui)
|
|||||||
|
|
||||||
auto *contour_shader = wxGetApp().get_shader("mm_contour");
|
auto *contour_shader = wxGetApp().get_shader("mm_contour");
|
||||||
contour_shader->start_using();
|
contour_shader->start_using();
|
||||||
|
|
||||||
glsafe(::glDepthFunc(GL_LEQUAL));
|
|
||||||
m_paint_contour.render();
|
m_paint_contour.render();
|
||||||
glsafe(::glDepthFunc(GL_LESS));
|
|
||||||
|
|
||||||
contour_shader->stop_using();
|
contour_shader->stop_using();
|
||||||
}
|
}
|
||||||
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
|
#endif // ENABLE_LEGACY_OPENGL_REMOVAL
|
||||||
@ -1372,10 +1368,7 @@ void TriangleSelectorGUI::render_paint_contour()
|
|||||||
contour_shader->set_uniform("projection_matrix", camera.get_projection_matrix());
|
contour_shader->set_uniform("projection_matrix", camera.get_projection_matrix());
|
||||||
#endif // ENABLE_GL_SHADERS_ATTRIBUTES
|
#endif // ENABLE_GL_SHADERS_ATTRIBUTES
|
||||||
|
|
||||||
glsafe(::glDepthFunc(GL_LEQUAL));
|
|
||||||
m_paint_contour.render();
|
m_paint_contour.render();
|
||||||
glsafe(::glDepthFunc(GL_LESS));
|
|
||||||
|
|
||||||
contour_shader->stop_using();
|
contour_shader->stop_using();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user