Revision control
Copy as Markdown
// 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);
}