mirror of https://github.com/AxioDL/metaforce.git
Merge commit 'a4f8'
This commit is contained in:
commit
b1f99619cd
|
@ -47,6 +47,11 @@ protected:
|
||||||
"{\n"\
|
"{\n"\
|
||||||
" float4x4 mv;\n"\
|
" float4x4 mv;\n"\
|
||||||
"};\n"
|
"};\n"
|
||||||
|
#define SPECTER_VIEW_VERT_BLOCK_METAL\
|
||||||
|
"struct SpecterViewBlock\n"\
|
||||||
|
"{\n"\
|
||||||
|
" float4x4 mv;\n"\
|
||||||
|
"};\n"
|
||||||
boo::IGraphicsBufferD* m_viewVertBlockBuf;
|
boo::IGraphicsBufferD* m_viewVertBlockBuf;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -80,6 +80,7 @@ void TextView::System::init(boo::GLDataFactory* factory, FontCache* fcache)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
|
|
||||||
void TextView::System::init(boo::ID3DDataFactory* factory, FontCache* fcache)
|
void TextView::System::init(boo::ID3DDataFactory* factory, FontCache* fcache)
|
||||||
{
|
{
|
||||||
m_fcache = fcache;
|
m_fcache = fcache;
|
||||||
|
@ -179,6 +180,83 @@ void TextView::System::init(boo::ID3DDataFactory* factory, FontCache* fcache)
|
||||||
boo::BlendFactor::SrcColor1, boo::BlendFactor::InvSrcColor1,
|
boo::BlendFactor::SrcColor1, boo::BlendFactor::InvSrcColor1,
|
||||||
false, false, false);
|
false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif BOO_HAS_METAL
|
||||||
|
|
||||||
|
void TextView::System::init(boo::MetalDataFactory* factory, FontCache* fcache)
|
||||||
|
{
|
||||||
|
m_fcache = fcache;
|
||||||
|
|
||||||
|
static const char* VS =
|
||||||
|
"#include <metal_stdlib>\n"
|
||||||
|
"using namespace metal;\n"
|
||||||
|
"struct VertData\n"
|
||||||
|
"{\n"
|
||||||
|
" float3 posIn[4];\n"
|
||||||
|
" float4x4 mvMtx;\n"
|
||||||
|
" float3 uvIn[4];\n"
|
||||||
|
" float4 colorIn;\n"
|
||||||
|
"};\n"
|
||||||
|
SPECTER_VIEW_VERT_BLOCK_METAL
|
||||||
|
"struct VertToFrag\n"
|
||||||
|
"{\n"
|
||||||
|
" float4 position [[ position ]];\n"
|
||||||
|
" float3 uv;\n"
|
||||||
|
" float4 color;\n"
|
||||||
|
"};\n"
|
||||||
|
"vertex VertToFrag vmain(constant VertData* va [[ buffer(1) ]],\n"
|
||||||
|
" uint vertId [[ vertex_id ]], uint instId [[ instance_id ]],\n"
|
||||||
|
" constant SpecterViewBlock& view [[ buffer(2) ]])\n"
|
||||||
|
"{\n"
|
||||||
|
" VertToFrag vtf;\n"
|
||||||
|
" constant VertData& v = va[instId];\n"
|
||||||
|
" vtf.uv = v.uvIn[vertId];\n"
|
||||||
|
" vtf.color = v.colorIn;\n"
|
||||||
|
" vtf.position = view.mv * v.mvMtx * float4(v.posIn[vertId], 1.0);\n"
|
||||||
|
" return vtf;\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
static const char* FSReg =
|
||||||
|
"#include <metal_stdlib>\n"
|
||||||
|
"using namespace metal;\n"
|
||||||
|
"constexpr sampler samp(address::repeat);\n"
|
||||||
|
"struct VertToFrag\n"
|
||||||
|
"{\n"
|
||||||
|
" float4 position [[ position ]];\n"
|
||||||
|
" float3 uv;\n"
|
||||||
|
" float4 color;\n"
|
||||||
|
"};\n"
|
||||||
|
"fragment float4 fmain(VertToFrag vtf [[ stage_in ]], texture2d_array<float> fontTex [[ texture(0) ]])\n"
|
||||||
|
"{\n"
|
||||||
|
" float4 colorOut = vtf.color;\n"
|
||||||
|
" colorOut.a = fontTex.sample(samp, vtf.uv.xy, vtf.uv.z).r;\n"
|
||||||
|
" return colorOut;\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
boo::VertexElementDescriptor vdescs[] =
|
||||||
|
{
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::Position4 | boo::VertexSemantic::Instanced, 0},
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::Position4 | boo::VertexSemantic::Instanced, 1},
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::Position4 | boo::VertexSemantic::Instanced, 2},
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::Position4 | boo::VertexSemantic::Instanced, 3},
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::ModelView | boo::VertexSemantic::Instanced, 0},
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::ModelView | boo::VertexSemantic::Instanced, 1},
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::ModelView | boo::VertexSemantic::Instanced, 2},
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::ModelView | boo::VertexSemantic::Instanced, 3},
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::UV4 | boo::VertexSemantic::Instanced, 0},
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::UV4 | boo::VertexSemantic::Instanced, 1},
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::UV4 | boo::VertexSemantic::Instanced, 2},
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::UV4 | boo::VertexSemantic::Instanced, 3},
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::Color | boo::VertexSemantic::Instanced}
|
||||||
|
};
|
||||||
|
m_vtxFmt = factory->newVertexFormat(13, vdescs);
|
||||||
|
|
||||||
|
m_regular =
|
||||||
|
factory->newShaderPipeline(VS, FSReg, m_vtxFmt, 1,
|
||||||
|
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||||
|
false, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
TextView::TextView(ViewSystem& system, FontTag font, size_t capacity)
|
TextView::TextView(ViewSystem& system, FontTag font, size_t capacity)
|
||||||
|
|
|
@ -41,8 +41,9 @@ void View::System::init(boo::GLDataFactory* factory)
|
||||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||||
false, false, false);
|
false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if _WIN32
|
||||||
|
|
||||||
#ifdef _WIN32
|
|
||||||
void View::System::init(boo::ID3DDataFactory* factory)
|
void View::System::init(boo::ID3DDataFactory* factory)
|
||||||
{
|
{
|
||||||
static const char* VS =
|
static const char* VS =
|
||||||
|
@ -90,6 +91,58 @@ void View::System::init(boo::ID3DDataFactory* factory)
|
||||||
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||||
false, false, false);
|
false, false, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#elif BOO_HAS_METAL
|
||||||
|
|
||||||
|
void View::System::init(boo::MetalDataFactory* factory)
|
||||||
|
{
|
||||||
|
static const char* VS =
|
||||||
|
"#include <metal_stdlib>\n"
|
||||||
|
"using namespace metal;\n"
|
||||||
|
"struct VertData\n"
|
||||||
|
"{\n"
|
||||||
|
" float3 posIn [[ attribute(0) ]];\n"
|
||||||
|
" float4 colorIn [[ attribute(1) ]];\n"
|
||||||
|
"};\n"
|
||||||
|
SPECTER_VIEW_VERT_BLOCK_METAL
|
||||||
|
"struct VertToFrag\n"
|
||||||
|
"{\n"
|
||||||
|
" float4 position [[ position ]];\n"
|
||||||
|
" float4 color;\n"
|
||||||
|
"};\n"
|
||||||
|
"vertex VertToFrag vmain(VertData v [[ stage_in ]], constant SpecterViewBlock& view [[ buffer(2) ]])\n"
|
||||||
|
"{\n"
|
||||||
|
" VertToFrag vtf;\n"
|
||||||
|
" vtf.color = v.colorIn;\n"
|
||||||
|
" vtf.position = view.mv * float4(v.posIn, 1.0);\n"
|
||||||
|
" return vtf;\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
static const char* FS =
|
||||||
|
"#include <metal_stdlib>\n"
|
||||||
|
"using namespace metal;\n"
|
||||||
|
"struct VertToFrag\n"
|
||||||
|
"{\n"
|
||||||
|
" float4 position [[ position ]];\n"
|
||||||
|
" float4 color;\n"
|
||||||
|
"};\n"
|
||||||
|
"fragment float4 fmain(VertToFrag vtf [[ stage_in ]])\n"
|
||||||
|
"{\n"
|
||||||
|
" return vtf.color;\n"
|
||||||
|
"}\n";
|
||||||
|
|
||||||
|
boo::VertexElementDescriptor vdescs[] =
|
||||||
|
{
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::Position4},
|
||||||
|
{nullptr, nullptr, boo::VertexSemantic::Color | boo::VertexSemantic::Instanced}
|
||||||
|
};
|
||||||
|
m_vtxFmt = factory->newVertexFormat(2, vdescs);
|
||||||
|
|
||||||
|
m_solidShader = factory->newShaderPipeline(VS, FS, m_vtxFmt, 1,
|
||||||
|
boo::BlendFactor::SrcAlpha, boo::BlendFactor::InvSrcAlpha,
|
||||||
|
false, false, false);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
View::View(ViewSystem& system)
|
View::View(ViewSystem& system)
|
||||||
|
|
Loading…
Reference in New Issue