diff --git a/libraries/gpu/src/gpu/Config.slh b/libraries/gpu/src/gpu/Config.slh index 51ece6565a..553b54a508 100644 --- a/libraries/gpu/src/gpu/Config.slh +++ b/libraries/gpu/src/gpu/Config.slh @@ -13,6 +13,6 @@ <@def GPU_FEATURE_PROFILE GPU_CORE@> <@def GPU_TRANSFORM_PROFILE GPU_CORE@> -<@def VERSION_HEADER #version 410 core@> +<@def VERSION_HEADER #version 430 core@> <@endif@> diff --git a/libraries/gpu/src/gpu/GLBackendShader.cpp b/libraries/gpu/src/gpu/GLBackendShader.cpp index 45adbcdb3c..88a68dcab9 100755 --- a/libraries/gpu/src/gpu/GLBackendShader.cpp +++ b/libraries/gpu/src/gpu/GLBackendShader.cpp @@ -165,8 +165,8 @@ GLBackend::GLShader* compileShader(const Shader& shader) { char* temp = new char[infoLength] ; glGetShaderInfoLog(glshader, infoLength, NULL, temp); - qCDebug(gpulogging) << "GLShader::compileShader - failed to compile the gl shader object:"; - qCDebug(gpulogging) << temp; + qWarning() << "GLShader::compileShader - failed to compile the gl shader object:"; + qWarning() << temp; /* filestream.open("debugshader.glsl.info.txt"); diff --git a/libraries/gpu/src/gpu/Inputs.slh b/libraries/gpu/src/gpu/Inputs.slh index 546427e3d1..49511ca8d2 100644 --- a/libraries/gpu/src/gpu/Inputs.slh +++ b/libraries/gpu/src/gpu/Inputs.slh @@ -10,17 +10,14 @@ !> <@if not GPU_INPUTS_SLH@> <@def GPU_INPUTS_SLH@> - layout(location = 0) in vec4 inPosition; -layout(location = 1) in vec3 inNormal; +layout(location = 1) in vec4 inNormal; layout(location = 2) in vec4 inColor; -layout(location = 3) in vec2 inTexCoord0; -layout(location = 4) in vec3 inTangent; +layout(location = 3) in vec4 inTexCoord0; +layout(location = 4) in vec4 inTangent; layout(location = 5) in ivec4 inSkinClusterIndex; layout(location = 6) in vec4 inSkinClusterWeight; -layout(location = 7) in vec2 inTexCoord1; +layout(location = 7) in vec4 inTexCoord1; +layout(location = 9) in vec4 inInstanceScaleTranslate; layout(location = 8) in mat4 inInstanceXfm; -layout(location = 9) in vec2 inInstanceScale; -layout(location = 10) in vec2 inInstanceTranslate; - <@endif@> diff --git a/libraries/model/src/model/Material.slh b/libraries/model/src/model/Material.slh index 6b8eea18a6..435644878e 100644 --- a/libraries/model/src/model/Material.slh +++ b/libraries/model/src/model/Material.slh @@ -18,32 +18,12 @@ struct Material { vec4 _spare; }; -float getMaterialOpacity(Material m) { return m._diffuse.a; } -vec3 getMaterialDiffuse(Material m) { return m._diffuse.rgb; } -vec3 getMaterialSpecular(Material m) { return m._specular.rgb; } -float getMaterialShininess(Material m) { return m._specular.a; } - - - -<@if GPU_FEATURE_PROFILE == GPU_CORE@> uniform materialBuffer { Material _mat; }; + Material getMaterial() { return _mat; } -<@else@> -uniform vec4 materialBuffer[4]; -Material getMaterial() { - Material mat; - mat._diffuse = materialBuffer[0]; - mat._specular = materialBuffer[1]; - mat._emissive = materialBuffer[2]; - mat._spare = materialBuffer[3]; - return mat; -} -<@endif@> - - <@endif@> diff --git a/libraries/render-utils/src/DeferredBufferWrite.slh b/libraries/render-utils/src/DeferredBufferWrite.slh index a7f4055bba..9427721f1a 100755 --- a/libraries/render-utils/src/DeferredBufferWrite.slh +++ b/libraries/render-utils/src/DeferredBufferWrite.slh @@ -11,6 +11,10 @@ <@if not DEFERRED_BUFFER_WRITE_SLH@> <@def DEFERRED_BUFFER_WRITE_SLH@> +layout(location = 0) out vec4 _fragColor0; +layout(location = 1) out vec4 _fragColor1; +layout(location = 2) out vec4 _fragColor2; + // the glow intensity uniform float glowIntensity; @@ -25,9 +29,9 @@ void packDeferredFragment(vec3 normal, float alpha, vec3 diffuse, vec3 specular, if (alpha != glowIntensity) { discard; } - gl_FragData[0] = vec4(diffuse.rgb, alpha); - gl_FragData[1] = vec4(normal, 0.0) * 0.5 + vec4(0.5, 0.5, 0.5, 1.0); - gl_FragData[2] = vec4(specular, shininess / 128.0); + _fragColor0 = vec4(diffuse.rgb, alpha); + _fragColor1 = vec4(normal, 0.0) * 0.5 + vec4(0.5, 0.5, 0.5, 1.0); + _fragColor2 = vec4(specular, shininess / 128.0); } void packDeferredFragmentLightmap(vec3 normal, float alpha, vec3 diffuse, vec3 specular, float shininess, vec3 emissive) { @@ -35,10 +39,10 @@ void packDeferredFragmentLightmap(vec3 normal, float alpha, vec3 diffuse, vec3 s discard; } - gl_FragData[0] = vec4(diffuse.rgb, alpha); - //gl_FragData[1] = vec4(normal, 0.0) * 0.5 + vec4(0.5, 0.5, 0.5, 1.0); - gl_FragData[1] = vec4(normal, 0.0) * 0.5 + vec4(0.5, 0.5, 0.5, 0.5); - gl_FragData[2] = vec4(emissive, shininess / 128.0); + _fragColor0 = vec4(diffuse.rgb, alpha); + //_fragColor1 = vec4(normal, 0.0) * 0.5 + vec4(0.5, 0.5, 0.5, 1.0); + _fragColor1 = vec4(normal, 0.0) * 0.5 + vec4(0.5, 0.5, 0.5, 0.5); + _fragColor2 = vec4(emissive, shininess / 128.0); } void packDeferredFragmentTranslucent(vec3 normal, float alpha, vec3 diffuse, vec3 specular, float shininess) { @@ -46,9 +50,9 @@ void packDeferredFragmentTranslucent(vec3 normal, float alpha, vec3 diffuse, vec discard; } - gl_FragData[0] = vec4(diffuse.rgb, alpha); - // gl_FragData[1] = vec4(normal, 0.0) * 0.5 + vec4(0.5, 0.5, 0.5, 1.0); - // gl_FragData[2] = vec4(specular, shininess / 128.0); + _fragColor0 = vec4(diffuse.rgb, alpha); + // _fragColor1 = vec4(normal, 0.0) * 0.5 + vec4(0.5, 0.5, 0.5, 1.0); + // _fragColor2 = vec4(specular, shininess / 128.0); } <@endif@> diff --git a/libraries/render-utils/src/DeferredGlobalLight.slh b/libraries/render-utils/src/DeferredGlobalLight.slh index 2f312e42d8..9bb2208b40 100755 --- a/libraries/render-utils/src/DeferredGlobalLight.slh +++ b/libraries/render-utils/src/DeferredGlobalLight.slh @@ -16,12 +16,7 @@ uniform samplerCube skyboxMap; vec4 evalSkyboxLight(vec3 direction, float lod) { - -<@if GPU_TRANSFORM_PROFILE == GPU_CORE@> - vec4 skytexel = textureCubeLod(skyboxMap, direction, lod * textureQueryLevels(skyboxMap)); -<@else@> - vec4 skytexel = textureCube(skyboxMap, direction); -<@endif@> + vec4 skytexel = textureLod(skyboxMap, direction, lod * textureQueryLevels(skyboxMap)); return skytexel; } diff --git a/libraries/render-utils/src/Shadow.slh b/libraries/render-utils/src/Shadow.slh index 2e75e2764c..4bed667e38 100755 --- a/libraries/render-utils/src/Shadow.slh +++ b/libraries/render-utils/src/Shadow.slh @@ -14,13 +14,25 @@ // the shadow texture uniform sampler2DShadow shadowMap; +struct EyePlanes { + vec4 _S[1]; + vec4 _T[1]; + vec4 _R[1]; + vec4 _Q[1]; +}; + +uniform eyePlanes { + EyePlanes _eyePlanes; +}; + +EyePlanes getEyePlanes() { + return _eyePlanes; +} + + // Fetching it float fetchShadow(vec3 texcoord) { -<@if GPU_FEATURE_PROFILE == GPU_CORE @> return texture(shadowMap, texcoord); -<@else@> - return shadow2D(shadowMap, texcoord).r; -<@endif@> } // the distances to the cascade sections @@ -44,17 +56,22 @@ vec2 samples[8] = vec2[8]( vec4 evalShadowTexcoord(vec4 position) { // compute the corresponding texture coordinates - vec3 shadowTexcoord = vec3(dot(gl_EyePlaneS[0], position), dot(gl_EyePlaneT[0], position), dot(gl_EyePlaneR[0], position)); + EyePlanes eyePlanes = getEyePlanes(); + vec3 shadowTexcoord = vec3(dot(eyePlanes._S[0], position), dot(eyePlanes._T[0], position), dot(eyePlanes._R[0], position)); return vec4(shadowTexcoord, 0.0); } vec4 evalCascadedShadowTexcoord(vec4 position) { + EyePlanes eyePlanes = getEyePlanes(); + // compute the index of the cascade to use and the corresponding texture coordinates int shadowIndex = int(dot(step(vec3(position.z), shadowDistances), vec3(1.0, 1.0, 1.0))); - vec3 shadowTexcoord = vec3(dot(gl_EyePlaneS[shadowIndex], position), dot(gl_EyePlaneT[shadowIndex], position), - dot(gl_EyePlaneR[shadowIndex], position)); + vec3 shadowTexcoord = vec3( + dot(eyePlanes._S[shadowIndex], position), + dot(eyePlanes._T[shadowIndex], position), + dot(eyePlanes._R[shadowIndex], position)); - return vec4(shadowTexcoord, shadowIndex); + return vec4(shadowTexcoord, shadowIndex); } float evalShadowAttenuationPCF(vec4 shadowTexcoord) { diff --git a/libraries/render-utils/src/deferred_light.slv b/libraries/render-utils/src/deferred_light.slv index 93723b0bae..d0e3a754d3 100644 --- a/libraries/render-utils/src/deferred_light.slv +++ b/libraries/render-utils/src/deferred_light.slv @@ -12,7 +12,11 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +<@include gpu/Inputs.slh@> + +out vec2 _texCoord0; + void main(void) { - gl_TexCoord[0] = gl_MultiTexCoord0; + _texCoord0 = inTexCoord0.st; gl_Position = inPosition; } diff --git a/libraries/render-utils/src/deferred_light_limited.slv b/libraries/render-utils/src/deferred_light_limited.slv index e6fbbcdac3..388d5c03b6 100644 --- a/libraries/render-utils/src/deferred_light_limited.slv +++ b/libraries/render-utils/src/deferred_light_limited.slv @@ -12,13 +12,35 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +<@include gpu/Transform.slh@> + +<$declareStandardTransform()$> + <@include gpu/Inputs.slh@> -out vec4 texCoord0; +struct ObjectPlanes { + vec4 _S[4]; + vec4 _T[4]; + vec4 _R[4]; + vec4 _Q[4]; +}; + +uniform objPlanes { + ObjectPlanes _objPlanes; +}; + +ObjectPlanes getObjectPlanes() { + return _objPlanes; +} + +out vec4 _texCoord0; void main(void) { - gl_Position = ftransform(); + ObjectPlanes objPlanes = getObjectPlanes(); + TransformCamera cam = getTransformCamera(); + TransformObject obj = getTransformObject(); + <$transformModelToClipPos(cam, obj, inPosition, gl_Position)$> vec4 projected = gl_Position / gl_Position.w; - texCoord0 = vec4(dot(projected, gl_ObjectPlaneS[3]) * gl_Position.w, - dot(projected, gl_ObjectPlaneT[3]) * gl_Position.w, 0.0, gl_Position.w); + _texCoord0 = vec4(dot(projected, objPlanes._S[3]) * gl_Position.w, + dot(projected, objPlanes._T[3]) * gl_Position.w, 0.0, gl_Position.w); } diff --git a/libraries/render-utils/src/directional_ambient_light.slf b/libraries/render-utils/src/directional_ambient_light.slf index 114c5615b8..10de6a1101 100755 --- a/libraries/render-utils/src/directional_ambient_light.slf +++ b/libraries/render-utils/src/directional_ambient_light.slf @@ -17,8 +17,11 @@ <@include DeferredGlobalLight.slh@> +in vec2 _texCoord0; +out vec4 _fragColor; + void main(void) { - DeferredFragment frag = unpackDeferredFragment(gl_TexCoord[0].st); + DeferredFragment frag = unpackDeferredFragment(_texCoord0); // Light mapped or not ? @@ -29,7 +32,7 @@ void main(void) { frag.diffuse, frag.specularVal.xyz); - gl_FragColor = vec4(color, 1.0); + _fragColor = vec4(color, 1.0); } else { vec3 color = evalAmbienSphereGlobalColor(1.0, frag.position.xyz, @@ -38,6 +41,6 @@ void main(void) { frag.specular, frag.gloss); - gl_FragColor = vec4(color, frag.normalVal.a); + _fragColor = vec4(color, frag.normalVal.a); } } diff --git a/libraries/render-utils/src/directional_ambient_light_cascaded_shadow_map.slf b/libraries/render-utils/src/directional_ambient_light_cascaded_shadow_map.slf index d52363a26b..ff8e6aa91c 100755 --- a/libraries/render-utils/src/directional_ambient_light_cascaded_shadow_map.slf +++ b/libraries/render-utils/src/directional_ambient_light_cascaded_shadow_map.slf @@ -20,8 +20,11 @@ // Everything about shadow <@include Shadow.slh@> +in vec2 _texCoord0; +out vec4 _fragColor; + void main(void) { - DeferredFragment frag = unpackDeferredFragment(gl_TexCoord[0].st); + DeferredFragment frag = unpackDeferredFragment(_texCoord0); // Eval shadow Texcoord and then Attenuation vec4 shadowTexcoord = evalCascadedShadowTexcoord(frag.position); @@ -29,7 +32,7 @@ void main(void) { // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { - gl_FragColor = vec4(evalLightmappedColor( + _fragColor = vec4(evalLightmappedColor( shadowAttenuation, frag.normal, frag.diffuse, @@ -43,6 +46,6 @@ void main(void) { frag.specular, frag.gloss); - gl_FragColor = vec4(color, frag.normalVal.a); + _fragColor = vec4(color, frag.normalVal.a); } } diff --git a/libraries/render-utils/src/directional_ambient_light_shadow_map.slf b/libraries/render-utils/src/directional_ambient_light_shadow_map.slf index 7f098eac2e..d446d4edb2 100755 --- a/libraries/render-utils/src/directional_ambient_light_shadow_map.slf +++ b/libraries/render-utils/src/directional_ambient_light_shadow_map.slf @@ -20,9 +20,11 @@ // Everything about shadow <@include Shadow.slh@> +in vec2 _texCoord0; +out vec4 _fragColor; void main(void) { - DeferredFragment frag = unpackDeferredFragment(gl_TexCoord[0].st); + DeferredFragment frag = unpackDeferredFragment(_texCoord0); // Eval shadow Texcoord and then Attenuation vec4 shadowTexcoord = evalShadowTexcoord(frag.position); @@ -30,7 +32,7 @@ void main(void) { // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { - gl_FragColor = vec4(evalLightmappedColor( + _fragColor = vec4(evalLightmappedColor( shadowAttenuation, frag.normal, frag.diffuse, @@ -44,6 +46,6 @@ void main(void) { frag.specular, frag.gloss); - gl_FragColor = vec4(color, frag.normalVal.a); + _fragColor = vec4(color, frag.normalVal.a); } } diff --git a/libraries/render-utils/src/directional_light.slf b/libraries/render-utils/src/directional_light.slf index 0299b2a229..2e0334406e 100644 --- a/libraries/render-utils/src/directional_light.slf +++ b/libraries/render-utils/src/directional_light.slf @@ -17,12 +17,15 @@ <@include DeferredGlobalLight.slh@> +in vec2 _texCoord0; +out vec4 _fragColor; + void main(void) { - DeferredFragment frag = unpackDeferredFragment(gl_TexCoord[0].st); + DeferredFragment frag = unpackDeferredFragment(_texCoord0); // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { - gl_FragColor = vec4( evalLightmappedColor( + _fragColor = vec4( evalLightmappedColor( 1.0, frag.normal, frag.diffuse, @@ -36,6 +39,6 @@ void main(void) { frag.specular, frag.gloss); - gl_FragColor = vec4(color, frag.normalVal.a); + _fragColor = vec4(color, frag.normalVal.a); } } diff --git a/libraries/render-utils/src/directional_light_cascaded_shadow_map.slf b/libraries/render-utils/src/directional_light_cascaded_shadow_map.slf index 71464fb916..bfc42db9bc 100644 --- a/libraries/render-utils/src/directional_light_cascaded_shadow_map.slf +++ b/libraries/render-utils/src/directional_light_cascaded_shadow_map.slf @@ -20,8 +20,11 @@ // Everything about shadow <@include Shadow.slh@> +in vec2 _texCoord0; +out vec4 _fragColor; + void main(void) { - DeferredFragment frag = unpackDeferredFragment(gl_TexCoord[0].st); + DeferredFragment frag = unpackDeferredFragment(_texCoord0); // Eval shadow Texcoord and then Attenuation vec4 shadowTexcoord = evalCascadedShadowTexcoord(frag.position); @@ -29,7 +32,7 @@ void main(void) { // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { - gl_FragColor = vec4(evalLightmappedColor( + _fragColor = vec4(evalLightmappedColor( shadowAttenuation, frag.normal, frag.diffuse, @@ -43,6 +46,6 @@ void main(void) { frag.specular, frag.gloss); - gl_FragColor = vec4(color, frag.normalVal.a); + _fragColor = vec4(color, frag.normalVal.a); } } diff --git a/libraries/render-utils/src/directional_light_shadow_map.slf b/libraries/render-utils/src/directional_light_shadow_map.slf index 2c53a02348..951aeab122 100644 --- a/libraries/render-utils/src/directional_light_shadow_map.slf +++ b/libraries/render-utils/src/directional_light_shadow_map.slf @@ -20,9 +20,11 @@ // Everything about shadow <@include Shadow.slh@> +in vec2 _texCoord0; +out vec4 _fragColor; void main(void) { - DeferredFragment frag = unpackDeferredFragment(gl_TexCoord[0].st); + DeferredFragment frag = unpackDeferredFragment(_texCoord0); // Eval shadow Texcoord and then Attenuation vec4 shadowTexcoord = evalShadowTexcoord(frag.position); @@ -30,7 +32,7 @@ void main(void) { // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { - gl_FragColor = vec4(evalLightmappedColor( + _fragColor = vec4(evalLightmappedColor( shadowAttenuation, frag.normal, frag.diffuse, @@ -44,6 +46,6 @@ void main(void) { frag.specular, frag.gloss); - gl_FragColor = vec4(color, frag.normalVal.a); + _fragColor = vec4(color, frag.normalVal.a); } } diff --git a/libraries/render-utils/src/directional_skybox_light.slf b/libraries/render-utils/src/directional_skybox_light.slf index 38e3f9eb72..cd95369395 100755 --- a/libraries/render-utils/src/directional_skybox_light.slf +++ b/libraries/render-utils/src/directional_skybox_light.slf @@ -17,8 +17,11 @@ <@include DeferredGlobalLight.slh@> +in vec2 _texCoord0; +out vec4 _fragColor; + void main(void) { - DeferredFragment frag = unpackDeferredFragment(gl_TexCoord[0].st); + DeferredFragment frag = unpackDeferredFragment(_texCoord0); // Light mapped or not ? @@ -29,7 +32,7 @@ void main(void) { frag.diffuse, frag.specularVal.xyz); - gl_FragColor = vec4(color, 1.0); + _fragColor = vec4(color, 1.0); } else { vec3 color = evalSkyboxGlobalColor(1.0, frag.position.xyz, @@ -38,6 +41,6 @@ void main(void) { frag.specular, frag.gloss); - gl_FragColor = vec4(color, frag.normalVal.a); + _fragColor = vec4(color, frag.normalVal.a); } } diff --git a/libraries/render-utils/src/directional_skybox_light_cascaded_shadow_map.slf b/libraries/render-utils/src/directional_skybox_light_cascaded_shadow_map.slf index d7d843855f..171d3fa996 100755 --- a/libraries/render-utils/src/directional_skybox_light_cascaded_shadow_map.slf +++ b/libraries/render-utils/src/directional_skybox_light_cascaded_shadow_map.slf @@ -20,8 +20,11 @@ // Everything about shadow <@include Shadow.slh@> +in vec2 _texCoord0; +out vec4 _fragColor; + void main(void) { - DeferredFragment frag = unpackDeferredFragment(gl_TexCoord[0].st); + DeferredFragment frag = unpackDeferredFragment(_texCoord0); // Eval shadow Texcoord and then Attenuation vec4 shadowTexcoord = evalCascadedShadowTexcoord(frag.position); @@ -29,7 +32,7 @@ void main(void) { // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { - gl_FragColor = vec4(evalLightmappedColor( + _fragColor = vec4(evalLightmappedColor( shadowAttenuation, frag.normal, frag.diffuse, @@ -43,6 +46,6 @@ void main(void) { frag.specular, frag.gloss); - gl_FragColor = vec4(color, frag.normalVal.a); + _fragColor = vec4(color, frag.normalVal.a); } } diff --git a/libraries/render-utils/src/directional_skybox_light_shadow_map.slf b/libraries/render-utils/src/directional_skybox_light_shadow_map.slf index 8c19cb959f..aa4206bce9 100755 --- a/libraries/render-utils/src/directional_skybox_light_shadow_map.slf +++ b/libraries/render-utils/src/directional_skybox_light_shadow_map.slf @@ -20,9 +20,11 @@ // Everything about shadow <@include Shadow.slh@> +in vec2 _texCoord0; +out vec4 _fragColor; void main(void) { - DeferredFragment frag = unpackDeferredFragment(gl_TexCoord[0].st); + DeferredFragment frag = unpackDeferredFragment(_texCoord0); // Eval shadow Texcoord and then Attenuation vec4 shadowTexcoord = evalShadowTexcoord(frag.position); @@ -30,7 +32,7 @@ void main(void) { // Light mapped or not ? if ((frag.normalVal.a >= 0.45) && (frag.normalVal.a <= 0.55)) { - gl_FragColor = vec4(evalLightmappedColor( + _fragColor = vec4(evalLightmappedColor( shadowAttenuation, frag.normal, frag.diffuse, @@ -44,6 +46,6 @@ void main(void) { frag.specular, frag.gloss); - gl_FragColor = vec4(color, frag.normalVal.a); + _fragColor = vec4(color, frag.normalVal.a); } } diff --git a/libraries/render-utils/src/simple.slf b/libraries/render-utils/src/simple.slf index bbbb44cc51..5a830c15ee 100644 --- a/libraries/render-utils/src/simple.slf +++ b/libraries/render-utils/src/simple.slf @@ -13,15 +13,18 @@ // <@include DeferredBufferWrite.slh@> +<@include model/Material.slh@> // the interpolated normal -varying vec4 interpolatedNormal; +in vec3 _normal; +in vec3 _color; void main(void) { + Material material = getMaterial(); packDeferredFragment( - normalize(interpolatedNormal.xyz), + normalize(_normal.xyz), glowIntensity, - gl_Color.rgb, - gl_FrontMaterial.specular.rgb, - gl_FrontMaterial.shininess); + _color.rgb, + material._specular.rgb, + 0.0); } diff --git a/libraries/render-utils/src/simple.slv b/libraries/render-utils/src/simple.slv index 380734e70c..99f404eaec 100644 --- a/libraries/render-utils/src/simple.slv +++ b/libraries/render-utils/src/simple.slv @@ -12,24 +12,25 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +<@include gpu/Inputs.slh@> + <@include gpu/Transform.slh@> <$declareStandardTransform()$> // the interpolated normal -varying vec4 interpolatedNormal; + +out vec3 _normal; +out vec3 _color; +out vec2 _texCoord0; void main(void) { - gl_TexCoord[0] = gl_MultiTexCoord0; - - // pass along the diffuse color - gl_FrontColor = gl_Color; - + _color = inColor.rgb; + _texCoord0 = inTexCoord0.st; + // standard transform TransformCamera cam = getTransformCamera(); TransformObject obj = getTransformObject(); - <$transformModelToClipPos(cam, obj, gl_Vertex, gl_Position)$> - <$transformModelToEyeDir(cam, obj, gl_Normal, interpolatedNormal.xyz)$> - - interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); + <$transformModelToClipPos(cam, obj, inPosition, gl_Position)$> + <$transformModelToEyeDir(cam, obj, inNormal.xyz, _normal)$> } \ No newline at end of file diff --git a/libraries/render-utils/src/simple_textured.slf b/libraries/render-utils/src/simple_textured.slf index 7444d512e4..e180afb114 100644 --- a/libraries/render-utils/src/simple_textured.slf +++ b/libraries/render-utils/src/simple_textured.slf @@ -13,20 +13,24 @@ // <@include DeferredBufferWrite.slh@> +<@include model/Material.slh@> // the diffuse texture uniform sampler2D originalTexture; // the interpolated normal -varying vec4 interpolatedNormal; +in vec3 _normal; +in vec3 _color; +in vec2 _texCoord0; void main(void) { - vec4 texel = texture2D(originalTexture, gl_TexCoord[0].st); + Material material = getMaterial(); + vec4 texel = texture(originalTexture, _texCoord0); packDeferredFragment( - normalize(interpolatedNormal.xyz), - glowIntensity * texel.a, - gl_Color.rgb * texel.rgb, - gl_FrontMaterial.specular.rgb, - gl_FrontMaterial.shininess); + normalize(_normal.xyz), + glowIntensity * texel.a, + _color.rgb * texel.rgb, + material._specular.rgb, + 0.0); } \ No newline at end of file diff --git a/tests/render-utils/CMakeLists.txt b/tests/render-utils/CMakeLists.txt index e91d9baff7..27bd6e89d5 100644 --- a/tests/render-utils/CMakeLists.txt +++ b/tests/render-utils/CMakeLists.txt @@ -7,6 +7,7 @@ setup_hifi_project(Quick Gui OpenGL) # link in the shared libraries link_hifi_libraries(render-utils gpu shared) -include_directories("${PROJECT_BINARY_DIR}") + +include_directories("${PROJECT_BINARY_DIR}/../../libraries/render-utils/") message(${PROJECT_BINARY_DIR}) copy_dlls_beside_windows_executable() diff --git a/tests/render-utils/src/main.cpp b/tests/render-utils/src/main.cpp index a4683ddc8b..784fa5c1bf 100644 --- a/tests/render-utils/src/main.cpp +++ b/tests/render-utils/src/main.cpp @@ -18,6 +18,7 @@ #include #include +#include #include #include #include @@ -47,8 +48,30 @@ #include "gpu/Batch.h" #include "gpu/Context.h" -#include "../../libraries/model/Skybox_vert.h" -#include "../../libraries/model/Skybox_frag.h" +#include "../model/Skybox_vert.h" +#include "..//model/Skybox_frag.h" + +#include "simple_vert.h" +#include "simple_frag.h" +#include "simple_textured_frag.h" + +#include "deferred_light_vert.h" +#include "deferred_light_limited_vert.h" + +#include "directional_light_frag.h" +#include "directional_light_shadow_map_frag.h" +#include "directional_light_cascaded_shadow_map_frag.h" + +#include "directional_ambient_light_frag.h" +#include "directional_ambient_light_shadow_map_frag.h" +#include "directional_ambient_light_cascaded_shadow_map_frag.h" + +#include "directional_skybox_light_frag.h" +#include "directional_skybox_light_shadow_map_frag.h" +#include "directional_skybox_light_cascaded_shadow_map_frag.h" + +#include "point_light_frag.h" +#include "spot_light_frag.h" class RateCounter { @@ -137,17 +160,6 @@ public: show(); makeCurrent(); - { - QOpenGLDebugLogger* logger = new QOpenGLDebugLogger(this); - logger->initialize(); // initializes in the current context, i.e. ctx - logger->enableMessages(); - connect(logger, &QOpenGLDebugLogger::messageLogged, this, [&](const QOpenGLDebugMessage & debugMessage) { - qDebug() << debugMessage; - }); - logger->startLogging(QOpenGLDebugLogger::SynchronousLogging); - } - qDebug() << (const char*)glGetString(GL_VERSION); - #ifdef WIN32 glewExperimental = true; GLenum err = glewInit(); @@ -165,6 +177,18 @@ public: glGetError(); #endif + { + QOpenGLDebugLogger* logger = new QOpenGLDebugLogger(this); + logger->initialize(); // initializes in the current context, i.e. ctx + logger->enableMessages(); + connect(logger, &QOpenGLDebugLogger::messageLogged, this, [&](const QOpenGLDebugMessage & debugMessage) { + qDebug() << debugMessage; + }); + logger->startLogging(QOpenGLDebugLogger::SynchronousLogging); + } + qDebug() << (const char*)glGetString(GL_VERSION); + + // _textRenderer[0] = TextRenderer::getInstance(SANS_FONT_FAMILY, 12, false); // _textRenderer[1] = TextRenderer::getInstance(SERIF_FONT_FAMILY, 12, false, // TextRenderer::SHADOW_EFFECT); @@ -252,6 +276,13 @@ void QTestWindow::renderText() { } } +void testShaderBuild(const char* vs_src, const char * fs_src) { + auto vs = gpu::ShaderPointer(gpu::Shader::createVertex(std::string(vs_src))); + auto fs = gpu::ShaderPointer(gpu::Shader::createPixel(std::string(fs_src))); + auto pr = gpu::ShaderPointer(gpu::Shader::createProgram(vs, fs)); + gpu::Shader::makeProgram(*pr); +} + void QTestWindow::draw() { if (!isVisible()) { return; @@ -263,10 +294,21 @@ void QTestWindow::draw() { static std::once_flag once; std::call_once(once, [&]{ - auto skyVS = gpu::ShaderPointer(gpu::Shader::createVertex(std::string(Skybox_vert))); - auto skyFS = gpu::ShaderPointer(gpu::Shader::createPixel(std::string(Skybox_frag))); - auto skyShader = gpu::ShaderPointer(gpu::Shader::createProgram(skyVS, skyFS)); - gpu::Shader::makeProgram(*skyShader); + testShaderBuild(Skybox_vert, Skybox_frag); + testShaderBuild(simple_vert, simple_frag); + testShaderBuild(simple_vert, simple_textured_frag); + testShaderBuild(deferred_light_vert, directional_light_frag); + testShaderBuild(deferred_light_vert, directional_light_shadow_map_frag); + testShaderBuild(deferred_light_vert, directional_light_cascaded_shadow_map_frag); + testShaderBuild(deferred_light_vert, directional_ambient_light_frag); + testShaderBuild(deferred_light_vert, directional_ambient_light_shadow_map_frag); + testShaderBuild(deferred_light_vert, directional_ambient_light_cascaded_shadow_map_frag); + testShaderBuild(deferred_light_vert, directional_skybox_light_frag); + testShaderBuild(deferred_light_vert, directional_skybox_light_shadow_map_frag); + testShaderBuild(deferred_light_vert, directional_skybox_light_cascaded_shadow_map_frag); + testShaderBuild(deferred_light_limited_vert, point_light_frag); + testShaderBuild(deferred_light_limited_vert, spot_light_frag); + }); // renderText(); @@ -280,8 +322,26 @@ void QTestWindow::draw() { } } +void messageHandler(QtMsgType type, const QMessageLogContext& context, const QString& message) { + if (!message.isEmpty()) { +#ifdef Q_OS_WIN + OutputDebugStringA(message.toLocal8Bit().constData()); + OutputDebugStringA("\n"); +#else + std::cout << message.toLocal8Bit().constData() << std::endl; +#endif + } +} + + +const char * LOG_FILTER_RULES = R"V0G0N( +hifi.gpu=true +)V0G0N"; + int main(int argc, char** argv) { QGuiApplication app(argc, argv); + qInstallMessageHandler(messageHandler); + QLoggingCategory::setFilterRules(LOG_FILTER_RULES); QTestWindow window; QTimer timer; timer.setInterval(1);