Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/draw/engines/overlay/shaders/overlay_extra_wire_vert.glsl')
-rw-r--r--source/blender/draw/engines/overlay/shaders/overlay_extra_wire_vert.glsl47
1 files changed, 47 insertions, 0 deletions
diff --git a/source/blender/draw/engines/overlay/shaders/overlay_extra_wire_vert.glsl b/source/blender/draw/engines/overlay/shaders/overlay_extra_wire_vert.glsl
new file mode 100644
index 00000000000..cd217021e8f
--- /dev/null
+++ b/source/blender/draw/engines/overlay/shaders/overlay_extra_wire_vert.glsl
@@ -0,0 +1,47 @@
+
+#pragma BLENDER_REQUIRE(common_view_clipping_lib.glsl)
+#pragma BLENDER_REQUIRE(common_view_lib.glsl)
+
+vec2 screen_position(vec4 p)
+{
+ return ((p.xy / p.w) * 0.5 + 0.5) * sizeViewport.xy;
+}
+
+void main()
+{
+ vec3 world_pos = point_object_to_world(pos);
+ gl_Position = point_world_to_ndc(world_pos);
+
+#ifdef SELECT_EDGES
+ /* HACK: to avoid losing sub-pixel object in selections, we add a bit of randomness to the
+ * wire to at least create one fragment that will pass the occlusion query. */
+ /* TODO(fclem): Limit this workaround to selection. It's not very noticeable but still... */
+ gl_Position.xy += drw_view.viewport_size_inverse * gl_Position.w *
+ ((gl_VertexID % 2 == 0) ? -1.0 : 1.0);
+#endif
+
+ stipple_coord = stipple_start = screen_position(gl_Position);
+
+#ifdef OBJECT_WIRE
+ /* Extract data packed inside the unused mat4 members. */
+ finalColor = vec4(ModelMatrix[0][3], ModelMatrix[1][3], ModelMatrix[2][3], ModelMatrix[3][3]);
+#else
+
+ if (colorid != 0) {
+ /* TH_CAMERA_PATH is the only color code at the moment.
+ * Checking `colorid != 0` to avoid having to sync its value with the GLSL code. */
+ finalColor = colorCameraPath;
+ finalColor.a = 0.0; /* No Stipple */
+ }
+ else {
+ finalColor = color;
+ finalColor.a = 1.0; /* Stipple */
+ }
+#endif
+
+#ifdef SELECT_EDGES
+ finalColor.a = 0.0; /* No Stipple */
+#endif
+
+ view_clipping_distances(world_pos);
+}