declare const _default: "\n\nattribute vec2 vertex_position;\n\n// Sub-draw data texture: RGBA32U\n// R = rowStart | (numRows << 16)\n// G = colStart\n// B = colEnd\n// A = sourceBase\nprecision highp usampler2D;\nuniform usampler2D uSubDrawData;\nuniform ivec2 uTextureSize;  // (width, height)\nuniform int uSubDrawBase;\n\n// packed sub-draw params: (sourceBase, colStart, rowWidth, rowStart)\nflat varying ivec4 vSubDraw;\n\nvoid main(void) {\n    // Read sub-draw parameters from 2D data texture\n    int subDrawWidth = textureSize(uSubDrawData, 0).x;\n    int idx = gl_InstanceID + uSubDrawBase;\n    uvec4 data = texelFetch(uSubDrawData, ivec2(idx % subDrawWidth, idx / subDrawWidth), 0);\n    int rowStart = int(data.r & 0xFFFFu);\n    int numRows = int(data.r >> 16u);\n    int colStart = int(data.g);\n    int colEnd = int(data.b);\n    int sourceBase = int(data.a);\n\n    // Quad corner from gl_VertexID (0-3 via index buffer [0,1,2, 2,1,3])\n    float u = float(gl_VertexID & 1);        // 0 or 1 (left or right)\n    float v = float(gl_VertexID >> 1);       // 0 or 1 (bottom or top)\n\n    // Map to NDC within the viewport\n    vec4 ndc = vec4(colStart, colEnd, rowStart, rowStart + numRows) / vec4(uTextureSize.x, uTextureSize.x, uTextureSize.y, uTextureSize.y) * 2.0 - 1.0;\n\n    gl_Position = vec4(mix(ndc.x, ndc.y, u), mix(ndc.z, ndc.w, v), 0.5, 1.0);\n\n    // Output packed flat varying: (sourceBase, colStart, rowWidth, rowStart)\n    vSubDraw = ivec4(sourceBase, colStart, colEnd - colStart, rowStart);\n}\n";
export default _default;
