mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-09 09:47:43 +00:00
Various rendering fixes
This commit is contained in:
@@ -4,77 +4,86 @@
|
||||
|
||||
namespace urde {
|
||||
|
||||
boo::ObjToken<boo::IShaderPipeline> CLineRendererShaders::m_texAlpha;
|
||||
boo::ObjToken<boo::IShaderPipeline> CLineRendererShaders::m_texAdditive;
|
||||
std::array<boo::ObjToken<boo::IShaderPipeline>, 2> CLineRendererShaders::m_texAlpha;
|
||||
std::array<boo::ObjToken<boo::IShaderPipeline>, 2> CLineRendererShaders::m_texAdditive;
|
||||
|
||||
boo::ObjToken<boo::IShaderPipeline> CLineRendererShaders::m_noTexAlpha;
|
||||
boo::ObjToken<boo::IShaderPipeline> CLineRendererShaders::m_noTexAdditive;
|
||||
std::array<boo::ObjToken<boo::IShaderPipeline>, 2> CLineRendererShaders::m_noTexAlpha;
|
||||
std::array<boo::ObjToken<boo::IShaderPipeline>, 2> CLineRendererShaders::m_noTexAdditive;
|
||||
|
||||
boo::ObjToken<boo::IShaderPipeline> CLineRendererShaders::m_texAlphaZ;
|
||||
boo::ObjToken<boo::IShaderPipeline> CLineRendererShaders::m_texAdditiveZ;
|
||||
std::array<boo::ObjToken<boo::IShaderPipeline>, 2> CLineRendererShaders::m_texAlphaZ;
|
||||
std::array<boo::ObjToken<boo::IShaderPipeline>, 2> CLineRendererShaders::m_texAdditiveZ;
|
||||
|
||||
boo::ObjToken<boo::IShaderPipeline> CLineRendererShaders::m_noTexAlphaZ;
|
||||
boo::ObjToken<boo::IShaderPipeline> CLineRendererShaders::m_noTexAdditiveZ;
|
||||
std::array<boo::ObjToken<boo::IShaderPipeline>, 2> CLineRendererShaders::m_noTexAlphaZ;
|
||||
std::array<boo::ObjToken<boo::IShaderPipeline>, 2> CLineRendererShaders::m_noTexAdditiveZ;
|
||||
|
||||
boo::ObjToken<boo::IShaderPipeline> CLineRendererShaders::m_noTexAlphaZGEqual;
|
||||
std::array<boo::ObjToken<boo::IShaderPipeline>, 2> CLineRendererShaders::m_noTexAlphaZGEqual;
|
||||
|
||||
void CLineRendererShaders::Initialize() {
|
||||
CGraphics::CommitResources([](boo::IGraphicsDataFactory::Context& ctx) {
|
||||
m_texAlpha = hecl::conv->convert(ctx, Shader_CLineRendererShaderTexAlpha{});
|
||||
m_texAdditive = hecl::conv->convert(ctx, Shader_CLineRendererShaderTexAdditive{});
|
||||
m_noTexAlpha = hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAlpha{});
|
||||
m_noTexAdditive = hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAdditive{});
|
||||
m_texAlphaZ = hecl::conv->convert(ctx, Shader_CLineRendererShaderTexAlphaZ{});
|
||||
m_texAdditiveZ = hecl::conv->convert(ctx, Shader_CLineRendererShaderTexAdditiveZ{});
|
||||
m_noTexAlphaZ = hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAlphaZ{});
|
||||
m_noTexAdditiveZ = hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAdditiveZ{});
|
||||
m_noTexAlphaZGEqual = hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAlphaZGEqual{});
|
||||
m_texAlpha = {hecl::conv->convert(ctx, Shader_CLineRendererShaderTexAlpha{}),
|
||||
hecl::conv->convert(ctx, Shader_CLineRendererShaderTexAlphaAWrite{})};
|
||||
m_texAdditive = {hecl::conv->convert(ctx, Shader_CLineRendererShaderTexAdditive{}),
|
||||
hecl::conv->convert(ctx, Shader_CLineRendererShaderTexAdditiveAWrite{})};
|
||||
m_noTexAlpha = {hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAlpha{}),
|
||||
hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAlphaAWrite{})};
|
||||
m_noTexAdditive = {hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAdditive{}),
|
||||
hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAdditiveAWrite{})};
|
||||
m_texAlphaZ = {hecl::conv->convert(ctx, Shader_CLineRendererShaderTexAlphaZ{}),
|
||||
hecl::conv->convert(ctx, Shader_CLineRendererShaderTexAlphaZAWrite{})};
|
||||
m_texAdditiveZ = {hecl::conv->convert(ctx, Shader_CLineRendererShaderTexAdditiveZ{}),
|
||||
hecl::conv->convert(ctx, Shader_CLineRendererShaderTexAdditiveZAWrite{})};
|
||||
m_noTexAlphaZ = {hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAlphaZ{}),
|
||||
hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAlphaZAWrite{})};
|
||||
m_noTexAdditiveZ = {hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAdditiveZ{}),
|
||||
hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAdditiveZAWrite{})};
|
||||
m_noTexAlphaZGEqual = {hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAlphaZGEqual{}),
|
||||
hecl::conv->convert(ctx, Shader_CLineRendererShaderNoTexAlphaZGEqualAWrite{})};
|
||||
return true;
|
||||
} BooTrace);
|
||||
}
|
||||
|
||||
void CLineRendererShaders::Shutdown() {
|
||||
m_texAlpha.reset();
|
||||
m_texAdditive.reset();
|
||||
m_noTexAlpha.reset();
|
||||
m_noTexAdditive.reset();
|
||||
m_texAlphaZ.reset();
|
||||
m_texAdditiveZ.reset();
|
||||
m_noTexAlphaZ.reset();
|
||||
m_noTexAdditiveZ.reset();
|
||||
m_noTexAlphaZGEqual.reset();
|
||||
for (auto& s : m_texAlpha) s.reset();
|
||||
for (auto& s : m_texAdditive) s.reset();
|
||||
for (auto& s : m_noTexAlpha) s.reset();
|
||||
for (auto& s : m_noTexAdditive) s.reset();
|
||||
for (auto& s : m_texAlphaZ) s.reset();
|
||||
for (auto& s : m_texAdditiveZ) s.reset();
|
||||
for (auto& s : m_noTexAlphaZ) s.reset();
|
||||
for (auto& s : m_noTexAdditiveZ) s.reset();
|
||||
for (auto& s : m_noTexAlphaZGEqual) s.reset();
|
||||
}
|
||||
|
||||
void CLineRendererShaders::BuildShaderDataBinding(boo::IGraphicsDataFactory::Context& ctx, CLineRenderer& renderer,
|
||||
const boo::ObjToken<boo::ITexture>& texture, bool additive,
|
||||
bool zTest, bool zGEqual) {
|
||||
boo::ObjToken<boo::IShaderPipeline> pipeline;
|
||||
std::array<boo::ObjToken<boo::IShaderPipeline>, 2>* pipeline = nullptr;
|
||||
|
||||
if (zGEqual) {
|
||||
pipeline = m_noTexAlphaZGEqual;
|
||||
pipeline = &m_noTexAlphaZGEqual;
|
||||
} else if (zTest) {
|
||||
if (texture) {
|
||||
if (additive)
|
||||
pipeline = m_texAdditiveZ;
|
||||
pipeline = &m_texAdditiveZ;
|
||||
else
|
||||
pipeline = m_texAlphaZ;
|
||||
pipeline = &m_texAlphaZ;
|
||||
} else {
|
||||
if (additive)
|
||||
pipeline = m_noTexAdditiveZ;
|
||||
pipeline = &m_noTexAdditiveZ;
|
||||
else
|
||||
pipeline = m_noTexAlphaZ;
|
||||
pipeline = &m_noTexAlphaZ;
|
||||
}
|
||||
} else {
|
||||
if (texture) {
|
||||
if (additive)
|
||||
pipeline = m_texAdditive;
|
||||
pipeline = &m_texAdditive;
|
||||
else
|
||||
pipeline = m_texAlpha;
|
||||
pipeline = &m_texAlpha;
|
||||
} else {
|
||||
if (additive)
|
||||
pipeline = m_noTexAdditive;
|
||||
pipeline = &m_noTexAdditive;
|
||||
else
|
||||
pipeline = m_noTexAlpha;
|
||||
pipeline = &m_noTexAlpha;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -94,12 +103,13 @@ void CLineRendererShaders::BuildShaderDataBinding(boo::IGraphicsDataFactory::Con
|
||||
}
|
||||
|
||||
boo::ObjToken<boo::IGraphicsBuffer> uniforms[] = {ubufInfo.first.get()};
|
||||
boo::PipelineStage stages[] = {boo::PipelineStage::Vertex};
|
||||
boo::PipelineStage stages[] = {boo::PipelineStage::Fragment};
|
||||
size_t ubufOffs[] = {size_t(ubufInfo.second)};
|
||||
size_t ubufSizes[] = {sizeof(CLineRenderer::SDrawUniform)};
|
||||
|
||||
renderer.m_shaderBind =
|
||||
ctx.newShaderDataBinding(pipeline, vbufInfo.first.get(), nullptr, nullptr, 1, uniforms, stages, ubufOffs,
|
||||
for (int i = 0; i < 2; ++i)
|
||||
renderer.m_shaderBind[i] =
|
||||
ctx.newShaderDataBinding((*pipeline)[i], vbufInfo.first.get(), nullptr, nullptr, 1, uniforms, stages, ubufOffs,
|
||||
ubufSizes, texCount, textures, nullptr, nullptr, vbufInfo.second);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user