diff --git a/WickedEngine/DeferredRenderableComponent.cpp b/WickedEngine/DeferredRenderableComponent.cpp index 19c5322a9..a8511adce 100644 --- a/WickedEngine/DeferredRenderableComponent.cpp +++ b/WickedEngine/DeferredRenderableComponent.cpp @@ -5,6 +5,7 @@ #include "wiStencilRef.h" #include "wiHelper.h" #include "wiTextureHelper.h" +#include "wiSprite.h" DeferredRenderableComponent::DeferredRenderableComponent(){ Renderable3DComponent::setProperties(); @@ -63,9 +64,9 @@ void DeferredRenderableComponent::Render(){ RenderShadows(); RenderReflections(); RenderScene(); - RenderSecondaryScene(rtGBuffer, rtDeferred); + RenderSecondaryScene(rtGBuffer, GetFinalRT()); RenderLightShafts(rtGBuffer); - RenderComposition1(rtDeferred); + RenderComposition1(GetFinalRT()); RenderBloom(); RenderComposition2(); } @@ -82,12 +83,12 @@ void DeferredRenderableComponent::RenderScene(wiRenderer::DeviceContext context) rtGBuffer.Activate(context); { wiRenderer::UpdatePerRenderCB(context, tessellationQuality); wiRenderer::UpdatePerViewCB(context, wiRenderer::getCamera(), wiRenderer::getRefCamera()); - - wiRenderer::UpdatePerEffectCB(context, XMFLOAT4(0, 0, 0, 0), XMFLOAT4(0, 0, 0, 0)); + wiRenderer::DrawWorld(wiRenderer::getCamera(), wiRenderer::DX11, tessellationQuality, context, false , wiRenderer::SHADED_DEFERRED, rtReflection.shaderResource.front(), true, GRAPHICSTHREAD_SCENE); + wiRenderer::DrawSky(context); } @@ -144,48 +145,47 @@ void DeferredRenderableComponent::RenderScene(wiRenderer::DeviceContext context) } - rtDeferred.Activate(context, rtGBuffer.depth); { + rtDeferred.Activate(context); { wiImage::DrawDeferred(rtGBuffer.shaderResource[0] , rtLinearDepth.shaderResource.back(), rtLight.shaderResource.front(), rtGBuffer.shaderResource[1] , getSSAOEnabled() ? rtSSAO.back().shaderResource.back() : wiTextureHelper::getInstance()->getWhite() - , context, STENCILREF_DEFAULT); - wiRenderer::DrawSky(context); + , context, 0); wiRenderer::DrawDebugBoneLines(wiRenderer::getCamera(), context); wiRenderer::DrawDebugLines(wiRenderer::getCamera(), context); wiRenderer::DrawDebugBoxes(wiRenderer::getCamera(), context); } - //if (getSSSEnabled()) - //{ - // wiImage::BatchBegin(context, STENCILREF_SKIN); - // fx.quality = QUALITY_BILINEAR; - // fx.sampleFlag = SAMPLEMODE_CLAMP; - // fx.setDepthMap(rtLinearDepth.shaderResource.back()); - // for (int i = 0; i 1) - ((Renderable3DComponent*)component)->setShadowsEnabled(wiLua::SGetBool(L, 2)); + ((Renderable3DComponent*)component)->setReflectionsEnabled(wiLua::SGetBool(L, 2)); else wiLua::SError(L, "SetShadowsEnabled(bool value) not enough arguments!"); return 0; diff --git a/WickedEngine/deferredPS.hlsl b/WickedEngine/deferredPS.hlsl index 2bbdabcd9..8081e2a86 100644 --- a/WickedEngine/deferredPS.hlsl +++ b/WickedEngine/deferredPS.hlsl @@ -17,11 +17,10 @@ cbuffer prop:register(b0){ float4 main(VertextoPixel PSIn) : SV_TARGET { - float4 color=0; - float depth = ( xSceneDepthMap.Load(int4(PSIn.pos.xy,0,0)).r ); + float4 color = xTexture.Load(int3(PSIn.pos.xy, 0)); + float depth = xSceneDepthMap.Load(int3(PSIn.pos.xy, 0)).r; [branch]if(depthGetView()); gcb.mProj = XMMatrixTranspose(camera->GetProjection()); + gcb.mPrevViewProjection = XMMatrixTranspose(wiRenderer::prevFrameCam->GetViewProjection()); gcb.colTime=XMFLOAT4(material->diffuseColor.x,material->diffuseColor.y,material->diffuseColor.z,wiRenderer::wind.time); gcb.eye=camera->translation; gcb.drawdistance = (float)LOD[2]; diff --git a/WickedEngine/wiHairParticle.h b/WickedEngine/wiHairParticle.h index 2876f8f78..b40027d40 100644 --- a/WickedEngine/wiHairParticle.h +++ b/WickedEngine/wiHairParticle.h @@ -33,12 +33,15 @@ private: { XMMATRIX mView; XMMATRIX mProj; + XMMATRIX mPrevViewProjection; XMFLOAT4 colTime; XMFLOAT3 eye; float drawdistance; XMFLOAT3 wind; float pad; float windRandomness; float windWaveSize; float padding[2]; + + ALIGN_16 }; static ID3D11InputLayout* il; static ID3D11VertexShader* vs; diff --git a/WickedEngine/wiImage.cpp b/WickedEngine/wiImage.cpp index 243bb042e..c5c57a075 100644 --- a/WickedEngine/wiImage.cpp +++ b/WickedEngine/wiImage.cpp @@ -552,7 +552,7 @@ void wiImage::DrawDeferred(wiRenderer::TextureView texture wiRenderer::BindPrimitiveTopology(wiRenderer::PRIMITIVETOPOLOGY::TRIANGLESTRIP,context); wiRenderer::BindRasterizerState(rasterizerState,context); - wiRenderer::BindDepthStencilState(depthStencilStateLess,stencilRef,context); + wiRenderer::BindDepthStencilState(depthNoStencilState,stencilRef,context); //context->VSSetShader(screenVS,0,0); //context->PSSetShader(deferredPS,0,0); diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index 59492e6e4..bf2872cbe 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -68,7 +68,7 @@ float wiRenderer::GameSpeed=1,wiRenderer::overrideGameSpeed=1; int wiRenderer::visibleCount; float wiRenderer::shBias; wiRenderTarget wiRenderer::normalMapRT, wiRenderer::imagesRT, wiRenderer::imagesRTAdd; -Camera *wiRenderer::cam = nullptr, *wiRenderer::refCam = nullptr; +Camera *wiRenderer::cam = nullptr, *wiRenderer::refCam = nullptr, *wiRenderer::prevFrameCam = nullptr; PHYSICS* wiRenderer::physicsEngine = nullptr; Wind wiRenderer::wind; WorldInfo wiRenderer::worldInfo; @@ -397,6 +397,7 @@ void wiRenderer::SetUpStaticComponents() cam->SetUp(SCREENWIDTH, SCREENHEIGHT, 0.1f, 800); refCam = new Camera(); refCam->SetUp(SCREENWIDTH, SCREENHEIGHT, 0.1f, 800); + prevFrameCam = new Camera; noiseTex = wiTextureHelper::getInstance()->getRandom64x64(); trailDistortTex = wiTextureHelper::getInstance()->getNormalMapDefault(); @@ -1868,6 +1869,7 @@ XMFLOAT3 wiRenderer::VertexVelocity(const Mesh* mesh, const int& vertexI){ } void wiRenderer::Update(float amount) { + *prevFrameCam = *cam; cam->Update(); refCam->Reflect(cam); @@ -3432,30 +3434,16 @@ void wiRenderer::DrawSky(ID3D11DeviceContext* context) if (enviroMap == nullptr) return; - //context->IASetPrimitiveTopology( D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST ); BindPrimitiveTopology(TRIANGLELIST,context); - //context->RSSetState(backFaceRS); - //context->OMSetDepthStencilState(depthReadStencilState, STENCILREF_SKY); - //float blendFactor[4] = { 0.0f, 0.0f, 0.0f, 0.0f }; - //UINT sampleMask = 0xffffffff; - //context->OMSetBlendState(blendState, blendFactor, sampleMask); BindRasterizerState(backFaceRS,context); BindDepthStencilState(depthReadStencilState,STENCILREF_SKY,context); BindBlendState(blendState,context); - //context->VSSetShader( skyVS, NULL, 0 ); - //context->PSSetShader( skyPS, NULL, 0 ); BindVS(skyVS,context); BindPS(skyPS,context); BindTexturePS(enviroMap,0,context); - //context->PSSetSamplers(0, 1, &skySampler); BindSamplerPS(skySampler,0,context); - - //context->VSSetConstantBuffers( 3, 1, &skyCb ); - //context->PSSetConstantBuffers( 0, 1, &pixelCB ); - - //context->Draw(240,0); BindConstantBufferVS(skyCb,3,context); BindConstantBufferPS(pixelCB,0,context); @@ -3552,17 +3540,6 @@ void wiRenderer::UpdatePerRenderCB(ID3D11DeviceContext* context, int tessF){ UpdateBuffer(tessBuf,&tb,context); } - //D3D11_MAPPED_SUBRESOURCE mappedResource; - //if(tessF){ - // TessBuffer tb; - // tb.g_f4Eye = wiRenderer::getCamera()->Eye; - // tb.g_f4TessFactors = XMFLOAT4A( tessF,2,4,6 ); - // TessBuffer* dataPtr; - // context->Map(tessBuf,0,D3D11_MAP_WRITE_DISCARD,0,&mappedResource); - // dataPtr = (TessBuffer*)mappedResource.pData; - // memcpy(dataPtr,&tb,sizeof(TessBuffer)); - // context->Unmap(tessBuf,0); - //} } void wiRenderer::UpdatePerViewCB(ID3D11DeviceContext* context, Camera* camera, Camera* refCamera, const XMFLOAT4& newClipPlane){ @@ -3570,6 +3547,7 @@ void wiRenderer::UpdatePerViewCB(ID3D11DeviceContext* context, Camera* camera, C StaticCB cb; cb.mViewProjection = XMMatrixTranspose(camera->GetViewProjection()); cb.mRefViewProjection = XMMatrixTranspose( refCamera->GetViewProjection()); + cb.mPrevViewProjection = XMMatrixTranspose(prevFrameCam->GetViewProjection()); cb.mCamPos = camera->GetEye(); cb.mClipPlane = newClipPlane; cb.mWind=wind.direction; @@ -3580,7 +3558,9 @@ void wiRenderer::UpdatePerViewCB(ID3D11DeviceContext* context, Camera* camera, C SkyBuffer scb; scb.mV=XMMatrixTranspose(camera->GetView()); - scb.mP=XMMatrixTranspose(camera->GetProjection()); + scb.mP = XMMatrixTranspose(camera->GetProjection()); + scb.mPrevView = XMMatrixTranspose(prevFrameCam->GetView()); + scb.mPrevProjection = XMMatrixTranspose(prevFrameCam->GetProjection()); UpdateBuffer(skyCb,&scb,context); UpdateBuffer(trailCB, &XMMatrixTranspose(camera->GetViewProjection()), context); diff --git a/WickedEngine/wiRenderer.h b/WickedEngine/wiRenderer.h index ecef4e0dc..dc479444f 100644 --- a/WickedEngine/wiRenderer.h +++ b/WickedEngine/wiRenderer.h @@ -150,6 +150,7 @@ protected: { XMMATRIX mViewProjection; XMMATRIX mRefViewProjection; + XMMATRIX mPrevViewProjection; XMVECTOR mCamPos; //XMFLOAT4A mMotionBlur; XMFLOAT4 mClipPlane; @@ -268,6 +269,8 @@ protected: { XMMATRIX mV; XMMATRIX mP; + XMMATRIX mPrevView; + XMMATRIX mPrevProjection; ALIGN_16 }; @@ -1086,7 +1089,7 @@ public: static wiRenderTarget normalMapRT, imagesRT, imagesRTAdd; - static Camera* cam, *refCam; + static Camera* cam, *refCam, *prevFrameCam; static Camera* getCamera(){ return cam; } static Camera* getRefCamera(){ return refCam; }