2025-11-19 22:20:27 +01:00
|
|
|
#include <amethyst.hpp>
|
|
|
|
|
|
2025-11-24 10:02:22 +01:00
|
|
|
#include "amethyst/iron.hpp"
|
|
|
|
|
|
2025-11-22 14:55:01 +01:00
|
|
|
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
|
|
|
|
|
)";
|
|
|
|
|
|
2025-11-24 10:02:22 +01:00
|
|
|
class example : public amy::app {
|
|
|
|
|
public:
|
|
|
|
|
example() {
|
|
|
|
|
amy::ctru::init();
|
|
|
|
|
amy::c3d::init();
|
|
|
|
|
m_top = amy::c3d::createScreen(GFX_TOP, GFX_LEFT);
|
|
|
|
|
amy::iron::init();
|
|
|
|
|
};
|
|
|
|
|
~example() {
|
|
|
|
|
amy::c3d::deleteScreen(m_top);
|
|
|
|
|
amy::c3d::deinit();
|
|
|
|
|
};
|
2025-11-19 22:20:27 +01:00
|
|
|
|
2025-11-24 10:02:22 +01:00
|
|
|
void main() {
|
2025-11-19 22:20:27 +01:00
|
|
|
amy::c3d::startFrame();
|
2025-11-24 10:02:22 +01:00
|
|
|
m_top->startDraw();
|
|
|
|
|
m_top->clear();
|
|
|
|
|
amy::iron::newFrame();
|
|
|
|
|
amy::iron::drawOn(m_top);
|
2025-11-19 22:20:27 +01:00
|
|
|
amy::c3d::endFrame();
|
|
|
|
|
}
|
2025-11-24 10:02:22 +01:00
|
|
|
|
|
|
|
|
private:
|
|
|
|
|
amy::c3d::screen* m_top = nullptr;
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
int main() {
|
|
|
|
|
amy::registerCxxExceptionHandler();
|
|
|
|
|
example app;
|
|
|
|
|
app.run();
|
2025-11-19 22:20:27 +01:00
|
|
|
return 0;
|
|
|
|
|
}
|