// - Normal buffer layout (location = 0) out vec3 outNormal; // - Color + objectId buffer layout (location = 1) out vec4 outColor; // - Specular color + Specular exponent buffer layout (location = 2) out vec4 outSpecular; // - Position in view space layout (location = 3) out vec4 outPosition; uniform float materialNs; // variables used for picking uniform unsigned int object_identifier; #ifdef INSTANCED flat in int instanceId; #endif #ifdef ALPHA_MASK uniform sampler2D alphaMask; #endif #ifdef DIFFUSE_TEXTURE uniform sampler2D diffuseTexture; #else uniform vec3 materialKd; #endif #ifdef SPECULAR_TEXTURE uniform sampler2D specularTexture; #else uniform vec3 materialKs; #endif in vec4 posInView; #ifdef NORMAL_MAP uniform sampler2D normalMap; in vec3 varTangent; in vec3 varBinormal; #endif in vec3 varNormal; in vec2 varTexCoord; void main() { #ifdef ALPHA_MASK if(texture(alphaMask, varTexCoord).r < 0.5) discard; #endif #ifdef NORMAL_MAP vec3 normalTexel = normalize(texture(normalMap, varTexCoord).xyz -0.5); vec3 tangent = normalize(varTangent); vec3 binormal = normalize(varBinormal); vec3 normal = normalize(varNormal); mat3 tangentSpace = mat3(vec3(tangent.x, binormal.x, normal.x), vec3(tangent.y, binormal.y, normal.y), vec3(tangent.z, binormal.z, normal.z)); outNormal = normalize(normalTexel * tangentSpace); #else outNormal = normalize(varNormal); #endif #ifdef DIFFUSE_TEXTURE outColor.rgb = texture(diffuseTexture, varTexCoord).rgb; #else outColor.rgb = materialKd; #endif outColor.a = float(object_identifier)/255; #ifdef SPECULAR_TEXTURE outSpecular.rgb = texture(specularTexture, varTexCoord).rgb; #else outSpecular.rgb = materialKs; #endif outSpecular.w = float(materialNs)/255; outPosition = posInView; }