From 7d2f3540859d676c5a58f5b17f4d7a47c81457ad Mon Sep 17 00:00:00 2001 From: h4570 Date: Sun, 29 Nov 2020 13:37:30 +0100 Subject: [PATCH] added test 2d rectangle to renderer --- src/engine/include/modules/renderer.hpp | 3 +++ src/engine/modules/gif_sender.cpp | 1 + src/engine/modules/renderer.cpp | 35 +++++++++++++++++++++++++ src/samples/ari/ari.cpp | 3 ++- 4 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/engine/include/modules/renderer.hpp b/src/engine/include/modules/renderer.hpp index b6332f7..3aa3b07 100644 --- a/src/engine/include/modules/renderer.hpp +++ b/src/engine/include/modules/renderer.hpp @@ -103,6 +103,8 @@ public: TextureRepository *getTextureRepository() { return &textureRepo; }; + void drawRectangle(); + private: void changeTexture(const Mesh &t_mesh, u32 t_materialId); u32 lastTextureId; @@ -116,6 +118,7 @@ private: Matrix perspective; RenderData renderData; TextureRepository textureRepo; + ScreenSettings *screen; GifSender *gifSender; VifSender *vifSender; packet2_t *flipPacket; diff --git a/src/engine/modules/gif_sender.cpp b/src/engine/modules/gif_sender.cpp index 2c69442..9782eab 100644 --- a/src/engine/modules/gif_sender.cpp +++ b/src/engine/modules/gif_sender.cpp @@ -86,6 +86,7 @@ void GifSender::sendClear(zbuffer_t *t_zBuffer) packet2_update(packet2, draw_enable_tests(packet2->next, 0, t_zBuffer)); packet2_update(packet2, draw_finish(packet2->next)); packet2_chain_close_tag(packet2); + dma_channel_wait(DMA_CHANNEL_GIF, 0); dma_channel_send_packet2(packet2, DMA_CHANNEL_GIF, true); dma_channel_wait(DMA_CHANNEL_GIF, 0); packet2_free(packet2); diff --git a/src/engine/modules/renderer.cpp b/src/engine/modules/renderer.cpp index 4136af5..dd43e6a 100644 --- a/src/engine/modules/renderer.cpp +++ b/src/engine/modules/renderer.cpp @@ -44,6 +44,7 @@ Renderer::Renderer(u32 t_packetSize, ScreenSettings *t_screen) allocateBuffers(t_screen->width, t_screen->height); initDrawingEnv(t_screen->width, t_screen->height); setPrim(); + screen = t_screen; gifSender = new GifSender(t_packetSize, t_screen); vifSender = new VifSender(); perspective.setPerspective(*t_screen); @@ -100,6 +101,40 @@ void Renderer::changeTexture(const Mesh &t_mesh, u32 t_materialId) PRINT_ERR("Texture was not found in texture repository!"); } +void Renderer::drawRectangle() +{ + beginFrameIfNeeded(); + packet2_t *packet2 = packet2_create(20, P2_TYPE_NORMAL, P2_MODE_NORMAL, 0); + packet2_update(packet2, draw_primitive_xyoffset(packet2->next, 0, 2048, 2048)); + + int loop0 = 10; + + packet2_add_s64(packet2, GIF_SET_TAG(4, 0, 0, 0, GIF_FLG_PACKED, 1)); + packet2_add_s64(packet2, GIF_REG_AD); + + packet2_add_s64(packet2, GIF_SET_PRIM(6, 0, 0, 0, 0, 0, 0, 0, 0)); + packet2_add_s64(packet2, GIF_REG_PRIM); + + packet2_add_s64(packet2, GIF_SET_RGBAQ((loop0 * 10), 0, 255 - (loop0 * 10), 0x80, 0x3F800000)); + packet2_add_s64(packet2, GIF_REG_RGBAQ); + + packet2_add_s64(packet2, GIF_SET_XYZ(((loop0 * 20) << 4) + (2048 << 4), ((loop0 * 10) << 4) + (2048 << 4), -128)); + packet2_add_s64(packet2, GIF_REG_XYZ2); + + packet2_add_s64(packet2, GIF_SET_XYZ((((loop0 * 20) + 100) << 4) + (2048 << 4), (((loop0 * 10) + 100) << 4) + (2048 << 4), -128)); + packet2_add_s64(packet2, GIF_REG_XYZ2); + + packet2_update(packet2, + draw_primitive_xyoffset( + packet2->next, + 0, + (2048 - (screen->width / 2)), (2048 - (screen->height / 2)))); + packet2_update(packet2, draw_finish(packet2->next)); + dma_channel_wait(DMA_CHANNEL_GIF, 0); + dma_channel_send_packet2(packet2, DMA_CHANNEL_GIF, true); + packet2_free(packet2); +} + /** Initializes drawing environment (1st app packet) */ void Renderer::initDrawingEnv(float t_screenW, float t_screenH) { diff --git a/src/samples/ari/ari.cpp b/src/samples/ari/ari.cpp index 40d7b8b..bfdf545 100644 --- a/src/samples/ari/ari.cpp +++ b/src/samples/ari/ari.cpp @@ -78,7 +78,7 @@ void Ari::onInit() texRepo->addByMesh("sunnyisl/", islandAddons); texRepo->addByMesh("skybox/", skybox); texRepo->addByMesh("ari/", player.mesh); - // engine->audio.playSong(); + engine->audio.playSong(); } void Ari::initBulb() @@ -98,6 +98,7 @@ void Ari::onUpdate() if (engine->pad.isCircleClicked) engine->audio.playADPCM(adpcm2); camera.update(engine->pad, player.mesh); + engine->renderer->drawRectangle(); engine->renderer->draw(skybox); engine->renderer->draw(island); engine->renderer->draw(islandAddons);