/** * GLSL shader sources for 3D instanced rendering. * WebGL2 / GLSL ES 3.00 */ export declare const BUBBLE_VERT = "#version 300 es\nprecision highp float;\n\n// Base geometry vertex\nin vec3 a_position;\n\n// Per-instance attributes\nin vec3 a_instancePos;\nin float a_scale;\nin vec3 a_color;\n\n// Uniforms\nuniform mat4 u_viewProjection;\nuniform float u_opacity;\n\n// Varyings\nout vec3 v_color;\nout vec3 v_normal;\nout vec3 v_worldPos;\n\nvoid main() {\n // Scale and translate instance\n vec3 worldPos = (a_position * a_scale) + a_instancePos;\n \n gl_Position = u_viewProjection * vec4(worldPos, 1.0);\n \n v_color = a_color;\n v_normal = normalize(a_position); // For sphere, normal = normalized position\n v_worldPos = worldPos;\n}\n"; export declare const BUBBLE_FRAG = "#version 300 es\nprecision highp float;\n\nin vec3 v_color;\nin vec3 v_normal;\nin vec3 v_worldPos;\n\nuniform float u_opacity;\nuniform vec3 u_lightDir;\nuniform float u_ambient;\n\nout vec4 fragColor;\n\nvoid main() {\n // Simple diffuse lighting\n vec3 normal = normalize(v_normal);\n vec3 lightDir = normalize(u_lightDir);\n \n float diff = max(dot(normal, lightDir), 0.0);\n float lighting = u_ambient + (1.0 - u_ambient) * diff;\n \n vec3 color = v_color * lighting;\n fragColor = vec4(color, u_opacity);\n}\n"; export declare const BUBBLE_FLAT_FRAG = "#version 300 es\nprecision highp float;\n\nin vec3 v_color;\nin vec3 v_normal;\nin vec3 v_worldPos;\n\nuniform float u_opacity;\n\nout vec4 fragColor;\n\nvoid main() {\n fragColor = vec4(v_color, u_opacity);\n}\n"; export declare const BUBBLE_VERT_WEBGL1 = "\nprecision highp float;\n\n// Base geometry vertex\nattribute vec3 a_position;\n\n// Per-instance attributes\nattribute vec3 a_instancePos;\nattribute float a_scale;\nattribute vec3 a_color;\n\n// Uniforms\nuniform mat4 u_viewProjection;\nuniform float u_opacity;\n\n// Varyings\nvarying vec3 v_color;\nvarying vec3 v_normal;\nvarying vec3 v_worldPos;\n\nvoid main() {\n vec3 worldPos = (a_position * a_scale) + a_instancePos;\n \n gl_Position = u_viewProjection * vec4(worldPos, 1.0);\n \n v_color = a_color;\n v_normal = normalize(a_position);\n v_worldPos = worldPos;\n}\n"; export declare const BUBBLE_FRAG_WEBGL1 = "\nprecision highp float;\n\nvarying vec3 v_color;\nvarying vec3 v_normal;\nvarying vec3 v_worldPos;\n\nuniform float u_opacity;\nuniform vec3 u_lightDir;\nuniform float u_ambient;\n\nvoid main() {\n vec3 normal = normalize(v_normal);\n vec3 lightDir = normalize(u_lightDir);\n \n float diff = max(dot(normal, lightDir), 0.0);\n float lighting = u_ambient + (1.0 - u_ambient) * diff;\n \n vec3 color = v_color * lighting;\n gl_FragColor = vec4(color, u_opacity);\n}\n"; export declare const AXIS_VERT = "#version 300 es\nprecision highp float;\n\nin vec3 a_position;\nin vec3 a_color;\n\nuniform mat4 u_viewProjection;\n\nout vec3 v_color;\n\nvoid main() {\n gl_Position = u_viewProjection * vec4(a_position, 1.0);\n v_color = a_color;\n}\n"; export declare const AXIS_FRAG = "#version 300 es\nprecision highp float;\n\nin vec3 v_color;\nout vec4 fragColor;\n\nvoid main() {\n fragColor = vec4(v_color, 1.0);\n}\n"; export declare const SURFACE_VERT = "#version 300 es\nprecision highp float;\n\nin vec3 a_position;\nin vec3 a_normal;\nin vec3 a_color;\n\nuniform mat4 u_viewProjection;\n\nout vec3 v_color;\nout vec3 v_normal;\nout vec3 v_worldPos;\n\nvoid main() {\n gl_Position = u_viewProjection * vec4(a_position, 1.0);\n v_color = a_color;\n v_normal = a_normal;\n v_worldPos = a_position;\n}\n"; export declare const SURFACE_FRAG = "#version 300 es\nprecision highp float;\n\nin vec3 v_color;\nin vec3 v_normal;\nin vec3 v_worldPos;\n\nuniform float u_opacity;\nuniform vec3 u_lightDir;\nuniform float u_ambient;\n\nout vec4 fragColor;\n\nvoid main() {\n vec3 normal = normalize(v_normal);\n vec3 lightDir = normalize(u_lightDir);\n \n float diff = max(dot(normal, lightDir), 0.0);\n float lighting = u_ambient + (1.0 - u_ambient) * diff;\n \n vec3 color = v_color * lighting;\n fragColor = vec4(color, u_opacity);\n}\n"; export declare const LINE_POINT_VERT = "#version 300 es\nprecision highp float;\n\nin vec3 a_position;\nin vec3 a_color;\n\nuniform mat4 u_viewProjection;\nuniform float u_pointSize;\n\nout vec3 v_color;\n\nvoid main() {\n gl_Position = u_viewProjection * vec4(a_position, 1.0);\n gl_PointSize = u_pointSize;\n v_color = a_color;\n}\n"; export declare const LINE_POINT_FRAG = "#version 300 es\nprecision highp float;\n\nin vec3 v_color;\nuniform float u_opacity;\n\nout vec4 fragColor;\n\nvoid main() {\n fragColor = vec4(v_color, u_opacity);\n}\n"; export declare const WATERFALL_VERT = "#version 300 es\nprecision highp float;\n\nin vec3 a_position;\nin vec3 a_color;\nin vec3 a_normal;\n\nuniform mat4 u_viewProjection;\n\nout vec3 v_color;\nout float v_depth;\nout vec3 v_normal;\n\nvoid main() {\n gl_Position = u_viewProjection * vec4(a_position, 1.0);\n v_color = a_color;\n v_depth = a_position.z;\n v_normal = a_normal;\n}\n"; export declare const WATERFALL_FRAG = "#version 300 es\nprecision highp float;\n\nin vec3 v_color;\nin float v_depth;\nin vec3 v_normal;\n\nuniform float u_opacity;\nuniform float u_fadeStart;\nuniform float u_fadeEnd;\nuniform vec3 u_lightDir;\nuniform float u_ambient;\n\nout vec4 fragColor;\n\nvoid main() {\n // Lighting\n vec3 normal = normalize(v_normal);\n vec3 lightDir = normalize(u_lightDir);\n float diff = max(dot(normal, lightDir), 0.0);\n float lighting = u_ambient + (1.0 - u_ambient) * diff;\n \n // Fade based on depth (Z position)\n float fade = 1.0;\n if (u_fadeEnd > u_fadeStart) {\n fade = 1.0 - smoothstep(u_fadeStart, u_fadeEnd, v_depth);\n }\n \n fragColor = vec4(v_color * lighting, u_opacity * fade);\n}\n"; export declare const VECTOR_FIELD_VERT = "#version 300 es\nprecision highp float;\n\nin vec3 a_position; // Base geometry (e.g., arrow)\nin vec3 a_instancePos; // Origin of the vector\nin vec3 a_direction; // Direction vector [dx, dy, dz]\nin vec3 a_color;\nin vec3 a_normal;\n\nuniform mat4 u_viewProjection;\nuniform float u_scaleMultiplier;\n\nout vec3 v_color;\nout vec3 v_normal;\n\nvoid main() {\n float mag = length(a_direction);\n vec3 dir = normalize(a_direction);\n \n // Construct rotation matrix to align with direction\n vec3 up = abs(dir.y) < 0.99 ? vec3(0.0, 1.0, 0.0) : vec3(1.0, 0.0, 0.0);\n vec3 right = normalize(cross(up, dir));\n vec3 actualUp = cross(dir, right);\n mat3 rotation = mat3(right, actualUp, dir);\n \n v_normal = rotation * a_normal;\n \n // Scale based on magnitude\n vec3 scaledPos = a_position * mag * u_scaleMultiplier;\n \n // Rotate and translate\n vec3 worldPos = (rotation * scaledPos) + a_instancePos;\n \n gl_Position = u_viewProjection * vec4(worldPos, 1.0);\n v_color = a_color;\n}\n"; export declare const VECTOR_FIELD_FRAG = "#version 300 es\nprecision highp float;\n\nin vec3 v_color;\nin vec3 v_normal;\nuniform float u_opacity;\nuniform vec3 u_lightDir;\nuniform float u_ambient;\nout vec4 fragColor;\n\nvoid main() {\n vec3 normal = normalize(v_normal);\n vec3 lightDir = normalize(u_lightDir);\n float diff = max(dot(normal, lightDir), 0.0);\n float lighting = u_ambient + (1.0 - u_ambient) * diff;\n fragColor = vec4(v_color * lighting, u_opacity);\n}\n"; export declare const POINT_CLOUD_VERT = "#version 300 es\nprecision highp float;\n\nin vec3 a_position;\nin vec3 a_color;\nin float a_size;\n\nuniform mat4 u_viewProjection;\nuniform float u_globalSize;\n\nout vec3 v_color;\n\nvoid main() {\n gl_Position = u_viewProjection * vec4(a_position, 1.0);\n gl_PointSize = a_size * u_globalSize;\n v_color = a_color;\n \n // Basic depth attenuation (points get smaller with distance)\n gl_PointSize /= gl_Position.w * 0.5;\n}\n"; export declare const POINT_CLOUD_FRAG = "#version 300 es\nprecision highp float;\n\nin vec3 v_color;\nuniform float u_opacity;\nuniform bool u_circular;\n\nout vec4 fragColor;\n\nvoid main() {\n if (u_circular) {\n vec2 dist = gl_PointCoord - vec2(0.5);\n if (dot(dist, dist) > 0.25) discard;\n }\n \n fragColor = vec4(v_color, u_opacity);\n}\n"; export declare const VOXEL_VERT = "#version 300 es\nprecision highp float;\n\nin vec3 a_position; // Base cube vertex\nin vec3 a_instancePos; // Voxel center\nin float a_value; // Voxel intensity [0, 1]\n\nuniform mat4 u_viewProjection;\nuniform float u_voxelSize;\nuniform float u_threshold;\n\nout float v_value;\nout vec3 v_normal;\n\nvoid main() {\n if (a_value < u_threshold) {\n // Hide voxel if below threshold\n gl_Position = vec4(2.0, 2.0, 2.0, 1.0);\n return;\n }\n \n vec3 worldPos = (a_position * u_voxelSize) + a_instancePos;\n gl_Position = u_viewProjection * vec4(worldPos, 1.0);\n v_value = a_value;\n v_normal = normalize(a_position);\n}\n"; export declare const VOXEL_FRAG = "#version 300 es\nprecision highp float;\n\nin float v_value;\nin vec3 v_normal;\n\nuniform float u_opacity;\nuniform vec3 u_lightDir;\nuniform float u_ambient;\n\nout vec4 fragColor;\n\n// Simple heatmap coloring\nvec3 heatmap(float t) {\n return vec3(t, 1.0 - t, 0.5 + sin(t * 3.14159) * 0.5);\n}\n\nvoid main() {\n vec3 normal = normalize(v_normal);\n vec3 lightDir = normalize(u_lightDir);\n float diff = max(dot(normal, lightDir), 0.0);\n float lighting = u_ambient + (1.0 - u_ambient) * diff;\n \n // Spectral colormap\n vec3 color = vec3(v_value, 0.2, 1.0 - v_value);\n if (v_value > 0.5) color = vec3(1.0, 1.0 - (v_value-0.5)*2.0, 0.0);\n \n fragColor = vec4(color * lighting, u_opacity * v_value);\n}\n"; export declare const RIBBON_VERT = "#version 300 es\nprecision highp float;\n\nin vec3 a_position;\nin vec3 a_normal;\nin vec3 a_color;\n\nuniform mat4 u_viewProjection;\n\nout vec3 v_color;\nout vec3 v_normal;\n\nvoid main() {\n gl_Position = u_viewProjection * vec4(a_position, 1.0);\n v_color = a_color;\n v_normal = a_normal;\n}\n"; export declare const RIBBON_FRAG = "#version 300 es\nprecision highp float;\n\nin vec3 v_color;\nin vec3 v_normal;\n\nuniform float u_opacity;\nuniform vec3 u_lightDir;\nuniform float u_ambient;\n\nout vec4 fragColor;\n\nvoid main() {\n vec3 normal = normalize(v_normal);\n vec3 lightDir = normalize(u_lightDir);\n float diff = max(dot(normal, lightDir), 0.0);\n float lighting = u_ambient + (1.0 - u_ambient) * diff;\n fragColor = vec4(v_color * lighting, u_opacity);\n}\n"; export declare const SURFACE_BAR_VERT = "#version 300 es\nprecision highp float;\n\nin vec3 a_position; // Base cube vertex [-0.5, 0.5]\nin vec3 a_instancePos; // Column base\nin float a_height; // Column height\nin vec3 a_color;\n\nuniform mat4 u_viewProjection;\nuniform float u_barWidth;\nuniform float u_barDepth;\n\nout vec3 v_color;\nout vec3 v_normal;\n\nvoid main() {\n vec3 pos = a_position;\n pos.x *= u_barWidth;\n pos.z *= u_barDepth;\n pos.y = (pos.y + 0.5) * a_height; \n \n vec3 worldPos = pos + a_instancePos;\n gl_Position = u_viewProjection * vec4(worldPos, 1.0);\n \n v_color = a_color;\n // Normals for a cube are essentially the vertex positions normalized if centered at 0\n // But since we offset Y, we just use the original sign for flat shading or simple lighting\n v_normal = normalize(a_position);\n}\n"; export declare const SURFACE_BAR_FRAG = "#version 300 es\nprecision highp float;\n\nin vec3 v_color;\nin vec3 v_normal;\n\nuniform float u_opacity;\nuniform vec3 u_lightDir;\nuniform float u_ambient;\n\nout vec4 fragColor;\n\nvoid main() {\n vec3 normal = normalize(v_normal);\n vec3 lightDir = normalize(u_lightDir);\n float diff = max(dot(normal, lightDir), 0.0);\n float lighting = u_ambient + (1.0 - u_ambient) * diff;\n fragColor = vec4(v_color * lighting, u_opacity);\n}\n";