From 6da796f7357134fa54577b7abeb7f07a1c55b662 Mon Sep 17 00:00:00 2001 From: samcake Date: Thu, 30 Apr 2015 23:31:56 -0700 Subject: [PATCH 1/3] fix the bug with sahdows on Mac due to the fbo needing a colorbuffer even though it's not needed --- libraries/gpu/src/gpu/GLBackendOutput.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/libraries/gpu/src/gpu/GLBackendOutput.cpp b/libraries/gpu/src/gpu/GLBackendOutput.cpp index 2529070b18..dd8e9c68b6 100755 --- a/libraries/gpu/src/gpu/GLBackendOutput.cpp +++ b/libraries/gpu/src/gpu/GLBackendOutput.cpp @@ -74,6 +74,19 @@ GLBackend::GLFramebuffer* GLBackend::syncGPUObject(const Framebuffer& framebuffe } } } +#if (GPU_FEATURE_PROFILE == GPU_LEGACY) + // for reasons that i don;t understand yet, it seems that on mac gl, a fbo must have a color buffer... + else { + GLuint renderBuffer = 0; + glGenRenderbuffers(1, &renderBuffer); + glBindRenderbuffer(GL_RENDERBUFFER, renderBuffer); + glRenderbufferStorage(GL_RENDERBUFFER, GL_RGBA, framebuffer.getWidth(), framebuffer.getHeight()); + glBindRenderbuffer(GL_RENDERBUFFER, 0); + glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, renderBuffer); + CHECK_GL_ERROR(); + } +#endif + if (framebuffer.hasDepthStencil()) { auto surface = framebuffer.getDepthStencilBuffer(); From e560687371f56111b072bf9b7804963e3485b21b Mon Sep 17 00:00:00 2001 From: samcake Date: Fri, 1 May 2015 00:14:23 -0700 Subject: [PATCH 2/3] fixing the shader not compiling --- libraries/render-utils/src/model.slf | 4 +-- libraries/render-utils/src/model.slv | 6 ++--- libraries/render-utils/src/model_lightmap.slf | 4 +-- libraries/render-utils/src/model_lightmap.slv | 6 ++--- .../src/model_lightmap_specular_map.slf | 4 +-- .../render-utils/src/model_specular_map.slf | 4 +-- .../render-utils/src/model_translucent.slf | 4 +-- libraries/render-utils/src/simple.slf | 4 +-- libraries/render-utils/src/simple.slv | 4 +-- libraries/render-utils/src/skin_model.slv | 26 +++++++++---------- .../src/skin_model_normal_map.slv | 26 +++++++++---------- 11 files changed, 46 insertions(+), 46 deletions(-) diff --git a/libraries/render-utils/src/model.slf b/libraries/render-utils/src/model.slf index adf80d01bf..7648cac429 100755 --- a/libraries/render-utils/src/model.slf +++ b/libraries/render-utils/src/model.slf @@ -19,7 +19,7 @@ uniform sampler2D diffuseMap; // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; varying vec3 color; @@ -31,7 +31,7 @@ void main(void) { Material mat = getMaterial(); packDeferredFragment( - normalize(normal.xyz), + normalize(interpolatedNormal.xyz), evalOpaqueFinalAlpha(getMaterialOpacity(mat), diffuse.a), getMaterialDiffuse(mat) * diffuse.rgb * color, getMaterialSpecular(mat), diff --git a/libraries/render-utils/src/model.slv b/libraries/render-utils/src/model.slv index f4511da944..97b5eb640b 100755 --- a/libraries/render-utils/src/model.slv +++ b/libraries/render-utils/src/model.slv @@ -20,7 +20,7 @@ const int MAX_TEXCOORDS = 2; uniform mat4 texcoordMatrices[MAX_TEXCOORDS]; // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; varying vec3 color; @@ -36,7 +36,7 @@ void main(void) { TransformCamera cam = getTransformCamera(); TransformObject obj = getTransformObject(); <$transformModelToClipPos(cam, obj, gl_Vertex, gl_Position)$> - <$transformModelToEyeDir(cam, obj, gl_Normal, normal.xyz)$> + <$transformModelToEyeDir(cam, obj, gl_Normal, interpolatedNormal.xyz)$> - normal = vec4(normalize(normal.xyz), 0.0); + interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); } diff --git a/libraries/render-utils/src/model_lightmap.slf b/libraries/render-utils/src/model_lightmap.slf index b7660da16d..00d74ed997 100755 --- a/libraries/render-utils/src/model_lightmap.slf +++ b/libraries/render-utils/src/model_lightmap.slf @@ -24,7 +24,7 @@ uniform sampler2D emissiveMap; uniform vec2 emissiveParams; // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; varying vec3 color; @@ -39,7 +39,7 @@ void main(void) { Material mat = getMaterial(); packDeferredFragmentLightmap( - normalize(normal.xyz), + normalize(interpolatedNormal.xyz), evalOpaqueFinalAlpha(getMaterialOpacity(mat), diffuse.a), getMaterialDiffuse(mat) * diffuse.rgb * color, getMaterialSpecular(mat), diff --git a/libraries/render-utils/src/model_lightmap.slv b/libraries/render-utils/src/model_lightmap.slv index 56b34a5aa8..54d9bd21e1 100755 --- a/libraries/render-utils/src/model_lightmap.slv +++ b/libraries/render-utils/src/model_lightmap.slv @@ -23,7 +23,7 @@ uniform mat4 texcoordMatrices[MAX_TEXCOORDS]; attribute vec2 texcoord1; // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; // the interpolated texcoord1 varying vec2 interpolatedTexcoord1; @@ -44,8 +44,8 @@ void main(void) { TransformCamera cam = getTransformCamera(); TransformObject obj = getTransformObject(); <$transformModelToClipPos(cam, obj, gl_Vertex, gl_Position)$> - <$transformModelToEyeDir(cam, obj, gl_Normal, normal.xyz)$> + <$transformModelToEyeDir(cam, obj, gl_Normal, interpolatedNormal.xyz)$> - normal = vec4(normalize(normal.xyz), 0.0); + interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); } diff --git a/libraries/render-utils/src/model_lightmap_specular_map.slf b/libraries/render-utils/src/model_lightmap_specular_map.slf index e4bb682601..daabfe2d07 100755 --- a/libraries/render-utils/src/model_lightmap_specular_map.slf +++ b/libraries/render-utils/src/model_lightmap_specular_map.slf @@ -27,7 +27,7 @@ uniform vec2 emissiveParams; uniform sampler2D specularMap; // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; varying vec2 interpolatedTexcoord1; @@ -42,7 +42,7 @@ void main(void) { Material mat = getMaterial(); packDeferredFragmentLightmap( - normalize(normal.xyz), + normalize(interpolatedNormal.xyz), evalOpaqueFinalAlpha(getMaterialOpacity(mat), diffuse.a), getMaterialDiffuse(mat) * diffuse.rgb * color, specular, // no use of getMaterialSpecular(mat) diff --git a/libraries/render-utils/src/model_specular_map.slf b/libraries/render-utils/src/model_specular_map.slf index a0203d74af..46f565de6c 100755 --- a/libraries/render-utils/src/model_specular_map.slf +++ b/libraries/render-utils/src/model_specular_map.slf @@ -23,7 +23,7 @@ uniform sampler2D diffuseMap; uniform sampler2D specularMap; // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; varying vec3 color; @@ -35,7 +35,7 @@ void main(void) { Material mat = getMaterial(); packDeferredFragment( - normalize(normal.xyz), + normalize(interpolatedNormal.xyz), evalOpaqueFinalAlpha(getMaterialOpacity(mat), diffuse.a), getMaterialDiffuse(mat) * diffuse.rgb * color, specular, //getMaterialSpecular(mat), diff --git a/libraries/render-utils/src/model_translucent.slf b/libraries/render-utils/src/model_translucent.slf index 9b8eb97f70..9b34951f88 100755 --- a/libraries/render-utils/src/model_translucent.slf +++ b/libraries/render-utils/src/model_translucent.slf @@ -19,7 +19,7 @@ // the diffuse texture uniform sampler2D diffuseMap; -varying vec4 normal; +varying vec4 interpolatedNormal; varying vec3 color; @@ -31,7 +31,7 @@ void main(void) { Material mat = getMaterial(); packDeferredFragmentTranslucent( - normalize(normal.xyz), + normalize(interpolatedNormal.xyz), getMaterialOpacity(mat) * diffuse.a, getMaterialDiffuse(mat) * diffuse.rgb * color, getMaterialSpecular(mat), diff --git a/libraries/render-utils/src/simple.slf b/libraries/render-utils/src/simple.slf index 3e70674e33..4e1a09fb92 100644 --- a/libraries/render-utils/src/simple.slf +++ b/libraries/render-utils/src/simple.slf @@ -15,7 +15,7 @@ <@include DeferredBufferWrite.slh@> // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; // the glow intensity //uniform float glowIntensity; @@ -28,7 +28,7 @@ void main(void) { */ packDeferredFragment( - normalize(normal.xyz), + normalize(interpolatedNormal.xyz), glowIntensity, gl_Color.rgb, gl_FrontMaterial.specular.rgb, diff --git a/libraries/render-utils/src/simple.slv b/libraries/render-utils/src/simple.slv index 61338b440d..9ad47a3e66 100644 --- a/libraries/render-utils/src/simple.slv +++ b/libraries/render-utils/src/simple.slv @@ -13,11 +13,11 @@ // // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; void main(void) { // transform and store the normal for interpolation - normal = normalize(gl_ModelViewMatrix * vec4(gl_Normal, 0.0)); + interpolatedNormal = normalize(gl_ModelViewMatrix * vec4(gl_Normal, 0.0)); // pass along the diffuse color gl_FrontColor = gl_Color; diff --git a/libraries/render-utils/src/skin_model.slv b/libraries/render-utils/src/skin_model.slv index f475cbd1f5..fdde2e8295 100755 --- a/libraries/render-utils/src/skin_model.slv +++ b/libraries/render-utils/src/skin_model.slv @@ -1,5 +1,5 @@ -<@include gpu/Config.slh@> -<$VERSION_HEADER$> +<@include gpu/Config.slh@> +<$VERSION_HEADER$> // Generated on <$_SCRIBE_DATE$> // // skin_model.vert @@ -12,8 +12,8 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -<@include gpu/Transform.slh@> -<$declareStandardTransform()$> +<@include gpu/Transform.slh@> +<$declareStandardTransform()$> const int MAX_TEXCOORDS = 2; const int MAX_CLUSTERS = 128; @@ -26,7 +26,7 @@ attribute vec4 clusterIndices; attribute vec4 clusterWeights; // the interpolated normal -varying vec4 normal; +varying vec4 interpolatedNormal; varying vec3 color; @@ -37,7 +37,7 @@ void main(void) { mat4 clusterMatrix = clusterMatrices[int(clusterIndices[i])]; float clusterWeight = clusterWeights[i]; position += clusterMatrix * gl_Vertex * clusterWeight; - normal += clusterMatrix * vec4(gl_Normal, 0.0) * clusterWeight; + interpolatedNormal += clusterMatrix * vec4(gl_Normal, 0.0) * clusterWeight; } // pass along the diffuse color @@ -46,11 +46,11 @@ void main(void) { // and the texture coordinates gl_TexCoord[0] = texcoordMatrices[0] * vec4(gl_MultiTexCoord0.xy, 0.0, 1.0); - // standard transform - TransformCamera cam = getTransformCamera(); - TransformObject obj = getTransformObject(); - <$transformModelToClipPos(cam, obj, position, gl_Position)$> - <$transformModelToEyeDir(cam, obj, normal.xyz, normal.xyz)$> - - normal = vec4(normalize(normal.xyz), 0.0); + // standard transform + TransformCamera cam = getTransformCamera(); + TransformObject obj = getTransformObject(); + <$transformModelToClipPos(cam, obj, position, gl_Position)$> + <$transformModelToEyeDir(cam, obj, interpolatedNormal.xyz, interpolatedNormal.xyz)$> + + interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); } diff --git a/libraries/render-utils/src/skin_model_normal_map.slv b/libraries/render-utils/src/skin_model_normal_map.slv index bbc8f81d12..ed552a7aca 100755 --- a/libraries/render-utils/src/skin_model_normal_map.slv +++ b/libraries/render-utils/src/skin_model_normal_map.slv @@ -1,5 +1,5 @@ -<@include gpu/Config.slh@> -<$VERSION_HEADER$> +<@include gpu/Config.slh@> +<$VERSION_HEADER$> // Generated on <$_SCRIBE_DATE$> // // skin_model_normal_map.vert @@ -12,8 +12,8 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -<@include gpu/Transform.slh@> -<$declareStandardTransform()$> +<@include gpu/Transform.slh@> +<$declareStandardTransform()$> const int MAX_TEXCOORDS = 2; const int MAX_CLUSTERS = 128; @@ -54,16 +54,16 @@ void main(void) { // and the texture coordinates gl_TexCoord[0] = texcoordMatrices[0] * vec4(gl_MultiTexCoord0.xy, 0.0, 1.0); - interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); + interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); interpolatedTangent = vec4(normalize(interpolatedTangent.xyz), 0.0); - // standard transform - TransformCamera cam = getTransformCamera(); - TransformObject obj = getTransformObject(); - <$transformModelToClipPos(cam, obj, interpolatedPosition, gl_Position)$> - <$transformModelToEyeDir(cam, obj, interpolatedNormal.xyz, interpolatedNormal.xyz)$> - <$transformModelToEyeDir(cam, obj, interpolatedTangent.xyz, interpolatedTangent.xyz)$> - - interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); + // standard transform + TransformCamera cam = getTransformCamera(); + TransformObject obj = getTransformObject(); + <$transformModelToClipPos(cam, obj, interpolatedPosition, gl_Position)$> + <$transformModelToEyeDir(cam, obj, interpolatedNormal.xyz, interpolatedNormal.xyz)$> + <$transformModelToEyeDir(cam, obj, interpolatedTangent.xyz, interpolatedTangent.xyz)$> + + interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); interpolatedTangent = vec4(normalize(interpolatedTangent.xyz), 0.0); } From 2b631efb5d25e7231c5b48f04d948b381a5ca0bb Mon Sep 17 00:00:00 2001 From: samcake Date: Fri, 1 May 2015 00:21:58 -0700 Subject: [PATCH 3/3] shader not compiling properly have been fixed --- .../render-utils/src/model_normal_map.slv | 28 +++++++++---------- libraries/render-utils/src/skin_model.slv | 2 +- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/libraries/render-utils/src/model_normal_map.slv b/libraries/render-utils/src/model_normal_map.slv index e702b446b8..2f493053dd 100755 --- a/libraries/render-utils/src/model_normal_map.slv +++ b/libraries/render-utils/src/model_normal_map.slv @@ -1,5 +1,5 @@ -<@include gpu/Config.slh@> -<$VERSION_HEADER$> +<@include gpu/Config.slh@> +<$VERSION_HEADER$> // Generated on <$_SCRIBE_DATE$> // // model.vert @@ -12,9 +12,9 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -<@include gpu/Transform.slh@> - -<$declareStandardTransform()$> +<@include gpu/Transform.slh@> + +<$declareStandardTransform()$> const int MAX_TEXCOORDS = 2; @@ -29,7 +29,7 @@ varying vec4 interpolatedNormal; // the interpolated tangent varying vec4 interpolatedTangent; -varying vec3 color; +varying vec3 color; void main(void) { // transform and store the normal and tangent for interpolation @@ -42,13 +42,13 @@ void main(void) { // and the texture coordinates gl_TexCoord[0] = texcoordMatrices[0] * vec4(gl_MultiTexCoord0.xy, 0.0, 1.0); - // standard transform - TransformCamera cam = getTransformCamera(); - TransformObject obj = getTransformObject(); - <$transformModelToClipPos(cam, obj, gl_Vertex, gl_Position)$> - <$transformModelToEyeDir(cam, obj, gl_Normal, interpolatedNormal.xyz)$> - <$transformModelToEyeDir(cam, obj, tangent, interpolatedTangent.xyz)$> - - interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); + // standard transform + TransformCamera cam = getTransformCamera(); + TransformObject obj = getTransformObject(); + <$transformModelToClipPos(cam, obj, gl_Vertex, gl_Position)$> + <$transformModelToEyeDir(cam, obj, gl_Normal, interpolatedNormal.xyz)$> + <$transformModelToEyeDir(cam, obj, tangent, interpolatedTangent.xyz)$> + + interpolatedNormal = vec4(normalize(interpolatedNormal.xyz), 0.0); interpolatedTangent = vec4(normalize(interpolatedTangent.xyz), 0.0); } diff --git a/libraries/render-utils/src/skin_model.slv b/libraries/render-utils/src/skin_model.slv index fdde2e8295..c94fc0d151 100755 --- a/libraries/render-utils/src/skin_model.slv +++ b/libraries/render-utils/src/skin_model.slv @@ -32,7 +32,7 @@ varying vec3 color; void main(void) { vec4 position = vec4(0.0, 0.0, 0.0, 0.0); - normal = vec4(0.0, 0.0, 0.0, 0.0); + interpolatedNormal = vec4(0.0, 0.0, 0.0, 0.0); for (int i = 0; i < INDICES_PER_VERTEX; i++) { mat4 clusterMatrix = clusterMatrices[int(clusterIndices[i])]; float clusterWeight = clusterWeights[i];