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

import billboard_picking_vert from "./billboard_picking.vert.glsl";
import billboard_picking_frag from "./billboard_picking.frag.glsl";

import billboard_screen_vert from "./billboard_screen.vert.glsl";
import billboard_screen_frag from "./billboard_screen.frag.glsl";
import billboard_screen_woit_frag from "./billboard_screen_woit.frag.glsl";

export function billboardPicking(): ShaderProgram {
    return new ShaderProgram("billboardPicking", {
        uniforms: {
            viewport: "vec2",
            projectionMatrix: "mat4",
            viewMatrix: "mat4",
            eyePositionHigh: "vec3",
            eyePositionLow: "vec3",
            planetRadius: "float",
            uScaleByDistance: "vec4",
            uFocusDistance: "float",
            opacity: "float",
            depthOffset: "float",
            depthOffsetNear: "float"
        },
        attributes: {
            a_vertices: "vec2",
            a_positionsHigh: "vec3",
            a_positionsLow: "vec3",
            a_offset: "vec2",
            a_size: "vec2",
            a_rotation: "float",
            a_rgba: "vec4"
        },
        vertexShader: billboard_picking_vert,
        fragmentShader: billboard_picking_frag
    });
}

export function billboard_screen(): ShaderProgram {
    return new ShaderProgram("billboard", {
        uniforms: {
            viewport: "vec2",
            u_texture: "sampler2d",
            projectionMatrix: "mat4",
            viewMatrix: "mat4",
            eyePositionHigh: "vec3",
            eyePositionLow: "vec3",
            planetRadius: "float",
            uScaleByDistance: "vec4",
            uFocusDistance: "float",
            opacity: "float",
            depthOffset: "float",
            depthOffsetNear: "float"
        },
        attributes: {
            a_vertices: "vec2",
            a_texCoord: "vec2",
            a_positionsHigh: "vec3",
            a_positionsLow: "vec3",
            a_offset: "vec2",
            a_size: "vec2",
            a_rotation: "float",
            a_rgba: "vec4"
        },
        vertexShader: billboard_screen_vert,
        fragmentShader: billboard_screen_frag
    });
}

export function billboard_screen_woit(): ShaderProgram {
    return new ShaderProgram("billboardWoit", {
        uniforms: {
            viewport: "vec2",
            u_texture: "sampler2d",
            projectionMatrix: "mat4",
            viewMatrix: "mat4",
            eyePositionHigh: "vec3",
            eyePositionLow: "vec3",
            planetRadius: "float",
            uScaleByDistance: "vec4",
            uFocusDistance: "float",
            opacity: "float",
            depthOffset: "float",
            depthOffsetNear: "float",
            useReverseDepth: "float"
        },
        attributes: {
            a_vertices: "vec2",
            a_texCoord: "vec2",
            a_positionsHigh: "vec3",
            a_positionsLow: "vec3",
            a_offset: "vec2",
            a_size: "vec2",
            a_rotation: "float",
            a_rgba: "vec4"
        },
        vertexShader: billboard_screen_vert,
        fragmentShader: billboard_screen_woit_frag
    });
}