license import { getGlslDifferences } from '../../glsl_version' ; import { GPGPUProgram } from '../../gpgpu_math' ; export class FromPixelsProgram implements GPGPUProgram { variableNames = [ 'A' ] ; userCode : string ; outputShape : number [ ] ; constructor ( outputShape ) { const glsl = getGlslDifferences ( ) ; const [ height , width , ] = outputShape ; this . outputShape = outputShape ; this . userCode = `
      void main() {
        ivec3 coords = getOutputCoords();
        int texR = coords[0];
        int texC = coords[1];
        int depth = coords[2];
        vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${ width }.0, ${ height }.0);

        vec4 values = ${ glsl . texture2D }(A, uv);
        float value;
        if (depth == 0) {
          value = values.r;
        } else if (depth == 1) {
          value = values.g;
        } else if (depth == 2) {
          value = values.b;
        } else if (depth == 3) {
          value = values.a;
        }

        setOutput(floor(value * 255.0 + 0.5));
      }
    ` ; } }