Done with 2D

This commit is contained in:
lanariel 2014-02-10 01:03:10 +01:00
parent 1121bbdebf
commit e6e56ba21b
5 changed files with 31 additions and 9 deletions

View File

@ -61,6 +61,11 @@ namespace Oyster
Math::Matrix Translation; Math::Matrix Translation;
}; };
struct PostData
{
int x;
int y;
};
} }
} }
} }

View File

@ -19,7 +19,7 @@ namespace Oyster
void DefaultRenderer::NewFrame(Oyster::Math::Float4x4 View, Oyster::Math::Float4x4 Projection, Definitions::Pointlight* Lights, int numLights) void DefaultRenderer::NewFrame(Oyster::Math::Float4x4 View, Oyster::Math::Float4x4 Projection, Definitions::Pointlight* Lights, int numLights)
{ {
Preparations::Basic::ClearBackBuffer(Oyster::Math::Float4(1,0,0,1)); Preparations::Basic::ClearBackBuffer(Oyster::Math::Float4(1,0,0,1));
Preparations::Basic::ClearRTV(Resources::GBufferRTV,Resources::GBufferSize,Math::Float4(0,0,0,1)); Preparations::Basic::ClearRTV(Resources::GBufferRTV,Resources::GBufferSize,Math::Float4(0,0,0,0));
Core::PipelineManager::SetRenderPass(Graphics::Render::Resources::Gather::Pass); Core::PipelineManager::SetRenderPass(Graphics::Render::Resources::Gather::Pass);
void* data; void* data;
@ -39,6 +39,14 @@ namespace Oyster
data = Resources::Light::PointLightsData.Map(); data = Resources::Light::PointLightsData.Map();
memcpy(data, Lights, sizeof(Definitions::Pointlight) * numLights); memcpy(data, Lights, sizeof(Definitions::Pointlight) * numLights);
Resources::Light::PointLightsData.Unmap(); Resources::Light::PointLightsData.Unmap();
Definitions::PostData pd;
pd.x = lc.Pixels.x;
pd.y = lc.Pixels.y;
data = Resources::Post::Data.Map();
memcpy(data, &pd, sizeof(Definitions::PostData));
Resources::Post::Data.Unmap();
} }
Math::Matrix RecursiveBindPosRotation(int index, Model::ModelInfo* mi) Math::Matrix RecursiveBindPosRotation(int index, Model::ModelInfo* mi)

View File

