Resize
This commit is contained in:
parent
d5eeb3eec1
commit
1b7cebc2e9
|
@ -40,7 +40,7 @@ namespace DanBias
|
|||
{
|
||||
public:
|
||||
WindowShell* window;
|
||||
Utility::WinTimer timer;
|
||||
Utility::WinTimer timer, graphicalTimer;
|
||||
|
||||
UniquePointer<Client::GameClientState> state;
|
||||
NetworkClient networkClient;
|
||||
|
@ -155,11 +155,14 @@ namespace DanBias
|
|||
Oyster::Graphics::API::Option p;
|
||||
p.modelPath = L"..\\Content\\Models\\";
|
||||
p.texturePath = L"..\\Content\\Textures\\";
|
||||
p.Resolution = Oyster::Math::Float2( 1920.0f, 1080.0f );
|
||||
p.resolution = Oyster::Math::Float2( 1920.0f, 1080.0f );
|
||||
//! @todo fix proper amb value
|
||||
p.AmbientValue = 1.3f;
|
||||
p.ambientValue = 0.3f;
|
||||
p.globalGlowTint = Math::Float3(1);
|
||||
p.globalTint = Math::Float3(1);
|
||||
p.fullscreen = false;
|
||||
|
||||
if(Oyster::Graphics::API::Init(data.window->GetHWND(), false, false, p) != Oyster::Graphics::API::Sucsess)
|
||||
if(Oyster::Graphics::API::Init(data.window->GetHWND(), false, p) != Oyster::Graphics::API::Sucsess)
|
||||
return E_FAIL;
|
||||
return S_OK;
|
||||
}
|
||||
|
|
|
@ -74,19 +74,10 @@ bool GameState::Init( SharedStateContent &shared )
|
|||
this->privData->lights = &shared.lights;
|
||||
|
||||
Graphics::API::Option gfxOp = Graphics::API::GetOption();
|
||||
Float aspectRatio = gfxOp.Resolution.x / gfxOp.Resolution.y;
|
||||
this->privData->camera.SetPerspectiveProjection( Utility::Value::Radian(90.0f), aspectRatio, 1.0f, 100.0f );
|
||||
|
||||
// HACK: debug test
|
||||
Matrix debug_p = this->privData->camera.GetProjectionMatrix();
|
||||
Float debug_n = - debug_p.m34 / debug_p.m33;
|
||||
Float debug_f = debug_p.m34 / (1.0f - debug_p.m33);
|
||||
Float aspectRatio = gfxOp.resolution.x / gfxOp.resolution.y;
|
||||
this->privData->camera.SetPerspectiveProjection( Utility::Value::Radian(90.0f), aspectRatio, 0.5f, 1000.0f );
|
||||
|
||||
Graphics::API::SetProjection( this->privData->camera.GetProjectionMatrix() );
|
||||
gfxOp.AmbientValue = 0.3f;
|
||||
gfxOp.GlobalGlowTint = Math::Float3(1,1,1);
|
||||
gfxOp.GlobalTint = Math::Float3(1,1,1);
|
||||
Graphics::API::SetOptions(gfxOp);
|
||||
|
||||
// DEGUG KEYS
|
||||
this->key_Reload_Shaders = false;
|
||||
|
|
|
@ -45,6 +45,7 @@ namespace DanBias
|
|||
static DanBiasClientReturn Initiate(DanBiasGameDesc& desc);
|
||||
static DanBiasClientReturn Run();
|
||||
static void Release();
|
||||
static HRESULT Render();
|
||||
|
||||
private:
|
||||
enum Result
|
||||
|
@ -58,7 +59,6 @@ namespace DanBias
|
|||
static HRESULT InitInput( HWND handle );
|
||||
|
||||
static Result Update(float deltaTime);
|
||||
static HRESULT Render();
|
||||
static HRESULT CleanUp();
|
||||
};
|
||||
|
||||
|
|
|
@ -36,3 +36,7 @@ ID3D11RenderTargetView* Core::rtvNULL[8] = {0};
|
|||
ID3D11UnorderedAccessView* Core::uavNULL[8] = {0};
|
||||
|
||||
int Core::UsedMem = 0;
|
||||
|
||||
HWND Core::window = 0;
|
||||
|
||||
bool Core::fullscreen = false;
|
|
@ -40,7 +40,8 @@ namespace Oyster
|
|||
//ViewPort
|
||||
static D3D11_VIEWPORT* viewPort;
|
||||
|
||||
static Oyster::Math::Float2 resolution;
|
||||
static Oyster::Math::Float2 resolution;
|
||||
static bool fullscreen;
|
||||
|
||||
static ID3D11ShaderResourceView* srvNULL[16];
|
||||
static ID3D11RenderTargetView* rtvNULL[8];
|
||||
|
@ -48,6 +49,8 @@ namespace Oyster
|
|||
|
||||
static int UsedMem;
|
||||
|
||||
static HWND window;
|
||||
|
||||
class Buffer
|
||||
{
|
||||
public:
|
||||
|
@ -250,11 +253,12 @@ namespace Oyster
|
|||
|
||||
static State FullInit(HWND Window, bool MSAA_Quality, bool Fullscreen);
|
||||
|
||||
static State ReInitialize(HWND Window, bool MSAA_Quality, bool Fullscreen);
|
||||
static State ReInitialize(bool MSAA_Quality, bool Fullscreen, Math::Float2 Size);
|
||||
|
||||
static State CreateLinkedShaderResourceFromTexture(ID3D11RenderTargetView** rtv, ID3D11ShaderResourceView** srv, ID3D11UnorderedAccessView** uav);
|
||||
|
||||
static State CreateLinkedShaderResourceFromStructuredBuffer(Buffer** Structured, ID3D11ShaderResourceView** srv, ID3D11UnorderedAccessView** uav);
|
||||
|
||||
static State CreateLinkedShaderResourceFromStructuredBuffer(void* InitData, int numElem, int ElemSize, Buffer** Structured, ID3D11ShaderResourceView** srv, ID3D11UnorderedAccessView** uav);
|
||||
|
||||
};
|
||||
|
|
|
@ -110,7 +110,7 @@ namespace Oyster
|
|||
if(Core::swapChain)
|
||||
{
|
||||
Core::swapChain->Release();
|
||||
Core::UsedMem -= desc.BufferDesc.Height * desc.BufferDesc.Width * 16;
|
||||
Core::UsedMem -= Core::resolution.x * Core::resolution.y * 4;
|
||||
delete Core::swapChain;
|
||||
}
|
||||
|
||||
|
@ -168,7 +168,7 @@ namespace Oyster
|
|||
}
|
||||
|
||||
dxgiFactory->Release();
|
||||
Core::UsedMem += desc.BufferDesc.Height * desc.BufferDesc.Width * 16;
|
||||
Core::UsedMem += desc.BufferDesc.Height * desc.BufferDesc.Width * 4;
|
||||
return Init::Success;
|
||||
}
|
||||
|
||||
|
@ -188,7 +188,7 @@ namespace Oyster
|
|||
if(Core::depthStencil)
|
||||
{
|
||||
Core::depthStencil->Release();
|
||||
Core::UsedMem -= desc.Height * desc.Width * 4;
|
||||
Core::UsedMem -= Core::resolution.x * Core::resolution.y * 4;
|
||||
delete Core::depthStencil;
|
||||
}
|
||||
|
||||
|
@ -327,12 +327,16 @@ namespace Oyster
|
|||
return Init::Fail;
|
||||
}
|
||||
|
||||
|
||||
Core::window = Window;
|
||||
Core::fullscreen = Fullscreen;
|
||||
|
||||
return Init::Success;
|
||||
}
|
||||
|
||||
Core::Init::State Core::Init::ReInitialize(HWND Window, bool MSAA_Quality, bool Fullscreen)
|
||||
Core::Init::State Core::Init::ReInitialize(bool MSAA_Quality, bool Fullscreen, Math::Float2 Size)
|
||||
{
|
||||
if(Init::CreateSwapChain(Window, 1, MSAA_Quality, Fullscreen, Core::resolution) == Init::Fail)
|
||||
if(Init::CreateSwapChain(Core::window, 1, MSAA_Quality, Fullscreen, Size) == Init::Fail)
|
||||
{
|
||||
return Init::Fail;
|
||||
}
|
||||
|
|
|
@ -31,13 +31,14 @@ namespace Oyster
|
|||
#endif
|
||||
}
|
||||
|
||||
API::State API::Init(HWND Window, bool MSAA_Quality, bool Fullscreen, API::Option o)
|
||||
API::State API::Init(HWND Window, bool MSAA_Quality, API::Option o)
|
||||
{
|
||||
Core::resolution = o.Resolution;
|
||||
Core::resolution = o.resolution;
|
||||
Core::modelPath = o.modelPath;
|
||||
Core::texturePath = o.texturePath;
|
||||
Core::fullscreen = o.fullscreen;
|
||||
|
||||
if(Core::Init::FullInit(Window, MSAA_Quality, Fullscreen) == Core::Init::Fail)
|
||||
if(Core::Init::FullInit(Window, MSAA_Quality, o.fullscreen) == Core::Init::Fail)
|
||||
{
|
||||
return API::Fail;
|
||||
}
|
||||
|
@ -45,7 +46,9 @@ namespace Oyster
|
|||
Render::Resources::Init();
|
||||
|
||||
Definitions::PostData pd;
|
||||
pd.Amb = o.AmbientValue;
|
||||
pd.Amb = o.ambientValue;
|
||||
pd.GlowTint = o.globalGlowTint;
|
||||
pd.Tint = o.globalTint;
|
||||
|
||||
void* data = Render::Resources::Post::Data.Map();
|
||||
memcpy(data,&pd,sizeof(Definitions::PostData));
|
||||
|
@ -127,14 +130,22 @@ namespace Oyster
|
|||
Core::texturePath = option.texturePath;
|
||||
|
||||
Definitions::PostData pd;
|
||||
pd.Amb = option.AmbientValue;
|
||||
pd.Tint = option.GlobalTint;
|
||||
pd.GlowTint = option.GlobalGlowTint;
|
||||
pd.Amb = option.ambientValue;
|
||||
pd.Tint = option.globalTint;
|
||||
pd.GlowTint = option.globalGlowTint;
|
||||
|
||||
void* data = Render::Resources::Post::Data.Map();
|
||||
memcpy(data,&pd,sizeof(Definitions::PostData));
|
||||
Render::Resources::Post::Data.Unmap();
|
||||
|
||||
if(option.resolution != Core::resolution || option.fullscreen != Core::fullscreen)
|
||||
{
|
||||
//RESIZE
|
||||
Core::Init::ReInitialize(false,option.fullscreen,option.resolution);
|
||||
Core::fullscreen = option.fullscreen;
|
||||
Core::resolution = option.resolution;
|
||||
}
|
||||
|
||||
return API::Sucsess;
|
||||
}
|
||||
|
||||
|
@ -302,10 +313,11 @@ namespace Oyster
|
|||
API::Option API::GetOption()
|
||||
{
|
||||
Option o;
|
||||
o.BytesUsed = Core::UsedMem;
|
||||
o.bytesUsed = Core::UsedMem;
|
||||
o.modelPath = Core::modelPath;
|
||||
o.texturePath = Core::texturePath;
|
||||
o.Resolution = Core::resolution;
|
||||
o.resolution = Core::resolution;
|
||||
o.fullscreen = Core::fullscreen;
|
||||
return o;
|
||||
}
|
||||
|
||||
|
|
|
@ -28,19 +28,21 @@ namespace Oyster
|
|||
{
|
||||
std::wstring modelPath, texturePath;
|
||||
//between 0-1
|
||||
float AmbientValue;
|
||||
float ambientValue;
|
||||
|
||||
Math::Float3 GlobalTint;
|
||||
Math::Float3 GlobalGlowTint;
|
||||
Math::Float3 globalTint;
|
||||
Math::Float3 globalGlowTint;
|
||||
|
||||
Math::Float2 Resolution;
|
||||
Math::Float2 resolution;
|
||||
|
||||
//Bytes on the GPU
|
||||
int BytesUsed;
|
||||
int bytesUsed;
|
||||
|
||||
bool fullscreen;
|
||||
};
|
||||
typedef void* Texture;
|
||||
|
||||
static State Init(HWND Window, bool MSAA_Quality, bool Fullscreen, Option options);
|
||||
static State Init(HWND Window, bool MSAA_Quality, Option options);
|
||||
|
||||
static void BeginLoadingModels();
|
||||
|
||||
|
|
|
@ -93,18 +93,12 @@ void main( uint3 DTid : SV_DispatchThreadID, uint3 GTid : SV_GroupThreadID, uin
|
|||
PointLight pl = Points[lightIndex];
|
||||
|
||||
bool inFrustrum = true;
|
||||
float d = dot(frustumPlanes[0], float4(pl.Pos, 1.0f));
|
||||
inFrustrum = inFrustrum && (d >= -pl.Radius);
|
||||
d = dot(frustumPlanes[1], float4(pl.Pos, 1.0f));
|
||||
inFrustrum = inFrustrum && (d >= -pl.Radius);
|
||||
d = dot(frustumPlanes[2], float4(pl.Pos, 1.0f));
|
||||
inFrustrum = inFrustrum && (d >= -pl.Radius);
|
||||
d = dot(frustumPlanes[3], float4(pl.Pos, 1.0f));
|
||||
inFrustrum = inFrustrum && (d >= -pl.Radius);
|
||||
d = dot(frustumPlanes[4], float4(pl.Pos, 1.0f));
|
||||
inFrustrum = inFrustrum && (d >= -pl.Radius);
|
||||
d = dot(frustumPlanes[5], float4(pl.Pos, 1.0f));
|
||||
inFrustrum = inFrustrum && (d >= -pl.Radius);
|
||||
[unroll]
|
||||
for(int i = 0; i < 6; ++i)
|
||||
{
|
||||
float d = dot(frustumPlanes[i], float4(pl.Pos, 1.0f));
|
||||
inFrustrum = inFrustrum && (d >= -pl.Radius);
|
||||
}
|
||||
|
||||
[branch]
|
||||
if(inFrustrum)
|
||||
|
@ -152,7 +146,8 @@ void main( uint3 DTid : SV_DispatchThreadID, uint3 GTid : SV_GroupThreadID, uin
|
|||
//Ambient[DTid.xy/2] = float4(DiffBase.xyz, 1);
|
||||
Ambient[DTid.xy/2 + float2(Diffuse.Length.x/2, 0)] = GUI[DTid.xy];
|
||||
Ambient[DTid.xy/2 + float2(0, Diffuse.Length.y/2)] = float4(DiffBase.xyz * DiffBase.w ,DiffBase.w);
|
||||
Ambient[DTid.xy/2 + Diffuse.Length.xy/2] = float4(numVisiblePointLights * (1.0f/Lights), 0, 0 ,1);
|
||||
//Ambient[DTid.xy/2 + Diffuse.Length.xy/2] = float4(numVisiblePointLights * (1.0f/Lights), 0, 0 ,1);
|
||||
Ambient[DTid.xy/2 + Diffuse.Length.xy/2] = float4(NormalSpec[DTid.xy/2].xyz ,1);
|
||||
}
|
||||
|
||||
}
|
|
@ -27,7 +27,7 @@ void main( uint3 DTid : SV_DispatchThreadID )
|
|||
|
||||
SSAO = SSAO / 16;
|
||||
|
||||
float4 Light = Diffuse[DTid.xy];// + saturate(Specular[DTid.xy]);
|
||||
float4 Light = Diffuse[DTid.xy] + saturate(Specular[DTid.xy]);
|
||||
float3 Amb = Ambient[DTid.xy/2].xyz * SSAO * Color;
|
||||
|
||||
float4 Glow = Ambient[DTid.xy/2 + uint2(0,Output.Length.y/2)];
|
||||
|
@ -43,6 +43,6 @@ void main( uint3 DTid : SV_DispatchThreadID )
|
|||
|
||||
//Output[DTid.xy] = float4(Ambient[DTid.xy/2 + uint2(Output.Length*0.5f)].xyz,1);
|
||||
//Output[DTid.xy] = SSAO * float4(1,1,1,1);
|
||||
Output[DTid.xy] = Ambient[DTid.xy];
|
||||
//Output[DTid.xy] = Ambient[DTid.xy];
|
||||
//Output[DTid.xy] = Diffuse[DTid.xy];
|
||||
}
|
Loading…
Reference in New Issue