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

import label_webgl2_vert from "./label_webgl2.vert.glsl";
import label_webgl2_frag from "./label_webgl2.frag.glsl";
import label_woit_frag from "./label_woit.frag.glsl";

import label_picking_vert from "./label_picking.vert.glsl";
import label_picking_frag from "./label_picking.frag.glsl";

export function label_webgl2(): ShaderProgram {
    return new ShaderProgram("label", {
        uniforms: {
            viewport: "vec2",
            fontTextureArr: "sampler2darray",
            sdfParamsArr: "vec4",
            projectionMatrix: "mat4",
            viewMatrix: "mat4",
            eyePositionHigh: "vec3",
            eyePositionLow: "vec3",
            planetRadius: "float",
            scaleByDistance: "vec4",
            uFocusDistance: "float",
            opacity: "float",
            isOutlinePass: "int",
            depthOffset: "float",
            depthOffsetNear: "float"
        },
        attributes: {
            a_outline: "float",
            a_gliphParam: "vec4",
            a_vertices: "vec2",
            a_texCoord: "vec4",
            a_positionsHigh: "vec3",
            a_positionsLow: "vec3",
            a_size: "float",
            a_rotation: "float",
            a_rgba: "vec4",
            a_offset: "vec2",
            a_fontIndex: "float"
        },
        vertexShader: label_webgl2_vert,
        fragmentShader: label_webgl2_frag
    });
}

export function label_woit(): ShaderProgram {
    return new ShaderProgram("labelWoit", {
        uniforms: {
            viewport: "vec2",
            fontTextureArr: "sampler2darray",
            sdfParamsArr: "vec4",
            projectionMatrix: "mat4",
            viewMatrix: "mat4",
            eyePositionHigh: "vec3",
            eyePositionLow: "vec3",
            planetRadius: "float",
            scaleByDistance: "vec4",
            uFocusDistance: "float",
            opacity: "float",
            isOutlinePass: "int",
            depthOffset: "float",
            depthOffsetNear: "float",
            useReverseDepth: "float"
        },
        attributes: {
            a_outline: "float",
            a_gliphParam: "vec4",
            a_vertices: "vec2",
            a_texCoord: "vec4",
            a_positionsHigh: "vec3",
            a_positionsLow: "vec3",
            a_size: "float",
            a_rotation: "float",
            a_rgba: "vec4",
            a_offset: "vec2",
            a_fontIndex: "float"
        },
        vertexShader: label_webgl2_vert,
        fragmentShader: label_woit_frag
    });
}

export function labelPicking(): ShaderProgram {
    return new ShaderProgram("labelPicking", {
        uniforms: {
            viewport: "vec2",
            projectionMatrix: "mat4",
            viewMatrix: "mat4",
            eyePositionHigh: "vec3",
            eyePositionLow: "vec3",
            planetRadius: "float",
            scaleByDistance: "vec4",
            uFocusDistance: "float",
            opacity: "float",
            depthOffset: "float",
            depthOffsetNear: "float"
        },
        attributes: {
            a_gliphParam: "vec4",
            a_vertices: "vec2",
            a_texCoord: "vec4",
            a_positionsHigh: "vec3",
            a_positionsLow: "vec3",
            a_offset: "vec2",
            a_size: "float",
            a_rotation: "float",
            a_rgba: "vec4"
        },
        vertexShader: label_picking_vert,
        fragmentShader: label_picking_frag
    });
}