aboutsummaryrefslogtreecommitdiff
path: root/tools/ArtistTools/source/BlastPlugin/SampleBase/renderer
diff options
context:
space:
mode:
authorAnton Novoselov <[email protected]>2017-08-08 20:14:22 +0300
committerAnton Novoselov <[email protected]>2017-08-08 20:14:22 +0300
commitd41654b469fa51870b5952c836c04d9da17f32d3 (patch)
tree64f8f437eef394630355f281d35ca1d53e5c4d6c /tools/ArtistTools/source/BlastPlugin/SampleBase/renderer
parentadd +x for packman script (diff)
downloadblast-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')
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Mesh.h1
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/RenderMaterial.cpp2
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderable.cpp9
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.cpp83
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/Renderer.h6
-rw-r--r--tools/ArtistTools/source/BlastPlugin/SampleBase/renderer/ResourceManager.cpp2
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