diff --git a/WickedEngine/wiEmittedParticle.cpp b/WickedEngine/wiEmittedParticle.cpp index c4cf5c583..761388ba4 100644 --- a/WickedEngine/wiEmittedParticle.cpp +++ b/WickedEngine/wiEmittedParticle.cpp @@ -334,7 +334,13 @@ void wiEmittedParticle::Draw(GRAPHICSTHREAD threadID, int FLAG) device->BindBlendState((additive?blendStateAdd:blendStateAlpha),threadID); - device->BindVertexBuffer(vertexBuffer,0,sizeof(Point),threadID); + const GPUBuffer* vbs[] = { + vertexBuffer, + }; + const UINT strides[] = { + sizeof(Point), + }; + device->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); if(!wireRender && material->texture) device->BindResourcePS(material->texture,TEXSLOT_ONDEMAND0,threadID); diff --git a/WickedEngine/wiFont.cpp b/WickedEngine/wiFont.cpp index d740af5b6..50f384c73 100644 --- a/WickedEngine/wiFont.cpp +++ b/WickedEngine/wiFont.cpp @@ -291,7 +291,14 @@ void wiFont::Draw(GRAPHICSTHREAD threadID, bool scissorTest) device->BindDepthStencilState(depthStencilState, 1, threadID); device->BindBlendState(blendState, threadID); - device->BindVertexBuffer(vertexBuffer, 0, sizeof(Vertex), threadID); + + const GPUBuffer* vbs[] = { + vertexBuffer, + }; + const UINT strides[] = { + sizeof(Vertex), + }; + device->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); device->BindIndexBuffer(indexBuffer, threadID); device->BindResourcePS(fontStyles[style].texture, TEXSLOT_ONDEMAND0, threadID); diff --git a/WickedEngine/wiGraphicsDevice.h b/WickedEngine/wiGraphicsDevice.h index 438ccf178..310333c3d 100644 --- a/WickedEngine/wiGraphicsDevice.h +++ b/WickedEngine/wiGraphicsDevice.h @@ -97,7 +97,14 @@ namespace wiGraphicsTypes virtual void BindResourceDS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID, int arrayIndex = -1) = 0; virtual void BindResourceHS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID, int arrayIndex = -1) = 0; virtual void BindResourceCS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID, int arrayIndex = -1) = 0; - virtual void BindUnorderedAccessResourceCS(const GPUUnorderedResource* buffer, int slot, GRAPHICSTHREAD threadID, int arrayIndex = -1) = 0; + virtual void BindResourcesPS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) = 0; + virtual void BindResourcesVS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) = 0; + virtual void BindResourcesGS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) = 0; + virtual void BindResourcesDS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) = 0; + virtual void BindResourcesHS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) = 0; + virtual void BindResourcesCS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) = 0; + virtual void BindUnorderedAccessResourceCS(const GPUUnorderedResource* resource, int slot, GRAPHICSTHREAD threadID, int arrayIndex = -1) = 0; + virtual void BindUnorderedAccessResourcesCS(const GPUUnorderedResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) = 0; virtual void UnBindResources(int slot, int num, GRAPHICSTHREAD threadID) = 0; virtual void UnBindUnorderedAccessResources(int slot, int num, GRAPHICSTHREAD threadID) = 0; virtual void BindSamplerPS(const Sampler* sampler, int slot, GRAPHICSTHREAD threadID) = 0; @@ -112,8 +119,7 @@ namespace wiGraphicsTypes virtual void BindConstantBufferDS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID) = 0; virtual void BindConstantBufferHS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID) = 0; virtual void BindConstantBufferCS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID) = 0; - virtual void BindVertexBuffer(const GPUBuffer* vertexBuffer, int slot, UINT stride, GRAPHICSTHREAD threadID) = 0; - virtual void BindVertexBuffers(GPUBuffer* const *vertexBuffers, int slot, UINT count, const UINT* strides, GRAPHICSTHREAD threadID) = 0; + virtual void BindVertexBuffers(const GPUBuffer *const* vertexBuffers, int slot, int count, const UINT* strides, GRAPHICSTHREAD threadID) = 0; virtual void BindIndexBuffer(const GPUBuffer* indexBuffer, GRAPHICSTHREAD threadID) = 0; virtual void BindPrimitiveTopology(PRIMITIVETOPOLOGY type, GRAPHICSTHREAD threadID) = 0; virtual void BindVertexLayout(const VertexLayout* layout, GRAPHICSTHREAD threadID) = 0; @@ -121,7 +127,6 @@ namespace wiGraphicsTypes virtual void BindBlendStateEx(const BlendState* state, const XMFLOAT4& blendFactor, UINT sampleMask, GRAPHICSTHREAD threadID) = 0; virtual void BindDepthStencilState(const DepthStencilState* state, UINT stencilRef, GRAPHICSTHREAD threadID) = 0; virtual void BindRasterizerState(const RasterizerState* state, GRAPHICSTHREAD threadID) = 0; - virtual void BindStreamOutTarget(const GPUBuffer* buffer, GRAPHICSTHREAD threadID) = 0; virtual void BindStreamOutTargets(GPUBuffer* const *buffers, UINT count, GRAPHICSTHREAD threadID) = 0; virtual void BindPS(const PixelShader* shader, GRAPHICSTHREAD threadID) = 0; virtual void BindVS(const VertexShader* shader, GRAPHICSTHREAD threadID) = 0; diff --git a/WickedEngine/wiGraphicsDevice_DX11.cpp b/WickedEngine/wiGraphicsDevice_DX11.cpp index dd798d690..b29df6025 100644 --- a/WickedEngine/wiGraphicsDevice_DX11.cpp +++ b/WickedEngine/wiGraphicsDevice_DX11.cpp @@ -2893,6 +2893,66 @@ void GraphicsDevice_DX11::BindResourceCS(const GPUResource* resource, int slot, } } } +void GraphicsDevice_DX11::BindResourcesPS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) +{ + assert(count <= 8); + ID3D11ShaderResourceView* srvs[8]; + for (int i = 0; i < count; ++i) + { + srvs[i] = resources[i] != nullptr ? resources[i]->SRV_DX11 : nullptr; + } + deviceContexts[threadID]->PSSetShaderResources(static_cast(slot), static_cast(count), srvs); +} +void GraphicsDevice_DX11::BindResourcesVS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) +{ + assert(count <= 8); + ID3D11ShaderResourceView* srvs[8]; + for (int i = 0; i < count; ++i) + { + srvs[i] = resources[i] != nullptr ? resources[i]->SRV_DX11 : nullptr; + } + deviceContexts[threadID]->VSSetShaderResources(static_cast(slot), static_cast(count), srvs); +} +void GraphicsDevice_DX11::BindResourcesGS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) +{ + assert(count <= 8); + ID3D11ShaderResourceView* srvs[8]; + for (int i = 0; i < count; ++i) + { + srvs[i] = resources[i] != nullptr ? resources[i]->SRV_DX11 : nullptr; + } + deviceContexts[threadID]->GSSetShaderResources(static_cast(slot), static_cast(count), srvs); +} +void GraphicsDevice_DX11::BindResourcesDS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) +{ + assert(count <= 8); + ID3D11ShaderResourceView* srvs[8]; + for (int i = 0; i < count; ++i) + { + srvs[i] = resources[i] != nullptr ? resources[i]->SRV_DX11 : nullptr; + } + deviceContexts[threadID]->DSSetShaderResources(static_cast(slot), static_cast(count), srvs); +} +void GraphicsDevice_DX11::BindResourcesHS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) +{ + assert(count <= 8); + ID3D11ShaderResourceView* srvs[8]; + for (int i = 0; i < count; ++i) + { + srvs[i] = resources[i] != nullptr ? resources[i]->SRV_DX11 : nullptr; + } + deviceContexts[threadID]->HSSetShaderResources(static_cast(slot), static_cast(count), srvs); +} +void GraphicsDevice_DX11::BindResourcesCS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) +{ + assert(count <= 8); + ID3D11ShaderResourceView* srvs[8]; + for (int i = 0; i < count; ++i) + { + srvs[i] = resources[i] != nullptr ? resources[i]->SRV_DX11 : nullptr; + } + deviceContexts[threadID]->CSSetShaderResources(static_cast(slot), static_cast(count), srvs); +} void GraphicsDevice_DX11::BindUnorderedAccessResourceCS(const GPUUnorderedResource* resource, int slot, GRAPHICSTHREAD threadID, int arrayIndex) { if (resource != nullptr) @@ -2908,6 +2968,16 @@ void GraphicsDevice_DX11::BindUnorderedAccessResourceCS(const GPUUnorderedResour } } } +void GraphicsDevice_DX11::BindUnorderedAccessResourcesCS(const GPUUnorderedResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) +{ + assert(count <= 8); + ID3D11UnorderedAccessView* uavs[8]; + for (int i = 0; i < count; ++i) + { + uavs[i] = resources[i] != nullptr ? resources[i]->UAV_DX11 : nullptr; + } + deviceContexts[threadID]->CSSetUnorderedAccessViews(static_cast(slot), static_cast(count), uavs, nullptr); +} void GraphicsDevice_DX11::UnBindResources(int slot, int num, GRAPHICSTHREAD threadID) { assert(num <= ARRAYSIZE(__nullBlob) && "Extend nullBlob to support more resource unbinding!"); @@ -2977,34 +3047,19 @@ void GraphicsDevice_DX11::BindConstantBufferCS(const GPUBuffer* buffer, int slot ID3D11Buffer* res = buffer ? buffer->resource_DX11 : nullptr; deviceContexts[threadID]->CSSetConstantBuffers(slot, 1, &res); } -void GraphicsDevice_DX11::BindVertexBuffer(const GPUBuffer* vertexBuffer, int slot, UINT stride, GRAPHICSTHREAD threadID) -{ - UINT data[8] = { 0 }; - if (vertexBuffer == nullptr) - { - deviceContexts[threadID]->IASetVertexBuffers(0, 0, (ID3D11Buffer**)__nullBlob, data, (UINT*)__nullBlob); - } - else - { - deviceContexts[threadID]->IASetVertexBuffers(slot, 1, &vertexBuffer->resource_DX11, &stride, (UINT*)__nullBlob); - } -} -void GraphicsDevice_DX11::BindVertexBuffers(GPUBuffer* const *vertexBuffers, int slot, UINT count, const UINT* strides, GRAPHICSTHREAD threadID) +void GraphicsDevice_DX11::BindVertexBuffers(const GPUBuffer* const *vertexBuffers, int slot, int count, const UINT* strides, GRAPHICSTHREAD threadID) { assert(count <= 8); ID3D11Buffer* res[8] = { 0 }; for (UINT i = 0; i < count; ++i) { - if (vertexBuffers[i] != nullptr) - { - res[i] = vertexBuffers[i]->resource_DX11; - } + res[i] = vertexBuffers[i] != nullptr ? vertexBuffers[i]->resource_DX11 : nullptr; } - deviceContexts[threadID]->IASetVertexBuffers(slot, count, res, strides, (UINT*)__nullBlob); + deviceContexts[threadID]->IASetVertexBuffers(static_cast(slot), static_cast(count), res, strides, (UINT*)__nullBlob); } void GraphicsDevice_DX11::BindIndexBuffer(const GPUBuffer* indexBuffer, GRAPHICSTHREAD threadID) { - ID3D11Buffer* res = indexBuffer ? indexBuffer->resource_DX11 : nullptr; + ID3D11Buffer* res = indexBuffer != nullptr ? indexBuffer->resource_DX11 : nullptr; deviceContexts[threadID]->IASetIndexBuffer(res, DXGI_FORMAT_R32_UINT, 0); } void GraphicsDevice_DX11::BindPrimitiveTopology(PRIMITIVETOPOLOGY type, GRAPHICSTHREAD threadID) @@ -3034,38 +3089,27 @@ void GraphicsDevice_DX11::BindPrimitiveTopology(PRIMITIVETOPOLOGY type, GRAPHICS } void GraphicsDevice_DX11::BindVertexLayout(const VertexLayout* layout, GRAPHICSTHREAD threadID) { - ID3D11InputLayout* res = layout ? layout->resource_DX11 : nullptr; + ID3D11InputLayout* res = layout != nullptr ? layout->resource_DX11 : nullptr; deviceContexts[threadID]->IASetInputLayout(res); } void GraphicsDevice_DX11::BindBlendState(const BlendState* state, GRAPHICSTHREAD threadID) { - static float blendFactor[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; - static UINT sampleMask = 0xffffffff; + static const float blendFactor[4] = { 1.0f, 1.0f, 1.0f, 1.0f }; + static const UINT sampleMask = 0xffffffff; deviceContexts[threadID]->OMSetBlendState(state->resource_DX11, blendFactor, sampleMask); } void GraphicsDevice_DX11::BindBlendStateEx(const BlendState* state, const XMFLOAT4& blendFactor, UINT sampleMask, GRAPHICSTHREAD threadID) { - float fblendFactor[4] = { blendFactor.x, blendFactor.y, blendFactor.z, blendFactor.w }; + const float fblendFactor[4] = { blendFactor.x, blendFactor.y, blendFactor.z, blendFactor.w }; deviceContexts[threadID]->OMSetBlendState(state->resource_DX11, fblendFactor, sampleMask); } void GraphicsDevice_DX11::BindDepthStencilState(const DepthStencilState* state, UINT stencilRef, GRAPHICSTHREAD threadID) { - deviceContexts[threadID]->OMSetDepthStencilState(state->resource_DX11, stencilRef); + deviceContexts[threadID]->OMSetDepthStencilState(state != nullptr ? state->resource_DX11 : nullptr, stencilRef); } void GraphicsDevice_DX11::BindRasterizerState(const RasterizerState* state, GRAPHICSTHREAD threadID) { - deviceContexts[threadID]->RSSetState(state->resource_DX11); -} -void GraphicsDevice_DX11::BindStreamOutTarget(const GPUBuffer* buffer, GRAPHICSTHREAD threadID) -{ - if (buffer == nullptr) - { - deviceContexts[threadID]->SOSetTargets(0, (ID3D11Buffer**)__nullBlob, (UINT*)__nullBlob); - } - else - { - deviceContexts[threadID]->SOSetTargets(1, &buffer->resource_DX11, (UINT*)__nullBlob); - } + deviceContexts[threadID]->RSSetState(state != nullptr ? state->resource_DX11 : nullptr); } void GraphicsDevice_DX11::BindStreamOutTargets(GPUBuffer* const * buffers, UINT count, GRAPHICSTHREAD threadID) { @@ -3074,41 +3118,38 @@ void GraphicsDevice_DX11::BindStreamOutTargets(GPUBuffer* const * buffers, UINT ID3D11Buffer* res[8] = { 0 }; for (UINT i = 0; i < count; ++i) { - if (buffers[i] != nullptr) - { - res[i] = buffers[i]->resource_DX11; - } + res[i] = buffers[i] != nullptr ? buffers[i]->resource_DX11 : nullptr; } deviceContexts[threadID]->SOSetTargets(count, res, offsetSO); } void GraphicsDevice_DX11::BindPS(const PixelShader* shader, GRAPHICSTHREAD threadID) { - ID3D11PixelShader* res = shader ? shader->resource_DX11 : nullptr; + ID3D11PixelShader* res = shader != nullptr ? shader->resource_DX11 : nullptr; deviceContexts[threadID]->PSSetShader(res, nullptr, 0); } void GraphicsDevice_DX11::BindVS(const VertexShader* shader, GRAPHICSTHREAD threadID) { - ID3D11VertexShader* res = shader ? shader->resource_DX11 : nullptr; + ID3D11VertexShader* res = shader != nullptr ? shader->resource_DX11 : nullptr; deviceContexts[threadID]->VSSetShader(res, nullptr, 0); } void GraphicsDevice_DX11::BindGS(const GeometryShader* shader, GRAPHICSTHREAD threadID) { - ID3D11GeometryShader* res = shader ? shader->resource_DX11 : nullptr; + ID3D11GeometryShader* res = shader != nullptr ? shader->resource_DX11 : nullptr; deviceContexts[threadID]->GSSetShader(res, nullptr, 0); } void GraphicsDevice_DX11::BindHS(const HullShader* shader, GRAPHICSTHREAD threadID) { - ID3D11HullShader* res = shader ? shader->resource_DX11 : nullptr; + ID3D11HullShader* res = shader != nullptr ? shader->resource_DX11 : nullptr; deviceContexts[threadID]->HSSetShader(res, nullptr, 0); } void GraphicsDevice_DX11::BindDS(const DomainShader* shader, GRAPHICSTHREAD threadID) { - ID3D11DomainShader* res = shader ? shader->resource_DX11 : nullptr; + ID3D11DomainShader* res = shader != nullptr ? shader->resource_DX11 : nullptr; deviceContexts[threadID]->DSSetShader(res, nullptr, 0); } void GraphicsDevice_DX11::BindCS(const ComputeShader* shader, GRAPHICSTHREAD threadID) { - ID3D11ComputeShader* res = shader ? shader->resource_DX11 : nullptr; + ID3D11ComputeShader* res = shader != nullptr ? shader->resource_DX11 : nullptr; deviceContexts[threadID]->CSSetShader(res, nullptr, 0); } void GraphicsDevice_DX11::Draw(int vertexCount, GRAPHICSTHREAD threadID) @@ -3146,6 +3187,7 @@ void GraphicsDevice_DX11::CopyTexture2D_Region(Texture2D* pDst, UINT dstMip, UIN } void GraphicsDevice_DX11::MSAAResolve(Texture2D* pDst, const Texture2D* pSrc, GRAPHICSTHREAD threadID) { + assert(pDst != nullptr && pSrc != nullptr); deviceContexts[threadID]->ResolveSubresource(pDst->texture2D_DX11, 0, pSrc->texture2D_DX11, 0, _ConvertFormat(pDst->desc.Format)); } void GraphicsDevice_DX11::UpdateBuffer(GPUBuffer* buffer, const void* data, GRAPHICSTHREAD threadID, int dataSize) diff --git a/WickedEngine/wiGraphicsDevice_DX11.h b/WickedEngine/wiGraphicsDevice_DX11.h index ecde2f3cd..2e1c044f7 100644 --- a/WickedEngine/wiGraphicsDevice_DX11.h +++ b/WickedEngine/wiGraphicsDevice_DX11.h @@ -79,7 +79,14 @@ namespace wiGraphicsTypes virtual void BindResourceDS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID, int arrayIndex = -1) override; virtual void BindResourceHS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID, int arrayIndex = -1) override; virtual void BindResourceCS(const GPUResource* resource, int slot, GRAPHICSTHREAD threadID, int arrayIndex = -1) override; - virtual void BindUnorderedAccessResourceCS(const GPUUnorderedResource* buffer, int slot, GRAPHICSTHREAD threadID, int arrayIndex = -1) override; + virtual void BindResourcesPS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) override; + virtual void BindResourcesVS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) override; + virtual void BindResourcesGS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) override; + virtual void BindResourcesDS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) override; + virtual void BindResourcesHS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) override; + virtual void BindResourcesCS(const GPUResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) override; + virtual void BindUnorderedAccessResourceCS(const GPUUnorderedResource* resource, int slot, GRAPHICSTHREAD threadID, int arrayIndex = -1) override; + virtual void BindUnorderedAccessResourcesCS(const GPUUnorderedResource *const* resources, int slot, int count, GRAPHICSTHREAD threadID) override; virtual void UnBindResources(int slot, int num, GRAPHICSTHREAD threadID) override; virtual void UnBindUnorderedAccessResources(int slot, int num, GRAPHICSTHREAD threadID) override; virtual void BindSamplerPS(const Sampler* sampler, int slot, GRAPHICSTHREAD threadID) override; @@ -94,8 +101,7 @@ namespace wiGraphicsTypes virtual void BindConstantBufferDS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID) override; virtual void BindConstantBufferHS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID) override; virtual void BindConstantBufferCS(const GPUBuffer* buffer, int slot, GRAPHICSTHREAD threadID) override; - virtual void BindVertexBuffer(const GPUBuffer* vertexBuffer, int slot, UINT stride, GRAPHICSTHREAD threadID) override; - virtual void BindVertexBuffers(GPUBuffer* const *vertexBuffers, int slot, UINT count, const UINT* strides, GRAPHICSTHREAD threadID) override; + virtual void BindVertexBuffers(const GPUBuffer* const *vertexBuffers, int slot, int count, const UINT* strides, GRAPHICSTHREAD threadID) override; virtual void BindIndexBuffer(const GPUBuffer* indexBuffer, GRAPHICSTHREAD threadID) override; virtual void BindPrimitiveTopology(PRIMITIVETOPOLOGY type, GRAPHICSTHREAD threadID) override; virtual void BindVertexLayout(const VertexLayout* layout, GRAPHICSTHREAD threadID) override; @@ -103,7 +109,6 @@ namespace wiGraphicsTypes virtual void BindBlendStateEx(const BlendState* state, const XMFLOAT4& blendFactor, UINT sampleMask, GRAPHICSTHREAD threadID) override; virtual void BindDepthStencilState(const DepthStencilState* state, UINT stencilRef, GRAPHICSTHREAD threadID) override; virtual void BindRasterizerState(const RasterizerState* state, GRAPHICSTHREAD threadID) override; - virtual void BindStreamOutTarget(const GPUBuffer* buffer, GRAPHICSTHREAD threadID) override; virtual void BindStreamOutTargets(GPUBuffer* const *buffers, UINT count, GRAPHICSTHREAD threadID) override; virtual void BindPS(const PixelShader* shader, GRAPHICSTHREAD threadID) override; virtual void BindVS(const VertexShader* shader, GRAPHICSTHREAD threadID) override; diff --git a/WickedEngine/wiHairParticle.cpp b/WickedEngine/wiHairParticle.cpp index 3531abc02..26d60d1a9 100644 --- a/WickedEngine/wiHairParticle.cpp +++ b/WickedEngine/wiHairParticle.cpp @@ -413,7 +413,13 @@ void wiHairParticle::Draw(Camera* camera, SHADERTYPE shaderType, GRAPHICSTHREAD device->BindGS(gs, threadID); } - device->BindVertexBuffer(vb, 0, sizeof(Point), threadID); + const GPUBuffer* vbs[] = { + vb, + }; + const UINT strides[] = { + sizeof(Point), + }; + device->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); device->Draw((int)points.size(), threadID); device->BindGS(nullptr,threadID); diff --git a/WickedEngine/wiImage.cpp b/WickedEngine/wiImage.cpp index aab40bf85..ed799bef0 100644 --- a/WickedEngine/wiImage.cpp +++ b/WickedEngine/wiImage.cpp @@ -244,8 +244,6 @@ void wiImage::Draw(Texture2D* texture, const wiImageEffects& effects,GRAPHICSTHR bool fullScreenEffect = false; device->BindVertexLayout(nullptr, threadID); - device->BindVertexBuffer(nullptr, 0, 0, threadID); - device->BindIndexBuffer(nullptr, threadID); device->BindPrimitiveTopology(PRIMITIVETOPOLOGY::TRIANGLESTRIP, threadID); device->BindRasterizerState(rasterizerState, threadID); @@ -538,8 +536,6 @@ void wiImage::DrawDeferred(Texture2D* lightmap_diffuse, Texture2D* lightmap_spec device->BindDepthStencilState(depthStencilStateLess,stencilRef,threadID); device->BindVertexLayout(nullptr, threadID); - device->BindVertexBuffer(nullptr, 0, 0, threadID); - device->BindIndexBuffer(nullptr, threadID); device->BindVS(screenVS,threadID); device->BindPS(deferredPS,threadID); diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index 7878632d8..dbf09df15 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -1885,7 +1885,12 @@ void wiRenderer::UpdateRenderData(GRAPHICSTHREAD threadID) // Unload skinning shader GetDevice()->BindGS(nullptr, threadID); GetDevice()->BindVS(nullptr, threadID); - GetDevice()->BindStreamOutTarget(nullptr, threadID); + GPUBuffer* sos[] = { + nullptr, + nullptr, + nullptr, + }; + GetDevice()->BindStreamOutTargets(sos, ARRAYSIZE(sos), threadID); } #endif @@ -2050,7 +2055,6 @@ void wiRenderer::OcclusionCulling_Render(GRAPHICSTHREAD threadID) GetDevice()->BindBlendState(blendStates[BSTYPE_COLORWRITEDISABLE], threadID); GetDevice()->BindDepthStencilState(depthStencils[DSSTYPE_DEPTHREAD], STENCILREF_DEFAULT, threadID); GetDevice()->BindVertexLayout(nullptr, threadID); - GetDevice()->BindVertexBuffer(nullptr, 0, 0, threadID); GetDevice()->BindVS(vertexShaders[VSTYPE_CUBE], threadID); GetDevice()->BindPS(nullptr, threadID); GetDevice()->BindPrimitiveTopology(PRIMITIVETOPOLOGY::TRIANGLESTRIP, threadID); @@ -2256,7 +2260,13 @@ void wiRenderer::DrawDebugBoneLines(Camera* camera, GRAPHICSTHREAD threadID) GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_MISC], &sb, threadID); - GetDevice()->BindVertexBuffer(&boneLines[i]->vertexBuffer, 0, sizeof(XMFLOAT4) + sizeof(XMFLOAT4), threadID); + const GPUBuffer* vbs[] = { + &boneLines[i]->vertexBuffer, + }; + const UINT strides[] = { + sizeof(XMFLOAT4) + sizeof(XMFLOAT4), + }; + GetDevice()->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); GetDevice()->Draw(2, threadID); } @@ -2288,7 +2298,13 @@ void wiRenderer::DrawDebugLines(Camera* camera, GRAPHICSTHREAD threadID) GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_MISC], &sb, threadID); - GetDevice()->BindVertexBuffer(&linesTemp[i]->vertexBuffer, 0, sizeof(XMFLOAT4) + sizeof(XMFLOAT4), threadID); + const GPUBuffer* vbs[] = { + &linesTemp[i]->vertexBuffer, + }; + const UINT strides[] = { + sizeof(XMFLOAT4) + sizeof(XMFLOAT4), + }; + GetDevice()->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); GetDevice()->Draw(2, threadID); } @@ -2313,8 +2329,14 @@ void wiRenderer::DrawDebugBoxes(Camera* camera, GRAPHICSTHREAD threadID) GetDevice()->BindPS(pixelShaders[PSTYPE_LINE],threadID); GetDevice()->BindVS(vertexShaders[VSTYPE_LINE],threadID); - - GetDevice()->BindVertexBuffer(&Cube::vertexBuffer,0, sizeof(XMFLOAT4) + sizeof(XMFLOAT4),threadID); + + const GPUBuffer* vbs[] = { + &Cube::vertexBuffer, + }; + const UINT strides[] = { + sizeof(XMFLOAT4) + sizeof(XMFLOAT4), + }; + GetDevice()->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); GetDevice()->BindIndexBuffer(&Cube::indexBuffer,threadID); MiscCB sb; @@ -2371,11 +2393,18 @@ void wiRenderer::DrawTranslators(Camera* camera, GRAPHICSTHREAD threadID) XMMATRIX matZ = XMMatrixTranspose(XMMatrixRotationY(-XM_PIDIV2)*XMMatrixRotationZ(-XM_PIDIV2)*mat); // Planes: - - GetDevice()->BindVertexBuffer(wiTranslator::vertexBuffer_Plane, 0, sizeof(XMFLOAT4) + sizeof(XMFLOAT4), threadID); - GetDevice()->BindRasterizerState(rasterizers[RSTYPE_DOUBLESIDED], threadID); - GetDevice()->BindPrimitiveTopology(TRIANGLELIST, threadID); - GetDevice()->BindBlendState(blendStates[BSTYPE_ADDITIVE], threadID); + { + const GPUBuffer* vbs[] = { + wiTranslator::vertexBuffer_Plane, + }; + const UINT strides[] = { + sizeof(XMFLOAT4) + sizeof(XMFLOAT4), + }; + GetDevice()->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); + GetDevice()->BindRasterizerState(rasterizers[RSTYPE_DOUBLESIDED], threadID); + GetDevice()->BindPrimitiveTopology(TRIANGLELIST, threadID); + GetDevice()->BindBlendState(blendStates[BSTYPE_ADDITIVE], threadID); + } // xy sb.mTransform = matX; @@ -2396,11 +2425,18 @@ void wiRenderer::DrawTranslators(Camera* camera, GRAPHICSTHREAD threadID) GetDevice()->Draw(wiTranslator::vertexCount_Plane, threadID); // Lines: - - GetDevice()->BindVertexBuffer(wiTranslator::vertexBuffer_Axis, 0, sizeof(XMFLOAT4) + sizeof(XMFLOAT4), threadID); - GetDevice()->BindRasterizerState(rasterizers[RSTYPE_WIRE_DOUBLESIDED_SMOOTH], threadID); - GetDevice()->BindPrimitiveTopology(LINELIST, threadID); - GetDevice()->BindBlendState(blendStates[BSTYPE_TRANSPARENT], threadID); + { + const GPUBuffer* vbs[] = { + wiTranslator::vertexBuffer_Axis, + }; + const UINT strides[] = { + sizeof(XMFLOAT4) + sizeof(XMFLOAT4), + }; + GetDevice()->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); + GetDevice()->BindRasterizerState(rasterizers[RSTYPE_WIRE_DOUBLESIDED_SMOOTH], threadID); + GetDevice()->BindPrimitiveTopology(LINELIST, threadID); + GetDevice()->BindBlendState(blendStates[BSTYPE_TRANSPARENT], threadID); + } // x sb.mTransform = matX; @@ -2421,13 +2457,21 @@ void wiRenderer::DrawTranslators(Camera* camera, GRAPHICSTHREAD threadID) GetDevice()->Draw(wiTranslator::vertexCount_Axis, threadID); // Origin: - sb.mTransform = XMMatrixTranspose(mat); - sb.mColor = x->state == wiTranslator::TRANSLATOR_XYZ ? XMFLOAT4(1, 1, 1, 1) : XMFLOAT4(0.5f, 0.5f, 0.5f, 1); - GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_MISC], &sb, threadID); - GetDevice()->BindPrimitiveTopology(TRIANGLELIST, threadID); - GetDevice()->BindRasterizerState(rasterizers[RSTYPE_FRONT], threadID); - GetDevice()->BindVertexBuffer(wiTranslator::vertexBuffer_Origin, 0, sizeof(XMFLOAT4) + sizeof(XMFLOAT4), threadID); - GetDevice()->Draw(wiTranslator::vertexCount_Origin, threadID); + { + const GPUBuffer* vbs[] = { + wiTranslator::vertexBuffer_Origin, + }; + const UINT strides[] = { + sizeof(XMFLOAT4) + sizeof(XMFLOAT4), + }; + GetDevice()->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); + sb.mTransform = XMMatrixTranspose(mat); + sb.mColor = x->state == wiTranslator::TRANSLATOR_XYZ ? XMFLOAT4(1, 1, 1, 1) : XMFLOAT4(0.5f, 0.5f, 0.5f, 1); + GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_MISC], &sb, threadID); + GetDevice()->BindPrimitiveTopology(TRIANGLELIST, threadID); + GetDevice()->BindRasterizerState(rasterizers[RSTYPE_FRONT], threadID); + GetDevice()->Draw(wiTranslator::vertexCount_Origin, threadID); + } } GetDevice()->EventEnd(threadID); @@ -2452,9 +2496,6 @@ void wiRenderer::DrawDebugEnvProbes(Camera* camera, GRAPHICSTHREAD threadID) GetDevice()->BindPS(pixelShaders[PSTYPE_CUBEMAP], threadID); GetDevice()->BindVS(vertexShaders[VSTYPE_SPHERE], threadID); - GetDevice()->BindVertexBuffer(nullptr, 0, 0, threadID); - GetDevice()->BindIndexBuffer(nullptr, threadID); - MiscCB sb; for (auto& x : GetScene().environmentProbes) { @@ -2534,7 +2575,13 @@ void wiRenderer::DrawDebugGridHelper(Camera* camera, GRAPHICSTHREAD threadID) GetDevice()->UpdateBuffer(constantBuffers[CBTYPE_MISC], &sb, threadID); - GetDevice()->BindVertexBuffer(grid, 0, sizeof(XMFLOAT4) + sizeof(XMFLOAT4), threadID); + const GPUBuffer* vbs[] = { + grid, + }; + const UINT strides[] = { + sizeof(XMFLOAT4) + sizeof(XMFLOAT4), + }; + GetDevice()->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); GetDevice()->Draw(gridVertexCount, threadID); @@ -2558,8 +2605,6 @@ void wiRenderer::DrawDebugVoxels(Camera* camera, GRAPHICSTHREAD threadID) GetDevice()->BindGS(geometryShaders[GSTYPE_VOXEL], threadID); GetDevice()->BindVertexLayout(nullptr, threadID); - GetDevice()->BindVertexBuffer(nullptr, 0, 0, threadID); - GetDevice()->BindIndexBuffer(nullptr, threadID); @@ -2603,7 +2648,13 @@ void wiRenderer::DrawDebugEmitters(Camera* camera, GRAPHICSTHREAD threadID) for (auto& y : x->object->mesh->subsets) { - GetDevice()->BindVertexBuffer(&x->object->mesh->vertexBuffers[VPROP_POS], 0, sizeof(XMFLOAT4), threadID); + const GPUBuffer* vbs[] = { + &x->object->mesh->vertexBuffers[VPROP_POS], + }; + const UINT strides[] = { + sizeof(XMFLOAT4), + }; + GetDevice()->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); GetDevice()->BindIndexBuffer(&y.indexBuffer, threadID); GetDevice()->DrawIndexed((int)y.subsetIndices.size(), threadID); } @@ -2702,7 +2753,13 @@ void wiRenderer::DrawTrails(GRAPHICSTHREAD threadID, Texture2D* refracRes) if(!trails.empty()){ GetDevice()->UpdateBuffer(&o->trailBuff,trails.data(),threadID,(int)(sizeof(RibbonVertex)*trails.size())); - GetDevice()->BindVertexBuffer(&o->trailBuff,0,sizeof(RibbonVertex),threadID); + const GPUBuffer* vbs[] = { + &o->trailBuff, + }; + const UINT strides[] = { + sizeof(RibbonVertex), + }; + GetDevice()->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); GetDevice()->Draw((int)trails.size(),threadID); trails.clear(); @@ -2771,8 +2828,6 @@ void wiRenderer::DrawLights(Camera* camera, GRAPHICSTHREAD threadID) GetDevice()->BindRasterizerState(rasterizers[RSTYPE_BACK],threadID); GetDevice()->BindVertexLayout(nullptr, threadID); - GetDevice()->BindVertexBuffer(nullptr, 0, 0, threadID); - GetDevice()->BindIndexBuffer(nullptr, threadID); // Environmental light (envmap + voxelGI) is always drawn { @@ -2903,8 +2958,6 @@ void wiRenderer::DrawVolumeLights(Camera* camera, GRAPHICSTHREAD threadID) GetDevice()->BindPrimitiveTopology(TRIANGLELIST,threadID); GetDevice()->BindVertexLayout(nullptr, threadID); - GetDevice()->BindVertexBuffer(nullptr, 0, 0, threadID); - GetDevice()->BindIndexBuffer(nullptr, threadID); GetDevice()->BindDepthStencilState(depthStencils[DSSTYPE_DEPTHREAD],STENCILREF_DEFAULT,threadID); @@ -3965,15 +4018,15 @@ void wiRenderer::RenderMeshes(const XMFLOAT3& eye, const CulledCollection& culle if (!wireRender) { - GetDevice()->BindResourcePS(material->GetBaseColorMap(), TEXSLOT_ONDEMAND0, threadID); - if (!easyTextureBind) - { - GetDevice()->BindResourcePS(material->GetNormalMap(), TEXSLOT_ONDEMAND1, threadID); - GetDevice()->BindResourcePS(material->GetRoughnessMap(), TEXSLOT_ONDEMAND2, threadID); - GetDevice()->BindResourcePS(material->GetReflectanceMap(), TEXSLOT_ONDEMAND3, threadID); - GetDevice()->BindResourcePS(material->GetMetalnessMap(), TEXSLOT_ONDEMAND4, threadID); - GetDevice()->BindResourcePS(material->GetDisplacementMap(), TEXSLOT_ONDEMAND5, threadID); - } + const GPUResource* res[] = { + static_cast(material->GetBaseColorMap()), + static_cast(material->GetNormalMap()), + static_cast(material->GetRoughnessMap()), + static_cast(material->GetReflectanceMap()), + static_cast(material->GetMetalnessMap()), + static_cast(material->GetDisplacementMap()), + }; + GetDevice()->BindResourcesPS(res, TEXSLOT_ONDEMAND0, (easyTextureBind ? 1 : ARRAYSIZE(res)), threadID); PSTYPES realPS = GetPSTYPE(shaderType, material); if ((shaderType == SHADERTYPE_SHADOW || shaderType == SHADERTYPE_ALPHATESTONLY) && material->alphaRef > 1.0f - 1.0f/256.0f) @@ -4127,7 +4180,6 @@ void wiRenderer::DrawSky(GRAPHICSTHREAD threadID) GetDevice()->BindResourcePS(wiTextureHelper::getInstance()->getBlackCubeMap(), TEXSLOT_ENV_GLOBAL, threadID); } - GetDevice()->BindVertexBuffer(nullptr,0,0,threadID); GetDevice()->BindVertexLayout(nullptr, threadID); GetDevice()->Draw(240,threadID); @@ -4145,7 +4197,6 @@ void wiRenderer::DrawSun(GRAPHICSTHREAD threadID) GetDevice()->BindVS(vertexShaders[VSTYPE_SKY], threadID); GetDevice()->BindPS(pixelShaders[PSTYPE_SUN], threadID); - GetDevice()->BindVertexBuffer(nullptr, 0, 0, threadID); GetDevice()->BindVertexLayout(nullptr, threadID); GetDevice()->Draw(240, threadID); @@ -4286,7 +4337,6 @@ void wiRenderer::RefreshEnvProbes(GRAPHICSTHREAD threadID) GetDevice()->BindResourcePS(enviroMap, TEXSLOT_ENV_GLOBAL, threadID); - GetDevice()->BindVertexBuffer(nullptr, 0, 0, threadID); GetDevice()->BindVertexLayout(nullptr, threadID); GetDevice()->Draw(240, threadID); } @@ -4651,12 +4701,17 @@ void wiRenderer::ComputeTiledLightCulling(GRAPHICSTHREAD threadID) device->BindCS(computeShaders[CSTYPE_TILEDLIGHTCULLING], threadID); } } - device->BindUnorderedAccessResourceCS(lightCounterHelper_Opaque, UAVSLOT_LIGHTINDEXCOUNTERHELPER_OPAQUE, threadID); - device->BindUnorderedAccessResourceCS(lightCounterHelper_Transparent, UAVSLOT_LIGHTINDEXCOUNTERHELPER_TRANSPARENT, threadID); - device->BindUnorderedAccessResourceCS(resourceBuffers[RBTYPE_LIGHTINDEXLIST_OPAQUE], UAVSLOT_LIGHTINDEXLIST_OPAQUE, threadID); - device->BindUnorderedAccessResourceCS(resourceBuffers[RBTYPE_LIGHTINDEXLIST_TRANSPARENT], UAVSLOT_LIGHTINDEXLIST_TRANSPARENT, threadID); - device->BindUnorderedAccessResourceCS(textures[TEXTYPE_2D_LIGHTGRID_OPAQUE], UAVSLOT_LIGHTGRID_OPAQUE, threadID); - device->BindUnorderedAccessResourceCS(textures[TEXTYPE_2D_LIGHTGRID_TRANSPARENT], UAVSLOT_LIGHTGRID_TRANSPARENT, threadID); + + const GPUUnorderedResource* uavs[] = { + static_cast(lightCounterHelper_Opaque), + static_cast(lightCounterHelper_Transparent), + static_cast(resourceBuffers[RBTYPE_LIGHTINDEXLIST_OPAQUE]), + static_cast(resourceBuffers[RBTYPE_LIGHTINDEXLIST_TRANSPARENT]), + static_cast(textures[TEXTYPE_2D_LIGHTGRID_OPAQUE]), + static_cast(textures[TEXTYPE_2D_LIGHTGRID_TRANSPARENT]), + }; + device->BindUnorderedAccessResourcesCS(uavs, UAVSLOT_LIGHTINDEXCOUNTERHELPER_OPAQUE, ARRAYSIZE(uavs), threadID); + device->Dispatch(dispatchParams.numThreads[0], dispatchParams.numThreads[1], dispatchParams.numThreads[2], threadID); device->UnBindUnorderedAccessResources(0, 8, threadID); // this unbinds pretty much every uav diff --git a/WickedEngine/wiWidget.cpp b/WickedEngine/wiWidget.cpp index a40b6cbe9..5f9608318 100644 --- a/WickedEngine/wiWidget.cpp +++ b/WickedEngine/wiWidget.cpp @@ -1497,57 +1497,98 @@ void wiColorPicker::Render(wiGUI* gui) wiRenderer::GetDevice()->BindPS(wiRenderer::pixelShaders[PSTYPE_LINE], threadID); wiRenderer::GetDevice()->BindPrimitiveTopology(TRIANGLESTRIP, threadID); - // render saturation triangle wiRenderer::MiscCB cb; - cb.mTransform = XMMatrixTranspose( - XMMatrixRotationZ(-angle) * - XMMatrixTranslation(translation.x + __colorpicker_center, translation.y + __colorpicker_center, 0) * - __cam - ); - cb.mColor = XMFLOAT4(1, 1, 1, 1); - wiRenderer::GetDevice()->UpdateBuffer(wiRenderer::constantBuffers[CBTYPE_MISC], &cb, threadID); - wiRenderer::GetDevice()->BindVertexBuffer(&vb_saturation, 0, sizeof(Vertex), threadID); - wiRenderer::GetDevice()->Draw(vb_saturation.GetDesc().ByteWidth / sizeof(Vertex), threadID); + + // render saturation triangle + { + cb.mTransform = XMMatrixTranspose( + XMMatrixRotationZ(-angle) * + XMMatrixTranslation(translation.x + __colorpicker_center, translation.y + __colorpicker_center, 0) * + __cam + ); + cb.mColor = XMFLOAT4(1, 1, 1, 1); + wiRenderer::GetDevice()->UpdateBuffer(wiRenderer::constantBuffers[CBTYPE_MISC], &cb, threadID); + const GPUBuffer* vbs[] = { + &vb_saturation, + }; + const UINT strides[] = { + sizeof(Vertex), + }; + wiRenderer::GetDevice()->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); + wiRenderer::GetDevice()->Draw(vb_saturation.GetDesc().ByteWidth / sizeof(Vertex), threadID); + } // render hue circle - cb.mTransform = XMMatrixTranspose( - XMMatrixTranslation(translation.x + __colorpicker_center, translation.y + __colorpicker_center, 0) * - __cam - ); - cb.mColor = XMFLOAT4(1, 1, 1, 1); - wiRenderer::GetDevice()->UpdateBuffer(wiRenderer::constantBuffers[CBTYPE_MISC], &cb, threadID); - wiRenderer::GetDevice()->BindVertexBuffer(&vb_hue, 0, sizeof(Vertex), threadID); - wiRenderer::GetDevice()->Draw(vb_hue.GetDesc().ByteWidth / sizeof(Vertex), threadID); + { + cb.mTransform = XMMatrixTranspose( + XMMatrixTranslation(translation.x + __colorpicker_center, translation.y + __colorpicker_center, 0) * + __cam + ); + cb.mColor = XMFLOAT4(1, 1, 1, 1); + wiRenderer::GetDevice()->UpdateBuffer(wiRenderer::constantBuffers[CBTYPE_MISC], &cb, threadID); + const GPUBuffer* vbs[] = { + &vb_hue, + }; + const UINT strides[] = { + sizeof(Vertex), + }; + wiRenderer::GetDevice()->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); + wiRenderer::GetDevice()->Draw(vb_hue.GetDesc().ByteWidth / sizeof(Vertex), threadID); + } // render hue picker - cb.mTransform = XMMatrixTranspose( - XMMatrixTranslation(hue_picker.x, hue_picker.y, 0) * - __cam - ); - cb.mColor = XMFLOAT4(1 - hue_color.x, 1 - hue_color.y, 1 - hue_color.z, 1); - wiRenderer::GetDevice()->UpdateBuffer(wiRenderer::constantBuffers[CBTYPE_MISC], &cb, threadID); - wiRenderer::GetDevice()->BindVertexBuffer(&vb_picker, 0, sizeof(Vertex), threadID); - wiRenderer::GetDevice()->Draw(vb_picker.GetDesc().ByteWidth / sizeof(Vertex), threadID); + { + cb.mTransform = XMMatrixTranspose( + XMMatrixTranslation(hue_picker.x, hue_picker.y, 0) * + __cam + ); + cb.mColor = XMFLOAT4(1 - hue_color.x, 1 - hue_color.y, 1 - hue_color.z, 1); + wiRenderer::GetDevice()->UpdateBuffer(wiRenderer::constantBuffers[CBTYPE_MISC], &cb, threadID); + const GPUBuffer* vbs[] = { + &vb_picker, + }; + const UINT strides[] = { + sizeof(Vertex), + }; + wiRenderer::GetDevice()->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); + wiRenderer::GetDevice()->Draw(vb_picker.GetDesc().ByteWidth / sizeof(Vertex), threadID); + } // render saturation picker - cb.mTransform = XMMatrixTranspose( - XMMatrixTranslation(saturation_picker.x, saturation_picker.y, 0) * - __cam - ); - cb.mColor = XMFLOAT4(1 - final_color.x, 1 - final_color.y, 1 - final_color.z, 1); - wiRenderer::GetDevice()->UpdateBuffer(wiRenderer::constantBuffers[CBTYPE_MISC], &cb, threadID); - wiRenderer::GetDevice()->BindVertexBuffer(&vb_picker, 0, sizeof(Vertex), threadID); - wiRenderer::GetDevice()->Draw(vb_picker.GetDesc().ByteWidth / sizeof(Vertex), threadID); + { + cb.mTransform = XMMatrixTranspose( + XMMatrixTranslation(saturation_picker.x, saturation_picker.y, 0) * + __cam + ); + cb.mColor = XMFLOAT4(1 - final_color.x, 1 - final_color.y, 1 - final_color.z, 1); + wiRenderer::GetDevice()->UpdateBuffer(wiRenderer::constantBuffers[CBTYPE_MISC], &cb, threadID); + const GPUBuffer* vbs[] = { + &vb_picker, + }; + const UINT strides[] = { + sizeof(Vertex), + }; + wiRenderer::GetDevice()->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); + wiRenderer::GetDevice()->Draw(vb_picker.GetDesc().ByteWidth / sizeof(Vertex), threadID); + } // render preview - cb.mTransform = XMMatrixTranspose( - XMMatrixTranslation(translation.x + 260, translation.y + 40, 0) * - __cam - ); - cb.mColor = GetPickColor(); - wiRenderer::GetDevice()->UpdateBuffer(wiRenderer::constantBuffers[CBTYPE_MISC], &cb, threadID); - wiRenderer::GetDevice()->BindVertexBuffer(&vb_preview, 0, sizeof(Vertex), threadID); - wiRenderer::GetDevice()->Draw(vb_preview.GetDesc().ByteWidth / sizeof(Vertex), threadID); + { + cb.mTransform = XMMatrixTranspose( + XMMatrixTranslation(translation.x + 260, translation.y + 40, 0) * + __cam + ); + cb.mColor = GetPickColor(); + wiRenderer::GetDevice()->UpdateBuffer(wiRenderer::constantBuffers[CBTYPE_MISC], &cb, threadID); + const GPUBuffer* vbs[] = { + &vb_preview, + }; + const UINT strides[] = { + sizeof(Vertex), + }; + wiRenderer::GetDevice()->BindVertexBuffers(vbs, 0, ARRAYSIZE(vbs), strides, threadID); + wiRenderer::GetDevice()->Draw(vb_preview.GetDesc().ByteWidth / sizeof(Vertex), threadID); + } // RGB values: stringstream _rgb("");