diff --git a/WickedEngine/Renderable3DComponent.cpp b/WickedEngine/Renderable3DComponent.cpp index 0360f8e19..148aaf204 100644 --- a/WickedEngine/Renderable3DComponent.cpp +++ b/WickedEngine/Renderable3DComponent.cpp @@ -65,6 +65,8 @@ void Renderable3DComponent::Initialize() { Renderable2DComponent::Initialize(); + FORMAT defaultTextureFormat = GraphicsDevice::GetBackBufferFormat(); + rtSSR.Initialize( (UINT)(wiRenderer::GetDevice()->GetScreenWidth()), (UINT)(wiRenderer::GetDevice()->GetScreenHeight()) , false, FORMAT_R16G16B16A16_FLOAT); @@ -93,20 +95,20 @@ void Renderable3DComponent::Initialize() , true, FORMAT_R16G16B16A16_FLOAT); rtFinal[0].Initialize( wiRenderer::GetDevice()->GetScreenWidth(), wiRenderer::GetDevice()->GetScreenHeight() - , false); + , false, defaultTextureFormat); rtFinal[1].Initialize( wiRenderer::GetDevice()->GetScreenWidth(), wiRenderer::GetDevice()->GetScreenHeight() - , false,FORMAT_R8G8B8A8_UNORM,1,getMSAASampleCount()); + , false, defaultTextureFormat,1,getMSAASampleCount()); rtDof[0].Initialize( (UINT)(wiRenderer::GetDevice()->GetScreenWidth()*0.5f), (UINT)(wiRenderer::GetDevice()->GetScreenHeight()*0.5f) - , false); + , false, defaultTextureFormat); rtDof[1].Initialize( (UINT)(wiRenderer::GetDevice()->GetScreenWidth()*0.5f), (UINT)(wiRenderer::GetDevice()->GetScreenHeight()*0.5f) - , false); + , false, defaultTextureFormat); rtDof[2].Initialize( wiRenderer::GetDevice()->GetScreenWidth(), wiRenderer::GetDevice()->GetScreenHeight() - , false); + , false, defaultTextureFormat); dtDepthCopy.Initialize(wiRenderer::GetDevice()->GetScreenWidth(), wiRenderer::GetDevice()->GetScreenHeight(), getMSAASampleCount()); @@ -121,24 +123,24 @@ void Renderable3DComponent::Initialize() rtSun[0].Initialize( wiRenderer::GetDevice()->GetScreenWidth() , wiRenderer::GetDevice()->GetScreenHeight() - , true + , true, defaultTextureFormat ); rtSun[1].Initialize( (UINT)(wiRenderer::GetDevice()->GetScreenWidth()*getLightShaftQuality()) , (UINT)(wiRenderer::GetDevice()->GetScreenHeight()*getLightShaftQuality()) - , false, FORMAT_R8G8B8A8_UNORM, 1,getMSAASampleCount() + , false, defaultTextureFormat, 1,getMSAASampleCount() ); rtBloom.resize(3); rtBloom[0].Initialize( wiRenderer::GetDevice()->GetScreenWidth() , wiRenderer::GetDevice()->GetScreenHeight() - , false, FORMAT_R8G8B8A8_UNORM, 0); + , false, defaultTextureFormat, 0); for (unsigned int i = 1; iGetScreenWidth() / getBloomDownSample()) , (UINT)(wiRenderer::GetDevice()->GetScreenHeight() / getBloomDownSample()) - , false); + , false, defaultTextureFormat); } void Renderable3DComponent::Load() diff --git a/WickedEngine/Resource/pointlight.dds b/WickedEngine/Resource/pointlight.dds index 4628de2d2..3818314de 100644 Binary files a/WickedEngine/Resource/pointlight.dds and b/WickedEngine/Resource/pointlight.dds differ diff --git a/WickedEngine/WickedEngine_SHARED.vcxitems b/WickedEngine/WickedEngine_SHARED.vcxitems index e5a336080..40b1584f5 100644 --- a/WickedEngine/WickedEngine_SHARED.vcxitems +++ b/WickedEngine/WickedEngine_SHARED.vcxitems @@ -501,6 +501,7 @@ + diff --git a/WickedEngine/WickedEngine_SHARED.vcxitems.filters b/WickedEngine/WickedEngine_SHARED.vcxitems.filters index 0681a6129..42adf105e 100644 --- a/WickedEngine/WickedEngine_SHARED.vcxitems.filters +++ b/WickedEngine/WickedEngine_SHARED.vcxitems.filters @@ -1850,6 +1850,9 @@ ENGINE\Helpers + + ENGINE\Graphics + diff --git a/WickedEngine/dirLightVS.hlsl b/WickedEngine/dirLightVS.hlsl index 29fd7d97c..71ec997a7 100644 --- a/WickedEngine/dirLightVS.hlsl +++ b/WickedEngine/dirLightVS.hlsl @@ -8,7 +8,7 @@ VertexToPixel main(uint vid : SV_VERTEXID) FullScreenTriangle(vid, Out.pos); Out.pos2D = Out.pos; - Out.lightIndex = g_xMisc_int4[0]; + Out.lightIndex = (int)g_xColor.x; return Out; } \ No newline at end of file diff --git a/WickedEngine/globals.hlsli b/WickedEngine/globals.hlsli index 5cf284ab7..3284a6574 100644 --- a/WickedEngine/globals.hlsli +++ b/WickedEngine/globals.hlsli @@ -94,7 +94,6 @@ CBUFFER(MiscCB, CBSLOT_RENDERER_MISC) { float4x4 g_xTransform; float4 g_xColor; - int4 g_xMisc_int4; }; CBUFFER(APICB, CBSLOT_API) diff --git a/WickedEngine/pointLightVS.hlsl b/WickedEngine/pointLightVS.hlsl index fadc1d0ea..72b0286e3 100644 --- a/WickedEngine/pointLightVS.hlsl +++ b/WickedEngine/pointLightVS.hlsl @@ -7,6 +7,6 @@ VertexToPixel main(uint vid : SV_VERTEXID) float4 pos = float4(ICOSPHERE[vid],1); Out.pos = Out.pos2D = mul(mul(pos,g_xTransform),g_xCamera_VP); - Out.lightIndex = g_xMisc_int4[0]; + Out.lightIndex = (int)g_xColor.x; return Out; } \ No newline at end of file diff --git a/WickedEngine/qGrassPS_forward_dirlight.hlsl b/WickedEngine/qGrassPS_forward_dirlight.hlsl index d15d5266d..fb7bad2b3 100644 --- a/WickedEngine/qGrassPS_forward_dirlight.hlsl +++ b/WickedEngine/qGrassPS_forward_dirlight.hlsl @@ -9,8 +9,8 @@ float4 main(QGS_OUT PSIn) : SV_Target #endif float4 color = texture_0.Sample(sampler_linear_clamp,PSIn.tex); - float opacity = color.a; ALPHATEST(color.a) + float opacity = 1; // keep edge diffuse shading color = DEGAMMA(color); color.a = 1; // do not blend float3 P = PSIn.pos3D; diff --git a/WickedEngine/qGrassPS_tiledforward.hlsl b/WickedEngine/qGrassPS_tiledforward.hlsl index da009894c..3e11ecfe7 100644 --- a/WickedEngine/qGrassPS_tiledforward.hlsl +++ b/WickedEngine/qGrassPS_tiledforward.hlsl @@ -6,8 +6,8 @@ float4 main(QGS_OUT PSIn) : SV_Target { float4 color = texture_0.Sample(sampler_linear_clamp,PSIn.tex); - float opacity = color.a; clip(color.a - 1.0f / 256.0f); // cancel heaviest overdraw for the alpha composition effect + float opacity = color.a; color = DEGAMMA(color); float3 P = PSIn.pos3D; float3 V = g_xCamera_CamPos - P; diff --git a/WickedEngine/spotLightVS.hlsl b/WickedEngine/spotLightVS.hlsl index 12b5089d5..4300e5510 100644 --- a/WickedEngine/spotLightVS.hlsl +++ b/WickedEngine/spotLightVS.hlsl @@ -9,6 +9,6 @@ VertexToPixel main(uint vid : SV_VERTEXID) float4 pos = float4(CONE[vid],1); pos = mul( pos, g_xTransform ); Out.pos = Out.pos2D = mul(pos,g_xCamera_VP); - Out.lightIndex = g_xMisc_int4[0]; + Out.lightIndex = (int)g_xColor.x; return Out; } \ No newline at end of file diff --git a/WickedEngine/wiGraphicsDevice.cpp b/WickedEngine/wiGraphicsDevice.cpp new file mode 100644 index 000000000..8d343b7b7 --- /dev/null +++ b/WickedEngine/wiGraphicsDevice.cpp @@ -0,0 +1,10 @@ +#include "wiGraphicsDevice.h" + +using namespace wiGraphicsTypes; + +FORMAT GraphicsDevice::BACKBUFFER_FORMAT = FORMAT::FORMAT_R10G10B10A2_UNORM; + +FORMAT GraphicsDevice::GetBackBufferFormat() +{ + return BACKBUFFER_FORMAT; +} diff --git a/WickedEngine/wiGraphicsDevice.h b/WickedEngine/wiGraphicsDevice.h index 590a6223d..c5e83b45e 100644 --- a/WickedEngine/wiGraphicsDevice.h +++ b/WickedEngine/wiGraphicsDevice.h @@ -16,6 +16,7 @@ namespace wiGraphicsTypes bool VSYNC; int SCREENWIDTH, SCREENHEIGHT; bool FULLSCREEN; + static FORMAT BACKBUFFER_FORMAT; public: GraphicsDevice() :FRAMECOUNT(0), VSYNC(true), SCREENWIDTH(0), SCREENHEIGHT(0), FULLSCREEN(false) {} @@ -71,6 +72,7 @@ namespace wiGraphicsTypes { return XMMatrixOrthographicOffCenterLH(0, (float)GetScreenWidth(), (float)GetScreenHeight(), 0, -1, 1); } + static FORMAT GetBackBufferFormat(); ///////////////Thread-sensitive//////////////////////// diff --git a/WickedEngine/wiGraphicsDevice_DX11.cpp b/WickedEngine/wiGraphicsDevice_DX11.cpp index 283065670..4aa6645b2 100644 --- a/WickedEngine/wiGraphicsDevice_DX11.cpp +++ b/WickedEngine/wiGraphicsDevice_DX11.cpp @@ -11,221 +11,6 @@ namespace wiGraphicsTypes { - -GraphicsDevice_DX11::GraphicsDevice_DX11(wiWindowRegistration::window_type window, bool fullscreen) : GraphicsDevice() -{ - FULLSCREEN = fullscreen; - - HRESULT hr = S_OK; - - for (int i = 0; iGetFeatureLevel() >= D3D_FEATURE_LEVEL_11_0) ? true : false); - - -#ifdef WINSTORE_SUPPORT - DXGI_SWAP_CHAIN_DESC1 sd = { 0 }; - sd.Width = SCREENWIDTH = (int)window->Bounds.Width; - sd.Height = SCREENHEIGHT = (int)window->Bounds.Height; - sd.Format = DXGI_FORMAT_B8G8R8A8_UNORM; // This is the most common swap chain format. - sd.Stereo = false; - sd.SampleDesc.Count = 1; // Don't use multi-sampling. - sd.SampleDesc.Quality = 0; - sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; - sd.BufferCount = 2; // Use double-buffering to minimize latency. - sd.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; // All Windows Store apps must use this SwapEffect. - sd.Flags = 0; - sd.Scaling = DXGI_SCALING_STRETCH; - sd.AlphaMode = DXGI_ALPHA_MODE_IGNORE; - - IDXGIDevice2 * pDXGIDevice; - hr = device->QueryInterface(__uuidof(IDXGIDevice2), (void **)&pDXGIDevice); - - IDXGIAdapter * pDXGIAdapter; - hr = pDXGIDevice->GetParent(__uuidof(IDXGIAdapter), (void **)&pDXGIAdapter); - - IDXGIFactory2 * pIDXGIFactory; - pDXGIAdapter->GetParent(__uuidof(IDXGIFactory2), (void **)&pIDXGIFactory); - - - hr = pIDXGIFactory->CreateSwapChainForCoreWindow(device, reinterpret_cast(window), &sd - , nullptr, &swapChain); - - if (FAILED(hr)) { - wiHelper::messageBox("Swap chain creation failed!", "Error!"); - exit(1); - } - - // Ensure that DXGI does not queue more than one frame at a time. This both reduces latency and - // ensures that the application will only render after each VSync, minimizing power consumption. - hr = pDXGIDevice->SetMaximumFrameLatency(1); -#endif - - hr = deviceContexts[GRAPHICSTHREAD_IMMEDIATE]->QueryInterface(__uuidof(userDefinedAnnotations[GRAPHICSTHREAD_IMMEDIATE]), - reinterpret_cast(&userDefinedAnnotations[GRAPHICSTHREAD_IMMEDIATE])); - - DEFERREDCONTEXT_SUPPORT = false; - D3D11_FEATURE_DATA_THREADING threadingFeature; - device->CheckFeatureSupport(D3D11_FEATURE_THREADING, &threadingFeature, sizeof(threadingFeature)); - if (threadingFeature.DriverConcurrentCreates && threadingFeature.DriverCommandLists) { - DEFERREDCONTEXT_SUPPORT = true; - for (int i = 0; iCreateDeferredContext(0, &deviceContexts[i]); - hr = deviceContexts[i]->QueryInterface(__uuidof(userDefinedAnnotations[i]), - reinterpret_cast(&userDefinedAnnotations[i])); - } - } - else { - DEFERREDCONTEXT_SUPPORT = false; - } - - - // Create a render target view - backBuffer = NULL; - hr = swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&backBuffer); - if (FAILED(hr)) { - wiHelper::messageBox("BackBuffer creation Failed!", "Error!"); - exit(0); - } - - hr = device->CreateRenderTargetView(backBuffer, NULL, &renderTargetView); - //pBackBuffer->Release(); - if (FAILED(hr)) { - wiHelper::messageBox("Main Rendertarget creation Failed!", "Error!"); - exit(0); - } - - - // Setup the main viewport - viewPort.Width = (FLOAT)SCREENWIDTH; - viewPort.Height = (FLOAT)SCREENHEIGHT; - viewPort.MinDepth = 0.0f; - viewPort.MaxDepth = 1.0f; - viewPort.TopLeftX = 0; - viewPort.TopLeftY = 0; - -} -GraphicsDevice_DX11::~GraphicsDevice_DX11() -{ - SAFE_RELEASE(renderTargetView); - SAFE_RELEASE(swapChain); - - for (int i = 0; iAddRef(); - return result; -} - -bool GraphicsDevice_DX11::CheckCapability(GRAPHICSDEVICE_CAPABILITY capability) -{ - switch (capability) - { - case wiGraphicsTypes::GraphicsDevice::GRAPHICSDEVICE_CAPABILITY_TESSELLATION: - return DX11; - break; - case wiGraphicsTypes::GraphicsDevice::GRAPHICSDEVICE_CAPABILITY_MULTITHREADED_RENDERING: - return DEFERREDCONTEXT_SUPPORT; - break; - case wiGraphicsTypes::GraphicsDevice::GRAPHICSDEVICE_CAPABILITY_COUNT: - break; - default: - break; - } - return false; -} - // Engine -> Native converters inline UINT _ParseBindFlags(UINT value) @@ -1505,25 +1290,243 @@ inline USAGE _ConvertUsage_Inv(D3D11_USAGE value) } inline Texture2DDesc _ConvertTexture2DDesc_Inv(const D3D11_TEXTURE2D_DESC* pDesc) -{ - Texture2DDesc desc; - desc.Width = pDesc->Width; - desc.Height = pDesc->Height; - desc.MipLevels = pDesc->MipLevels; - desc.ArraySize = pDesc->ArraySize; - desc.Format = _ConvertFormat_Inv(pDesc->Format); - desc.SampleDesc.Count = pDesc->SampleDesc.Count; - desc.SampleDesc.Quality = pDesc->SampleDesc.Quality; - desc.Usage = _ConvertUsage_Inv(pDesc->Usage); - desc.BindFlags = _ParseBindFlags_Inv(pDesc->BindFlags); - desc.CPUAccessFlags = _ParseCPUAccessFlags_Inv(pDesc->CPUAccessFlags); - desc.MiscFlags = _ParseResourceMiscFlags_Inv(pDesc->MiscFlags); + { + Texture2DDesc desc; + desc.Width = pDesc->Width; + desc.Height = pDesc->Height; + desc.MipLevels = pDesc->MipLevels; + desc.ArraySize = pDesc->ArraySize; + desc.Format = _ConvertFormat_Inv(pDesc->Format); + desc.SampleDesc.Count = pDesc->SampleDesc.Count; + desc.SampleDesc.Quality = pDesc->SampleDesc.Quality; + desc.Usage = _ConvertUsage_Inv(pDesc->Usage); + desc.BindFlags = _ParseBindFlags_Inv(pDesc->BindFlags); + desc.CPUAccessFlags = _ParseCPUAccessFlags_Inv(pDesc->CPUAccessFlags); + desc.MiscFlags = _ParseResourceMiscFlags_Inv(pDesc->MiscFlags); + + return desc; + } + + - return desc; -} // Engine functions +GraphicsDevice_DX11::GraphicsDevice_DX11(wiWindowRegistration::window_type window, bool fullscreen) : GraphicsDevice() +{ + FULLSCREEN = fullscreen; + + HRESULT hr = S_OK; + + for (int i = 0; iGetFeatureLevel() >= D3D_FEATURE_LEVEL_11_0) ? true : false); + + +#ifdef WINSTORE_SUPPORT + DXGI_SWAP_CHAIN_DESC1 sd = { 0 }; + sd.Width = SCREENWIDTH = (int)window->Bounds.Width; + sd.Height = SCREENHEIGHT = (int)window->Bounds.Height; + sd.Format = _ConvertFormat(GetBackBufferFormat()); + sd.Stereo = false; + sd.SampleDesc.Count = 1; // Don't use multi-sampling. + sd.SampleDesc.Quality = 0; + sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; + sd.BufferCount = 2; // Use double-buffering to minimize latency. + sd.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL; // All Windows Store apps must use this SwapEffect. + sd.Flags = 0; + sd.Scaling = DXGI_SCALING_STRETCH; + sd.AlphaMode = DXGI_ALPHA_MODE_IGNORE; + + IDXGIDevice2 * pDXGIDevice; + hr = device->QueryInterface(__uuidof(IDXGIDevice2), (void **)&pDXGIDevice); + + IDXGIAdapter * pDXGIAdapter; + hr = pDXGIDevice->GetParent(__uuidof(IDXGIAdapter), (void **)&pDXGIAdapter); + + IDXGIFactory2 * pIDXGIFactory; + pDXGIAdapter->GetParent(__uuidof(IDXGIFactory2), (void **)&pIDXGIFactory); + + + hr = pIDXGIFactory->CreateSwapChainForCoreWindow(device, reinterpret_cast(window), &sd + , nullptr, &swapChain); + + if (FAILED(hr)) { + wiHelper::messageBox("Swap chain creation failed!", "Error!"); + exit(1); + } + + // Ensure that DXGI does not queue more than one frame at a time. This both reduces latency and + // ensures that the application will only render after each VSync, minimizing power consumption. + hr = pDXGIDevice->SetMaximumFrameLatency(1); +#endif + + hr = deviceContexts[GRAPHICSTHREAD_IMMEDIATE]->QueryInterface(__uuidof(userDefinedAnnotations[GRAPHICSTHREAD_IMMEDIATE]), + reinterpret_cast(&userDefinedAnnotations[GRAPHICSTHREAD_IMMEDIATE])); + + DEFERREDCONTEXT_SUPPORT = false; + D3D11_FEATURE_DATA_THREADING threadingFeature; + device->CheckFeatureSupport(D3D11_FEATURE_THREADING, &threadingFeature, sizeof(threadingFeature)); + if (threadingFeature.DriverConcurrentCreates && threadingFeature.DriverCommandLists) { + DEFERREDCONTEXT_SUPPORT = true; + for (int i = 0; iCreateDeferredContext(0, &deviceContexts[i]); + hr = deviceContexts[i]->QueryInterface(__uuidof(userDefinedAnnotations[i]), + reinterpret_cast(&userDefinedAnnotations[i])); + } + } + else { + DEFERREDCONTEXT_SUPPORT = false; + } + + + // Create a render target view + backBuffer = NULL; + hr = swapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&backBuffer); + if (FAILED(hr)) { + wiHelper::messageBox("BackBuffer creation Failed!", "Error!"); + exit(0); + } + + hr = device->CreateRenderTargetView(backBuffer, NULL, &renderTargetView); + //pBackBuffer->Release(); + if (FAILED(hr)) { + wiHelper::messageBox("Main Rendertarget creation Failed!", "Error!"); + exit(0); + } + + + // Setup the main viewport + viewPort.Width = (FLOAT)SCREENWIDTH; + viewPort.Height = (FLOAT)SCREENHEIGHT; + viewPort.MinDepth = 0.0f; + viewPort.MaxDepth = 1.0f; + viewPort.TopLeftX = 0; + viewPort.TopLeftY = 0; + +} +GraphicsDevice_DX11::~GraphicsDevice_DX11() +{ + SAFE_RELEASE(renderTargetView); + SAFE_RELEASE(swapChain); + + for (int i = 0; iAddRef(); + return result; +} + +bool GraphicsDevice_DX11::CheckCapability(GRAPHICSDEVICE_CAPABILITY capability) +{ + switch (capability) + { + case wiGraphicsTypes::GraphicsDevice::GRAPHICSDEVICE_CAPABILITY_TESSELLATION: + return DX11; + break; + case wiGraphicsTypes::GraphicsDevice::GRAPHICSDEVICE_CAPABILITY_MULTITHREADED_RENDERING: + return DEFERREDCONTEXT_SUPPORT; + break; + case wiGraphicsTypes::GraphicsDevice::GRAPHICSDEVICE_CAPABILITY_COUNT: + break; + default: + break; + } + return false; +} + HRESULT GraphicsDevice_DX11::CreateBuffer(const GPUBufferDesc *pDesc, const SubresourceData* pInitialData, GPUBuffer *ppBuffer) { D3D11_BUFFER_DESC desc; diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index 1a2dd20f3..877b4413e 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -1476,7 +1476,7 @@ void wiRenderer::UpdatePerFrameData() if (!foundClosestReflector && camera == getCamera() && object->IsReflector()) { // If it is the main camera's culling, then obtain the reflectors: - XMVECTOR _refPlane = XMPlaneFromPointNormal(XMLoadFloat3(&object->bounds.getCenter()), XMVectorSet(0, 1, 0, 0)); + XMVECTOR _refPlane = XMPlaneFromPointNormal(XMLoadFloat3(&object->/*bounds.getCenter()*/translation), XMVectorSet(0, 1, 0, 0)); XMFLOAT4 plane; XMStoreFloat4(&plane, _refPlane); waterPlane = wiWaterPlane(plane.x, plane.y, plane.z, plane.w); @@ -1929,7 +1929,7 @@ void wiRenderer::DrawDebugBoxes(Camera* camera, GRAPHICSTHREAD threadID) GetDevice()->BindVertexLayout(vertexLayouts[VLTYPE_LINE],threadID); GetDevice()->BindRasterizerState(rasterizers[RSTYPE_WIRE_DOUBLESIDED_SMOOTH],threadID); - GetDevice()->BindDepthStencilState(depthStencils[DSSTYPE_DEFAULT],STENCILREF_EMPTY,threadID); + GetDevice()->BindDepthStencilState(depthStencils[DSSTYPE_DEPTHREAD],STENCILREF_EMPTY,threadID); GetDevice()->BindBlendState(blendStates[BSTYPE_TRANSPARENT],threadID); @@ -2116,24 +2116,25 @@ void wiRenderer::DrawDebugGridHelper(Camera* camera, GRAPHICSTHREAD threadID) static GPUBuffer* grid = nullptr; if (grid == nullptr) { + const float h = 0.01f; // avoid z-fight with zero plane const int a = 20; XMFLOAT4 verts[((a+1) * 2 + (a+1) * 2) * 2]; int count = 0; for (int i = 0; i <= a; ++i) { - verts[count++] = XMFLOAT4(i - a*0.5f, 0, -a*0.5f, 1); + verts[count++] = XMFLOAT4(i - a*0.5f, h, -a*0.5f, 1); verts[count++] = (i == a / 2 ? XMFLOAT4(0, 0, 1, 1) : XMFLOAT4(col, col, col, 1)); - verts[count++] = XMFLOAT4(i - a*0.5f, 0, +a*0.5f, 1); + verts[count++] = XMFLOAT4(i - a*0.5f, h, +a*0.5f, 1); verts[count++] = (i == a / 2 ? XMFLOAT4(0, 0, 1, 1) : XMFLOAT4(col, col, col, 1)); } for (int j = 0; j <= a; ++j) { - verts[count++] = XMFLOAT4(-a*0.5f, 0, j - a*0.5f, 1); + verts[count++] = XMFLOAT4(-a*0.5f, h, j - a*0.5f, 1); verts[count++] = (j == a / 2 ? XMFLOAT4(1, 0, 0, 1) : XMFLOAT4(col, col, col, 1)); - verts[count++] = XMFLOAT4(+a*0.5f, 0, j - a*0.5f, 1); + verts[count++] = XMFLOAT4(+a*0.5f, h, j - a*0.5f, 1); verts[count++] = (j == a / 2 ? XMFLOAT4(1, 0, 0, 1) : XMFLOAT4(col, col, col, 1)); } @@ -2373,7 +2374,7 @@ void wiRenderer::DrawLights(Camera* camera, GRAPHICSTHREAD threadID) if(type==0) //dir { MiscCB miscCb; - miscCb.mInt[0] = l->lightArray_index; + miscCb.mColor.x = (float)l->lightArray_index; GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_MISC], &miscCb, threadID); GetDevice()->Draw(3, threadID); // full screen triangle @@ -2381,7 +2382,7 @@ void wiRenderer::DrawLights(Camera* camera, GRAPHICSTHREAD threadID) else if(type==1) //point { MiscCB miscCb; - miscCb.mInt[0] = l->lightArray_index; + miscCb.mColor.x = (float)l->lightArray_index; float sca = l->enerDis.y + 1; miscCb.mTransform = XMMatrixTranspose(XMMatrixScaling(sca,sca,sca)*XMMatrixTranslation(l->translation.x, l->translation.y, l->translation.z)); GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_MISC], &miscCb, threadID); @@ -2391,7 +2392,7 @@ void wiRenderer::DrawLights(Camera* camera, GRAPHICSTHREAD threadID) else if(type==2) //spot { MiscCB miscCb; - miscCb.mInt[0] = l->lightArray_index; + miscCb.mColor.x = (float)l->lightArray_index; const float coneS = (const float)(l->enerDis.z / XM_PIDIV4); miscCb.mTransform = XMMatrixTranspose( XMMatrixScaling(coneS*l->enerDis.y, l->enerDis.y, coneS*l->enerDis.y)* diff --git a/WickedEngine/wiRenderer.h b/WickedEngine/wiRenderer.h index d546623f8..99a702782 100644 --- a/WickedEngine/wiRenderer.h +++ b/WickedEngine/wiRenderer.h @@ -160,7 +160,6 @@ public: { XMMATRIX mTransform; XMFLOAT4 mColor; - int mInt[4]; CB_SETBINDSLOT(CBSLOT_RENDERER_MISC) diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 3e122b6db..2f6883c08 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -7,7 +7,7 @@ namespace wiVersion // minor features, major updates const int minor = 9; // minor bug fixes, alterations, refactors, updates - const int revision = 29; + const int revision = 30; long GetVersion() diff --git a/WickedEngine/wiWindowRegistration.h b/WickedEngine/wiWindowRegistration.h index d8b6e0d65..b0a547928 100644 --- a/WickedEngine/wiWindowRegistration.h +++ b/WickedEngine/wiWindowRegistration.h @@ -16,6 +16,8 @@ private: window_type window; public: + wiWindowRegistration() :window(nullptr) {} + window_type GetRegisteredWindow() { return window; }