From d9a3a17cf4063daa2642167cb79228eb4da1ee40 Mon Sep 17 00:00:00 2001 From: turanszkij Date: Thu, 28 Jan 2016 18:43:40 +0100 Subject: [PATCH] Constant buffer refactor - part4 --- WickedEngine/DeferredRenderableComponent.cpp | 9 +-- WickedEngine/Renderable3DComponent.cpp | 3 +- WickedEngine/WickedEngine.vcxproj | 29 +++++++ WickedEngine/WickedEngine.vcxproj.filters | 9 +++ WickedEngine/imageVS.hlsl | 11 ++- WickedEngine/skyHF.hlsli | 19 +++++ WickedEngine/skyPS.hlsl | 85 +------------------- WickedEngine/skyPS_reflection.hlsl | 11 +++ WickedEngine/skyVS.hlsl | 6 +- WickedEngine/skyVS_reflection.hlsl | 15 ++++ WickedEngine/waterPS.hlsl | 10 ++- WickedEngine/wiRenderer.cpp | 20 +++-- WickedEngine/wiRenderer.h | 6 +- WickedEngine/wiVersion.cpp | 4 +- 14 files changed, 127 insertions(+), 110 deletions(-) create mode 100644 WickedEngine/skyHF.hlsli create mode 100644 WickedEngine/skyPS_reflection.hlsl create mode 100644 WickedEngine/skyVS_reflection.hlsl diff --git a/WickedEngine/DeferredRenderableComponent.cpp b/WickedEngine/DeferredRenderableComponent.cpp index f4a401509..4cba0b20c 100644 --- a/WickedEngine/DeferredRenderableComponent.cpp +++ b/WickedEngine/DeferredRenderableComponent.cpp @@ -119,7 +119,6 @@ void DeferredRenderableComponent::RenderScene(DeviceContext context){ if (getSSAOEnabled()){ - //wiImage::BatchBegin(context, STENCILREF_DEFAULT); fx.stencilRef = STENCILREF_DEFAULT; fx.stencilComp = D3D11_COMPARISON_LESS; rtSSAO[0].Activate(context); { @@ -127,11 +126,9 @@ void DeferredRenderableComponent::RenderScene(DeviceContext context){ fx.setDepthMap(rtLinearDepth.shaderResource.back()); fx.setNormalMap(rtGBuffer.shaderResource[1]); fx.setMaskMap(wiTextureHelper::getInstance()->getRandom64x64()); - //fx.sampleFlag=SAMPLEMODE_CLAMP; fx.quality = QUALITY_BILINEAR; fx.sampleFlag = SAMPLEMODE_MIRROR; wiImage::Draw(nullptr, fx, context); - //fx.sampleFlag=SAMPLEMODE_CLAMP; fx.process.clear(); } rtSSAO[1].Activate(context); { @@ -164,7 +161,7 @@ void DeferredRenderableComponent::RenderScene(DeviceContext context){ if (getSSSEnabled()) { - //wiImage::BatchBegin(context, STENCILREF_SKIN); + wiRenderer::UnbindTextures(0, 16, context); fx.stencilRef = STENCILREF_SKIN; fx.stencilComp = D3D11_COMPARISON_LESS; fx.quality = QUALITY_BILINEAR; @@ -186,14 +183,12 @@ void DeferredRenderableComponent::RenderScene(DeviceContext context){ } fx.process.clear(); rtSSS.back().Activate(context, rtGBuffer.depth); { - //wiImage::BatchBegin(context); fx.quality = QUALITY_NEAREST; fx.sampleFlag = SAMPLEMODE_CLAMP; fx.blendFlag = BLENDMODE_OPAQUE; fx.stencilRef = 0; fx.stencilComp = 0; wiImage::Draw(rtDeferred.shaderResource.front(), fx, context); - //wiImage::BatchBegin(context, STENCILREF_SKIN); fx.stencilRef = STENCILREF_SKIN; fx.stencilComp = D3D11_COMPARISON_LESS; wiImage::Draw(rtSSS[rtSSS.size() - 2].shaderResource.back(), fx, context); @@ -205,7 +200,6 @@ void DeferredRenderableComponent::RenderScene(DeviceContext context){ if (getSSREnabled()){ rtSSR.Activate(context); { - //wiImage::BatchBegin(context); context->GenerateMips(rtDeferred.shaderResource[0]); fx.process.setSSR(true); fx.setDepthMap(dtDepthCopy.shaderResource); @@ -221,7 +215,6 @@ void DeferredRenderableComponent::RenderScene(DeviceContext context){ } if (getMotionBlurEnabled()){ //MOTIONBLUR - //wiImage::BatchBegin(context); rtMotionBlur.Activate(context); fx.process.setMotionBlur(true); fx.setVelocityMap(rtGBuffer.shaderResource.back()); diff --git a/WickedEngine/Renderable3DComponent.cpp b/WickedEngine/Renderable3DComponent.cpp index 6e9732f49..cb6e7d1d5 100644 --- a/WickedEngine/Renderable3DComponent.cpp +++ b/WickedEngine/Renderable3DComponent.cpp @@ -221,7 +221,7 @@ void Renderable3DComponent::RenderReflections(DeviceContext context){ wiRenderer::DrawWorld(wiRenderer::getRefCamera(), false, 0, context , false, true, SHADERTYPE_NONE , nullptr, getHairParticlesReflectionEnabled(), GRAPHICSTHREAD_REFLECTIONS); - wiRenderer::DrawSky(context); + wiRenderer::DrawSky(context,true); } } void Renderable3DComponent::RenderShadows(DeviceContext context){ @@ -424,6 +424,7 @@ void Renderable3DComponent::RenderColorGradedComposition(){ } } wiImage::Draw(rtFinal[1].shaderResource.back(), fx); + } diff --git a/WickedEngine/WickedEngine.vcxproj b/WickedEngine/WickedEngine.vcxproj index a7a4956f3..a0675f4d0 100644 --- a/WickedEngine/WickedEngine.vcxproj +++ b/WickedEngine/WickedEngine.vcxproj @@ -861,6 +861,7 @@ + @@ -1961,6 +1962,20 @@ + + Pixel + Pixel + Pixel + Pixel + shaders/%(Filename).cso + shaders/%(Filename).cso + shaders/%(Filename).cso + shaders/%(Filename).cso + 4.1 + 4.1 + 4.1 + 4.1 + 4.1 shaders/%(Filename).cso @@ -1980,6 +1995,20 @@ + + Vertex + Vertex + Vertex + Vertex + shaders/%(Filename).cso + shaders/%(Filename).cso + shaders/%(Filename).cso + shaders/%(Filename).cso + 4.1 + 4.1 + 4.1 + 4.1 + 4.1 4.1 diff --git a/WickedEngine/WickedEngine.vcxproj.filters b/WickedEngine/WickedEngine.vcxproj.filters index 99731ea7d..ef7b10099 100644 --- a/WickedEngine/WickedEngine.vcxproj.filters +++ b/WickedEngine/WickedEngine.vcxproj.filters @@ -1901,6 +1901,9 @@ shaders + + shaders + @@ -2136,6 +2139,12 @@ shaders + + shaders + + + shaders + diff --git a/WickedEngine/imageVS.hlsl b/WickedEngine/imageVS.hlsl index 6c0567f8a..4b7d436ff 100644 --- a/WickedEngine/imageVS.hlsl +++ b/WickedEngine/imageVS.hlsl @@ -13,8 +13,14 @@ VertextoPixel main(uint vI : SV_VERTEXID) if (xMirror<0) inTex.x = 1 - inTex.x; - inPos.x -= xDimensions.x*0.5f; - inPos.y += xDimensions.y*0.5f; + if (!xPivot) {//upperleft pivot + inPos.x-=xDimensions.x*0.5f; + inPos.y+=xDimensions.y*0.5f; + } + else if(xPivot==1){//center pivot + inPos.x-=xDimensions.z*0.5f; + inPos.y+=xDimensions.w*0.5f; + } if(inTex.x==1) inPos.x+=xDimensions.z*xMirror; if(inTex.y==1) inPos.y-=xDimensions.w; @@ -22,6 +28,7 @@ VertextoPixel main(uint vI : SV_VERTEXID) Out.tex.xy = inTex; + ////if(xDrawRec.x==0 && xDrawRec.y==0 && xDrawRec.z==0 && xDrawRec.w==0){ //// if(!xPivot){//upperleft pivot //// inPos.x-=xDimensions.x*0.5f; diff --git a/WickedEngine/skyHF.hlsli b/WickedEngine/skyHF.hlsli new file mode 100644 index 000000000..f06ee5675 --- /dev/null +++ b/WickedEngine/skyHF.hlsli @@ -0,0 +1,19 @@ +#ifndef _SKY_HF_ +#define _SKY_HF_ +#include "globals.hlsli" +#include "effectHF_PS.hlsli" + +inline float4 GetSkyColor(in float3 normal) +{ + static const float overBright = 1.005f; + + normal = normalize(normal) * overBright; + + float3 col = /*lerp( xHorizon.rgb,*/ enviroTex.SampleLevel(texSampler, normal, 0).rgb/*, saturate(nor.y/0.3f) )*/; + float3 sun = max(pow(abs(dot(g_xWorld_SunDir.xyz, normal)), 256)*g_xWorld_SunColor.rgb, 0); + + return float4(col + sun, 1); +} + + +#endif // _SKY_HF_ diff --git a/WickedEngine/skyPS.hlsl b/WickedEngine/skyPS.hlsl index 54b753993..9d77e9309 100644 --- a/WickedEngine/skyPS.hlsl +++ b/WickedEngine/skyPS.hlsl @@ -1,6 +1,5 @@ -#include "effectHF_PS.hlsli" #include "globalsHF.hlsli" -#include "globals.hlsli" +#include "skyHF.hlsli" struct VSOut{ float4 pos : SV_POSITION; @@ -24,87 +23,9 @@ PSOut main(VSOut PSIn) ScreenCoordPrev.y = -PSIn.pos2DPrev.y / PSIn.pos2DPrev.w / 2.0f + 0.5f; float2 vel = ScreenCoord - ScreenCoordPrev; - static const float overBright = 1.005f; - float3 inNor = normalize(PSIn.nor); - float3 nor = inNor*overBright; - float3 sun = 0; - float3 col = 0; - //[branch]if(xFx.x==0){ - col = /*lerp( xHorizon.rgb,*/ enviroTex.SampleLevel( texSampler,nor,0 ).rgb/*, saturate(nor.y/0.3f) )*/; - sun = max(pow(abs(dot(g_xWorld_SunDir.xyz,nor)),256)*g_xWorld_SunColor.rgb, 0); - //} - //else - //{ - // sun = clamp(pow(abs(dot(g_xWorld_SunDir.xyz,nor)),64)*g_xWorld_SunColor.rgb, 0, inf); - //} - //return float4( col+sun ,1); - PSOut Out = (PSOut)0; - Out.col = float4(col + sun, 1); - Out.nor = float4(inNor,0); + Out.col = GetSkyColor(PSIn.nor); + Out.nor = float4(0, 0, 0, 0); Out.vel = float4(vel, 0, 0); return Out; } - -//struct VSOut{ -// float4 pos : SV_POSITION; -// float3 tex : TEXCOORD0; -//}; -// -//float4 main(VSOut PSIn):SV_TARGET -//{ -// //float sun = pow( saturate( dot(PSIn.tex,normalize(xSun.xyz)) ),2 )<0.5?0:1; -// return enviroTex.Sample( texSampler,PSIn.tex ); -//} - -//struct VertextoPixel -//{ -// float4 pos : SV_POSITION; -// float2 tex : TEXCOORD0; -// float3 Position3D : TEXCOORD1; -// //float4 SunPos : TEXCOORD2; -// float3 CamPos : TEXCOORD2; -// float AtmospherePos : TEXCOORD3; -// //float3 vel : TEXCOORD5; -//}; -///*struct PixelOutputType -//{ -// float4 col : SV_TARGET0; -// float4 nor : SV_TARGET1; -// float4 spe : SV_TARGET2; -// float4 vel : SV_TARGET4; -//};*/ -// -///*PixelOutputType*/float4 main(VertextoPixel PSIn):SV_TARGET -//{ -// /*float4 color = float4(0,0,0,1); -// if(xFx.x!=1) -// { -// float3 ref = normalize(PSIn.Position3D-PSIn.CamPos); -// color = lerp(float4(xHorizon.xyz,1), enviroTex.Sample(texSampler,ref), saturate(PSIn.AtmospherePos)); -// } -// -// if(xSun.w){ -// float3 lightdirection = normalize(xSun.xyz); -// float3 eyeVector = normalize(PSIn.CamPos - PSIn.Position3D); -// float spec = dot(lightdirection, eyeVector); -// spec = pow(abs(spec), (2-specular.a)*150 ); -// color.rgb += (spec * xSunColor.rgb); -// } -// -// if(xFx.y==1){ -// float avg=0; -// avg+=color.r; avg+=color.g; avg+=color.b; avg/=3.0f; -// color=avg; -// } -// -// if(xFx.z==1){ -// color.r=1-color.r; -// color.g=1-color.g; -// color.b=1-color.b; -// } -// -// return float4(color.rgb,1);*/ -// -// return enviroTex.Sample(texSampler,normalize(PSIn.Position3D-PSIn.CamPos)); -//} \ No newline at end of file diff --git a/WickedEngine/skyPS_reflection.hlsl b/WickedEngine/skyPS_reflection.hlsl new file mode 100644 index 000000000..d61876100 --- /dev/null +++ b/WickedEngine/skyPS_reflection.hlsl @@ -0,0 +1,11 @@ +#include "skyHF.hlsli" + +struct VSOut { + float4 pos : SV_POSITION; + float3 nor : TEXCOORD0; +}; + +float4 main(VSOut PSIn) : SV_TARGET +{ + return GetSkyColor(PSIn.nor); +} \ No newline at end of file diff --git a/WickedEngine/skyVS.hlsl b/WickedEngine/skyVS.hlsl index 79932b857..42e4213eb 100644 --- a/WickedEngine/skyVS.hlsl +++ b/WickedEngine/skyVS.hlsl @@ -1,5 +1,5 @@ -#include "icosphere.hlsli" #include "globals.hlsli" +#include "icosphere.hlsli" struct VSOut{ float4 pos : SV_POSITION; @@ -11,8 +11,8 @@ struct VSOut{ VSOut main(uint vid : SV_VERTEXID) { VSOut Out = (VSOut)0; - Out.pos = Out.pos2D = mul(float4(mul(ICOSPHERE[vid], (float3x3)g_xCamera_View), 0), g_xCamera_Proj); + Out.pos = Out.pos2D = mul(float4(ICOSPHERE[vid], 0), g_xCamera_VP); Out.nor=ICOSPHERE[vid]; - Out.pos2DPrev = mul(float4(mul(ICOSPHERE[vid], (float3x3)g_xCamera_PrevV), 0), g_xCamera_PrevP); + Out.pos2DPrev = mul(float4(ICOSPHERE[vid], 0), g_xCamera_PrevVP); return Out; } diff --git a/WickedEngine/skyVS_reflection.hlsl b/WickedEngine/skyVS_reflection.hlsl new file mode 100644 index 000000000..d5fcc93c3 --- /dev/null +++ b/WickedEngine/skyVS_reflection.hlsl @@ -0,0 +1,15 @@ +#include "globals.hlsli" +#include "icosphere.hlsli" + +struct VSOut { + float4 pos : SV_POSITION; + float3 nor : TEXCOORD0; +}; + +VSOut main(uint vid : SV_VERTEXID) +{ + VSOut Out = (VSOut)0; + Out.pos = mul(float4(ICOSPHERE[vid], 0), g_xCamera_ReflVP); + Out.nor = ICOSPHERE[vid]; + return Out; +} \ No newline at end of file diff --git a/WickedEngine/waterPS.hlsl b/WickedEngine/waterPS.hlsl index 4e03b8ff5..f76042f50 100644 --- a/WickedEngine/waterPS.hlsl +++ b/WickedEngine/waterPS.hlsl @@ -43,15 +43,17 @@ float4 main( PixelInputType PSIn) : SV_TARGET } - //ENVIROMENT MAP + ////ENVIROMENT MAP //float3 ref = (reflect(-eyevector, normal)); - //float3 reflectiveColor = enviroTex.Sample(texSampler,ref); + //float3 skyColor = enviroTex.Sample(texSampler,ref).rgb; //REFLECTION float2 RefTex; RefTex.x = PSIn.ReflectionMapSamplingPos.x/PSIn.ReflectionMapSamplingPos.w/2.0f + 0.5f; RefTex.y = -PSIn.ReflectionMapSamplingPos.y/PSIn.ReflectionMapSamplingPos.w/2.0f + 0.5f; - float3 reflectiveColor = xTextureRef.SampleLevel(mapSampler,RefTex+bumpColor.rg,0).rgb; + float4 reflectiveColor = xTextureRef.SampleLevel(mapSampler,RefTex+bumpColor.rg,0); + + //reflectiveColor.rgb = lerp(skyColor, reflectiveColor.rgb, reflectiveColor.a); //REFRACTION float2 perturbatedRefrTexCoords = screenPos.xy + bumpColor.rg; @@ -65,7 +67,7 @@ float4 main( PixelInputType PSIn) : SV_TARGET //FRESNEL TERM float fresnelTerm = abs(eyeDot); - baseColor.rgb = lerp(reflectiveColor, refractiveColor, fresnelTerm); + baseColor.rgb = lerp(reflectiveColor.rgb, refractiveColor, fresnelTerm); //DULL COLOR baseColor.rgb = lerp(baseColor.rgb, g_xMat_diffuseColor.rgb, 0.16); diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index 18c773745..1249c54ac 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -58,8 +58,8 @@ RasterizerState wiRenderer::rasterizerState, wiRenderer::rssh, wiRenderer::nonCu ,wiRenderer::backFaceRS; DepthStencilState wiRenderer::depthStencilState,wiRenderer::xRayStencilState,wiRenderer::depthReadStencilState,wiRenderer::stencilReadState ,wiRenderer::stencilReadMatch; -PixelShader wiRenderer::skyPS, wiRenderer::sunPS; -VertexShader wiRenderer::skyVS; +PixelShader wiRenderer::skyPS, wiRenderer::skyPS_refl, wiRenderer::sunPS; +VertexShader wiRenderer::skyVS, wiRenderer::skyVS_refl; Sampler wiRenderer::skySampler; TextureView wiRenderer::enviroMap,wiRenderer::colorGrading; float wiRenderer::GameSpeed=1,wiRenderer::overrideGameSpeed=1; @@ -938,6 +938,8 @@ void wiRenderer::LoadSkyShaders() { skyVS = static_cast(wiResourceManager::GetShaderManager()->add(SHADERPATH + "skyVS.cso", wiResourceManager::VERTEXSHADER))->vertexShader; skyPS = static_cast(wiResourceManager::GetShaderManager()->add(SHADERPATH + "skyPS.cso", wiResourceManager::PIXELSHADER)); + skyVS_refl = static_cast(wiResourceManager::GetShaderManager()->add(SHADERPATH + "skyVS_reflection.cso", wiResourceManager::VERTEXSHADER))->vertexShader; + skyPS_refl = static_cast(wiResourceManager::GetShaderManager()->add(SHADERPATH + "skyPS_reflection.cso", wiResourceManager::PIXELSHADER)); sunPS = static_cast(wiResourceManager::GetShaderManager()->add(SHADERPATH + "sunPS.cso", wiResourceManager::PIXELSHADER)); } void wiRenderer::LoadShadowShaders() @@ -3054,7 +3056,7 @@ void wiRenderer::DrawWorldTransparent(Camera* camera, TextureView refracRes, Tex } -void wiRenderer::DrawSky(DeviceContext context) +void wiRenderer::DrawSky(DeviceContext context, bool isReflection) { if (enviroMap == nullptr) return; @@ -3064,8 +3066,16 @@ void wiRenderer::DrawSky(DeviceContext context) BindDepthStencilState(depthReadStencilState,STENCILREF_SKY,context); BindBlendState(blendState,context); - BindVS(skyVS,context); - BindPS(skyPS,context); + if (!isReflection) + { + BindVS(skyVS, context); + BindPS(skyPS, context); + } + else + { + BindVS(skyVS_refl, context); + BindPS(skyPS_refl, context); + } BindTexturePS(enviroMap,0,context); BindSamplerPS(skySampler,0,context); diff --git a/WickedEngine/wiRenderer.h b/WickedEngine/wiRenderer.h index 7356bf257..030e4fb7a 100644 --- a/WickedEngine/wiRenderer.h +++ b/WickedEngine/wiRenderer.h @@ -316,8 +316,8 @@ protected: static Sampler texSampler, mapSampler, comparisonSampler, mirSampler, pointSampler; static RasterizerState rasterizerState,rssh,nonCullRSsh,wireRS,nonCullRS,nonCullWireRS,backFaceRS; static DepthStencilState depthStencilState,xRayStencilState,depthReadStencilState,stencilReadState,stencilReadMatch; - static PixelShader skyPS, sunPS; - static VertexShader skyVS; + static PixelShader skyPS, skyPS_refl, sunPS; + static VertexShader skyVS,skyVS_refl; static Sampler skySampler; static TextureView enviroMap,colorGrading; static void LoadBuffers(); @@ -685,7 +685,7 @@ public: static void UpdateCameraCB(DeviceContext context); static void SetClipPlane(XMFLOAT4 clipPlane, DeviceContext context); - static void DrawSky(DeviceContext context); + static void DrawSky(DeviceContext context, bool isReflection = false); static void DrawSun(DeviceContext context); static void DrawWorld(Camera* camera, bool DX11Eff, int tessF, DeviceContext context , bool BlackOut, bool isReflection, SHADERTYPE shaded, TextureView refRes, bool grass, GRAPHICSTHREAD thread); diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 8779249b8..b58765527 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -5,9 +5,9 @@ namespace wiVersion // major features const int major = 0; // minor features, major bug fixes - const int minor = 5; + const int minor = 6; // minor bug fixes, alterations, refactors - const int revision = 1; + const int revision = 0; long GetVersion()