mirror of
https://github.com/AxioDL/metaforce.git
synced 2025-12-09 11:07:44 +00:00
Windows fixes and updated rendering interface
This commit is contained in:
@@ -142,7 +142,7 @@ TShader<CCameraBlurFilter>::IDataBindingFactory* CCameraBlurFilter::Initialize(b
|
||||
s_VtxFmt = ctx.newVertexFormat(2, VtxVmt);
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, s_VtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, boo::CullMode::None);
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CCameraBlurFilterVulkanDataBindingFactory;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -102,7 +102,7 @@ struct CCameraBlurFilterD3DDataBindingFactory : TShader<CCameraBlurFilter>::IDat
|
||||
boo::ITexture* texs[] = {CGraphics::g_SpareTexture};
|
||||
return cctx.newShaderDataBinding(s_Pipeline, s_VtxFmt,
|
||||
filter.m_vbo, nullptr, nullptr, 1, bufs,
|
||||
nullptr, nullptr, nullptr, 1, texs);
|
||||
nullptr, nullptr, nullptr, 1, texs, nullptr, nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -116,8 +116,8 @@ TShader<CCameraBlurFilter>::IDataBindingFactory* CCameraBlurFilter::Initialize(b
|
||||
s_VtxFmt = ctx.newVertexFormat(2, VtxVmt);
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr,
|
||||
s_VtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips, false, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CCameraBlurFilterD3DDataBindingFactory;
|
||||
}
|
||||
|
||||
|
||||
@@ -76,7 +76,7 @@ struct CColoredQuadFilterD3DDataBindingFactory : TMultiBlendShader<CColoredQuadF
|
||||
boo::IGraphicsBuffer* bufs[] = {filter.m_uniBuf};
|
||||
return cctx.newShaderDataBinding(SelectPipeline(type), s_VtxFmt,
|
||||
filter.m_vbo, nullptr, nullptr, 1, bufs,
|
||||
nullptr, nullptr, nullptr, 0, nullptr);
|
||||
nullptr, nullptr, nullptr, 0, nullptr, nullptr, nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -90,16 +90,16 @@ CColoredQuadFilter::Initialize(boo::ID3DDataFactory::Context& ctx)
|
||||
s_VtxFmt = ctx.newVertexFormat(1, VtxVmt);
|
||||
s_AlphaPipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr,
|
||||
s_VtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips, false, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_AddPipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr,
|
||||
s_VtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips, false, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_MultPipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr,
|
||||
s_VtxFmt, boo::BlendFactor::SrcColor,
|
||||
boo::BlendFactor::DstColor, boo::Primitive::TriStrips, false, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::DstColor, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CColoredQuadFilterD3DDataBindingFactory;
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ BOO_GLSL_BINDING_HEAD
|
||||
"SBINDING(0) out VertToFrag vtf;\n"
|
||||
"void main()\n"
|
||||
"{\n"
|
||||
" gl_Position = FLIPFROMGL(vec4(posIn.xy, 0.0, 1.0));\n"
|
||||
" gl_Position = vec4(posIn.xy, 0.0, 1.0);\n"
|
||||
" vtf.color = color;\n"
|
||||
" vtf.uv = uvIn;\n"
|
||||
"}\n";
|
||||
@@ -50,11 +50,7 @@ BOO_GLSL_BINDING_HEAD
|
||||
"{\n"
|
||||
" float y;\n"
|
||||
" const float linScale = 65535.0 / 65536.0 * 256.0;\n"
|
||||
"#ifdef VULKAN\n"
|
||||
" float x = modf((1.0 - texture(zFrontfaceTex, vtf.uv).r) * linScale, y);\n"
|
||||
"#else\n"
|
||||
" float x = modf(texture(zFrontfaceTex, vtf.uv).r * linScale, y);\n"
|
||||
"#endif\n"
|
||||
" const float uvBias = 0.5 / 256.0;\n"
|
||||
" float alpha = texture(zLinearizer, vec2(x * 255.0 / 256.0 + uvBias, y / 256.0 + uvBias)).r * 10.0;\n"
|
||||
" colorOut = vtf.color * alpha;\n"
|
||||
@@ -80,13 +76,8 @@ BOO_GLSL_BINDING_HEAD
|
||||
" float frontY;\n"
|
||||
" float backY;\n"
|
||||
" const float linScale = 65535.0 / 65536.0 * 256.0;\n"
|
||||
"#ifdef VULKAN\n"
|
||||
" float frontX = modf((1.0 - texture(zFrontfaceTex, vtf.uv).r) * linScale, frontY);\n"
|
||||
" float backX = modf((1.0 - texture(zBackfaceTex, vtf.uv).r) * linScale, backY);\n"
|
||||
"#else\n"
|
||||
" float frontX = modf(texture(zFrontfaceTex, vtf.uv).r * linScale, frontY);\n"
|
||||
" float backX = modf(texture(zBackfaceTex, vtf.uv).r * linScale, backY);\n"
|
||||
"#endif\n"
|
||||
" const float uvBias = 0.5 / 256.0;\n"
|
||||
" float frontLin = texture(zLinearizer, vec2(frontX * 255.0 / 256.0 + uvBias, frontY / 256.0 + uvBias)).r;\n"
|
||||
" float backLin = texture(zLinearizer, vec2(backX * 255.0 / 256.0 + uvBias, backY / 256.0 + uvBias)).r;\n"
|
||||
|
||||
@@ -0,0 +1,130 @@
|
||||
#include "CFogVolumeFilter.hpp"
|
||||
#include "TShader.hpp"
|
||||
#include "GameGlobalObjects.hpp"
|
||||
#include "Graphics/CBooRenderer.hpp"
|
||||
|
||||
namespace urde
|
||||
{
|
||||
|
||||
static const char* VS =
|
||||
"struct VertData\n"
|
||||
"{\n"
|
||||
" float4 posIn : POSITION;\n"
|
||||
" float2 uvIn : UV;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"cbuffer FogVolumeFilterUniform : register(b0)\n"
|
||||
"{\n"
|
||||
" float4 color;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"struct VertToFrag\n"
|
||||
"{\n"
|
||||
" float4 position : SV_Position;\n"
|
||||
" float4 color : COLOR;\n"
|
||||
" float2 uv : UV;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"VertToFrag main(in VertData v)\n"
|
||||
"{\n"
|
||||
" VertToFrag vtf;\n"
|
||||
" vtf.position = float4(v.posIn.x, -v.posIn.y, 0.0, 1.0);\n"
|
||||
" vtf.color = color;\n"
|
||||
" vtf.uv = v.uvIn;\n"
|
||||
" return vtf;\n"
|
||||
"}\n";
|
||||
|
||||
static const char* FS1Way =
|
||||
"struct VertToFrag\n"
|
||||
"{\n"
|
||||
" float4 position : SV_Position;\n"
|
||||
" float4 color : COLOR;\n"
|
||||
" float2 uv : UV;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"Texture2D zFrontfaceTex : register(t0);\n"
|
||||
"Texture2D zBackfaceTex : register(t1);\n"
|
||||
"Texture2D zLinearizer : register(t2);\n"
|
||||
"SamplerState samp : register(s0);\n"
|
||||
"float4 main(in VertToFrag vtf) : SV_Target0\n"
|
||||
"{\n"
|
||||
" float y;\n"
|
||||
" const float linScale = 65535.0 / 65536.0 * 256.0;\n"
|
||||
" float x = modf((1.0 - zFrontfaceTex.Sample(samp, vtf.uv).r) * linScale, y);\n"
|
||||
" const float uvBias = 0.5 / 256.0;\n"
|
||||
" float alpha = zLinearizer.Sample(samp, float2(x * 255.0 / 256.0 + uvBias, y / 256.0 + uvBias)).r * 10.0;\n"
|
||||
" return vtf.color * alpha;\n"
|
||||
"}\n";
|
||||
|
||||
static const char* FS2Way =
|
||||
"struct VertToFrag\n"
|
||||
"{\n"
|
||||
" float4 position : SV_Position;\n"
|
||||
" float4 color : COLOR;\n"
|
||||
" float2 uv : UV;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"Texture2D zFrontfaceTex : register(t0);\n"
|
||||
"Texture2D zBackfaceTex : register(t1);\n"
|
||||
"Texture2D zLinearizer : register(t2);\n"
|
||||
"SamplerState samp : register(s0);\n"
|
||||
"float4 main(in VertToFrag vtf) : SV_Target0\n"
|
||||
"{\n"
|
||||
" float frontY;\n"
|
||||
" float backY;\n"
|
||||
" const float linScale = 65535.0 / 65536.0 * 256.0;\n"
|
||||
" float frontX = modf((1.0 - zFrontfaceTex.Sample(samp, vtf.uv).r) * linScale, frontY);\n"
|
||||
" float backX = modf((1.0 - zBackfaceTex.Sample(samp, vtf.uv).r) * linScale, backY);\n"
|
||||
" const float uvBias = 0.5 / 256.0;\n"
|
||||
" float frontLin = zLinearizer.Sample(samp, float2(frontX * 255.0 / 256.0 + uvBias, frontY / 256.0 + uvBias)).r;\n"
|
||||
" float backLin = zLinearizer.Sample(samp, float2(backX * 255.0 / 256.0 + uvBias, backY / 256.0 + uvBias)).r;\n"
|
||||
" return float4(vtf.color.rgb, (frontLin - backLin) * 10.0);\n"
|
||||
"}\n";
|
||||
|
||||
URDE_DECL_SPECIALIZE_SHADER(CFogVolumeFilter)
|
||||
|
||||
static boo::IVertexFormat* s_VtxFmt = nullptr;
|
||||
static boo::IShaderPipeline* s_1WayPipeline = nullptr;
|
||||
static boo::IShaderPipeline* s_2WayPipeline = nullptr;
|
||||
|
||||
struct CFogVolumeFilterD3DDataBindingFactory : TShader<CFogVolumeFilter>::IDataBindingFactory
|
||||
{
|
||||
boo::IShaderDataBinding* BuildShaderDataBinding(boo::IGraphicsDataFactory::Context& ctx,
|
||||
CFogVolumeFilter& filter)
|
||||
{
|
||||
boo::ID3DDataFactory::Context& cctx = static_cast<boo::ID3DDataFactory::Context&>(ctx);
|
||||
boo::ITexture* texs[] = { CGraphics::g_SpareTexture, CGraphics::g_SpareTexture,
|
||||
g_Renderer->GetFogRampTex() };
|
||||
int bindIdxs[] = {0, 1, 0};
|
||||
bool bindDepth[] = {true, true, false};
|
||||
boo::IGraphicsBuffer* ubufs[] = {filter.m_uniBuf};
|
||||
|
||||
filter.m_dataBind1Way = cctx.newShaderDataBinding(s_1WayPipeline, s_VtxFmt,
|
||||
filter.m_vbo, nullptr, nullptr, 1, ubufs,
|
||||
nullptr, nullptr, nullptr, 3, texs, bindIdxs, bindDepth);
|
||||
filter.m_dataBind2Way = cctx.newShaderDataBinding(s_2WayPipeline, s_VtxFmt,
|
||||
filter.m_vbo, nullptr, nullptr, 1, ubufs,
|
||||
nullptr, nullptr, nullptr, 3, texs, bindIdxs, bindDepth);
|
||||
return filter.m_dataBind1Way;
|
||||
}
|
||||
};
|
||||
|
||||
TShader<CFogVolumeFilter>::IDataBindingFactory*
|
||||
CFogVolumeFilter::Initialize(boo::ID3DDataFactory::Context& ctx)
|
||||
{
|
||||
const boo::VertexElementDescriptor VtxVmt[] =
|
||||
{
|
||||
{nullptr, nullptr, boo::VertexSemantic::Position4},
|
||||
{nullptr, nullptr, boo::VertexSemantic::UV4}
|
||||
};
|
||||
s_VtxFmt = ctx.newVertexFormat(2, VtxVmt);
|
||||
s_1WayPipeline = ctx.newShaderPipeline(VS, FS1Way, nullptr, nullptr, nullptr, s_VtxFmt, boo::BlendFactor::DstAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_2WayPipeline = ctx.newShaderPipeline(VS, FS2Way, nullptr, nullptr, nullptr, s_VtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CFogVolumeFilterD3DDataBindingFactory;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,67 @@
|
||||
#include "CFogVolumePlaneShader.hpp"
|
||||
#include "TShader.hpp"
|
||||
|
||||
namespace urde
|
||||
{
|
||||
|
||||
static const char* VS =
|
||||
"struct VertData\n"
|
||||
"{\n"
|
||||
" float4 posIn : POSITION;\n"
|
||||
"};\n"
|
||||
"\n"
|
||||
"float4 main(in VertData v) : SV_Position\n"
|
||||
"{\n"
|
||||
" return v.posIn;\n"
|
||||
"}\n";
|
||||
|
||||
static const char* FS =
|
||||
"float4 main() : SV_Target0\n"
|
||||
"{\n"
|
||||
" return float4(1.0, 1.0, 1.0, 1.0);\n"
|
||||
"}\n";
|
||||
|
||||
URDE_DECL_SPECIALIZE_SHADER(CFogVolumePlaneShader)
|
||||
|
||||
static boo::IVertexFormat* s_VtxFmt = nullptr;
|
||||
static boo::IShaderPipeline* s_Pipelines[4] = {};
|
||||
|
||||
struct CFogVolumePlaneShaderD3DDataBindingFactory : TShader<CFogVolumePlaneShader>::IDataBindingFactory
|
||||
{
|
||||
boo::IShaderDataBinding* BuildShaderDataBinding(boo::IGraphicsDataFactory::Context& ctx,
|
||||
CFogVolumePlaneShader& filter)
|
||||
{
|
||||
boo::ID3DDataFactory::Context& cctx = static_cast<boo::ID3DDataFactory::Context&>(ctx);
|
||||
|
||||
for (int i=0 ; i<4 ; ++i)
|
||||
filter.m_dataBinds[i] = cctx.newShaderDataBinding(s_Pipelines[i], s_VtxFmt,
|
||||
filter.m_vbo, nullptr, nullptr, 0, nullptr,
|
||||
nullptr, nullptr, nullptr, 0, nullptr, nullptr, nullptr);
|
||||
return filter.m_dataBinds[0];
|
||||
}
|
||||
};
|
||||
|
||||
TShader<CFogVolumePlaneShader>::IDataBindingFactory*
|
||||
CFogVolumePlaneShader::Initialize(boo::ID3DDataFactory::Context& ctx)
|
||||
{
|
||||
const boo::VertexElementDescriptor VtxVmt[] =
|
||||
{
|
||||
{nullptr, nullptr, boo::VertexSemantic::Position4}
|
||||
};
|
||||
s_VtxFmt = ctx.newVertexFormat(1, VtxVmt);
|
||||
s_Pipelines[0] = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr, s_VtxFmt, boo::BlendFactor::Zero,
|
||||
boo::BlendFactor::Zero, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, true, false, false, boo::CullMode::Frontface);
|
||||
s_Pipelines[1] = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr, s_VtxFmt, boo::BlendFactor::Zero,
|
||||
boo::BlendFactor::Zero, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, false, false, boo::CullMode::Frontface);
|
||||
s_Pipelines[2] = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr, s_VtxFmt, boo::BlendFactor::Zero,
|
||||
boo::BlendFactor::Zero, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, true, false, false, boo::CullMode::Backface);
|
||||
s_Pipelines[3] = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr, s_VtxFmt, boo::BlendFactor::Zero,
|
||||
boo::BlendFactor::Zero, boo::Primitive::TriStrips,
|
||||
boo::ZTest::Greater, false, false, false, boo::CullMode::Backface);
|
||||
return new CFogVolumePlaneShaderD3DDataBindingFactory;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -131,16 +131,20 @@ CLineRendererShaders::IDataBindingFactory* CLineRendererShaders::Initialize(boo:
|
||||
|
||||
m_texAlpha = ctx.newShaderPipeline(VS_GLSL_TEX, FS_GLSL_TEX, 1, TexNames, 1, UniNames,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, true, true, false, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None,
|
||||
true, true, false, boo::CullMode::None);
|
||||
m_texAdditive = ctx.newShaderPipeline(VS_GLSL_TEX, FS_GLSL_TEX, 1, TexNames, 1, UniNames,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None,
|
||||
false, true, false, boo::CullMode::None);
|
||||
m_noTexAlpha = ctx.newShaderPipeline(VS_GLSL_NOTEX, FS_GLSL_NOTEX, 1, nullptr, 1, UniNames,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, true, true, false, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None,
|
||||
true, true, false, boo::CullMode::None);
|
||||
m_noTexAdditive = ctx.newShaderPipeline(VS_GLSL_NOTEX, FS_GLSL_NOTEX, 1, nullptr, 1, UniNames,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None,
|
||||
false, true, false, boo::CullMode::None);
|
||||
|
||||
return new struct OGLLineDataBindingFactory;
|
||||
}
|
||||
@@ -164,7 +168,8 @@ struct VulkanLineDataBindingFactory : CLineRendererShaders::IDataBindingFactory
|
||||
|
||||
renderer.m_shaderBind = ctx.newShaderDataBinding(pipeline, nullptr, renderer.m_vertBuf,
|
||||
nullptr, nullptr, 1, uniforms,
|
||||
nullptr, texCount, textures);
|
||||
nullptr, texCount, textures,
|
||||
nullptr, nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -186,17 +191,21 @@ CLineRendererShaders::IDataBindingFactory* CLineRendererShaders::Initialize(boo:
|
||||
m_noTexVtxFmt = ctx.newVertexFormat(2, VtxFmtNoTex);
|
||||
|
||||
m_texAlpha = ctx.newShaderPipeline(VS_GLSL_TEX, FS_GLSL_TEX, m_texVtxFmt,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, false, true, boo::CullMode::None);
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None,
|
||||
true, true, false, boo::CullMode::None);
|
||||
m_texAdditive = ctx.newShaderPipeline(VS_GLSL_TEX, FS_GLSL_TEX, m_texVtxFmt,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, false, false, boo::CullMode::None);
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None,
|
||||
false, true, false, boo::CullMode::None);
|
||||
m_noTexAlpha = ctx.newShaderPipeline(VS_GLSL_NOTEX, FS_GLSL_NOTEX, m_noTexVtxFmt,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, false, true, boo::CullMode::None);
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None,
|
||||
true, true, false, boo::CullMode::None);
|
||||
m_noTexAdditive = ctx.newShaderPipeline(VS_GLSL_NOTEX, FS_GLSL_NOTEX, m_noTexVtxFmt,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, false, false, boo::CullMode::None);
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None,
|
||||
false, true, false, boo::CullMode::None);
|
||||
|
||||
return new struct VulkanLineDataBindingFactory;
|
||||
}
|
||||
|
||||
@@ -104,7 +104,7 @@ struct HLSLLineDataBindingFactory : CLineRendererShaders::IDataBindingFactory
|
||||
|
||||
renderer.m_shaderBind = ctx.newShaderDataBinding(pipeline, nullptr, renderer.m_vertBuf,
|
||||
nullptr, nullptr, 1, uniforms, nullptr,
|
||||
texCount, textures);
|
||||
texCount, textures, nullptr, nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -126,21 +126,25 @@ CLineRendererShaders::IDataBindingFactory* CLineRendererShaders::Initialize(boo:
|
||||
m_noTexVtxFmt = ctx.newVertexFormat(2, VtxFmtNoTex);
|
||||
|
||||
m_texAlpha = ctx.newShaderPipeline(VS_HLSL_TEX, FS_HLSL_TEX, nullptr, nullptr,
|
||||
nullptr, m_texVtxFmt,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips,false, true, boo::CullMode::None);
|
||||
nullptr, m_texVtxFmt,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None,
|
||||
true, true, false, boo::CullMode::None);
|
||||
m_texAdditive = ctx.newShaderPipeline(VS_HLSL_TEX, FS_HLSL_TEX, nullptr, nullptr,
|
||||
nullptr, m_texVtxFmt,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips,false, false, boo::CullMode::None);
|
||||
nullptr, m_texVtxFmt,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None,
|
||||
false, true, false, boo::CullMode::None);
|
||||
m_noTexAlpha = ctx.newShaderPipeline(VS_HLSL_NOTEX, FS_HLSL_NOTEX, nullptr, nullptr,
|
||||
nullptr, m_noTexVtxFmt,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, false, true, boo::CullMode::None);
|
||||
nullptr, m_noTexVtxFmt,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None,
|
||||
true, true, false, boo::CullMode::None);
|
||||
m_noTexAdditive = ctx.newShaderPipeline(VS_HLSL_NOTEX, FS_HLSL_NOTEX, nullptr, nullptr,
|
||||
nullptr, m_noTexVtxFmt,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, false, false, boo::CullMode::None);
|
||||
nullptr, m_noTexVtxFmt,
|
||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::One,
|
||||
boo::Primitive::TriStrips, boo::ZTest::None,
|
||||
false, true, false, boo::CullMode::None);
|
||||
|
||||
return new struct HLSLLineDataBindingFactory;
|
||||
}
|
||||
|
||||
@@ -108,54 +108,64 @@ CModelShaders::GetShaderExtensionsHLSL(boo::IGraphicsDataFactory::Platform plat)
|
||||
/* Normal lit shading */
|
||||
ext.registerExtensionSlot({LightingHLSL, "LightingFunc"}, {MainPostHLSL, "MainPostFunc"},
|
||||
0, nullptr, 0, nullptr, hecl::Backend::BlendFactor::Original,
|
||||
hecl::Backend::BlendFactor::Original);
|
||||
hecl::Backend::BlendFactor::Original, hecl::Backend::ZTest::Original,
|
||||
false, false, false, true);
|
||||
|
||||
/* Thermal Visor shading */
|
||||
ext.registerExtensionSlot({}, {ThermalPostHLSL, "ThermalPostFunc"}, 0, nullptr,
|
||||
1, ThermalTextures, hecl::Backend::BlendFactor::One,
|
||||
hecl::Backend::BlendFactor::One);
|
||||
hecl::Backend::BlendFactor::One, hecl::Backend::ZTest::Original,
|
||||
false, false, false, true);
|
||||
|
||||
/* Forced alpha shading */
|
||||
ext.registerExtensionSlot({LightingHLSL, "LightingFunc"}, {MainPostHLSL, "MainPostFunc"},
|
||||
0, nullptr, 0, nullptr, hecl::Backend::BlendFactor::SrcAlpha,
|
||||
hecl::Backend::BlendFactor::InvSrcAlpha);
|
||||
hecl::Backend::BlendFactor::InvSrcAlpha, hecl::Backend::ZTest::Original,
|
||||
false, false, false, true);
|
||||
|
||||
/* Forced additive shading */
|
||||
ext.registerExtensionSlot({LightingHLSL, "LightingFunc"}, {MainPostHLSL, "MainPostFunc"},
|
||||
0, nullptr, 0, nullptr, hecl::Backend::BlendFactor::One,
|
||||
hecl::Backend::BlendFactor::One);
|
||||
hecl::Backend::BlendFactor::One, hecl::Backend::ZTest::Original,
|
||||
false, false, false, true);
|
||||
|
||||
/* Solid color */
|
||||
ext.registerExtensionSlot({}, {SolidPostHLSL, "SolidPostFunc"},
|
||||
0, nullptr, 0, nullptr, hecl::Backend::BlendFactor::One,
|
||||
hecl::Backend::BlendFactor::Zero, hecl::Backend::ZTest::LEqual, false, false);
|
||||
|
||||
/* Alpha-only Solid color backface cull, LEqual */
|
||||
ext.registerExtensionSlot({}, {SolidPostHLSL, "SolidPostFunc"},
|
||||
0, nullptr, 0, nullptr, hecl::Backend::BlendFactor::Zero,
|
||||
hecl::Backend::BlendFactor::One, hecl::Backend::ZTest::LEqual, false, false);
|
||||
|
||||
/* Alpha-only Solid color backface cull, Always, No Z-write */
|
||||
ext.registerExtensionSlot({}, {SolidPostHLSL, "SolidPostFunc"},
|
||||
0, nullptr, 0, nullptr, hecl::Backend::BlendFactor::Zero,
|
||||
hecl::Backend::BlendFactor::One, hecl::Backend::ZTest::None, false, true);
|
||||
hecl::Backend::BlendFactor::Zero, hecl::Backend::ZTest::LEqual,
|
||||
false, false, false, false);
|
||||
|
||||
/* Alpha-only Solid color frontface cull, LEqual */
|
||||
ext.registerExtensionSlot({}, {SolidPostHLSL, "SolidPostFunc"},
|
||||
0, nullptr, 0, nullptr, hecl::Backend::BlendFactor::Zero,
|
||||
hecl::Backend::BlendFactor::One, hecl::Backend::ZTest::LEqual, true, false);
|
||||
0, nullptr, 0, nullptr, hecl::Backend::BlendFactor::One,
|
||||
hecl::Backend::BlendFactor::Zero, hecl::Backend::ZTest::LEqual,
|
||||
true, false, true, false);
|
||||
|
||||
/* Alpha-only Solid color frontface cull, Greater, No Z-write */
|
||||
/* Alpha-only Solid color frontface cull, Always, No Z-write */
|
||||
ext.registerExtensionSlot({}, {SolidPostHLSL, "SolidPostFunc"},
|
||||
0, nullptr, 0, nullptr, hecl::Backend::BlendFactor::Zero,
|
||||
hecl::Backend::BlendFactor::One, hecl::Backend::ZTest::Greater, true, true);
|
||||
0, nullptr, 0, nullptr, hecl::Backend::BlendFactor::One,
|
||||
hecl::Backend::BlendFactor::Zero, hecl::Backend::ZTest::None,
|
||||
true, true, true, false);
|
||||
|
||||
/* Alpha-only Solid color backface cull, LEqual */
|
||||
ext.registerExtensionSlot({}, {SolidPostHLSL, "SolidPostFunc"},
|
||||
0, nullptr, 0, nullptr, hecl::Backend::BlendFactor::One,
|
||||
hecl::Backend::BlendFactor::Zero, hecl::Backend::ZTest::LEqual,
|
||||
false, false, true, false);
|
||||
|
||||
/* Alpha-only Solid color backface cull, Greater, No Z-write */
|
||||
ext.registerExtensionSlot({}, {SolidPostHLSL, "SolidPostFunc"},
|
||||
0, nullptr, 0, nullptr, hecl::Backend::BlendFactor::One,
|
||||
hecl::Backend::BlendFactor::Zero, hecl::Backend::ZTest::Greater,
|
||||
false, true, true, false);
|
||||
|
||||
/* MorphBall shadow shading */
|
||||
ext.registerExtensionSlot({}, {MBShadowPostHLSL, "MBShadowPostFunc"},
|
||||
0, nullptr, 3, BallFadeTextures,
|
||||
hecl::Backend::BlendFactor::SrcAlpha,
|
||||
hecl::Backend::BlendFactor::InvSrcAlpha,
|
||||
hecl::Backend::ZTest::Equal);
|
||||
hecl::Backend::ZTest::Equal,
|
||||
false, false, false, true);
|
||||
|
||||
return ext;
|
||||
}
|
||||
|
||||
@@ -69,7 +69,7 @@ struct CSpaceWarpFilterD3DDataBindingFactory : TShader<CSpaceWarpFilter>::IDataB
|
||||
boo::ITexture* texs[] = {CGraphics::g_SpareTexture, filter.m_warpTex};
|
||||
return cctx.newShaderDataBinding(s_Pipeline, s_VtxFmt,
|
||||
filter.m_vbo, nullptr, nullptr, 1, bufs,
|
||||
nullptr, nullptr, nullptr, 2, texs);
|
||||
nullptr, nullptr, nullptr, 2, texs, nullptr, nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -83,8 +83,8 @@ TShader<CSpaceWarpFilter>::IDataBindingFactory* CSpaceWarpFilter::Initialize(boo
|
||||
s_VtxFmt = ctx.newVertexFormat(2, VtxVmt);
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr,
|
||||
s_VtxFmt, boo::BlendFactor::One,
|
||||
boo::BlendFactor::Zero, boo::Primitive::TriStrips, false, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::Zero, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CSpaceWarpFilterD3DDataBindingFactory;
|
||||
}
|
||||
|
||||
|
||||
@@ -128,12 +128,12 @@ CTextSupportShader::Initialize(boo::ID3DDataFactory::Context& ctx)
|
||||
s_TextVtxFmt = ctx.newVertexFormat(11, TextVtxVmt);
|
||||
s_TextAlphaPipeline = ctx.newShaderPipeline(TextVS, TextFS, nullptr, nullptr, nullptr,
|
||||
s_TextVtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips, true, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
s_TextAddPipeline = ctx.newShaderPipeline(TextVS, TextFS, nullptr, nullptr, nullptr,
|
||||
s_TextVtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips, true, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
|
||||
boo::VertexElementDescriptor ImageVtxVmt[] =
|
||||
{
|
||||
@@ -150,12 +150,12 @@ CTextSupportShader::Initialize(boo::ID3DDataFactory::Context& ctx)
|
||||
s_ImageVtxFmt = ctx.newVertexFormat(9, ImageVtxVmt);
|
||||
s_ImageAlphaPipeline = ctx.newShaderPipeline(ImgVS, ImgFS, nullptr, nullptr, nullptr,
|
||||
s_ImageVtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips, true, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
s_ImageAddPipeline = ctx.newShaderPipeline(ImgVS, ImgFS, nullptr, nullptr, nullptr,
|
||||
s_ImageVtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips, true, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::LEqual, false, true, false, boo::CullMode::None);
|
||||
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
@@ -206,13 +206,13 @@ CTexturedQuadFilter::Initialize(boo::VulkanDataFactory::Context& ctx)
|
||||
s_VtxFmt = ctx.newVertexFormat(2, VtxVmt);
|
||||
s_AlphaPipeline = ctx.newShaderPipeline(VSNoFlip, FS, s_VtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, boo::CullMode::None);
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_AddPipeline = ctx.newShaderPipeline(VSNoFlip, FS, s_VtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, boo::CullMode::None);
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_MultPipeline = ctx.newShaderPipeline(VSNoFlip, FS, s_VtxFmt, boo::BlendFactor::SrcColor,
|
||||
boo::BlendFactor::DstColor, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, boo::CullMode::None);
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CTexturedQuadFilterVulkanDataBindingFactory;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -130,7 +130,7 @@ struct CTexturedQuadFilterD3DDataBindingFactory : TMultiBlendShader<CTexturedQua
|
||||
boo::ITexture* texs[] = {filter.m_booTex};
|
||||
return cctx.newShaderDataBinding(SelectPipeline(type), s_VtxFmt,
|
||||
filter.m_vbo, nullptr, nullptr, 1, bufs,
|
||||
nullptr, nullptr, nullptr, 1, texs);
|
||||
nullptr, nullptr, nullptr, 1, texs, nullptr, nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -145,16 +145,16 @@ CTexturedQuadFilter::Initialize(boo::ID3DDataFactory::Context& ctx)
|
||||
s_VtxFmt = ctx.newVertexFormat(2, VtxVmt);
|
||||
s_AlphaPipeline = ctx.newShaderPipeline(VSNoFlip, FS, nullptr, nullptr, nullptr,
|
||||
s_VtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips, false, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_AddPipeline = ctx.newShaderPipeline(VSNoFlip, FS, nullptr, nullptr, nullptr,
|
||||
s_VtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips, false, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_MultPipeline = ctx.newShaderPipeline(VSNoFlip, FS, nullptr, nullptr, nullptr,
|
||||
s_VtxFmt, boo::BlendFactor::SrcColor,
|
||||
boo::BlendFactor::DstColor, boo::Primitive::TriStrips, false, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::DstColor, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CTexturedQuadFilterD3DDataBindingFactory;
|
||||
}
|
||||
|
||||
@@ -190,7 +190,7 @@ struct CTexturedQuadFilterAlphaD3DDataBindingFactory : TMultiBlendShader<CTextur
|
||||
boo::ITexture* texs[] = {filter.m_booTex};
|
||||
return cctx.newShaderDataBinding(SelectAlphaPipeline(type), s_AVtxFmt,
|
||||
filter.m_vbo, nullptr, nullptr, 1, bufs,
|
||||
nullptr, nullptr, nullptr, 1, texs);
|
||||
nullptr, nullptr, nullptr, 1, texs, nullptr, nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -205,16 +205,16 @@ CTexturedQuadFilterAlpha::Initialize(boo::ID3DDataFactory::Context& ctx)
|
||||
s_AVtxFmt = ctx.newVertexFormat(2, VtxVmt);
|
||||
s_AAlphaPipeline = ctx.newShaderPipeline(VSFlip, FSAlpha, nullptr, nullptr, nullptr,
|
||||
s_AVtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips, false, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::InvSrcAlpha, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_AAddPipeline = ctx.newShaderPipeline(VSFlip, FSAlpha, nullptr, nullptr, nullptr,
|
||||
s_AVtxFmt, boo::BlendFactor::SrcAlpha,
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips, false, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::One, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
s_AMultPipeline = ctx.newShaderPipeline(VSFlip, FSAlpha, nullptr, nullptr, nullptr,
|
||||
s_AVtxFmt, boo::BlendFactor::SrcColor,
|
||||
boo::BlendFactor::DstColor, boo::Primitive::TriStrips, false, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::DstColor, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CTexturedQuadFilterAlphaD3DDataBindingFactory;
|
||||
}
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ struct CThermalColdFilterD3DDataBindingFactory : TShader<CThermalColdFilter>::ID
|
||||
boo::ITexture* texs[] = {CGraphics::g_SpareTexture, filter.m_shiftTex};
|
||||
return cctx.newShaderDataBinding(s_Pipeline, s_VtxFmt,
|
||||
filter.m_vbo, nullptr, nullptr, 1, bufs,
|
||||
nullptr, nullptr, nullptr, 2, texs);
|
||||
nullptr, nullptr, nullptr, 2, texs, nullptr, nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -105,8 +105,8 @@ TShader<CThermalColdFilter>::IDataBindingFactory* CThermalColdFilter::Initialize
|
||||
s_VtxFmt = ctx.newVertexFormat(2, VtxVmt);
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr,
|
||||
s_VtxFmt, boo::BlendFactor::One,
|
||||
boo::BlendFactor::Zero, boo::Primitive::TriStrips, false, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::Zero, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CThermalColdFilterD3DDataBindingFactory;
|
||||
}
|
||||
|
||||
|
||||
@@ -68,7 +68,7 @@ struct CThermalHotFilterD3DDataBindingFactory : TShader<CThermalHotFilter>::IDat
|
||||
boo::ITexture* texs[] = {CGraphics::g_SpareTexture, g_Renderer->GetThermoPalette()};
|
||||
return cctx.newShaderDataBinding(s_Pipeline, s_VtxFmt,
|
||||
filter.m_vbo, nullptr, nullptr, 1, bufs,
|
||||
nullptr, nullptr, nullptr, 2, texs);
|
||||
nullptr, nullptr, nullptr, 2, texs, nullptr, nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -82,7 +82,8 @@ TShader<CThermalHotFilter>::IDataBindingFactory* CThermalHotFilter::Initialize(b
|
||||
s_VtxFmt = ctx.newVertexFormat(2, VtxVmt);
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr,
|
||||
s_VtxFmt, boo::BlendFactor::DstAlpha, boo::BlendFactor::InvDstAlpha,
|
||||
boo::Primitive::TriStrips, false, false, boo::CullMode::None);
|
||||
boo::Primitive::TriStrips, boo::ZTest::None,
|
||||
false, true, false, boo::CullMode::None);
|
||||
return new CThermalHotFilterD3DDataBindingFactory;
|
||||
}
|
||||
|
||||
|
||||
@@ -83,7 +83,7 @@ struct CXRayBlurFilterD3DDataBindingFactory : TShader<CXRayBlurFilter>::IDataBin
|
||||
boo::ITexture* texs[] = {CGraphics::g_SpareTexture, filter.m_booTex};
|
||||
return cctx.newShaderDataBinding(s_Pipeline, s_VtxFmt,
|
||||
filter.m_vbo, nullptr, nullptr, 1, bufs,
|
||||
nullptr, nullptr, nullptr, 2, texs);
|
||||
nullptr, nullptr, nullptr, 2, texs, nullptr, nullptr);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -97,8 +97,8 @@ TShader<CXRayBlurFilter>::IDataBindingFactory* CXRayBlurFilter::Initialize(boo::
|
||||
s_VtxFmt = ctx.newVertexFormat(2, VtxVmt);
|
||||
s_Pipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr,
|
||||
s_VtxFmt, boo::BlendFactor::One,
|
||||
boo::BlendFactor::Zero, boo::Primitive::TriStrips, false, false,
|
||||
boo::CullMode::None);
|
||||
boo::BlendFactor::Zero, boo::Primitive::TriStrips,
|
||||
boo::ZTest::None, false, true, false, boo::CullMode::None);
|
||||
return new CXRayBlurFilterD3DDataBindingFactory;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user