playcanvas
Version:
Open-source WebGL/WebGPU 3D engine for the web
3 lines (2 loc) • 1.56 kB
TypeScript
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;