rend3-routine 0.3.0

Customizable Render Routines for the rend3 rendering library.
Documentation
#

aGLSL.std.450main
3<BFIKOQSTUrend3-routine/shaders/src/depth.vert
rend3-routine/shaders/src/structures.glslF�// OpModuleProcessed entry-point main
// OpModuleProcessed client vulkan100
// OpModuleProcessed target-env vulkan1.0
// OpModuleProcessed entry-point main
#line 1
#version 440

#include "structures.glsl"

// TODO: we don't need most of these
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;
#ifdef GPU_DRIVEN
layout(location = 8) in uint i_object_idx;
#endif

layout(location = 0) out vec4 o_position;
layout(location = 1) out vec2 o_coords0;
layout(location = 2) out vec4 o_color;
layout(location = 3) flat out uint o_material;

layout(set = 1, binding = 0, std430) readonly buffer ObjectOutputDataBuffer {
    ObjectOutputData object_output[];
};

void main() {
    #ifdef CPU_DRIVEN
    uint object_idx = gl_InstanceIndex;
    #else
    uint object_idx = i_object_idx;
    #endif

    ObjectOutputData data = object_output[object_idx];

    vec4 position = data.model_view_proj * vec4(i_position, 1.0);
    o_position = position;
    gl_Position = position;

    o_material = data.material_idx;

    o_color = i_color;

    o_coords0 = i_coords0;
}
1�#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;
    uint material_idx;
    // Work around https://github.com/gfx-rs/naga/issues/1561
    vec3 inv_squared_scale;
};

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_YDOWN_NORMAL        0x0020
#define FLAGS_AOMR_COMBINED       0x0040
#define FLAGS_AOMR_SWIZZLED_SPLIT 0x0080
#define FLAGS_AOMR_SPLIT          0x0100
#define FLAGS_AOMR_BW_SPLIT       0x0200
#define FLAGS_CC_GLTF_COMBINED    0x0400
#define FLAGS_CC_GLTF_SPLIT       0x0800
#define FLAGS_CC_BW_SPLIT         0x1000
#define FLAGS_UNLIT               0x2000
#define FLAGS_NEAREST             0x4000

#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 origin_view_proj;
    mat4 inv_view;
    mat4 inv_view_proj;
    mat4 inv_origin_view_proj;
    Frustum frustum;
    vec4 ambient;
};

struct DirectionalLightBufferHeader {
    uint total_lights;
};

struct DirectionalLight {
    mat4 view_proj;
    vec3 color;
    vec3 direction;
    vec2 offset;
    float size;
};

#endif

GL_GOOGLE_cpp_style_line_directiveGL_GOOGLE_include_directivemain
gl_InstanceIndexObjectOutputDatamodel_viewmodel_view_projmaterial_idxinv_squared_scaleObjectOutputDataBufferobject_output3i_position<o_position@gl_PerVertex@gl_Position@gl_PointSize@gl_ClipDistanceBFo_materialIo_colorKi_colorOo_coords0Qi_coords0Si_normalTi_tangentUi_coords1G
+HH#HHH#@HH#�H#�G�HH#GG"G!G3G<H@H@H@G@GFGFGIGKGOGQGSGTGU!   ;
  ;+  2;23+5�? ;;;<+>?>@? A@;AB E;EF;;I J;JKM NM;NO PM;PQ;2S;2T;PU Z ]+^6�=
| A=AZ[>=\[A]_^=`_"=43Q64Q74Q84P96785�:\9#><:$A;DB>D:&>F`(=LK>IL*=MRQ>OR�8