From 0fc0adac49e6ba45edee752a5f478ec82ca58438 Mon Sep 17 00:00:00 2001 From: Milang Date: Thu, 31 Oct 2019 11:00:26 +0100 Subject: [PATCH] finish all functions. It is the beginning of beta phase ! --- include/fxengine/renderlist.h | 2 + libfxengine.a | Bin 21676 -> 23318 bytes src/fxengine.c | 89 +++------------------------------- src/render/triangle.c | 7 +-- src/render/zbuffer.c | 4 +- src/renderlist.c | 43 +++++++++++++++- 6 files changed, 55 insertions(+), 90 deletions(-) diff --git a/include/fxengine/renderlist.h b/include/fxengine/renderlist.h index de30738..598339f 100644 --- a/include/fxengine/renderlist.h +++ b/include/fxengine/renderlist.h @@ -14,4 +14,6 @@ fe_object * fe_renderlist_remove_id(int id); void fe_renderlist_clear(void); +void fe_render(void); + #endif diff --git a/libfxengine.a b/libfxengine.a index 91d43bd414aff3f00f8c8c037fa19ecf13022972..4c76cfa8626fe9030bc3a16709185773fdeb5a94 100644 GIT binary patch delta 2040 zcmah}Z){Ul6hHU%b?f@NQR+hXPx@#}2UF=E){POwH_KclvI)2Zqe=VLzHP&*|VirGX^h0Zw=zx$8iTc4msBw^BR_}X#Z+*-eZt{Eg zchCL3d(OM>oOAgTGL<&(T}^od8`J|pBLF>?ht30_M(Jk& zk3wY^fQXt83fLIC3b1h%JUIcNhI-immKN4+rvo)rW{E>YLn6lHx#3A5}R+EqTnRHT&N2nB!D-DS2q` zgXD8iGT(u3t$#}UcI2-c&tsz{hW6lu#S&{uJiT{8yHsROTduPlLs!jNgp{RtH&fqZ z(S<{aExQ@*QpbI-A#LWEm+p0G5)S^hcB$B$eoRuA3n?c>)FZEH5|!aWQ7xp1+Q2d4 zKLt&?l*~VH=*wK3{!x?B3&)$8FiuV#Mlb_sV!0xig)2~!a6g~rBkU8xFC{uVnz#4^b11M4Ws7iA}r6F;a5)GbYj#Bg) zJZ-k(?e@)R7PDL}c^cas6g`Vw#blbpH|@3BJ0!wO_-?f|RkyLMM$81)HZS?l6;z`K z-z~1AwDqYI&0iz*4Sv!0JNgQ9yRKQ)i5gX9lSB^)z^Z+KO+rRZtBsF^m}f0y#$m z)B)74UMCxf11{2bKRcWk@2D^Z9CTPIJg*D1g0mp zn7loJ(mIZ5(eaw^$h`z7Tt_)w@;5Xlg+%f}p5d8XE@$`0%d)wQAqyc>hViZKH1S)P z1JHzQ*&HxX((P&F#x+rTfnB2r{=GnFig=T|b-XwW8SO3|Z;I8|EI{yCyGeXa zahTDzTf?S|wwc&6^ljK+ZFk7~%fUFueg@~H^WwbzI@50DC)_9F+Tii!?^@(9a5{Ru z-TxMqp~Z8Ozm6;iA^BA?^lR5!T*1t^nO#q_UsdrSX@vN^cNB#& y+hEi75LX}LQI`!(;h>?GJbPQK@e^$fMd%DMTqeE6QAAxMx=*EAH{zML@_zv?$KK!o delta 878 zcmaiyUr19?9LK-s-pxO|%cfS-T-!yr>|xegng#|Nr41`XSx-SXb!R31%Qa#4Z$f_% zN?DwcqQHEK3Twg*pZ3s$ND|s0C)j|Wr^Grkj<)k;D3~S0y5Y({lOLY0j?Er z+kkAg4gncz11sZq0{RVnLwH#~O{?g%-4C`Omsp`mWlB$n6@))R%R$GbDmEk&oGPg3>jvl&b=hX4x6m(zR$v) zX5J_mQmnvVNz$y #endif #include +#include #include +#include +#include // FPS count #ifdef USE_LIBPROF @@ -61,8 +64,8 @@ void fe_load() quit=false; while (1) { - fe_zbuffer_clear(); - render(); + fe_clear_zbuffer(); + fe_render(); switch_frame(); if (quit) break; @@ -74,84 +77,4 @@ void fe_load() void fe_quit() { quit=1; -} - -/* - -#include - -#include -#include - -#include -#include - -static void * fe_rendering_list; - -#ifdef USE_LIBPROF -#include -static uint32_t frame_interval_min=1000000; -static uint32_t frame_interval_max=1; -static uint32_t fps=0; -#endif - -// Double buffering -static uint32_t * vram1 = vram; -static uint32_t vram2[1024/sizeof(uint32_t)]; -static uint32_t * vrams[2]={vram1,vram2}; -static uint32_t drawing_vram=1; - -static void switch_vram() -{ - vram=vrams[drawing_vram]; - drawing_vram=1-drawing_vram; -} - -void fe_set_user_mode(); -void fe_set_working_mode(); - - -int32_t fe_get_fps() -{ -#ifdef USE_LIBPROF - return fps; -#else - return -1; -#endif -} - - -void fe_display(const uint32_t libprof_channel) -{ - fe_update(libprof_channel); - dupdate(); - dclear(C_WHITE); -} - - -void fe_update(const uint32_t libprof_channel) -{ -#ifdef USE_LIBPROF - if (prof_elapsed) - { - prof_leave(libprof_channel); - uint32_t frame_interval = prof_time(libprof_channel); - //sleep_us(0, MINIMUM_FRAME_DELAY-frame_interval); - if (frame_intervalframe_interval_max) - frame_interval_max = frame_interval; - fps=1000000/frame_interval; - } - else - { - prof_init(libprof_channel+1, 0); - } - prof_clear(libprof_channel); - prof_enter(libprof_channel); -#endif - switch_vram(); - fe_zbuffer_clear(); -} - -*/ \ No newline at end of file +} \ No newline at end of file diff --git a/src/render/triangle.c b/src/render/triangle.c index e2d3cad..fef38da 100644 --- a/src/render/triangle.c +++ b/src/render/triangle.c @@ -1,6 +1,7 @@ -#include -#include +#include +#include #include +#include #include #include @@ -128,7 +129,7 @@ int render_triangle_nobfc(fe_vertex const s1, fe_vertex const s2, fe_vertex cons int32_t vy2= ( vy*side->size_px_y/s3.z ) / ((32768-vy)/s1.z + vy/s3.z); // Affichage du point - const uint8_t color = fe_texture_get_pixel_r(side, vx2, vy2); + const uint8_t color = fe_bitmap_get_px(side, vx2, vy2); if (color >> 1) { diff --git a/src/render/zbuffer.c b/src/render/zbuffer.c index ab73d31..dff8c92 100644 --- a/src/render/zbuffer.c +++ b/src/render/zbuffer.c @@ -1,4 +1,4 @@ -#include +#include /* #include @@ -22,7 +22,7 @@ static const int size_char = size_uint32 * sizeof(uint32_t); static int32_t *zbuffer = (void *)0x88080000 - (((size_char >> 5) << 5) + 1); -void fe_zbuffer_clear() +void fe_clear_zbuffer() { uint32_t indice = 0; for (indice = 0; indice < size_uint32; indice ++) diff --git a/src/renderlist.c b/src/renderlist.c index 0a8b142..a0be38c 100644 --- a/src/renderlist.c +++ b/src/renderlist.c @@ -24,13 +24,52 @@ int fe_renderlist_add(fe_object * const object) if (list==0) { list_size++; - list=malloc(sizeof(int)); + list=malloc(sizeof(fe_object*)); list[0]=object; } else { list_size++; - list=realloc(list, list_size*sizeof(int)); + list=realloc(list, list_size*sizeof(fe_object*)); list[list_size-1]=object; } +} + +int fe_renderlist_remove(fe_object * const object) +{ + if (object==0) + return -1; + for (int i=0; i=list_size) + return 0; + else + { + fe_object * tmp = list[id]; + list[id]=0; + return tmp; + } +} + +void fe_renderlist_clear(void) +{ + free(list); + list_size=0; + return; +} + +void fe_render(void) +{ + for (int i=0; i