diff --git a/src/engine/engine.cpp b/src/engine/engine.cpp index e9ce377..65a111e 100644 --- a/src/engine/engine.cpp +++ b/src/engine/engine.cpp @@ -77,8 +77,9 @@ void Engine::firePS2() { SifInitRpc(0); srand(time(NULL)); - fileService.startThread(); - audio.startThread(&fileService); + // fileService.startThread(); + // audio.startThread(&fileService); + audio.startThread(NULL); isInitialized = 0; mainThreadId = GetThreadId(); } diff --git a/src/engine/include/engine.hpp b/src/engine/include/engine.hpp index 5f10f65..17be5a8 100644 --- a/src/engine/include/engine.hpp +++ b/src/engine/include/engine.hpp @@ -32,7 +32,7 @@ public: void init(Game *t_game, u32 t_gifPacketSize); void setDefaultScreen(); Renderer *renderer; - FileService fileService; + // FileService fileService; Audio audio; ScreenSettings screen; Pad pad; diff --git a/src/engine/include/modules/audio.hpp b/src/engine/include/modules/audio.hpp index ea1dfe2..be2709a 100644 --- a/src/engine/include/modules/audio.hpp +++ b/src/engine/include/modules/audio.hpp @@ -126,7 +126,7 @@ public: private: u8 songLoaded, volume, realVolume, songPlaying, songInLoop, songFinished; - std::vector songListeners; + std::vector songListeners; FILE *wav; audsrv_fmt_t format; FileService *fileService; diff --git a/src/engine/loaders/png_loader.cpp b/src/engine/loaders/png_loader.cpp index bc46b9f..402800c 100644 --- a/src/engine/loaders/png_loader.cpp +++ b/src/engine/loaders/png_loader.cpp @@ -38,13 +38,11 @@ void PngLoader::load(Texture &o_texture, char *t_subfolder, char *t_name, char * char *path = String::createConcatenated(path_part2, t_extension); delete[] path_part1; delete[] path_part2; + FILE *file = fopen(path, "rb"); if (file == NULL) - { - PRINT_ERR("Failed to load .png file!"); - return; - } + PRINT_ERR("Failed to open .png file!"); png_structp png_ptr; png_infop info_ptr; @@ -56,29 +54,15 @@ void PngLoader::load(Texture &o_texture, char *t_subfolder, char *t_name, char * png_ptr = png_create_read_struct(PNG_LIBPNG_VER_STRING, (png_voidp)NULL, NULL, NULL); if (!png_ptr) - { - printf("PNG Read Struct Init Failed\n"); - fclose(file); - return; - } + PRINT_ERR("PNG struct info init failed(1)!"); info_ptr = png_create_info_struct(png_ptr); if (!info_ptr) - { - printf("PNG Info Struct Init Failed\n"); - fclose(file); - png_destroy_read_struct(&png_ptr, (png_infopp)NULL, (png_infopp)NULL); - return; - } + PRINT_ERR("PNG struct info init failed(2)!"); if (setjmp(png_jmpbuf(png_ptr))) - { - printf("Got PNG Error!\n"); - png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); - fclose(file); - return; - } + PRINT_ERR("PNG reader fatal error!"); png_init_io(png_ptr, file); @@ -114,80 +98,39 @@ void PngLoader::load(Texture &o_texture, char *t_subfolder, char *t_name, char * type = TEX_TYPE_RGB; break; default: - PRINT_ERR("This png format is not supported!"); + PRINT_ERR("This png format is not supported! RGB/RGBA only."); } o_texture.setSize(width, height, type); printf("PNGLoader - width: %d | height: %d\n", width, height); - if (type == TEX_TYPE_RGBA) - { - int row_bytes = png_get_rowbytes(png_ptr, info_ptr); - png_byte *row_pointers[height]; + size_t row_bytes = png_get_rowbytes(png_ptr, info_ptr); + png_byte *row_pointers[height]; + for (row = 0; row < height; row++) + row_pointers[row] = new png_byte[row_bytes]; - for (row = 0; row < height; row++) - row_pointers[row] = new png_byte[row_bytes]; + png_read_image(png_ptr, row_pointers); - png_read_image(png_ptr, row_pointers); + u32 x = 0; - struct pixel + for (i = 0; i < height; i++) + for (j = 0; j < width; j++) { - u8 r, g, b, a; - }; - - u32 x = 0; - for (i = 0; i < height; i++) - { - for (j = 0; j < width; j++) + o_texture.setData(x, row_pointers[i][4 * j]); + o_texture.setData(x + 1, row_pointers[i][4 * j + 1]); + o_texture.setData(x + 2, row_pointers[i][4 * j + 2]); + if (type == TEX_TYPE_RGBA) { - o_texture.setData(x, row_pointers[i][4 * j]); - o_texture.setData(x + 1, row_pointers[i][4 * j + 1]); - o_texture.setData(x + 2, row_pointers[i][4 * j + 2]); o_texture.setData(x + 3, ((int)row_pointers[i][4 * j + 3] * 128 / 255)); x += 4; } - } - - for (row = 0; row < height; row++) - delete row_pointers[row]; - } - else if (type == TEX_TYPE_RGB) - { - int row_bytes = png_get_rowbytes(png_ptr, info_ptr); - png_byte *row_pointers[height]; - - for (row = 0; row < height; row++) - row_pointers[row] = new png_byte[row_bytes]; - - png_read_image(png_ptr, row_pointers); - - struct pixel3 - { - u8 r, g, b; - }; - - u32 x = 0; - for (i = 0; i < height; i++) - { - for (j = 0; j < width; j++) - { - o_texture.setData(x, row_pointers[i][4 * j]); - o_texture.setData(x + 1, row_pointers[i][4 * j + 1]); - o_texture.setData(x + 2, row_pointers[i][4 * j + 2]); + else if (type == TEX_TYPE_RGB) x += 3; - } } - for (row = 0; row < height; row++) - delete row_pointers[row]; - } - else - { - printf("This texture depth is not supported yet!\n"); - return; - } + for (row = 0; row < height; row++) + delete[] row_pointers[row]; - // Texture->Filter = GS_FILTER_NEAREST; png_read_end(png_ptr, NULL); png_destroy_read_struct(&png_ptr, &info_ptr, (png_infopp)NULL); diff --git a/src/engine/modules/audio.cpp b/src/engine/modules/audio.cpp index 2d7e836..369413c 100644 --- a/src/engine/modules/audio.cpp +++ b/src/engine/modules/audio.cpp @@ -89,24 +89,25 @@ void Audio::setSongVolume(const u8 &t_vol) u32 Audio::addSongListener(AudioListener *t_listener) { - AudioListenerRef ref; - ref.id = rand() % 1000000; - ref.listener = t_listener; + AudioListenerRef *ref = new AudioListenerRef; + ref->id = rand() % 1000000; + ref->listener = t_listener; songListeners.push_back(ref); - return ref.id; + return ref->id; } void Audio::removeSongListener(const u32 &t_id) { s32 index = -1; for (u32 i = 0; i < songListeners.size(); i++) - if (songListeners[i].id == t_id) + if (songListeners[i]->id == t_id) { index = i; break; } if (index == -1) PRINT_ERR("Cant remove listener because given id was not found!"); + delete songListeners[index]; songListeners.erase(songListeners.begin() + index); } @@ -160,7 +161,7 @@ void Audio::playADPCM(audsrv_adpcm_t *t_adpcm, const s8 &t_ch) void Audio::startThread(FileService *t_fileService) { PRINT_LOG("Creating audio thread"); - fileService = t_fileService; + // fileService = t_fileService; extern void *_gp; thread.func = (void *)Audio::mainThread; thread.stack = threadStack; @@ -186,7 +187,7 @@ void Audio::threadLoop() { printf("Running again.\n"); for (u32 i = 0; i < getSongListenersCount(); i++) - songListeners[i].listener->onAudioFinish(); + songListeners[i]->listener->onAudioFinish(); rewindSongToStart(); } else @@ -202,7 +203,7 @@ void Audio::threadLoop() WaitSema(fillbufferSema); // wait until previous chunk wasn't finished audsrv_play_audio(wavChunk, chunkReadStatus); for (u32 i = 0; i < getSongListenersCount(); i++) - songListeners[i].listener->onAudioTick(); + songListeners[i]->listener->onAudioTick(); } chunkReadStatus = fread(wavChunk, 1, sizeof(wavChunk), wav); diff --git a/src/samples/floors/floors.cpp b/src/samples/floors/floors.cpp index 82e5766..d83aaee 100644 --- a/src/samples/floors/floors.cpp +++ b/src/samples/floors/floors.cpp @@ -37,15 +37,15 @@ Floors::~Floors() void Floors::onInit() { + texRepo = engine->renderer->getTextureRepository(); setBgColorAndAmbientColor(); engine->renderer->setCameraDefinitions(&camera.view, &camera.unitCirclePosition, camera.planes); + enemy = new Enemy(texRepo); // I know that here is bug with PNG loading + ui = new Ui(texRepo); // Will be resolved in December version engine->audio.addSongListener(this); engine->audio.loadSong("sounds/mafikizolo-loot.wav"); engine->audio.playSong(); engine->audio.setSongVolume(80); - texRepo = engine->renderer->getTextureRepository(); - enemy = new Enemy(texRepo); - ui = new Ui(texRepo); floorManager = new FloorManager(FLOORS_COUNT, texRepo); player = new Player(&engine->audio, texRepo); }