shaders/ray/ray.tstypescript
import { ShaderProgram } from "../../webgl/ShaderProgram";

import ray_vert from "./ray.vert.glsl";
import ray_frag from "./ray.frag.glsl";
import ray_woit_frag from "./ray_woit.frag.glsl";

export function rayScreen(): ShaderProgram {
    return new ShaderProgram("rayScreen", {
        uniforms: {
            projectionMatrix: "mat4",
            viewMatrix: "mat4",
            eyePositionHigh: "vec3",
            eyePositionLow: "vec3",
            resolution: "float",
            uOpacity: "float",
            texAtlas: "sampler2d",
            viewport: "vec2"
        },
        attributes: {
            a_vertices: "vec2",
            a_texCoord: "vec4",
            a_startPosHigh: "vec3",
            a_startPosLow: "vec3",
            a_endPosHigh: "vec3",
            a_endPosLow: "vec3",
            a_thickness: "float",
            a_rgba: "vec4",
            a_texOffset: "float",
            a_strokeSize: "float"
        },
        vertexShader: ray_vert,
        fragmentShader: ray_frag
    });
}

export function rayScreenWoit(): ShaderProgram {
    return new ShaderProgram("rayScreenWoit", {
        uniforms: {
            projectionMatrix: "mat4",
            viewMatrix: "mat4",
            eyePositionHigh: "vec3",
            eyePositionLow: "vec3",
            resolution: "float",
            uOpacity: "float",
            texAtlas: "sampler2d",
            viewport: "vec2",
            useReverseDepth: "float"
        },
        attributes: {
            a_vertices: "vec2",
            a_texCoord: "vec4",
            a_startPosHigh: "vec3",
            a_startPosLow: "vec3",
            a_endPosHigh: "vec3",
            a_endPosLow: "vec3",
            a_thickness: "float",
            a_rgba: "vec4",
            a_texOffset: "float",
            a_strokeSize: "float"
        },
        vertexShader: ray_vert,
        fragmentShader: ray_woit_frag
    });
}