Differential D17089 Diff 60052 source/blender/draw/engines/overlay/shaders/overlay_volume_gridlines_vert.glsl
Changeset View
Changeset View
Standalone View
Standalone View
source/blender/draw/engines/overlay/shaders/overlay_volume_gridlines_vert.glsl
| #pragma BLENDER_REQUIRE(common_view_lib.glsl) | #pragma BLENDER_REQUIRE(common_view_lib.glsl) | ||||
| /* Corners for cell outlines. 0.45 is arbitrary. Any value below 0.5 can be used to avoid | |||||
| * overlapping of the outlines. */ | |||||
| const vec3 corners[4] = vec3[4](vec3(-0.45, 0.45, 0.0), | |||||
| vec3(0.45, 0.45, 0.0), | |||||
| vec3(0.45, -0.45, 0.0), | |||||
| vec3(-0.45, -0.45, 0.0)); | |||||
| const int indices[8] = int[8](0, 1, 1, 2, 2, 3, 3, 0); | |||||
| vec4 flag_to_color(uint flag) | vec4 flag_to_color(uint flag) | ||||
| { | { | ||||
| /* Color mapping for flags */ | /* Color mapping for flags */ | ||||
| vec4 color = vec4(0.0, 0.0, 0.0, 1.0); | vec4 color = vec4(0.0, 0.0, 0.0, 1.0); | ||||
| /* Cell types: 1 is Fluid, 2 is Obstacle, 4 is Empty, 8 is Inflow, 16 is Outflow */ | /* Cell types: 1 is Fluid, 2 is Obstacle, 4 is Empty, 8 is Inflow, 16 is Outflow */ | ||||
| if (bool(flag & uint(1))) { | if (bool(flag & uint(1))) { | ||||
| color.rgb += vec3(0.0, 0.0, 0.75); /* blue */ | color.rgb += vec3(0.0, 0.0, 0.75); /* blue */ | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 62 Lines • ▼ Show 20 Lines | |||||
| #ifdef SHOW_RANGE | #ifdef SHOW_RANGE | ||||
| float value = texelFetch(fieldTexture, cell_co + ivec3(cell_offset), 0).r; | float value = texelFetch(fieldTexture, cell_co + ivec3(cell_offset), 0).r; | ||||
| if (value >= lowerBound && value <= upperBound) { | if (value >= lowerBound && value <= upperBound) { | ||||
| if (cellFilter == 0 || bool(uint(cellFilter) & flag)) { | if (cellFilter == 0 || bool(uint(cellFilter) & flag)) { | ||||
| finalColor = rangeColor; | finalColor = rangeColor; | ||||
| } | } | ||||
| } | } | ||||
| #endif | #endif | ||||
| /* NOTE(Metal): Declaring constant arrays in function scope to avoid increasing local shader | |||||
| * memory pressure. */ | |||||
| const int indices[8] = int[8](0, 1, 1, 2, 2, 3, 3, 0); | |||||
| /* Corners for cell outlines. 0.45 is arbitrary. Any value below 0.5 can be used to avoid | |||||
| * overlapping of the outlines. */ | |||||
| const vec3 corners[4] = vec3[4](vec3(-0.45, 0.45, 0.0), | |||||
| vec3(0.45, 0.45, 0.0), | |||||
| vec3(0.45, -0.45, 0.0), | |||||
| vec3(-0.45, -0.45, 0.0)); | |||||
| vec3 pos = domainOriginOffset + cellSize * (vec3(cell_co + adaptiveCellOffset) + cell_offset); | vec3 pos = domainOriginOffset + cellSize * (vec3(cell_co + adaptiveCellOffset) + cell_offset); | ||||
| vec3 rotated_pos = rot_mat * corners[indices[gl_VertexID % 8]]; | vec3 rotated_pos = rot_mat * corners[indices[gl_VertexID % 8]]; | ||||
| pos += rotated_pos * cellSize; | pos += rotated_pos * cellSize; | ||||
| vec3 world_pos = point_object_to_world(pos); | vec3 world_pos = point_object_to_world(pos); | ||||
| gl_Position = point_world_to_ndc(world_pos); | gl_Position = point_world_to_ndc(world_pos); | ||||
| } | } | ||||