142 lines
3.0 KiB
GLSL
142 lines
3.0 KiB
GLSL
precision mediump float;
|
|
|
|
#define f32 float
|
|
#define f64 double
|
|
#define u32 uint
|
|
#define i32 int
|
|
#define b32 bool
|
|
|
|
#ifdef VERTEX_SHADER
|
|
# define varying_param out
|
|
|
|
layout(location = 0) in vec4 a_color;
|
|
layout(location = 1) in vec4 a_tangent;
|
|
layout(location = 2) in vec3 a_pos;
|
|
layout(location = 3) in vec3 a_normal;
|
|
layout(location = 4) in vec2 a_uv0;
|
|
layout(location = 5) in vec2 a_uv1;
|
|
|
|
#else
|
|
# define varying_param in
|
|
|
|
layout(location = 0) out vec4 FragColor;
|
|
|
|
#define AlbedoTexture u_texture0
|
|
#define NormalTexture u_texture1
|
|
#define MetallicTexture u_texture2
|
|
#define RoughnessTexture u_texture3
|
|
#define OcclusionTexture u_texture4
|
|
#define EmissionTexture u_texture5
|
|
#define HeightTexture u_texture6
|
|
#define CubemapTexture u_texture7
|
|
#define IrradianceTexture u_texture8
|
|
#define PrefilterTexture u_texture9
|
|
#define BRDFTexture u_texture10
|
|
|
|
uniform sampler2D u_texture0;
|
|
uniform sampler2D u_texture1;
|
|
uniform sampler2D u_texture2;
|
|
uniform sampler2D u_texture3;
|
|
uniform sampler2D u_texture4;
|
|
uniform sampler2D u_texture5;
|
|
uniform sampler2D u_texture6;
|
|
uniform sampler2D u_texture7;
|
|
uniform sampler2D u_texture8;
|
|
uniform sampler2D u_texture9;
|
|
uniform sampler2D u_texture10;
|
|
|
|
#endif
|
|
|
|
#define MMI_Albedo 0
|
|
#define MMI_Normal 1
|
|
#define MMI_Metallic 2
|
|
#define MMI_Roughness 3
|
|
#define MMI_Occlusion 4
|
|
#define MMI_Emission 5
|
|
#define MMI_Height 6
|
|
#define MMI_Cubemap 7
|
|
#define MMI_Irradiance 8
|
|
#define MMI_Prefilter 9
|
|
#define MMI_BRDF 10
|
|
#define MMI_MAX 11
|
|
|
|
#define AlbedoMaterial material_maps[MMI_Albedo]
|
|
#define NormalMaterial material_maps[MMI_Normal]
|
|
#define MetallicMaterial material_maps[MMI_Metallic]
|
|
#define RoughnessMaterial material_maps[MMI_Roughness]
|
|
#define OcclusionMaterial material_maps[MMI_Occlusion]
|
|
#define EmissionMaterial material_maps[MMI_Emission]
|
|
#define HeightMaterial material_maps[MMI_Height]
|
|
#define CubemapMaterial material_maps[MMI_Cubemap]
|
|
#define IrradianceMaterial material_maps[MMI_Irradiance]
|
|
#define PrefilterMaterial material_maps[MMI_Prefilter]
|
|
#define BRDFMaterial material_maps[MMI_BRDF]
|
|
|
|
#define VertexMain main
|
|
#define FragmentMain main
|
|
|
|
struct MaterialMap
|
|
{
|
|
vec4 color;
|
|
f32 value;
|
|
};
|
|
|
|
layout(location = 0) varying_param vec2 v_uv0;
|
|
layout(location = 1) varying_param vec2 v_uv1;
|
|
|
|
layout(std140, binding = 0) uniform Globals
|
|
{
|
|
mat4 projection;
|
|
mat4 view;
|
|
};
|
|
|
|
layout(std140, binding = 1) uniform ModelState
|
|
{
|
|
bool albedo_texture;
|
|
bool normal_texture;
|
|
bool metallic_roughness_texture;
|
|
bool occlusion_texture;
|
|
bool emission_texture;
|
|
bool height_texture;
|
|
bool cubemap_texture;
|
|
bool irradiance_texture;
|
|
bool prefilter_texture;
|
|
bool brdf_texture;
|
|
};
|
|
|
|
layout(std140, binding = 2) uniform InstanceState
|
|
{
|
|
mat4 model_matrix;
|
|
};
|
|
|
|
layout(std140, binding = 3) uniform Materials
|
|
{
|
|
MaterialMap material_maps[MMI_MAX];
|
|
};
|
|
|
|
#ifdef VERTEX_SHADER
|
|
|
|
void
|
|
VertexMain()
|
|
{
|
|
gl_Position = projection * model_matrix * vec4(a_pos, 1.0);
|
|
v_uv0 = a_uv0;
|
|
}
|
|
|
|
#else
|
|
|
|
void
|
|
FragmentMain()
|
|
{
|
|
if(albedo_texture)
|
|
{
|
|
FragColor = texture(AlbedoTexture, v_uv0);
|
|
}
|
|
else
|
|
{
|
|
FragColor = AlbedoMaterial.color;
|
|
}
|
|
}
|
|
|
|
#endif
|