From 15c8922028494f9d433b95a6cd3f1215df5fba89 Mon Sep 17 00:00:00 2001 From: LuisAntonRebollo Date: Mon, 15 Dec 2014 18:28:17 +0100 Subject: [PATCH] Fix ShaderGen cubemap feature. --- .../shaderGen/GLSL/shaderFeatureGLSL.cpp | 18 ++++++------------ .../shaderGen/HLSL/shaderFeatureHLSL.cpp | 15 +++------------ 2 files changed, 9 insertions(+), 24 deletions(-) diff --git a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp index a84610207..7c54cced8 100644 --- a/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp +++ b/Engine/source/shaderGen/GLSL/shaderFeatureGLSL.cpp @@ -1682,7 +1682,7 @@ void ReflectCubeFeatGLSL::processVert( Vector &componentList, cubeVertPos->setType( "vec3" ); LangElement *cubeVertPosDecl = new DecOp( cubeVertPos ); - meta->addStatement( new GenOp( " @ = tMul(mat3( @ ), @).xyz;\r\n", + meta->addStatement( new GenOp( " @ = tMul( @, float4(@,1)).xyz;\r\n", cubeVertPosDecl, cubeTrans, LangElement::find( "position" ) ) ); // cube normal @@ -1694,6 +1694,9 @@ void ReflectCubeFeatGLSL::processVert( Vector &componentList, meta->addStatement( new GenOp( " @ = ( tMul( (@), vec4(@, 0) ) ).xyz;\r\n", cubeNormDecl, cubeTrans, inNormal ) ); + meta->addStatement( new GenOp( " @ = bool(length(@)) ? normalize(@) : @;\r\n", + cubeNormal, cubeNormal, cubeNormal, cubeNormal ) ); + // grab the eye position Var *eyePos = (Var*)LangElement::find( "eyePosWorld" ); if ( !eyePos ) @@ -1703,23 +1706,14 @@ void ReflectCubeFeatGLSL::processVert( Vector &componentList, eyePos->constSortPos = cspPass; } - // cube position - Var * cubePos = new Var; - cubePos->setName( "cubePos" ); - cubePos->setType( "vec3" ); - LangElement *cubePosDecl = new DecOp( cubePos ); - - meta->addStatement( new GenOp( " @ = vec3( @[3][0], @[3][1], @[3][2] );\r\n", - cubePosDecl, cubeTrans, cubeTrans, cubeTrans ) ); - // eye to vert Var * eyeToVert = new Var; eyeToVert->setName( "eyeToVert" ); eyeToVert->setType( "vec3" ); LangElement *e2vDecl = new DecOp( eyeToVert ); - meta->addStatement( new GenOp( " @ = @ - ( @ - @ );\r\n", - e2vDecl, cubeVertPos, eyePos, cubePos ) ); + meta->addStatement( new GenOp( " @ = @ - @;\r\n", + e2vDecl, cubeVertPos, eyePos ) ); // grab connector texcoord register ShaderConnector *connectComp = dynamic_cast( componentList[C_CONNECTOR] ); diff --git a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp index b0fb3ad0f..8f8b5918a 100644 --- a/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp +++ b/Engine/source/shaderGen/HLSL/shaderFeatureHLSL.cpp @@ -1681,7 +1681,7 @@ void ReflectCubeFeatHLSL::processVert( Vector &componentList, cubeVertPos->setType( "float3" ); LangElement *cubeVertPosDecl = new DecOp( cubeVertPos ); - meta->addStatement( new GenOp( " @ = mul((float3x3)@, @).xyz;\r\n", + meta->addStatement( new GenOp( " @ = mul(@, float4(@,1)).xyz;\r\n", cubeVertPosDecl, cubeTrans, LangElement::find( "position" ) ) ); // cube normal @@ -1702,23 +1702,14 @@ void ReflectCubeFeatHLSL::processVert( Vector &componentList, eyePos->constSortPos = cspPass; } - // cube position - Var * cubePos = new Var; - cubePos->setName( "cubePos" ); - cubePos->setType( "float3" ); - LangElement *cubePosDecl = new DecOp( cubePos ); - - meta->addStatement( new GenOp( " @ = float3( @[0][3], @[1][3], @[2][3] );\r\n", - cubePosDecl, cubeTrans, cubeTrans, cubeTrans ) ); - // eye to vert Var * eyeToVert = new Var; eyeToVert->setName( "eyeToVert" ); eyeToVert->setType( "float3" ); LangElement *e2vDecl = new DecOp( eyeToVert ); - meta->addStatement( new GenOp( " @ = @ - ( @ - @ );\r\n", - e2vDecl, cubeVertPos, eyePos, cubePos ) ); + meta->addStatement( new GenOp( " @ = @ - @;\r\n", + e2vDecl, cubeVertPos, eyePos ) ); // grab connector texcoord register ShaderConnector *connectComp = dynamic_cast( componentList[C_CONNECTOR] );