50 lines
1.2 KiB
Plaintext
50 lines
1.2 KiB
Plaintext
|
#version 450
|
||
|
#extension GL_ARB_separate_shader_objects : enable
|
||
|
#extension GL_ARB_shading_language_420pack : enable
|
||
|
#extension GL_EXT_nonuniform_qualifier : require
|
||
|
|
||
|
struct MatPropData
|
||
|
{
|
||
|
vec4 color;
|
||
|
int textureIndex;
|
||
|
float alpha;
|
||
|
vec3 beta;
|
||
|
};
|
||
|
|
||
|
layout(location = 0) in struct
|
||
|
{
|
||
|
vec4 vertPos; // location 0
|
||
|
vec2 uv; // location = 1
|
||
|
vec4 normal; // location = 2
|
||
|
|
||
|
} In;
|
||
|
|
||
|
// material stuff
|
||
|
layout(location = 3) flat in struct
|
||
|
{
|
||
|
int materialIndex;
|
||
|
uint eid;
|
||
|
uint lightLayerIndex;
|
||
|
} In2;
|
||
|
|
||
|
layout (set = 0, binding = 1) uniform sampler2D textures[]; // for textures (global)
|
||
|
layout (std430, set = 3, binding = 0) buffer MaterialProperties // For materials
|
||
|
{
|
||
|
MatPropData data[];
|
||
|
} MatProp;
|
||
|
|
||
|
layout(location = 0) out vec4 position;
|
||
|
layout(location = 1) out uint outEntityID;
|
||
|
layout(location = 2) out uint lightLayerIndices;
|
||
|
layout(location = 3) out vec4 normals;
|
||
|
layout(location = 4) out vec4 albedo;
|
||
|
|
||
|
void main()
|
||
|
{
|
||
|
position = In.vertPos;
|
||
|
normals = In.normal;
|
||
|
albedo = normals * texture(textures[nonuniformEXT(MatProp.data[In2.materialIndex].textureIndex)], In.uv) * MatProp.data[In2.materialIndex].color;
|
||
|
|
||
|
outEntityID = In2.eid;
|
||
|
lightLayerIndices = In2.lightLayerIndex;
|
||
|
}
|