Optimisations :E

Écriture directe en VRAM et -O3, pour 20 fps
This commit is contained in:
attilavs2 2023-10-19 16:35:27 +02:00
parent d980f28fb7
commit 08ba5ff335
4 changed files with 16 additions and 18 deletions

View file

@ -23,7 +23,7 @@ set(ASSETS
fxconv_declare_assets(${ASSETS} ${ASSETS_fx} ${ASSETS_cg} WITH_METADATA) fxconv_declare_assets(${ASSETS} ${ASSETS_fx} ${ASSETS_cg} WITH_METADATA)
add_executable(myaddin ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}}) add_executable(myaddin ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}})
target_compile_options(myaddin PRIVATE -Wall -Wextra -Ofast) target_compile_options(myaddin PRIVATE -Wall -Wextra -O3 -fira-region=all )
target_link_libraries(myaddin Gint::Gint ) target_link_libraries(myaddin Gint::Gint )
target_link_libraries(myaddin LibProf::LibProf) target_link_libraries(myaddin LibProf::LibProf)
target_link_options(myaddin PRIVATE -Wl,--print-memory-usage) target_link_options(myaddin PRIVATE -Wl,--print-memory-usage)

BIN
src/.main.c.swp Normal file

Binary file not shown.

View file

@ -19,7 +19,7 @@
#include "map_test.h" #include "map_test.h"
//====== Maze3D V0.2 ===== //====== Maze3D V0.2 =====
// Git du moteur : https://github.com/attilavs2/Raycaster_prealpha // Git du moteur : https://github.com/attilavs2/Raycaster_G90
// Git du jeu : https://gitea.planet-casio.com/Fcalva/Maze3D // Git du jeu : https://gitea.planet-casio.com/Fcalva/Maze3D
// //
// Page du jeu : https://www.planet-casio.com/Fr/programmes/programme4355-1-maze3d-fcalva-jeux-reflexion.html // Page du jeu : https://www.planet-casio.com/Fr/programmes/programme4355-1-maze3d-fcalva-jeux-reflexion.html
@ -43,7 +43,7 @@ void USB_capture() {
} }
#endif #endif
#define debug //pour afficher les infos de debug //#define debug //pour afficher les infos de debug
extern char map_test[map_w][map_h]; extern char map_test[map_w][map_h];
@ -110,8 +110,8 @@ int main(){
load_map(); load_map();
image_t frame_buffer = *image_alloc(viewport_w, viewport_h, IMAGE_RGB565A); image_t *frame_buffer = image_create_vram();
image_t sky_tex = *image_alloc(64, 64, IMAGE_RGB565); image_t sky_tex = *image_alloc(64, 64, IMAGE_RGB565);
image_t WXOR_tex = *image_alloc(64, 64, IMAGE_RGB565); image_t WXOR_tex = *image_alloc(64, 64, IMAGE_RGB565);
image_t D_tex = *image_alloc(64, 64, IMAGE_RGB565); image_t D_tex = *image_alloc(64, 64, IMAGE_RGB565);
@ -126,35 +126,33 @@ int main(){
} }
image_fill(&D_tex, 0x4228); image_fill(&D_tex, 0x4228);
image_fill(&sky_tex, 0x9dbd); image_fill(&sky_tex, 0x9dbd);
prof_init(); prof_init();
#ifdef USB #ifdef USB
usb_interface_t const *interfaces[] = {&usb_ff_bulk, NULL}; usb_interface_t const *interfaces[] = {&usb_ff_bulk, NULL};
usb_open(interfaces, GINT_CALL_NULL); usb_open(interfaces, GINT_CALL_NULL);
#endif #endif
while (exit_game == 0) { while (exit_game == 0) {
prof_t frame = prof_make(); prof_t frame = prof_make();
prof_enter(frame); prof_enter(frame);
drect(0, 0, 395, 112, 0x9dbd); drect(0, 0, 395, 112, 0x9dbd);
drect(0,112, 395, 243, 0xc4c9); drect(0,112, 395, 243, 0xc4c9);
image_clear(&frame_buffer); image_clear(frame_buffer);
draw_walls(&buisson0, &briques0, &sky_tex, &WXOR_tex, &D_tex, &frame_buffer); draw_walls(&buisson0, &briques0, &sky_tex, &WXOR_tex, &D_tex, frame_buffer);
dimage(0, 0, &frame_buffer);
if(first_frame == 1) main_menu(); if(first_frame == 1) main_menu();
keys_get(); keys_get();
logic(); logic();
if (disp_frame_time == 1) dprint( 1, 10, C_BLACK, "Frame time : %d ms", frame_time); if (disp_frame_time == 1) dprint( 1, 10, C_BLACK, "Frame time : %d ms", frame_time);
#ifdef debug #ifdef debug
dprint( 1, 20, C_BLACK, "planeX : %d", planeX); dprint( 1, 20, C_BLACK, "planeX : %d", planeX);
dprint( 1, 30, C_BLACK, "planeY : %d", planeY); dprint( 1, 30, C_BLACK, "planeY : %d", planeY);
@ -171,12 +169,13 @@ int main(){
} }
prof_quit(); prof_quit();
#ifdef USB
usb_close(); usb_close();
#endif
free(&sky_tex); free(&sky_tex);
free(&WXOR_tex); free(&WXOR_tex);
free(&D_tex); free(&D_tex);
free(&frame_buffer);
return 1; return 1;
} }

View file

@ -345,13 +345,14 @@ void draw_walls(image_t *tex_1, image_t *tex_2, image_t *tex_3, image_t *tex_4,
fixed_t texSize = fix(lineHeight) / 64; //taille proportionelle de la ligne a la tex fixed_t texSize = fix(lineHeight) / 64; //taille proportionelle de la ligne a la tex
if (texSize < 0x400) texSize = 0x400; //0x400 = 1/64 * 2^16 if (texSize < 0x400) texSize = 0x400; //0x400 = 1/64 * 2^16
if (texSize > 0x3D000) { //0x3D000 = 3.8125 * 2^16, 3.8125 = viewport_h/64 if (texSize > 0x3D000) { //0x3D000 = 3.8125 * 2^16, 3.8125 = viewport_h/64
texSample = ffloor(fdiv(fix(viewport_h), texSize)); texSample = fceil(fdiv(fix(viewport_h), texSize));
texSampleY = 32 - (int)texSample * 0.5 + 1; texSampleY = 32 - (int)texSample * 0.5 + 1;
} }
else { else {
texSample = 64; texSample = 64;
texSampleY = 0; texSampleY = 0;
} }
image_t texStripe; image_t texStripe;
image_clear(&texStripe); image_clear(&texStripe);
@ -365,8 +366,6 @@ void draw_walls(image_t *tex_1, image_t *tex_2, image_t *tex_3, image_t *tex_4,
} }
image_scale(&texStripe, 0xFFFF, texSize, &temp); image_scale(&texStripe, 0xFFFF, texSize, &temp);
temp.src_stride = 1;
temp.dst_stride = 1;
image_linear(&texStripe, image_at(frame_buffer, x, (int)(viewport_h * 0.5 - lineHeight * 0.5) + v_offset), &temp); image_linear(&texStripe, image_at(frame_buffer, x, (int)(viewport_h * 0.5 - lineHeight * 0.5) + v_offset), &temp);
} }
} }