Revision control

++ // Copyright (C) 2023 The Qt Company Ltd.
++ // SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only
++
++ #version 440
++
++ layout(location = 0) in vec3 attr_pos;
++ layout(location = 1) in vec3 attr_normal;
++ layout(location = 2) in vec2 attr_lightmap_uv;
++ #if defined(QSSG_LIGHTMAPUVRASTER_UV) || defined(QSSG_LIGHTMAPUVRASTER_UV_TANGENT)
++ layout(location = 3) in vec2 attr_uv;
++ #endif
++ #if defined(QSSG_LIGHTMAPUVRASTER_UV_TANGENT)
++ layout(location = 4) in vec3 attr_tangent;
++ layout(location = 5) in vec3 attr_binormal;
++ #endif
++
++ layout(location = 0) out vec3 v_pos;
++ layout(location = 1) out vec3 v_normal;
++ layout(location = 2) out vec2 v_uv;
++ layout(location = 3) out vec3 v_tangent;
++ layout(location = 4) out vec3 v_binormal;
++
++ layout(std140, binding = 0) uniform buf {
++ vec4 baseColorLinear;
++ vec3 emissiveFactor;
++ int flipY;
++ int hasBaseColorMap;
++ int hasEmissiveMap;
++ int hasNormalMap;
++ float bumpAmount;
++ float regionMinU;
++ float regionMinV;
++ float regionMaxU;
++ float regionMaxV;
++ };
++
++ void main()
++ {
++ vec2 regionMin = vec2(regionMinU, regionMinV);
++ vec2 regionMax = vec2(regionMaxU, regionMaxV);
++
++ v_pos = attr_pos;
++ v_normal = attr_normal;
++ #if defined(QSSG_LIGHTMAPUVRASTER_UV) || defined(QSSG_LIGHTMAPUVRASTER_UV_TANGENT)
++ v_uv = attr_uv;
++ #else
++ v_uv = vec2(0.0);
++ #endif
++ #if defined(QSSG_LIGHTMAPUVRASTER_UV_TANGENT)
++ v_tangent = attr_tangent;
++ v_binormal = attr_binormal;
++ #else
++ v_tangent = vec3(0.0);
++ v_binormal = vec3(0.0);
++ #endif
++
++ // Zoomed UV from lightmap subregion
++ vec2 uv = attr_lightmap_uv;
++ uv = (uv - regionMin) / (regionMax - regionMin); // Map region to [0, 1]
++
++ // Convert to NDC [-1, 1]
++ vec2 uv_ndc = vec2(uv.x * 2.0 - 1.0, uv.y * 2.0 - 1.0);
++ if (flipY != 0)
++ uv_ndc.y *= -1.0;
++
++ gl_Position = vec4(uv_ndc, 0.0, 1.0);
++ }