diff --git a/Runtime/Graphics/Shaders/CEnergyBarShaderHLSL.cpp b/Runtime/Graphics/Shaders/CEnergyBarShaderHLSL.cpp index e69de29bb..230c6053d 100644 --- a/Runtime/Graphics/Shaders/CEnergyBarShaderHLSL.cpp +++ b/Runtime/Graphics/Shaders/CEnergyBarShaderHLSL.cpp @@ -0,0 +1,93 @@ +#include "CEnergyBarShader.hpp" +#include "TShader.hpp" +#include "Graphics/CTexture.hpp" + +namespace urde +{ + +static const char* VS = +"struct VertData\n" +"{\n" +" float4 posIn : POSITION;\n" +" float4 uvIn : UV;\n" +"};\n" +"\n" +"cbuffer EnergyBarUniform : register(b0)\n" +"{\n" +" float4x4 xf;\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.color = color;\n" +" vtf.uv = v.uvIn.xy;\n" +" vtf.position = mul(xf, float4(v.posIn.xyz, 1.0));\n" +" return vtf;\n" +"}\n"; + +static const char* FS = +"struct VertToFrag\n" +"{\n" +" float4 position : SV_Position;\n" +" float4 color : COLOR;\n" +" float2 uv : UV;\n" +"};\n" +"\n" +"Texture2D tex : register(t0);\n" +"SamplerState samp : register(s0);\n" +"\n" +"float4 main(in VertToFrag vtf) : SV_Target0\n" +"{\n" +" return vtf.color * tex.Sample(samp, vtf.uv);\n" +"}\n"; + +URDE_DECL_SPECIALIZE_SHADER(CEnergyBarShader) + +static boo::IVertexFormat* s_VtxFmt = nullptr; +static boo::IShaderPipeline* s_Pipeline = nullptr; + +struct CEnergyBarShaderD3DDataBindingFactory : TShader::IDataBindingFactory +{ + boo::IShaderDataBinding* BuildShaderDataBinding(boo::IGraphicsDataFactory::Context& ctx, + CEnergyBarShader& filter) + { + boo::ID3DDataFactory::Context& cctx = static_cast(ctx); + + boo::IGraphicsBuffer* bufs[1]; + boo::ITexture* texs[] = {filter.m_tex->GetBooTexture()}; + for (int i=0 ; i<3 ; ++i) + { + bufs[0] = filter.m_uniBuf[i]; + filter.m_dataBind[i] = cctx.newShaderDataBinding(s_Pipeline, s_VtxFmt, + filter.m_vbo, nullptr, nullptr, 1, bufs, + nullptr, nullptr, nullptr, 1, texs, nullptr, nullptr); + } + return filter.m_dataBind[0]; + } +}; + +TShader::IDataBindingFactory* +CEnergyBarShader::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_Pipeline = ctx.newShaderPipeline(VS, FS, nullptr, nullptr, nullptr, + s_VtxFmt, boo::BlendFactor::SrcAlpha, + boo::BlendFactor::One, boo::Primitive::TriStrips, + boo::ZTest::LEqual, false, true, false, boo::CullMode::None); + return new CEnergyBarShaderD3DDataBindingFactory; +} +} diff --git a/Runtime/World/CActor.hpp b/Runtime/World/CActor.hpp index 3b1bb2565..730af5c16 100644 --- a/Runtime/World/CActor.hpp +++ b/Runtime/World/CActor.hpp @@ -10,6 +10,7 @@ #include "Character/CActorLights.hpp" #include "Collision/CCollisionResponseData.hpp" #include "Audio/CSfxManager.hpp" +#include "CScannableObjectInfo.hpp" namespace urde { @@ -20,7 +21,6 @@ class CHealthInfo; class CDamageInfo; class CDamageVulnerability; class CLightParameters; -class CScannableObjectInfo; class CScriptWater; class CSimpleShadow;