diff options
| author | Anton Novoselov <[email protected]> | 2017-08-08 20:14:22 +0300 |
|---|---|---|
| committer | Anton Novoselov <[email protected]> | 2017-08-08 20:14:22 +0300 |
| commit | d41654b469fa51870b5952c836c04d9da17f32d3 (patch) | |
| tree | 64f8f437eef394630355f281d35ca1d53e5c4d6c /tools/ArtistTools/source/BlastPlugin/SampleBase/renderer | |
| parent | add +x for packman script (diff) | |
| download | blast-d41654b469fa51870b5952c836c04d9da17f32d3.tar.xz blast-d41654b469fa51870b5952c836c04d9da17f32d3.zip | |
Updated to CL 22627414:
* docs updates
* authoring fixes
* stress solver crash fixes
Diffstat (limited to 'tools/ArtistTools/source/BlastPlugin/SampleBase/renderer')
6 files changed, 86 insertions, 17 deletions
diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Mesh.h b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Mesh.h index fa214e0..3ef7090 100644 --- a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Mesh.h +++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Mesh.h @@ -56,6 +56,7 @@ public: public: physx::PxVec3 position; physx::PxVec3 normal; + physx::PxVec3 facenormal; physx::PxVec3 tangent; physx::PxVec2 uv; }; diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/RenderMaterial.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/RenderMaterial.cpp index a9fedf0..88533cb 100644 --- a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/RenderMaterial.cpp +++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/RenderMaterial.cpp @@ -285,7 +285,7 @@ void RenderMaterial::setTextureFileName(std::string textureFileName, TextureType std::string searchDir = mTextureFileNames[tt]; size_t ind = searchDir.find_last_of('/'); - if (ind > 0) + if (ind > 0 && (ind != std::string::npos)) searchDir = searchDir.substr(0, ind); ResourceManager* pResourceManager = ResourceManager::ins(); diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderable.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderable.cpp index 5ce713d..d51101f 100644 --- a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderable.cpp +++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderable.cpp @@ -29,7 +29,7 @@ #include "Renderable.h" #include "Renderer.h" #include "RenderUtils.h" - +#include "GlobalSettings.h" const DirectX::XMFLOAT4 DEFAULT_COLOR(0.5f, 0.5f, 0.5f, 1.0f); Renderable::Renderable(IRenderMesh& mesh, RenderMaterial& material) : m_mesh(mesh), m_scale(1, 1, 1), m_color(DEFAULT_COLOR), m_hidden(false), m_transform(PxIdentity) @@ -64,6 +64,7 @@ void Renderable::render(Renderer& renderer, bool depthStencilOnly) const float useSpecularTexture = -1.0; float useNormalTexture = -1.0; float specularShininess = 1.0; + bool useTexture = GlobalSettings::Inst().m_renderStyle == MESH_RENDER_TEXTURED; RenderMaterial& renderMaterial = m_materialInstance->getMaterial(); std::string mName = renderMaterial.getMaterialName(); if (mName != "") @@ -77,19 +78,19 @@ void Renderable::render(Renderer& renderer, bool depthStencilOnly) const specularColor = DirectX::XMFLOAT4(r, g, b, a); texName = renderMaterial.getTextureFileName(); - if (texName != "" && !renderMaterial.isBadTexture()) + if (useTexture && texName != "" && !renderMaterial.isBadTexture()) { useDiffuseTexture = 1.0; } texName = renderMaterial.getTextureFileName(RenderMaterial::TT_Specular); - if (texName != "" && !renderMaterial.isBadTexture(RenderMaterial::TT_Specular)) + if (useTexture && texName != "" && !renderMaterial.isBadTexture(RenderMaterial::TT_Specular)) { useSpecularTexture = 1.0; } texName = renderMaterial.getTextureFileName(RenderMaterial::TT_Normal); - if (texName != "" && !renderMaterial.isBadTexture(RenderMaterial::TT_Normal)) + if (useTexture && texName != "" && !renderMaterial.isBadTexture(RenderMaterial::TT_Normal)) { useNormalTexture = 1.0; } diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.cpp index 9fe5038..00b3256 100644 --- a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.cpp +++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.cpp @@ -55,7 +55,6 @@ Renderer::Renderer() : m_cameraCB(nullptr) , m_worldCB(nullptr) , m_objectCB(nullptr) -, m_RSState(nullptr) , m_opaqueRenderDSState(nullptr) , m_transparencyRenderDSState(nullptr) , m_opaqueRenderNoDepthDSState(nullptr) @@ -79,6 +78,9 @@ Renderer::Renderer() m_worldCBData.dirLightDir = DirectX::XMFLOAT3(-0.08f, -0.34f, -0.91f); m_worldCBData.specularPower = 140.0f; m_worldCBData.specularIntensity = 0.4f; + + m_RSState[0] = nullptr; + m_RSState[1] = nullptr; toggleCameraSpeed(false); } @@ -89,13 +91,9 @@ Renderer::~Renderer() void Renderer::initializeDefaultRSState() { - SAFE_RELEASE(m_RSState); D3D11_RASTERIZER_DESC desc; ZeroMemory(&desc, sizeof(desc)); -// Add By Lixu Begin desc.CullMode = D3D11_CULL_NONE; -// Add By Lixu End - desc.FillMode = m_wireframeMode ? D3D11_FILL_WIREFRAME : D3D11_FILL_SOLID; desc.AntialiasedLineEnable = FALSE; desc.DepthBias = 0; desc.DepthBiasClamp = 0; @@ -105,7 +103,11 @@ void Renderer::initializeDefaultRSState() desc.ScissorEnable = FALSE; desc.SlopeScaledDepthBias = 0; - V(m_device->CreateRasterizerState(&desc, &m_RSState)); + desc.FillMode = D3D11_FILL_SOLID; + V(m_device->CreateRasterizerState(&desc, &m_RSState[0])); + + desc.FillMode = D3D11_FILL_WIREFRAME; + V(m_device->CreateRasterizerState(&desc, &m_RSState[1])); } HRESULT Renderer::DeviceCreated(ID3D11Device* device) @@ -242,7 +244,8 @@ void Renderer::DeviceDestroyed() SAFE_RELEASE(m_cameraCB); SAFE_RELEASE(m_worldCB); SAFE_RELEASE(m_objectCB); - SAFE_RELEASE(m_RSState); + SAFE_RELEASE(m_RSState[0]); + SAFE_RELEASE(m_RSState[1]); SAFE_RELEASE(m_opaqueRenderDSState); SAFE_RELEASE(m_transparencyRenderDSState); SAFE_RELEASE(m_opaqueRenderNoDepthDSState); @@ -360,6 +363,10 @@ void Renderer::setAllConstantBuffers(ID3D11DeviceContext* ctx) void Renderer::Render(ID3D11Device* /*device*/, ID3D11DeviceContext* ctx, ID3D11RenderTargetView* pRTV, ID3D11DepthStencilView*) { + GlobalSettings& globalSettings = GlobalSettings::Inst(); + if (!globalSettings.m_showGraphicsMesh) + return; + PROFILER_SCOPED_FUNCTION(); m_context = ctx; @@ -389,6 +396,19 @@ void Renderer::Render(ID3D11Device* /*device*/, ID3D11DeviceContext* ctx, ID3D11 D3D11_MAPPED_SUBRESOURCE mappedResource; ctx->Map(m_worldCB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); CBWorld* worldBuffer = (CBWorld*)mappedResource.pData; + float flatNormal = -1.0; + if (globalSettings.m_renderStyle == MESH_RENDER_FLAT) + { + flatNormal = 1.0; + } + float useLighting = 1.0; + if (!globalSettings.m_useLighting) + { + useLighting = -1.0; + } + m_worldCBData.flatNormal = flatNormal; + m_worldCBData.wireFrameOver = -1.0; + m_worldCBData.useLighting = useLighting; Light::FillLightShaderParam(m_worldCBData.lightParam); memcpy(worldBuffer, &m_worldCBData, sizeof(m_worldCBData)); //worldBuffer->ambientColor = m_CBWorldData.ambientColor; @@ -401,7 +421,15 @@ void Renderer::Render(ID3D11Device* /*device*/, ID3D11DeviceContext* ctx, ID3D11 ctx->Unmap(m_worldCB, 0); } - ctx->RSSetState(m_RSState); + if (globalSettings.m_renderStyle != MESH_RENDER_WIREFRAME) + { + ctx->RSSetState(m_RSState[0]); + } + else + { + ctx->RSSetState(m_RSState[1]); + } + ctx->PSSetSamplers(0, 1, &m_linearSampler); ctx->PSSetSamplers(1, 1, &m_pointSampler); @@ -450,7 +478,6 @@ void Renderer::Render(ID3D11Device* /*device*/, ID3D11DeviceContext* ctx, ID3D11 // Opaque render { ctx->RSSetViewports(1, &m_viewport); - ctx->RSSetState(m_RSState); ctx->OMSetRenderTargets(1, &pRTV, m_DSView); ctx->OMSetDepthStencilState(m_opaqueRenderDSState, 0xFF); @@ -498,8 +525,44 @@ void Renderer::Render(ID3D11Device* /*device*/, ID3D11DeviceContext* ctx, ID3D11 } } + // draw overline + if (globalSettings.m_showWireframe) + { + ctx->RSSetState(m_RSState[1]); + + // update wireFrameOver + { + D3D11_MAPPED_SUBRESOURCE mappedResource; + ctx->Map(m_worldCB, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource); + CBWorld* worldBuffer = (CBWorld*)mappedResource.pData; + float wireFrameOver = -1.0; + { + if (globalSettings.m_showWireframe) + { + wireFrameOver = 1.0; + } + } + m_worldCBData.wireFrameOver = wireFrameOver; + memcpy(worldBuffer, &m_worldCBData, sizeof(m_worldCBData)); + ctx->Unmap(m_worldCB, 0); + } + + for (auto it = m_renderables.begin(); it != m_renderables.end(); it++) + { + if (!(*it)->isTransparent() && !(*it)->isHidden()) + { + (*it)->render(*this); + } + } + + if (globalSettings.m_renderStyle != MESH_RENDER_WIREFRAME) + { + ctx->RSSetState(m_RSState[0]); + } + } + // modulate shadows - if (m_shadowEnabled) + if (m_shadowEnabled && globalSettings.m_useLighting) { m_shadow.modulateShadowBuffer(pRTV); } diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.h b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.h index 6981e15..2142921 100644 --- a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.h +++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.h @@ -198,6 +198,10 @@ class Renderer : public ISampleController float specularPower; DirectX::XMFLOAT3 dirLightColor; float specularIntensity; // TODO: actually it's per object property + float flatNormal; + float wireFrameOver; + float useLighting; + float unusedPad4; LightShaderParam lightParam; }; struct CBObject @@ -235,7 +239,7 @@ class Renderer : public ISampleController D3D11_VIEWPORT m_viewport; // DX11 states - ID3D11RasterizerState* m_RSState; + ID3D11RasterizerState* m_RSState[2]; ID3D11DepthStencilState* m_opaqueRenderDSState; ID3D11DepthStencilState* m_transparencyRenderDSState; ID3D11DepthStencilState* m_opaqueRenderNoDepthDSState; diff --git a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/ResourceManager.cpp b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/ResourceManager.cpp index 6e4cc50..d1d04e2 100644 --- a/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/ResourceManager.cpp +++ b/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/ResourceManager.cpp @@ -241,7 +241,7 @@ bool ResourceManager::findFile(std::string fileName, const std::vector<const cha } size_t ind = fileNameOnly.find_last_of('/'); - if (ind > 0) + if (ind > 0 && (ind != std::string::npos)) fileNameOnly = fileNameOnly.substr(ind + 1); // Add By Lixu Begin |