#include "Runtime/Graphics/Shaders/CEnergyBarShader.hpp" #include #include "Runtime/Graphics/CGraphics.hpp" #include "Runtime/Graphics/CTexture.hpp" //#include namespace metaforce { //static boo::ObjToken s_Pipeline; void CEnergyBarShader::Initialize() { // s_Pipeline = hecl::conv->convert(Shader_CEnergyBarShader{}); } void CEnergyBarShader::Shutdown() { // s_Pipeline.reset(); } void CEnergyBarShader::updateModelMatrix() { m_uniform.m_matrix = CGraphics::GetPerspectiveProjectionMatrix(true) * CGraphics::g_GXModelView.toMatrix4f(); } void CEnergyBarShader::draw(const zeus::CColor& color0, const std::vector& verts0, const zeus::CColor& color1, const std::vector& verts1, const zeus::CColor& color2, const std::vector& verts2, const CTexture* tex) { SCOPED_GRAPHICS_DEBUG_GROUP("CEnergyBarShader::draw", zeus::skMagenta); size_t totalVerts = verts0.size() + verts1.size() + verts2.size(); if (!totalVerts) return; if (totalVerts > m_maxVerts) { m_maxVerts = totalVerts; m_tex = tex; // CGraphics::CommitResources([this](boo::IGraphicsDataFactory::Context& ctx) { // m_vbo = ctx.newDynamicBuffer(boo::BufferUse::Vertex, sizeof(Vertex), m_maxVerts); // // std::array, 1> bufs; // constexpr std::array stages{boo::PipelineStage::Vertex}; // const std::array, 1> texs{m_tex->GetBooTexture()}; // // for (size_t i = 0; i < m_uniBuf.size(); ++i) { // m_uniBuf[i] = ctx.newDynamicBuffer(boo::BufferUse::Uniform, sizeof(Uniform), 1); // bufs[0] = m_uniBuf[i].get(); // m_dataBind[i] = // ctx.newShaderDataBinding(s_Pipeline, m_vbo.get(), nullptr, nullptr, bufs.size(), bufs.data(), stages.data(), // nullptr, nullptr, texs.size(), texs.data(), nullptr, nullptr); // } // // return true; // } BooTrace); } size_t vertIter = 0; // Vertex* verts = reinterpret_cast(m_vbo->map(sizeof(Vertex) * totalVerts)); // if (verts0.size()) { // memmove(verts, verts0.data(), sizeof(Vertex) * verts0.size()); // vertIter += verts0.size(); // } // if (verts1.size()) { // memmove(verts + vertIter, verts1.data(), sizeof(Vertex) * verts1.size()); // vertIter += verts1.size(); // } // if (verts2.size()) { // memmove(verts + vertIter, verts2.data(), sizeof(Vertex) * verts2.size()); // } // m_vbo->unmap(); vertIter = 0; if (verts0.size()) { m_uniform.m_color = color0; // m_uniBuf[0]->load(&m_uniform, sizeof(Uniform)); // CGraphics::SetShaderDataBinding(m_dataBind[0]); // CGraphics::DrawArray(0, verts0.size()); vertIter += verts0.size(); } if (verts1.size()) { m_uniform.m_color = color1; // m_uniBuf[1]->load(&m_uniform, sizeof(Uniform)); // CGraphics::SetShaderDataBinding(m_dataBind[1]); // CGraphics::DrawArray(vertIter, verts1.size()); vertIter += verts1.size(); } if (verts2.size()) { m_uniform.m_color = color2; // m_uniBuf[2]->load(&m_uniform, sizeof(Uniform)); // CGraphics::SetShaderDataBinding(m_dataBind[2]); // CGraphics::DrawArray(vertIter, verts2.size()); } } } // namespace metaforce