@ -41,6 +41,7 @@ namespace Oyster
Buffer Resources::Gather::AnimationData = Buffer(); Buffer Resources::Gather::AnimationData = Buffer();
Buffer Resources::Light::LightConstantsData = Buffer(); Buffer Resources::Light::LightConstantsData = Buffer();
Buffer Resources::Gui::Data = Buffer(); Buffer Resources::Gui::Data = Buffer();
Buffer Resources::Post::Data = Buffer();
Buffer Resources::Light::PointLightsData = Buffer(); Buffer Resources::Light::PointLightsData = Buffer();
ID3D11ShaderResourceView* Resources::Light::PointLightView = NULL; ID3D11ShaderResourceView* Resources::Light::PointLightView = NULL;
@ -109,10 +110,11 @@ namespace Oyster
desc.ElementSize = sizeof(Definitions::GuiData); desc.ElementSize = sizeof(Definitions::GuiData);
Gui::Data.Init(desc); Gui::Data.Init(desc);
desc.ElementSize = sizeof(Definitions::LightConstants);
desc.NumElements = 1;
desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_CS; desc.Type = Buffer::BUFFER_TYPE::CONSTANT_BUFFER_CS;
desc.ElementSize = sizeof(Definitions::PostData);
Post::Data.Init(desc);
desc.ElementSize = sizeof(Definitions::LightConstants);
Light::LightConstantsData.Init(desc); Light::LightConstantsData.Init(desc);
desc.ElementSize = sizeof(Definitions::Pointlight); desc.ElementSize = sizeof(Definitions::Pointlight);
@ -332,6 +334,7 @@ namespace Oyster
Post::Pass.SRV.Compute.push_back(LBufferSRV[i]); Post::Pass.SRV.Compute.push_back(LBufferSRV[i]);
} }
Post::Pass.UAV.Compute.push_back(Core::backBufferUAV); Post::Pass.UAV.Compute.push_back(Core::backBufferUAV);
Post::Pass.CBuffers.Compute.push_back(Post::Data);
////---------------- GUI Pass Setup ---------------------------- ////---------------- GUI Pass Setup ----------------------------
Gui::Pass.Shaders.Vertex = GetShader::Vertex(L"2D"); Gui::Pass.Shaders.Vertex = GetShader::Vertex(L"2D");
@ -379,8 +382,6 @@ namespace Oyster
return Core::Init::State::Success; return Core::Init::State::Success;
} }
void Resources::Clean() void Resources::Clean()
{ {
Gather::ModelData.~Buffer(); Gather::ModelData.~Buffer();
@ -388,6 +389,7 @@ namespace Oyster
Light::LightConstantsData.~Buffer(); Light::LightConstantsData.~Buffer();
Light::PointLightsData.~Buffer(); Light::PointLightsData.~Buffer();
Gui::Data.~Buffer(); Gui::Data.~Buffer();
Post::Data.~Buffer();
SAFE_RELEASE(Light::PointLightView); SAFE_RELEASE(Light::PointLightView);
SAFE_RELEASE(Light::SSAOKernel); SAFE_RELEASE(Light::SSAOKernel);
SAFE_RELEASE(Light::SSAORandom); SAFE_RELEASE(Light::SSAORandom);

View File

@ -35,7 +35,8 @@ void main( uint3 DTid : SV_DispatchThreadID, uint3 GTid : SV_GroupThreadID )
{ {
float AmbValue = GetSSAO(ViewPos, UV, DTid.xy, GTid.xy/2); float AmbValue = GetSSAO(ViewPos, UV, DTid.xy, GTid.xy/2);
Ambient[DTid.xy/2] = float4(DiffuseGlow[DTid.xy].xyz, AmbValue); Ambient[DTid.xy/2] = float4(DiffuseGlow[DTid.xy].xyz, AmbValue);
Ambient[DTid.xy + Pixels/2] = GUI[DTid.xy]; Ambient[DTid.xy/2 + float2(Pixels.x/2, 0)] = GUI[DTid.xy];
//Ambient[DTid.xy] = GUI[DTid.xy];
} }
} }

View File

@ -18,7 +18,13 @@ void main( uint3 DTid : SV_DispatchThreadID )
float4 Amb = float4(Ambient[DTid.xy/2].xyz,1);// * Ambient[DTid.xy/2].w,1); float4 Amb = float4(Ambient[DTid.xy/2].xyz,1);// * Ambient[DTid.xy/2].w,1);
//Output[DTid.xy] = float4(Ambient[DTid.xy/2].xyz /* * Ambient[DTid.xy/2].w */, 1); //Output[DTid.xy] = float4(Ambient[DTid.xy/2].xyz /* * Ambient[DTid.xy/2].w */, 1);
//Output[DTid.xy] = Diffuse[DTid.xy] + Specular[DTid.xy]; //Output[DTid.xy] = Diffuse[DTid.xy] + Specular[DTid.xy];
Output[DTid.xy] = Light + Amb * AmbFactor; //Output[DTid.xy] = Light + Amb * AmbFactor;
//Output[DTid.xy] = Ambient[DTid.xy/2].w; //Output[DTid.xy] = Ambient[DTid.xy/2].w;
Output[DTid.xy] = Ambient[DTid.xy/2 + Pixels/2]; float4 GUI;
uint2 index = DTid.xy/2 + int2(Pixels.x/2,0);
float3 PostLight = Light.xyz + Amb.xyz * AmbFactor;
GUI = float4(Ambient[index]);
PostLight = PostLight * (1-GUI.w);
//Output[DTid.xy] = float4((GUI.xyz * GUI.w) + ((Light + Amb * AmbFactor) * (1 - GUI.w)),0);
Output[DTid.xy] = float4((GUI.xyz * GUI.w) + PostLight, 1);
} }