Compare commits

...

3 Commits

Author SHA1 Message Date
iris 7c456e50c5 rendering Panda correctly 2026-05-14 12:16:43 +02:00
iris df6f382a4b Merge commit '4870214d575293257604fa75a6458f0f0a7ea083' as 'external/yuv2rgb' 2026-05-14 11:28:27 +02:00
iris 4870214d57 Squashed 'external/yuv2rgb/' content from commit ee78934c8
git-subtree-dir: external/yuv2rgb
git-subtree-split: ee78934c8d542e8402bcb6eef7259217a6f859bc
2026-05-14 11:28:27 +02:00
3 changed files with 20 additions and 4 deletions
+1 -1
View File
@@ -2,5 +2,5 @@
- [x] ELF - [x] ELF
- [x] DOL - [x] DOL
- [ ] panda.dol - [x] panda.dol
- [ ] libogc simple examples - [ ] libogc simple examples
+1 -1
View File
@@ -16,7 +16,7 @@ broadway::broadway() {
void broadway::set_pc(ircolib::u32 value) { pc = value; } void broadway::set_pc(ircolib::u32 value) { pc = value; }
void broadway::run(mem &mem) { void broadway::run(mem &mem) {
for (int i = 0; i < 100000; i++) { for (int i = 0; i < 12150000; i++) {
execute(fetch(mem), mem); execute(fetch(mem), mem);
} }
} }
+18 -2
View File
@@ -6,15 +6,20 @@
#include <mem.hpp> #include <mem.hpp>
#include <broadway.hpp> #include <broadway.hpp>
#include <SDL3/SDL.h> #include <SDL3/SDL.h>
#include <filesystem>
namespace fs = std::filesystem;
int main(int argc, char **argv) { int main(int argc, char **argv) {
weee::core::mem mem; weee::core::mem mem;
weee::core::broadway broadway; weee::core::broadway broadway;
std::string binName;
cflags::cflags flags; cflags::cflags flags;
flags.add_string_callback( flags.add_string_callback(
'\0', "elf", '\0', "elf",
[&](const std::string &v) { [&](const std::string &v) {
binName = fs::path(v).filename().string();
if (!weee::core::load_elf(v, mem, broadway)) if (!weee::core::load_elf(v, mem, broadway))
ircolib::panic("Could not load '{}'", v); ircolib::panic("Could not load '{}'", v);
}, },
@@ -23,6 +28,7 @@ int main(int argc, char **argv) {
flags.add_string_callback( flags.add_string_callback(
'\0', "dol", '\0', "dol",
[&](const std::string &v) { [&](const std::string &v) {
binName = fs::path(v).filename().string();
if (!weee::core::load_dol(v, mem, broadway)) if (!weee::core::load_dol(v, mem, broadway))
ircolib::panic("Could not load '{}'", v); ircolib::panic("Could not load '{}'", v);
}, },
@@ -34,13 +40,20 @@ int main(int argc, char **argv) {
SDL_Init(SDL_INIT_VIDEO); SDL_Init(SDL_INIT_VIDEO);
SDL_Window *window = SDL_CreateWindow("weee", 800, 600, SDL_WINDOW_HIGH_PIXEL_DENSITY | SDL_WINDOW_RESIZABLE); SDL_Window *window = SDL_CreateWindow("weee", 800, 600, SDL_WINDOW_HIGH_PIXEL_DENSITY | SDL_WINDOW_RESIZABLE);
SDL_Renderer *renderer = SDL_CreateRenderer(window, nullptr); SDL_Renderer *renderer = SDL_CreateRenderer(window, nullptr);
SDL_Texture *texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_UYVY, SDL_TEXTUREACCESS_STREAMING, 640, 240); SDL_Texture *texture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGB24, SDL_TEXTUREACCESS_STREAMING, 640, 240);
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0); SDL_SetRenderDrawColor(renderer, 0, 0, 0, 0);
SDL_SetRenderLogicalPresentation(renderer, 640, 480, SDL_LOGICAL_PRESENTATION_LETTERBOX); SDL_SetRenderLogicalPresentation(renderer, 640, 480, SDL_LOGICAL_PRESENTATION_LETTERBOX);
ircolib::u8 *rgbTexture = (ircolib::u8 *)calloc(640 * 240, 3);
bool open = true; bool open = true;
while (open) { while (open) {
ircolib::u64 start = SDL_GetTicks();
broadway.run(mem); broadway.run(mem);
SDL_SetWindowTitle(window,
std::format("weee - {} - {:.2f} fps | {} ms", binName,
1000.f / ((float)SDL_GetTicks() - start), SDL_GetTicks() - start)
.c_str());
SDL_Event e; SDL_Event e;
while (SDL_PollEvent(&e)) { while (SDL_PollEvent(&e)) {
@@ -48,8 +61,11 @@ int main(int argc, char **argv) {
open = false; open = false;
} }
SDL_ConvertPixels(640, 240, SDL_PIXELFORMAT_UYVY, &mem.mem1[0x104000], 640 * 4, SDL_PIXELFORMAT_BGR24,
rgbTexture, 640 * 3);
SDL_RenderClear(renderer); SDL_RenderClear(renderer);
SDL_UpdateTexture(texture, nullptr, &mem.mem1[0x104000], 640 * 4); SDL_UpdateTexture(texture, nullptr, rgbTexture, 640 * 3);
SDL_RenderTexture(renderer, texture, nullptr, nullptr); SDL_RenderTexture(renderer, texture, nullptr, nullptr);
SDL_RenderPresent(renderer); SDL_RenderPresent(renderer);
} }