diff --git a/example/source/main.cpp b/example/source/main.cpp index 2152bbd..d056e44 100755 --- a/example/source/main.cpp +++ b/example/source/main.cpp @@ -2,46 +2,6 @@ #include "amethyst/iron.hpp" -const char* shader_ = R"(; Example PICA200 vertex shader - -; Uniforms -.fvec projection[4] - -; Constants -.constf myconst(0.0, 1.0, -1.0, 0.1) -.constf myconst2(0.3, 0.0, 0.0, 0.0) -.alias zeros myconst.xxxx ; Vector full of zeros -.alias ones myconst.yyyy ; Vector full of ones - -; Outputs -.out outpos position -.out outclr color - -; Inputs (defined as aliases for convenience) -.alias inpos v0 -.alias inclr v1 - -.bool test - -.proc main - ; Force the w component of inpos to be 1.0 - mov r0.xyz, inpos - mov r0.w, ones - - ; outpos = projectionMatrix * inpos - dp4 outpos.x, projection[0], r0 - dp4 outpos.y, projection[1], r0 - dp4 outpos.z, projection[2], r0 - dp4 outpos.w, projection[3], r0 - - ; outclr = inclr - mov outclr, inclr - - ; We're finished - end -.end -)"; - class example : public amy::app { public: example() { @@ -52,11 +12,20 @@ class example : public amy::app { amy::iron::init(); dl = new amy::iron::drawlist(); dl->drawSolid(); - // throw std::runtime_error(std::format( - // "solid tex: {:#08x}\nsize: {}\nptr: {:#08x}", - // (amy::ui)amy::iron::whiteTex(), amy::iron::whiteTex()->size(), - // (amy::ui)amy::iron::whiteTex()->ptr())); - }; + auto cmd = std::make_unique(); + cmd->index = 0; + cmd->layer = 0; + cmd->tex = amy::iron::whiteTex(); + cmd->add(0).add(1).add(2); + cmd->add(amy::iron::vertex(200, 50, 0, 0, 0xff0000ff)); + cmd->add(amy::iron::vertex(100, 190, 0, 0, 0xff00ff00)); + cmd->add(amy::iron::vertex(300, 190, 0, 0, 0xffff0000)); + cmdl.push_back(std::move(cmd)); + // throw std::runtime_error(std::format( + // "solid tex: {:#08x}\nsize: {}\nptr: {:#08x}", + // (amy::ui)amy::iron::whiteTex(), amy::iron::whiteTex()->size(), + // (amy::ui)amy::iron::whiteTex()->ptr())); + }; ~example() { amy::c3d::deleteScreen(m_top); amy::c3d::deinit(); @@ -66,17 +35,19 @@ class example : public amy::app { amy::c3d::startFrame(); m_top->startDraw(); m_top->clear(); - dl->drawRectFilled(0, 50, 0xff00ff00); + // dl->drawRectFilled(0, 50, 0xff00ff00); amy::iron::newFrame(); amy::iron::drawOn(m_top); - amy::iron::draw(dl->data()); - dl->clear(); + // amy::iron::draw(dl->data()); + amy::iron::draw(cmdl); + // dl->clear(); amy::c3d::endFrame(); } private: amy::c3d::screen* m_top = nullptr; amy::iron::drawlist* dl = nullptr; + std::vector cmdl; }; int main() { diff --git a/source/iron/iron.cpp b/source/iron/iron.cpp index 77e6263..d1c89eb 100644 --- a/source/iron/iron.cpp +++ b/source/iron/iron.cpp @@ -1,4 +1,5 @@ #include +#include #include #define catch2() \ @@ -108,10 +109,10 @@ void iron::draw(const std::vector& data) { auto c = data[i].get(); for (int j = 0; j < c->indexBuf.size(); j++) { - m_ibuf[m_idx++] = m_vtx + c->indexBuf[i]; + m_ibuf[m_idx++] = m_vtx + c->indexBuf[j]; } for (int j = 0; j < c->vertexBuf.size(); j++) { - m_vbuf[m_vtx++] = c->vertexBuf[i]; + m_vbuf[m_vtx++] = c->vertexBuf[j]; } i++; }