mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-09 14:27:42 +00:00
Lots of bug fixes; working CPhazonSuitFilter
This commit is contained in:
@@ -119,7 +119,7 @@ TShader<CCameraBlurFilter>::IDataBindingFactory* CCameraBlurFilter::Initialize(b
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr,
|
||||
s_VtxFmt, CGraphics::g_ViewportSamples, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CCameraBlurFilterMetalDataBindingFactory;
|
||||
}
|
||||
|
||||
|
||||
@@ -92,15 +92,15 @@ CColoredQuadFilter::Initialize(boo::MetalDataFactory::Context& ctx)
|
||||
s_AlphaPipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr,
|
||||
s_VtxFmt, CGraphics::g_ViewportSamples, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_AddPipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr,
|
||||
s_VtxFmt, CGraphics::g_ViewportSamples, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_MultPipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr,
|
||||
s_VtxFmt, CGraphics::g_ViewportSamples, boo::BlendFactor::Zero,
|
||||
boo::BlendFactor::SrcColor, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CColoredQuadFilterMetalDataBindingFactory;
|
||||
}
|
||||
|
||||
|
||||
@@ -318,28 +318,28 @@ TShader<CElementGenShaders>::IDataBindingFactory* CElementGenShaders::Initialize
|
||||
m_texZTestZWrite = ctx.newShaderPipeline(VS_METAL_TEX, FS_METAL_TEX, nullptr, nullptr,
|
||||
m_vtxFormatTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::LEqual, true, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::LEqual, true, true, false, boo::CullMode::None);
|
||||
m_texNoZTestZWrite = ctx.newShaderPipeline(VS_METAL_TEX, FS_METAL_TEX, nullptr, nullptr,
|
||||
m_vtxFormatTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, true, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, true, true, false, boo::CullMode::None);
|
||||
m_texZTestNoZWrite = ctx.newShaderPipeline(VS_METAL_TEX, FS_METAL_TEX, nullptr, nullptr,
|
||||
m_vtxFormatTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::LEqual, false, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
m_texNoZTestNoZWrite = ctx.newShaderPipeline(VS_METAL_TEX, FS_METAL_TEX, nullptr, nullptr,
|
||||
m_vtxFormatTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
|
||||
m_texAdditiveZTest = ctx.newShaderPipeline(VS_METAL_TEX, FS_METAL_TEX, nullptr, nullptr,
|
||||
m_vtxFormatTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, boo::ZTest::LEqual, false, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
m_texAdditiveNoZTest = ctx.newShaderPipeline(VS_METAL_TEX, FS_METAL_TEX, nullptr, nullptr,
|
||||
m_vtxFormatTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
|
||||
m_texRedToAlphaZTest = ctx.newShaderPipeline(VS_METAL_TEX, FS_METAL_TEX_REDTOALPHA, nullptr, nullptr,
|
||||
m_vtxFormatTex, CGraphics::g_ViewportSamples,
|
||||
@@ -365,64 +365,64 @@ TShader<CElementGenShaders>::IDataBindingFactory* CElementGenShaders::Initialize
|
||||
m_vtxFormatTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::Subtract, boo::BlendFactor::Subtract,
|
||||
boo::Primitive::TriStrips, boo::ZTest::LEqual, false,
|
||||
true, false, boo::CullMode::None);
|
||||
true, true, boo::CullMode::None);
|
||||
m_texRedToAlphaNoZTestSub = ctx.newShaderPipeline(VS_METAL_TEX, FS_METAL_TEX_REDTOALPHA, nullptr, nullptr,
|
||||
m_vtxFormatTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::Subtract, boo::BlendFactor::Subtract,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false,
|
||||
true, false, boo::CullMode::None);
|
||||
true, true, boo::CullMode::None);
|
||||
|
||||
m_indTexZWrite = ctx.newShaderPipeline(VS_METAL_INDTEX, FS_METAL_INDTEX, nullptr, nullptr,
|
||||
m_vtxFormatIndTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, true, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, true, true, false, boo::CullMode::None);
|
||||
m_indTexNoZWrite = ctx.newShaderPipeline(VS_METAL_INDTEX, FS_METAL_INDTEX, nullptr, nullptr,
|
||||
m_vtxFormatIndTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
m_indTexAdditive = ctx.newShaderPipeline(VS_METAL_INDTEX, FS_METAL_INDTEX, nullptr, nullptr,
|
||||
m_vtxFormatIndTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, true, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, true, true, false, boo::CullMode::None);
|
||||
|
||||
m_cindTexZWrite = ctx.newShaderPipeline(VS_METAL_INDTEX, FS_METAL_CINDTEX, nullptr, nullptr,
|
||||
m_vtxFormatIndTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, true, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, true, true, false, boo::CullMode::None);
|
||||
m_cindTexNoZWrite = ctx.newShaderPipeline(VS_METAL_INDTEX, FS_METAL_CINDTEX, nullptr, nullptr,
|
||||
m_vtxFormatIndTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
m_cindTexAdditive = ctx.newShaderPipeline(VS_METAL_INDTEX, FS_METAL_CINDTEX, nullptr, nullptr,
|
||||
m_vtxFormatIndTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, true, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, true, true, false, boo::CullMode::None);
|
||||
|
||||
m_noTexZTestZWrite = ctx.newShaderPipeline(VS_METAL_NOTEX, FS_METAL_NOTEX, nullptr, nullptr,
|
||||
m_vtxFormatNoTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::LEqual, true, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::LEqual, true, true, false, boo::CullMode::None);
|
||||
m_noTexNoZTestZWrite = ctx.newShaderPipeline(VS_METAL_NOTEX, FS_METAL_NOTEX, nullptr, nullptr,
|
||||
m_vtxFormatNoTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, true, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, true, true, false, boo::CullMode::None);
|
||||
m_noTexZTestNoZWrite = ctx.newShaderPipeline(VS_METAL_NOTEX, FS_METAL_NOTEX, nullptr, nullptr,
|
||||
m_vtxFormatNoTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::LEqual, false, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
m_noTexNoZTestNoZWrite = ctx.newShaderPipeline(VS_METAL_NOTEX, FS_METAL_NOTEX, nullptr, nullptr,
|
||||
m_vtxFormatNoTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
|
||||
m_noTexAdditiveZTest = ctx.newShaderPipeline(VS_METAL_NOTEX, FS_METAL_NOTEX, nullptr, nullptr,
|
||||
m_vtxFormatNoTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, boo::ZTest::LEqual, false, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
m_noTexAdditiveNoZTest = ctx.newShaderPipeline(VS_METAL_NOTEX, FS_METAL_NOTEX, nullptr, nullptr,
|
||||
m_vtxFormatNoTex, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
|
||||
return new struct MetalElementDataBindingFactory;
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
namespace urde
|
||||
{
|
||||
|
||||
#define BLUR_SCALE (1.f / 32.f)
|
||||
|
||||
void CPhazonSuitFilter::drawBlurPasses(float radius, const CTexture* indTex)
|
||||
{
|
||||
if (!m_dataBind || indTex != m_indTex)
|
||||
@@ -27,6 +29,7 @@ void CPhazonSuitFilter::drawBlurPasses(float radius, const CTexture* indTex)
|
||||
};
|
||||
m_blurVbo = ctx.newStaticBuffer(boo::BufferUse::Vertex, blurVerts, sizeof(BlurVert), 4);
|
||||
|
||||
float aspect = g_Viewport.x8_width / float(g_Viewport.xc_height);
|
||||
struct Vert
|
||||
{
|
||||
zeus::CVector3f pos;
|
||||
@@ -35,10 +38,10 @@ void CPhazonSuitFilter::drawBlurPasses(float radius, const CTexture* indTex)
|
||||
zeus::CVector2f maskUv;
|
||||
} verts[4] =
|
||||
{
|
||||
{{-1.f, 1.f, 0.f}, {0.01f, 0.99f}, {0.f, 1.f}, {0.f, 1.f}},
|
||||
{{-1.f, -1.f, 0.f}, {0.01f, 0.01f}, {0.f, 1.f}, {0.f, 1.f}},
|
||||
{{ 1.f, 1.f, 0.f}, {0.99f, 0.99f}, {0.f, 1.f}, {0.f, 1.f}},
|
||||
{{ 1.f, -1.f, 0.f}, {0.99f, 0.01f}, {0.f, 1.f}, {0.f, 1.f}}
|
||||
{{-1.f, 1.f, 0.f}, {0.01f, 0.99f}, {0.f, 4.f}, {0.f, 1.f}},
|
||||
{{-1.f, -1.f, 0.f}, {0.01f, 0.01f}, {0.f, 0.f}, {0.f, 0.f}},
|
||||
{{ 1.f, 1.f, 0.f}, {0.99f, 0.99f}, {aspect * 4.f, 4.f}, {1.f, 1.f}},
|
||||
{{ 1.f, -1.f, 0.f}, {0.99f, 0.01f}, {aspect * 4.f, 0.f}, {1.f, 0.f}}
|
||||
};
|
||||
m_vbo = ctx.newStaticBuffer(boo::BufferUse::Vertex, verts, sizeof(Vert), 4);
|
||||
|
||||
@@ -54,7 +57,8 @@ void CPhazonSuitFilter::drawBlurPasses(float radius, const CTexture* indTex)
|
||||
rect.x10_height = g_Viewport.xc_height;
|
||||
|
||||
/* X Pass */
|
||||
zeus::CVector4f blurDir = zeus::CVector4f{2.f * radius / g_Viewport.x8_width, 0.f, 0.f, 0.f};
|
||||
zeus::CVector4f blurDir = zeus::CVector4f{g_Viewport.xc_height / float(g_Viewport.x8_width) *
|
||||
radius * BLUR_SCALE, 0.f, 0.f, 0.f};
|
||||
m_uniBufBlurX->load(&blurDir, sizeof(zeus::CVector4f));
|
||||
|
||||
CGraphics::SetShaderDataBinding(m_dataBindBlurX);
|
||||
@@ -62,7 +66,7 @@ void CPhazonSuitFilter::drawBlurPasses(float radius, const CTexture* indTex)
|
||||
CGraphics::ResolveSpareTexture(rect, 2);
|
||||
|
||||
/* Y Pass */
|
||||
blurDir = zeus::CVector4f{0.f, 2.f * radius / g_Viewport.xc_height, 0.f, 0.f};
|
||||
blurDir = zeus::CVector4f{0.f, radius * BLUR_SCALE, 0.f, 0.f};
|
||||
m_uniBufBlurY->load(&blurDir, sizeof(zeus::CVector4f));
|
||||
|
||||
CGraphics::SetShaderDataBinding(m_dataBindBlurY);
|
||||
|
||||
@@ -59,10 +59,11 @@ BOO_GLSL_BINDING_HEAD
|
||||
"TBINDING3 uniform sampler2D maskTexBlur;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" vec2 indUv = (texture(indTex, vtf.indUv).rg - vec2(0.5, 0.5)) * \n"
|
||||
" vec2 indUv = (texture(indTex, vtf.indUv).ra - vec2(0.5, 0.5)) * \n"
|
||||
" vtf.indScaleOff.xy + vtf.indScaleOff.zw;\n"
|
||||
" colorOut = vtf.color * texture(screenTex, indUv + vtf.screenUv) * \n"
|
||||
" (texture(maskTexBlur, vtf.maskUv).a - texture(maskTex, vtf.maskUv).a);\n"
|
||||
" float maskBlurAlpha = clamp(0.0, (texture(maskTexBlur, vtf.maskUv).a - texture(maskTex, vtf.maskUv).a) * 2.0, 1.0);\n"
|
||||
" colorOut = vtf.color * texture(screenTex, indUv + vtf.screenUv) * maskBlurAlpha;\n"
|
||||
" colorOut.a = vtf.color.a;\n"
|
||||
"}\n";
|
||||
|
||||
static const char* FS =
|
||||
@@ -84,8 +85,9 @@ BOO_GLSL_BINDING_HEAD
|
||||
"TBINDING2 uniform sampler2D maskTexBlur;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" colorOut = vtf.color * texture(screenTex, vtf.screenUv) * \n"
|
||||
" (texture(maskTexBlur, vtf.maskUv).a - texture(maskTex, vtf.maskUv).a);\n"
|
||||
" float maskBlurAlpha = clamp(0.0, (texture(maskTexBlur, vtf.maskUv).a - texture(maskTex, vtf.maskUv).a) * 2.0, 1.0);\n"
|
||||
" colorOut = vtf.color * texture(screenTex, vtf.screenUv) * maskBlurAlpha;\n"
|
||||
" colorOut.a = vtf.color.a;\n"
|
||||
"}\n";
|
||||
|
||||
static const char* BlurVS =
|
||||
@@ -139,10 +141,10 @@ BOO_GLSL_BINDING_HEAD
|
||||
"\n"
|
||||
" sum += texture(maskTex, vtf.uv).a * 0.2270270270;\n"
|
||||
"\n"
|
||||
" sum += texture(maskTex, vtf.uv - 1.0 * vtf.blurDir).a * 0.1945945946;\n"
|
||||
" sum += texture(maskTex, vtf.uv - 2.0 * vtf.blurDir).a * 0.1216216216;\n"
|
||||
" sum += texture(maskTex, vtf.uv - 3.0 * vtf.blurDir).a * 0.0540540541;\n"
|
||||
" sum += texture(maskTex, vtf.uv - 4.0 * vtf.blurDir).a * 0.0162162162;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 1.0 * vtf.blurDir).a * 0.1945945946;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 2.0 * vtf.blurDir).a * 0.1216216216;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 3.0 * vtf.blurDir).a * 0.0540540541;\n"
|
||||
" sum += texture(maskTex, vtf.uv + 4.0 * vtf.blurDir).a * 0.0162162162;\n"
|
||||
"\n"
|
||||
" colorOut = vec4(1.0, 1.0, 1.0, sum);\n"
|
||||
"}\n";
|
||||
@@ -291,12 +293,12 @@ CPhazonSuitFilter::Initialize(boo::GLDataFactory::Context& ctx)
|
||||
{
|
||||
const char* uniNames[] = {"PhazonSuitUniform"};
|
||||
const char* texNames[] = {"screenTex", "indTex", "maskTex", "maskTexBlur"};
|
||||
s_IndPipeline = ctx.newShaderPipeline(VS, IndFS, 4, texNames, 1, uniNames, boo::BlendFactor::One,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
s_IndPipeline = ctx.newShaderPipeline(VS, IndFS, 4, texNames, 1, uniNames, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
texNames[1] = "maskTex";
|
||||
texNames[2] = "maskTexBlur";
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, 3, texNames, 1, uniNames, boo::BlendFactor::One,
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, 3, texNames, 1, uniNames, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
uniNames[0] = "PhazonSuitBlurUniform";
|
||||
@@ -333,10 +335,10 @@ CPhazonSuitFilter::Initialize(boo::VulkanDataFactory::Context& ctx)
|
||||
{nullptr, nullptr, boo::VertexSemantic::UV4}
|
||||
};
|
||||
s_BlurVtxFmt = ctx.newVertexFormat(2, BlurVtxVmt);
|
||||
s_IndPipeline = ctx.newShaderPipeline(VS, IndFS, s_VtxFmt, boo::BlendFactor::One,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
s_IndPipeline = ctx.newShaderPipeline(VS, IndFS, s_VtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, s_VtxFmt, boo::BlendFactor::One,
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, s_VtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_BlurPipeline = ctx.newShaderPipeline(BlurVS, BlurFS, s_BlurVtxFmt, boo::BlendFactor::One,
|
||||
|
||||
@@ -35,8 +35,10 @@ static const char* VS =
|
||||
" vtf.color = color;\n"
|
||||
" vtf.indScaleOff = indScaleOff;\n"
|
||||
" vtf.screenUv = v.screenUvIn.xy;\n"
|
||||
" vtf.screenUv.y = 1.0 - vtf.screenUv.y;\n"
|
||||
" vtf.indUv = v.indUvIn.xy;\n"
|
||||
" vtf.maskUv = v.maskUvIn.xy;\n"
|
||||
" vtf.maskUv.y = 1.0 - vtf.maskUv.y;\n"
|
||||
" vtf.position = float4(v.posIn.xyz, 1.0);\n"
|
||||
" return vtf;\n"
|
||||
"}\n";
|
||||
@@ -59,10 +61,10 @@ static const char* IndFS =
|
||||
"Texture2D maskTexBlur : register(t3);\n"
|
||||
"float4 main(in VertToFrag vtf) : SV_Target0\n"
|
||||
"{\n"
|
||||
" float2 indUv = (indTex.Sample(samp, vtf.indUv).rg - float2(0.5, 0.5)) * \n"
|
||||
" float2 indUv = (indTex.Sample(samp, vtf.indUv).ra - float2(0.5, 0.5)) * \n"
|
||||
" vtf.indScaleOff.xy + vtf.indScaleOff.zw;\n"
|
||||
" return vtf.color * screenTex.Sample(samp, indUv + vtf.screenUv) * \n"
|
||||
" (maskTexBlur.Sample(samp, vtf.maskUv).a - maskTex.Sample(samp, vtf.maskUv).a);\n"
|
||||
" float maskBlurAlpha = saturate((maskTexBlur.Sample(samp, vtf.maskUv).a - maskTex.Sample(samp, vtf.maskUv).a) * 2.0);\n"
|
||||
" return float4((vtf.color * screenTex.Sample(samp, indUv + vtf.screenUv) * maskBlurAlpha).rgb, vtf.color.a);\n"
|
||||
"}\n";
|
||||
|
||||
static const char* FS =
|
||||
@@ -76,14 +78,14 @@ static const char* FS =
|
||||
" float2 maskUv : UV2;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"SamplerState samp : register(s0);\n"
|
||||
"SamplerState samp : register(s2);\n"
|
||||
"Texture2D screenTex : register(t0);\n"
|
||||
"Texture2D maskTex : register(t1);\n"
|
||||
"Texture2D maskTexBlur : register(t2);\n"
|
||||
"float4 main(in VertToFrag vtf) : SV_Target0\n"
|
||||
"{\n"
|
||||
" return vtf.color * screenTex.Sample(samp, vtf.screenUv) * \n"
|
||||
" (maskTexBlur.Sample(samp, vtf.maskUv).a - maskTex.Sample(samp, vtf.maskUv).a);\n"
|
||||
" float maskBlurAlpha = saturate((maskTexBlur.Sample(samp, vtf.maskUv).a - maskTex.Sample(samp, vtf.maskUv).a) * 2.0);\n"
|
||||
" return float4((vtf.color * screenTex.Sample(samp, vtf.screenUv) * maskBlurAlpha).rgb, vtf.color.a);\n"
|
||||
"}\n";
|
||||
|
||||
static const char* BlurVS =
|
||||
@@ -108,6 +110,7 @@ static const char* BlurVS =
|
||||
"{\n"
|
||||
" VertToFrag vtf;\n"
|
||||
" vtf.uv = v.uvIn.xy;\n"
|
||||
" vtf.uv.y = 1.0 - vtf.uv.y;\n"
|
||||
" vtf.blurDir = blurDir.xy;\n"
|
||||
" vtf.position = float4(v.posIn.xyz, 1.0);\n"
|
||||
" return vtf;\n"
|
||||
@@ -121,7 +124,7 @@ static const char* BlurFS =
|
||||
" float2 blurDir : BLURDIR;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"SamplerState samp : register(s0);\n"
|
||||
"SamplerState samp : register(s2);\n"
|
||||
"Texture2D maskTex : register(t0);\n"
|
||||
"float4 main(in VertToFrag vtf) : SV_Target0\n"
|
||||
"{\n"
|
||||
@@ -137,10 +140,10 @@ static const char* BlurFS =
|
||||
"\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv).a * 0.2270270270;\n"
|
||||
"\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv - 1.0 * vtf.blurDir).a * 0.1945945946;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv - 2.0 * vtf.blurDir).a * 0.1216216216;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv - 3.0 * vtf.blurDir).a * 0.0540540541;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv - 4.0 * vtf.blurDir).a * 0.0162162162;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 1.0 * vtf.blurDir).a * 0.1945945946;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 2.0 * vtf.blurDir).a * 0.1216216216;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 3.0 * vtf.blurDir).a * 0.0540540541;\n"
|
||||
" sum += maskTex.Sample(samp, vtf.uv + 4.0 * vtf.blurDir).a * 0.0162162162;\n"
|
||||
"\n"
|
||||
" return float4(1.0, 1.0, 1.0, sum);\n"
|
||||
"}\n";
|
||||
|
||||
@@ -38,8 +38,10 @@ static const char* VS =
|
||||
" vtf.color = psu.color;\n"
|
||||
" vtf.indScaleOff = psu.indScaleOff;\n"
|
||||
" vtf.screenUv = v.screenUvIn.xy;\n"
|
||||
" vtf.screenUv.y = 1.0 - vtf.screenUv.y;\n"
|
||||
" vtf.indUv = v.indUvIn.xy;\n"
|
||||
" vtf.maskUv = v.maskUvIn.xy;\n"
|
||||
" vtf.maskUv.y = 1.0 - vtf.maskUv.y;\n"
|
||||
" vtf.position = float4(v.posIn.xyz, 1.0);\n"
|
||||
" return vtf;\n"
|
||||
"}\n";
|
||||
@@ -64,16 +66,16 @@ static const char* IndFS =
|
||||
" texture2d<float> maskTex [[ texture(2) ]],\n"
|
||||
" texture2d<float> maskTexBlur [[ texture(3) ]])\n"
|
||||
"{\n"
|
||||
" float2 indUv = (indTex.sample(samp, vtf.indUv).rg - float2(0.5, 0.5)) * \n"
|
||||
" float2 indUv = (indTex.sample(samp, vtf.indUv).ra - float2(0.5, 0.5)) * \n"
|
||||
" vtf.indScaleOff.xy + vtf.indScaleOff.zw;\n"
|
||||
" return vtf.color * screenTex.sample(samp, indUv + vtf.screenUv) * \n"
|
||||
" (maskTexBlur.sample(samp, vtf.maskUv).a - maskTex.sample(samp, vtf.maskUv).a);\n"
|
||||
" float maskBlurAlpha = saturate((maskTexBlur.sample(samp, vtf.maskUv).a - maskTex.sample(samp, vtf.maskUv).a) * 2.0);\n"
|
||||
" return float4((vtf.color * screenTex.sample(samp, indUv + vtf.screenUv) * maskBlurAlpha).rgb, vtf.color.a);\n"
|
||||
"}\n";
|
||||
|
||||
static const char* FS =
|
||||
"#include <metal_stdlib>\n"
|
||||
"using namespace metal;\n"
|
||||
"constexpr sampler samp(address::repeat, filter::linear);\n"
|
||||
"constexpr sampler samp(address::clamp_to_edge, filter::linear);\n"
|
||||
"struct VertToFrag\n"
|
||||
"{\n"
|
||||
" float4 color;\n"
|
||||
@@ -88,8 +90,8 @@ static const char* FS =
|
||||
" texture2d<float> maskTex [[ texture(1) ]],\n"
|
||||
" texture2d<float> maskTexBlur [[ texture(2) ]])\n"
|
||||
"{\n"
|
||||
" return vtf.color * screenTex.sample(samp, vtf.screenUv) * \n"
|
||||
" (maskTexBlur.sample(samp, vtf.maskUv).a - maskTex.sample(samp, vtf.maskUv).a);\n"
|
||||
" float maskBlurAlpha = saturate((maskTexBlur.sample(samp, vtf.maskUv).a - maskTex.sample(samp, vtf.maskUv).a) * 2.0);\n"
|
||||
" return float4((vtf.color * screenTex.sample(samp, vtf.screenUv) * maskBlurAlpha).rgb, vtf.color.a);\n"
|
||||
"}\n";
|
||||
|
||||
static const char* BlurVS =
|
||||
@@ -117,6 +119,7 @@ static const char* BlurVS =
|
||||
"{\n"
|
||||
" VertToFrag vtf;\n"
|
||||
" vtf.uv = v.uvIn.xy;\n"
|
||||
" vtf.uv.y = 1.0 - vtf.uv.y;\n"
|
||||
" vtf.blurDir = psu.blurDir.xy;\n"
|
||||
" vtf.position = float4(v.posIn.xyz, 1.0);\n"
|
||||
" return vtf;\n"
|
||||
@@ -125,7 +128,7 @@ static const char* BlurVS =
|
||||
static const char* BlurFS =
|
||||
"#include <metal_stdlib>\n"
|
||||
"using namespace metal;\n"
|
||||
"constexpr sampler samp(address::repeat, filter::linear);\n"
|
||||
"constexpr sampler samp(address::clamp_to_edge, filter::linear);\n"
|
||||
"struct VertToFrag\n"
|
||||
"{\n"
|
||||
" float4 position [[ position ]];\n"
|
||||
@@ -148,10 +151,10 @@ static const char* BlurFS =
|
||||
"\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv).a * 0.2270270270;\n"
|
||||
"\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv - 1.0 * vtf.blurDir).a * 0.1945945946;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv - 2.0 * vtf.blurDir).a * 0.1216216216;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv - 3.0 * vtf.blurDir).a * 0.0540540541;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv - 4.0 * vtf.blurDir).a * 0.0162162162;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 1.0 * vtf.blurDir).a * 0.1945945946;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 2.0 * vtf.blurDir).a * 0.1216216216;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 3.0 * vtf.blurDir).a * 0.0540540541;\n"
|
||||
" sum += maskTex.sample(samp, vtf.uv + 4.0 * vtf.blurDir).a * 0.0162162162;\n"
|
||||
"\n"
|
||||
" return float4(1.0, 1.0, 1.0, sum);\n"
|
||||
"}\n";
|
||||
@@ -238,11 +241,11 @@ CPhazonSuitFilter::Initialize(boo::MetalDataFactory::Context& ctx)
|
||||
};
|
||||
s_BlurVtxFmt = ctx.newVertexFormat(2, BlurVtxVmt);
|
||||
s_IndPipeline = ctx.newShaderPipeline(VS, IndFS, nullptr, nullptr, s_VtxFmt,
|
||||
CGraphics::g_ViewportSamples, boo::BlendFactor::One,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
CGraphics::g_ViewportSamples, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, s_VtxFmt,
|
||||
CGraphics::g_ViewportSamples, boo::BlendFactor::One,
|
||||
CGraphics::g_ViewportSamples, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_BlurPipeline = ctx.newShaderPipeline(BlurVS, BlurFS, nullptr, nullptr, s_BlurVtxFmt,
|
||||
|
||||
@@ -96,15 +96,15 @@ CScanLinesFilter::Initialize(boo::MetalDataFactory::Context& ctx)
|
||||
s_AlphaPipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr,
|
||||
s_VtxFmt, CGraphics::g_ViewportSamples, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_AddPipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr,
|
||||
s_VtxFmt, CGraphics::g_ViewportSamples, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_MultPipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr,
|
||||
s_VtxFmt, CGraphics::g_ViewportSamples, boo::BlendFactor::Zero,
|
||||
boo::BlendFactor::SrcColor, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CScanLinesFilterMetalDataBindingFactory;
|
||||
}
|
||||
|
||||
|
||||
@@ -86,7 +86,7 @@ TShader<CSpaceWarpFilter>::IDataBindingFactory* CSpaceWarpFilter::Initialize(boo
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr,
|
||||
s_VtxFmt, CGraphics::g_ViewportSamples, boo::BlendFactor::One,
|
||||
boo::BlendFactor::Zero, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CSpaceWarpFilterMetalDataBindingFactory;
|
||||
}
|
||||
|
||||
|
||||
@@ -7,10 +7,12 @@ namespace urde
|
||||
boo::ObjToken<boo::IVertexFormat> CTextSupportShader::s_TextVtxFmt;
|
||||
boo::ObjToken<boo::IShaderPipeline> CTextSupportShader::s_TextAlphaPipeline;
|
||||
boo::ObjToken<boo::IShaderPipeline> CTextSupportShader::s_TextAddPipeline;
|
||||
boo::ObjToken<boo::IShaderPipeline> CTextSupportShader::s_TextAddOverdrawPipeline;
|
||||
|
||||
boo::ObjToken<boo::IVertexFormat> CTextSupportShader::s_ImageVtxFmt;
|
||||
boo::ObjToken<boo::IShaderPipeline> CTextSupportShader::s_ImageAlphaPipeline;
|
||||
boo::ObjToken<boo::IShaderPipeline> CTextSupportShader::s_ImageAddPipeline;
|
||||
boo::ObjToken<boo::IShaderPipeline> CTextSupportShader::s_ImageAddOverdrawPipeline;
|
||||
|
||||
hecl::VertexBufferPool<CTextSupportShader::CharacterInstance> CTextSupportShader::s_CharInsts;
|
||||
hecl::VertexBufferPool<CTextSupportShader::ImageInstance> CTextSupportShader::s_ImgInsts;
|
||||
@@ -64,9 +66,11 @@ void CTextSupportShader::Shutdown()
|
||||
s_TextVtxFmt.reset();
|
||||
s_TextAlphaPipeline.reset();
|
||||
s_TextAddPipeline.reset();
|
||||
s_TextAddOverdrawPipeline.reset();
|
||||
s_ImageVtxFmt.reset();
|
||||
s_ImageAlphaPipeline.reset();
|
||||
s_ImageAddPipeline.reset();
|
||||
s_ImageAddOverdrawPipeline.reset();
|
||||
|
||||
s_CharInsts.doDestroy();
|
||||
s_ImgInsts.doDestroy();
|
||||
|
||||
@@ -23,10 +23,12 @@ class CTextSupportShader
|
||||
static boo::ObjToken<boo::IVertexFormat> s_TextVtxFmt;
|
||||
static boo::ObjToken<boo::IShaderPipeline> s_TextAlphaPipeline;
|
||||
static boo::ObjToken<boo::IShaderPipeline> s_TextAddPipeline;
|
||||
static boo::ObjToken<boo::IShaderPipeline> s_TextAddOverdrawPipeline;
|
||||
|
||||
static boo::ObjToken<boo::IVertexFormat> s_ImageVtxFmt;
|
||||
static boo::ObjToken<boo::IShaderPipeline> s_ImageAlphaPipeline;
|
||||
static boo::ObjToken<boo::IShaderPipeline> s_ImageAddPipeline;
|
||||
static boo::ObjToken<boo::IShaderPipeline> s_ImageAddOverdrawPipeline;
|
||||
|
||||
struct Uniform
|
||||
{
|
||||
@@ -67,9 +69,9 @@ public:
|
||||
case CGuiWidget::EGuiModelDrawFlags::Shadeless:
|
||||
case CGuiWidget::EGuiModelDrawFlags::Opaque:
|
||||
case CGuiWidget::EGuiModelDrawFlags::Alpha:
|
||||
case CGuiWidget::EGuiModelDrawFlags::AlphaAdditiveOverdraw:
|
||||
return s_TextAlphaPipeline;
|
||||
case CGuiWidget::EGuiModelDrawFlags::Additive:
|
||||
case CGuiWidget::EGuiModelDrawFlags::AlphaAdditiveOverdraw:
|
||||
return s_TextAddPipeline;
|
||||
default:
|
||||
return {};
|
||||
@@ -83,15 +85,25 @@ public:
|
||||
case CGuiWidget::EGuiModelDrawFlags::Shadeless:
|
||||
case CGuiWidget::EGuiModelDrawFlags::Opaque:
|
||||
case CGuiWidget::EGuiModelDrawFlags::Alpha:
|
||||
case CGuiWidget::EGuiModelDrawFlags::AlphaAdditiveOverdraw:
|
||||
return s_ImageAlphaPipeline;
|
||||
case CGuiWidget::EGuiModelDrawFlags::Additive:
|
||||
case CGuiWidget::EGuiModelDrawFlags::AlphaAdditiveOverdraw:
|
||||
return s_ImageAddPipeline;
|
||||
default:
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
static boo::ObjToken<boo::IShaderPipeline> GetTextAdditiveOverdrawPipeline()
|
||||
{
|
||||
return s_TextAddOverdrawPipeline;
|
||||
}
|
||||
|
||||
static boo::ObjToken<boo::IShaderPipeline> GetImageAdditiveOverdrawPipeline()
|
||||
{
|
||||
return s_ImageAddOverdrawPipeline;
|
||||
}
|
||||
|
||||
static void UpdateBuffers()
|
||||
{
|
||||
s_CharInsts.updateBuffers();
|
||||
|
||||
@@ -118,6 +118,9 @@ CTextSupportShader::Initialize(boo::GLDataFactory::Context& ctx)
|
||||
s_TextAddPipeline = ctx.newShaderPipeline(TextVS, TextFS, 1, texNames, 1, uniNames, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
s_TextAddOverdrawPipeline = ctx.newShaderPipeline(TextVS, TextFS, 1, texNames, 1, uniNames, boo::BlendFactor::One,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
|
||||
s_ImageAlphaPipeline = ctx.newShaderPipeline(ImgVS, ImgFS, 1, texNames, 1, uniNames, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
@@ -125,6 +128,9 @@ CTextSupportShader::Initialize(boo::GLDataFactory::Context& ctx)
|
||||
s_ImageAddPipeline = ctx.newShaderPipeline(ImgVS, ImgFS, 1, texNames, 1, uniNames, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
s_ImageAddOverdrawPipeline = ctx.newShaderPipeline(ImgVS, ImgFS, 1, texNames, 1, uniNames, boo::BlendFactor::One,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
@@ -134,8 +140,10 @@ void CTextSupportShader::Shutdown<boo::GLDataFactory>()
|
||||
{
|
||||
s_TextAlphaPipeline.reset();
|
||||
s_TextAddPipeline.reset();
|
||||
s_TextAddOverdrawPipeline.reset();
|
||||
s_ImageAlphaPipeline.reset();
|
||||
s_ImageAddPipeline.reset();
|
||||
s_ImageAddOverdrawPipeline.reset();
|
||||
}
|
||||
|
||||
#if BOO_HAS_VULKAN
|
||||
@@ -163,6 +171,9 @@ CTextSupportShader::Initialize(boo::VulkanDataFactory::Context& ctx)
|
||||
s_TextAddPipeline = ctx.newShaderPipeline(TextVS, TextFS, s_TextVtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
s_TextAddOverdrawPipeline = ctx.newShaderPipeline(TextVS, TextFS, s_TextVtxFmt, boo::BlendFactor::One,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
|
||||
boo::VertexElementDescriptor ImageVtxVmt[] =
|
||||
{
|
||||
@@ -183,6 +194,9 @@ CTextSupportShader::Initialize(boo::VulkanDataFactory::Context& ctx)
|
||||
s_ImageAddPipeline = ctx.newShaderPipeline(ImgVS, ImgFS, s_ImageVtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
s_ImageAddOverdrawPipeline = ctx.newShaderPipeline(ImgVS, ImgFS, s_ImageVtxFmt, boo::BlendFactor::One,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
@@ -193,9 +207,11 @@ void CTextSupportShader::Shutdown<boo::VulkanDataFactory>()
|
||||
s_TextVtxFmt.reset();
|
||||
s_TextAlphaPipeline.reset();
|
||||
s_TextAddPipeline.reset();
|
||||
s_TextAddOverdrawPipeline.reset();
|
||||
s_ImageVtxFmt.reset();
|
||||
s_ImageAlphaPipeline.reset();
|
||||
s_ImageAddPipeline.reset();
|
||||
s_ImageAddOverdrawPipeline.reset();
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
@@ -134,6 +134,10 @@ CTextSupportShader::Initialize(boo::ID3DDataFactory::Context& ctx)
|
||||
s_TextVtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
s_TextAddOverdrawPipeline = ctx.newShaderPipeline(TextVS, TextFS, nullptr, nullptr, nullptr,
|
||||
s_TextVtxFmt, boo::BlendFactor::One,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
|
||||
boo::VertexElementDescriptor ImageVtxVmt[] =
|
||||
{
|
||||
@@ -156,6 +160,10 @@ CTextSupportShader::Initialize(boo::ID3DDataFactory::Context& ctx)
|
||||
s_ImageVtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
s_ImageAddOverdrawPipeline = ctx.newShaderPipeline(ImgVS, ImgFS, nullptr, nullptr, nullptr,
|
||||
s_ImageVtxFmt, boo::BlendFactor::One,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
@@ -166,8 +174,10 @@ void CTextSupportShader::Shutdown<boo::ID3DDataFactory>()
|
||||
s_TextVtxFmt.reset();
|
||||
s_TextAlphaPipeline.reset();
|
||||
s_TextAddPipeline.reset();
|
||||
s_TextAddOverdrawPipeline.reset();
|
||||
s_ImageVtxFmt.reset();
|
||||
s_ImageAlphaPipeline.reset();
|
||||
s_ImageAddPipeline.reset();
|
||||
s_ImageAddOverdrawPipeline.reset();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -141,11 +141,15 @@ CTextSupportShader::Initialize(boo::MetalDataFactory::Context& ctx)
|
||||
s_TextAlphaPipeline = ctx.newShaderPipeline(TextVS, TextFS, nullptr, nullptr,
|
||||
s_TextVtxFmt, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, true, boo::CullMode::None);
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
s_TextAddPipeline = ctx.newShaderPipeline(TextVS, TextFS, nullptr, nullptr,
|
||||
s_TextVtxFmt, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, true, boo::CullMode::None);
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
s_TextAddOverdrawPipeline = ctx.newShaderPipeline(TextVS, TextFS, nullptr, nullptr,
|
||||
s_TextVtxFmt, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::One, boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
|
||||
boo::VertexElementDescriptor ImageVtxVmt[] =
|
||||
{
|
||||
@@ -163,11 +167,15 @@ CTextSupportShader::Initialize(boo::MetalDataFactory::Context& ctx)
|
||||
s_ImageAlphaPipeline = ctx.newShaderPipeline(ImgVS, ImgFS, nullptr, nullptr,
|
||||
s_ImageVtxFmt, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, true, boo::CullMode::None);
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
s_ImageAddPipeline = ctx.newShaderPipeline(ImgVS, ImgFS, nullptr, nullptr,
|
||||
s_ImageVtxFmt, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, true, boo::CullMode::None);
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
s_ImageAddOverdrawPipeline = ctx.newShaderPipeline(ImgVS, ImgFS, nullptr, nullptr,
|
||||
s_ImageVtxFmt, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::One, boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
@@ -178,9 +186,11 @@ void CTextSupportShader::Shutdown<boo::MetalDataFactory>()
|
||||
s_TextVtxFmt.reset();
|
||||
s_TextAlphaPipeline.reset();
|
||||
s_TextAddPipeline.reset();
|
||||
s_TextAddOverdrawPipeline.reset();
|
||||
s_ImageVtxFmt.reset();
|
||||
s_ImageAlphaPipeline.reset();
|
||||
s_ImageAddPipeline.reset();
|
||||
s_ImageAddOverdrawPipeline.reset();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -114,7 +114,7 @@ TShader<CThermalColdFilter>::IDataBindingFactory* CThermalColdFilter::Initialize
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr,
|
||||
s_VtxFmt, CGraphics::g_ViewportSamples, boo::BlendFactor::One,
|
||||
boo::BlendFactor::Zero, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, true, boo::CullMode::None);
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CThermalColdFilterMetalDataBindingFactory;
|
||||
}
|
||||
|
||||
|
||||
@@ -88,7 +88,7 @@ TShader<CThermalHotFilter>::IDataBindingFactory* CThermalHotFilter::Initialize(b
|
||||
s_VtxFmt, CGraphics::g_ViewportSamples,
|
||||
boo::BlendFactor::DstAlpha, boo::BlendFactor::InvDstAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false,
|
||||
true, true, boo::CullMode::None);
|
||||
true, false, boo::CullMode::None);
|
||||
return new CThermalHotFilterMetalDataBindingFactory;
|
||||
}
|
||||
|
||||
|
||||
@@ -102,7 +102,7 @@ TShader<CXRayBlurFilter>::IDataBindingFactory* CXRayBlurFilter::Initialize(boo::
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr,
|
||||
s_VtxFmt, CGraphics::g_ViewportSamples, boo::BlendFactor::One,
|
||||
boo::BlendFactor::Zero, boo::Primitive::TriStrips, boo::ZTest::None, false,
|
||||
true, true, boo::CullMode::None);
|
||||
true, false, boo::CullMode::None);
|
||||
return new CXRayBlurFilterMetalDataBindingFactory;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user