64 lines
1.2 KiB
GLSL
64 lines
1.2 KiB
GLSL
#version 460 core
|
|
|
|
// gbuffer textures
|
|
uniform sampler2D s_albedo;
|
|
uniform sampler2D s_depth;
|
|
uniform sampler2D s_normal;
|
|
uniform sampler2D s_material;
|
|
uniform sampler2D s_position;
|
|
|
|
// lights
|
|
#define MAX_LIGHT_COUNT 100
|
|
#define POINT 0
|
|
#define SPOT 1
|
|
#define DIRECTIONAL 2
|
|
#define AMBIENT 3
|
|
|
|
struct light_t {
|
|
vec3 color;
|
|
vec3 position;
|
|
vec3 direction;
|
|
float intensity;
|
|
int type;
|
|
};
|
|
|
|
uniform light_t lights[MAX_LIGHT_COUNT];
|
|
uniform int light_count;
|
|
|
|
uniform vec3 view_pos;
|
|
|
|
// from vertex shader
|
|
in vec3 pos;
|
|
in vec2 tex;
|
|
|
|
out vec4 FragColor;
|
|
|
|
vec3 albedo;
|
|
float depth;
|
|
vec3 normal;
|
|
vec3 material; // specular, roughness, metalic
|
|
vec3 position;
|
|
|
|
float specular;
|
|
float roughness;
|
|
float metalic;
|
|
|
|
void main() {
|
|
// albedo, normal
|
|
// material, position
|
|
albedo = texture(s_albedo, tex*2).rgb;
|
|
depth = texture(s_depth, tex*2).x;
|
|
normal = normalize(texture(s_normal, tex*2).rgb);
|
|
material = texture(s_material, tex*2).xyz;
|
|
{
|
|
specular = material.x;
|
|
roughness = material.y;
|
|
metalic = material.z;
|
|
}
|
|
position = texture(s_position, tex*2).xyz;
|
|
|
|
FragColor = vec4(
|
|
(pos.x < 0 ? (pos.y < 0 ? material : albedo) : (pos.y < 0 ? position : normal)),
|
|
1);
|
|
}
|