1#version 460 core 2#extension GL_ARB_separate_shader_objects : enable 3#extension GL_ARB_shading_language_420pack : enable 4 5// includes 6#include "render/shaders/common/render_compatibility_common.h" 7 8// sets 9#include "3d/shaders/common/3d_dm_env_frag_layout_common.h" 10 11struct CustomEnvProperties { 12 mat4 transMat; 13}; 14layout(set = 1, binding = 0) uniform sampler2D uCustomSampler; 15layout(set = 1, binding = 1) uniform uCustomBuffer 16{ 17 CustomEnvProperties customProperties; 18}; 19layout(set = 1, binding = 2) uniform uCustomBuffer2 20{ 21 CustomEnvProperties customProperties2; 22}; 23layout(set = 1, binding = 3) uniform uCustomBuffer3 24{ 25 CustomEnvProperties customProperties3; 26}; 27 28// in / out 29 30layout(location = 0) out vec2 outUv; 31layout(location = 1) out flat uint outIndices; // packed camera 32 33/* 34 * Fullscreen env triangle. 35 */ 36void main(void) 37{ 38 float x = -1.0 + float((gl_VertexIndex & 1) << 2); 39 float y = 1.0 - float((gl_VertexIndex & 2) << 1); 40 CORE_VERTEX_OUT(vec4(x, y, 1.0, 1.0)); 41 outUv = vec2(x, y); 42 43 const uint cameraIdx = GetUnpackCameraIndex(uGeneralData); 44 outIndices = GetPackFlatIndices(cameraIdx, 0); 45 46 vec4 normCoord = vec4((outUv + 1.0) * 0.5, 0.0, 1.0); 47 normCoord = transpose(customProperties.transMat) * normCoord; 48 outUv = normCoord.xy; 49} 50