mirror of
https://github.com/hedge-dev/UnleashedRecomp.git
synced 2026-04-27 12:51:42 +00:00
Improve pipeline handling for particles.
This commit is contained in:
parent
15ca7228d4
commit
b925873c9c
1 changed files with 12 additions and 9 deletions
|
|
@ -5473,8 +5473,6 @@ static void CompileParticleMaterialPipeline(const Hedgehog::Sparkle::CParticleMa
|
||||||
pipelineState.pixelShader = reinterpret_cast<GuestShader*>(defaultFindResult->second.m_PixelShaders.begin()->second->m_spCode->m_pD3DPixelShader.get());
|
pipelineState.pixelShader = reinterpret_cast<GuestShader*>(defaultFindResult->second.m_PixelShaders.begin()->second->m_spCode->m_pD3DPixelShader.get());
|
||||||
pipelineState.vertexDeclaration = isMeshShader ? unoptimizedVertexDeclaration : sparkleVertexDeclaration;
|
pipelineState.vertexDeclaration = isMeshShader ? unoptimizedVertexDeclaration : sparkleVertexDeclaration;
|
||||||
pipelineState.zWriteEnable = false;
|
pipelineState.zWriteEnable = false;
|
||||||
pipelineState.srcBlend = RenderBlend::SRC_ALPHA;
|
|
||||||
pipelineState.destBlend = RenderBlend::INV_SRC_ALPHA;
|
|
||||||
pipelineState.zFunc = RenderComparisonFunction::GREATER_EQUAL;
|
pipelineState.zFunc = RenderComparisonFunction::GREATER_EQUAL;
|
||||||
pipelineState.alphaBlendEnable = true;
|
pipelineState.alphaBlendEnable = true;
|
||||||
pipelineState.srcBlendAlpha = RenderBlend::SRC_ALPHA;
|
pipelineState.srcBlendAlpha = RenderBlend::SRC_ALPHA;
|
||||||
|
|
@ -5490,18 +5488,20 @@ static void CompileParticleMaterialPipeline(const Hedgehog::Sparkle::CParticleMa
|
||||||
switch (material.m_BlendMode.get())
|
switch (material.m_BlendMode.get())
|
||||||
{
|
{
|
||||||
case Hedgehog::Sparkle::CParticleMaterial::eBlendMode_Zero:
|
case Hedgehog::Sparkle::CParticleMaterial::eBlendMode_Zero:
|
||||||
// TODO: What are the render states for this??
|
pipelineState.srcBlend = RenderBlend::ZERO;
|
||||||
|
pipelineState.destBlend = RenderBlend::ZERO;
|
||||||
break;
|
break;
|
||||||
case Hedgehog::Sparkle::CParticleMaterial::eBlendMode_Typical:
|
case Hedgehog::Sparkle::CParticleMaterial::eBlendMode_Typical:
|
||||||
// Leave default.
|
pipelineState.srcBlend = RenderBlend::SRC_ALPHA;
|
||||||
|
pipelineState.destBlend = RenderBlend::INV_SRC_ALPHA;
|
||||||
break;
|
break;
|
||||||
case Hedgehog::Sparkle::CParticleMaterial::eBlendMode_Add:
|
case Hedgehog::Sparkle::CParticleMaterial::eBlendMode_Add:
|
||||||
|
pipelineState.srcBlend = RenderBlend::SRC_ALPHA;
|
||||||
pipelineState.destBlend = RenderBlend::ONE;
|
pipelineState.destBlend = RenderBlend::ONE;
|
||||||
break;
|
break;
|
||||||
case Hedgehog::Sparkle::CParticleMaterial::eBlendMode_Subtract:
|
default:
|
||||||
// TODO: Is this correct?
|
pipelineState.srcBlend = RenderBlend::ONE;
|
||||||
pipelineState.destBlend = RenderBlend::ONE;
|
pipelineState.destBlend = RenderBlend::ONE;
|
||||||
pipelineState.blendOp = RenderBlendOperation::SUBTRACT;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -5511,14 +5511,17 @@ static void CompileParticleMaterialPipeline(const Hedgehog::Sparkle::CParticleMa
|
||||||
EnqueueGraphicsPipelineCompilation(pipelineStateToCreate, holderPair, shaderList->m_TypeAndName.c_str() + 3);
|
EnqueueGraphicsPipelineCompilation(pipelineStateToCreate, holderPair, shaderList->m_TypeAndName.c_str() + 3);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Mesh particles can use both cull modes. Quad particles are only NONE.
|
||||||
RenderCullMode cullModes[] = { RenderCullMode::NONE, RenderCullMode::BACK };
|
RenderCullMode cullModes[] = { RenderCullMode::NONE, RenderCullMode::BACK };
|
||||||
|
uint32_t cullModeCount = isMeshShader ? std::size(cullModes) : 1;
|
||||||
RenderFormat renderTargetFormats[] = { RenderFormat::R16G16B16A16_FLOAT, RenderFormat::R8G8B8A8_UNORM };
|
RenderFormat renderTargetFormats[] = { RenderFormat::R16G16B16A16_FLOAT, RenderFormat::R8G8B8A8_UNORM };
|
||||||
|
|
||||||
for (auto cullMode : cullModes)
|
for (size_t i = 0; i < cullModeCount; i++)
|
||||||
{
|
{
|
||||||
|
pipelineState.cullMode = cullModes[i];
|
||||||
|
|
||||||
for (auto renderTargetFormat : renderTargetFormats)
|
for (auto renderTargetFormat : renderTargetFormats)
|
||||||
{
|
{
|
||||||
pipelineState.cullMode = cullMode;
|
|
||||||
pipelineState.renderTargetFormat = renderTargetFormat;
|
pipelineState.renderTargetFormat = renderTargetFormat;
|
||||||
|
|
||||||
if (renderTargetFormat == RenderFormat::R16G16B16A16_FLOAT)
|
if (renderTargetFormat == RenderFormat::R16G16B16A16_FLOAT)
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue