# j GLSL.std.450main 048ADGJMOSUWX^i rend3-pbr/shaders/src/opaque.vert rend3-pbr/shaders/src/structures.glsl1¸// OpModuleProcessed entry-point main // OpModuleProcessed client vulkan100 // OpModuleProcessed target-env vulkan1.0 // OpModuleProcessed entry-point main #line 1 #version 440 #extension GL_GOOGLE_include_directive : require #include "structures.glsl" layout(location = 0) in vec3 i_position; layout(location = 1) in vec3 i_normal; layout(location = 2) in vec3 i_tangent; layout(location = 3) in vec2 i_coords0; layout(location = 4) in vec2 i_coords1; layout(location = 5) in vec4 i_color; layout(location = 6) in uint i_material; #ifdef GPU_MODE layout(location = 7) in uint i_object_idx; #endif layout(location = 0) out vec4 o_view_position; layout(location = 1) out vec3 o_normal; layout(location = 2) out vec3 o_tangent; layout(location = 3) out vec2 o_coords0; layout(location = 4) out vec2 o_coords1; layout(location = 5) out vec4 o_color; layout(location = 6) flat out uint o_material; layout(set = 1, binding = 0, std430) restrict readonly buffer ObjectOutputDataBuffer { ObjectOutputData object_output[]; }; layout(set = 3, binding = 0) uniform UniformBuffer { UniformData uniforms; }; #ifdef GPU_MODE layout(set = 4, binding = 0, std430) readonly buffer MaterialBuffer { GPUMaterialData materials[]; }; #endif #ifdef CPU_MODE layout(set = 4, binding = 10) uniform TextureData { CPUMaterialData material; }; #endif void main() { #ifdef GPU_MODE GPUMaterialData material = materials[i_material]; #endif #ifdef CPU_MODE uint object_idx = gl_InstanceIndex; #else uint object_idx = i_object_idx; #endif ObjectOutputData data = object_output[object_idx]; o_material = data.material_idx; o_view_position = data.model_view * vec4(i_position, 1.0); o_normal = data.inv_trans_model_view * i_normal; o_tangent = data.inv_trans_model_view * i_tangent; o_color = i_color; o_coords0 = i_coords0; o_coords1 = i_coords1; #ifdef BAKING vec2 coord1_adj = vec2(material.uv_transform1 * vec3(i_coords1, 1.0)); gl_Position = vec4(coord1_adj * 2.0 - 1.0, 0.0, 1.0); #else gl_Position = data.model_view_proj * vec4(i_position, 1.0); #endif } ¸#ifndef SHADER_STRUCTURES_GLSL #define SHADER_STRUCTURES_GLSL struct Plane { vec4 inner; }; struct Frustum { Plane left; Plane right; Plane top; Plane bottom; // No far plane Plane near; }; struct ObjectInputData { uint start_idx; uint count; int vertex_offset; uint material_idx; mat4 transform; // xyz position; w radius vec4 bounding_sphere; }; /// If you change this struct, change the object output size in culling.rs struct ObjectOutputData { mat4 model_view; mat4 model_view_proj; mat3 inv_trans_model_view; uint material_idx; }; struct IndirectCall { uint vertex_count; uint instance_count; uint base_index; int vertex_offset; uint base_instance; }; #define FLAGS_ALBEDO_ACTIVE 0x0001 #define FLAGS_ALBEDO_BLEND 0x0002 #define FLAGS_ALBEDO_VERTEX_SRGB 0x0004 #define FLAGS_BICOMPONENT_NORMAL 0x0008 #define FLAGS_SWIZZLED_NORMAL 0x0010 #define FLAGS_AOMR_COMBINED 0x0020 #define FLAGS_AOMR_SWIZZLED_SPLIT 0x0040 #define FLAGS_AOMR_SPLIT 0x0080 #define FLAGS_AOMR_BW_SPLIT 0x0100 #define FLAGS_CC_GLTF_COMBINED 0x0200 #define FLAGS_CC_GLTF_SPLIT 0x0400 #define FLAGS_CC_BW_SPLIT 0x0800 #define FLAGS_UNLIT 0x1000 #define FLAGS_NEAREST 0x2000 #define MATERIAL_FLAG(name) bool(material.material_flags & name) struct GPUMaterialData { uint albedo_tex; uint normal_tex; uint roughness_tex; uint metallic_tex; // -- 16 -- uint reflectance_tex; uint clear_coat_tex; uint clear_coat_roughness_tex; uint emissive_tex; // -- 16 -- uint anisotropy_tex; uint ambient_occlusion_tex; uint _padding0; uint _padding1; // -- 16 -- mat3 uv_transform0; // -- 16 -- mat3 uv_transform1; // -- 16 -- vec4 albedo; // -- 16 -- vec3 emissive; float roughness; // -- 16 -- float metallic; float reflectance; float clear_coat; float clear_coat_roughness; // -- 16 -- float anisotropy; float ambient_occlusion; float alpha_cutout; uint material_flags; }; struct CPUMaterialData { mat3 uv_transform0; // -- 16 -- mat3 uv_transform1; // -- 16 -- vec4 albedo; // -- 16 -- vec3 emissive; float roughness; // -- 16 -- float metallic; float reflectance; float clear_coat; float clear_coat_roughness; // -- 16 -- float anisotropy; float ambient_occlusion; float alpha_cutout; uint material_flags; // -- 16 -- uint texture_enable; }; struct UniformData { mat4 view; mat4 view_proj; mat4 inv_view; mat4 inv_origin_view_proj; Frustum frustum; vec4 ambient; }; struct DirectionalLightBufferHeader { uint total_lights; }; struct DirectionalLight { mat4 view_proj; vec3 color; vec3 direction; }; #endif  GL_GOOGLE_cpp_style_line_directiveGL_GOOGLE_include_directivemain gl_InstanceIndexObjectOutputDatamodel_viewmodel_view_proj inv_trans_model_viewmaterial_idxObjectOutputDataBufferobject_output0o_material4o_view_position8i_positionAo_normalDi_normalGo_tangentJi_tangentMo_colorOi_colorSo_coords0Ui_coords0Wo_coords1Xi_coords1\gl_PerVertex\gl_Position\gl_PointSize\gl_ClipDistance^ii_materialG +HH#HHH#@HHH#€HH#°GÀHHH#GG"G!G0G0G4G8GAGDGGGJGMGOGSGUGWGXH\ H\ H\ G\Gi!     ;   ;+   /;/0 3;34 7;78+:€? @;@A;7D;@G;7J;3M N;NOQ RQ;RS TQ;TU;RW;TX+Z[Z\[ ]\;]^ h;hi6ø1=  |6A =! Q"!Q%!Q(!Q,!8>0,:=98Q;9Q<9Q=9P>;<=:‘?">>4?<=ED‘F(E>AF>=KJ‘L(K>GL@=PO>MPB=QVU>SVC=QYX>WYI‘f%>A3g^>gfý8