]> git.tdb.fi Git - libs/gl.git/blobdiff - shaderlib/cooktorrance.glsl
Refactor vertex builders
[libs/gl.git] / shaderlib / cooktorrance.glsl
index 6a7ebb387fdf3e39aa772940b22b9a5b02007da9..33035ee3fa03a0b5b703ef692e710baeac336f5f 100644 (file)
@@ -2,17 +2,36 @@ import msp_interface;
 import common;
 import shadow;
 
-const bool use_base_color_map = false;
-const bool use_metalness_map = false;
-const bool use_roughness_map = false;
-const bool use_occlusion_map = false;
-const bool use_emission = false;
-const bool use_emission_map = false;
+struct PbrMaterialParameters
+{
+       vec4 base_color;
+       vec4 emission;
+       float metalness;
+       float roughness;
+};
+
+uniform PbrMaterial
+{
+       PbrMaterialParameters pbr_material;
+};
+
+uniform sampler2D base_color_map;
+uniform sampler2D metalness_map;
+uniform sampler2D roughness_map;
+uniform sampler2D occlusion_map;
+uniform sampler2D emission_map;
+
+layout(constant_id=auto) const bool use_base_color_map = false;
+layout(constant_id=auto) const bool use_metalness_map = false;
+layout(constant_id=auto) const bool use_roughness_map = false;
+layout(constant_id=auto) const bool use_occlusion_map = false;
+layout(constant_id=auto) const bool use_emission = false;
+layout(constant_id=auto) const bool use_emission_map = false;
 
 const float PI = 3.1415926535;
 
 #pragma MSP stage(fragment)
-vec4 get_base_color()
+virtual vec4 get_base_color()
 {
        if(use_base_color_map)
                return texture(base_color_map, texcoord.xy);
@@ -20,7 +39,7 @@ vec4 get_base_color()
                return pbr_material.base_color;
 }
 
-float get_metalness_value()
+virtual float get_metalness_value()
 {
        if(use_metalness_map)
                return texture(metalness_map, texcoord.xy).r;
@@ -28,7 +47,7 @@ float get_metalness_value()
                return pbr_material.metalness;
 }
 
-float get_roughness_value()
+virtual float get_roughness_value()
 {
        if(use_roughness_map)
                return texture(roughness_map, texcoord.xy).r;
@@ -36,7 +55,7 @@ float get_roughness_value()
                return pbr_material.roughness;
 }
 
-float get_occlusion_value()
+virtual float get_occlusion_value()
 {
        if(use_occlusion_map)
                return texture(occlusion_map, texcoord.xy).r;
@@ -44,7 +63,7 @@ float get_occlusion_value()
                return 1.0;
 }
 
-vec3 get_emission_color()
+virtual vec3 get_emission_color()
 {
        if(use_emission_map)
                return texture(emission_map, texcoord.xy).rgb;