#include "HECL/HMDLMeta.hpp" #include "HECL/Runtime.hpp" #include namespace HECL { namespace Runtime { static LogVisor::LogModule Log("HMDL"); HMDLData::HMDLData(boo::IGraphicsDataFactory* factory, const void* metaData, const void* vbo, const void* ibo) { HMDLMeta meta; { Athena::io::MemoryReader r((atUint8*)metaData, HECL_HMDL_META_SZ); meta.read(r); } if (meta.magic != 'TACO') Log.report(LogVisor::FatalError, "invalid HMDL magic"); m_vbo = factory->newStaticBuffer(boo::BufferUse::Vertex, vbo, meta.vertStride, meta.vertCount); m_ibo = factory->newStaticBuffer(boo::BufferUse::Index, ibo, 4, meta.indexCount); if (factory->bindingNeedsVertexFormat()) m_vtxFmt = NewVertexFormat(factory, meta, m_vbo, m_ibo); } /* For binding constructors that require vertex format up front (GLSL) */ boo::IVertexFormat* HMDLData::NewVertexFormat(boo::IGraphicsDataFactory* factory, const HMDLMeta& meta, boo::IGraphicsBuffer* vbo, boo::IGraphicsBuffer* ibo) { size_t elemCount = 2 + meta.colorCount + meta.uvCount + meta.weightCount; std::unique_ptr vdescs(new boo::VertexElementDescriptor[elemCount]); for (size_t i=0 ; inewVertexFormat(elemCount, vdescs.get()); } /* For shader constructors that require vertex format up-front (HLSL) */ boo::IVertexFormat* ShaderTag::newVertexFormat(boo::IGraphicsDataFactory *factory) const { size_t elemCount = 2 + m_colorCount + m_uvCount + m_weightCount; std::unique_ptr vdescs(new boo::VertexElementDescriptor[elemCount]); for (size_t i=0 ; inewVertexFormat(elemCount, vdescs.get()); } } }