From 6e993ff99b43096c49817cfbf35aa8ea5d3d9443 Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Sun, 15 May 2022 12:59:08 +0100 Subject: [PATCH] gint/image: replace libimg on fx-CG 50 --- CMakeLists.txt | 12 +- assets-cg/img/applejack_31x27.png | Bin 919 -> 0 bytes assets-cg/img/applejack_36x25.png | Bin 877 -> 0 bytes assets-cg/img/fxconv-metadata.txt | 14 +- assets-cg/img/potion_17x22.png | Bin 11153 -> 0 bytes assets-cg/img/potion_18x22.png | Bin 10515 -> 0 bytes assets-cg/img/potion_21x22.png | Bin 13773 -> 0 bytes include/gintctl/assets.h | 13 +- src/gint/image.c | 221 +++++++++++++++++++++++------- src/gintctl.c | 2 - src/libs/libimg.c | 107 --------------- 11 files changed, 194 insertions(+), 175 deletions(-) delete mode 100644 assets-cg/img/applejack_31x27.png delete mode 100644 assets-cg/img/applejack_36x25.png delete mode 100644 assets-cg/img/potion_17x22.png delete mode 100644 assets-cg/img/potion_18x22.png delete mode 100644 assets-cg/img/potion_21x22.png delete mode 100644 src/libs/libimg.c diff --git a/CMakeLists.txt b/CMakeLists.txt index 0e54913..dce6aad 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -39,7 +39,6 @@ set(SOURCES src/gint/usb.c src/libs/bfile.c src/libs/justui.c - src/libs/libimg.c src/libs/openlibm.c src/mem/mem.c src/perf/cpucache.c @@ -101,8 +100,6 @@ set(ASSETS_fx ) set(ASSETS_cg assets-cg/fonts/font8x9_bold.png - assets-cg/img/applejack_31x27.png - assets-cg/img/applejack_36x25.png assets-cg/img/kbd_events.png assets-cg/img/kbd_pressed.png assets-cg/img/kbd_released.png @@ -111,9 +108,6 @@ set(ASSETS_cg assets-cg/img/libimg_sq_even.png assets-cg/img/libimg_sq_odd.png assets-cg/img/libimg_train.png - assets-cg/img/potion_17x22.png - assets-cg/img/potion_18x22.png - assets-cg/img/potion_21x22.png assets-cg/img/rtc_arrows.png assets-cg/img/rtc_segments.png assets-cg/img/swift.png @@ -129,7 +123,11 @@ target_link_options(gintctl PRIVATE -Wl,-Map=map -Wl,--print-memory-usage) target_include_directories(gintctl PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}/include") target_link_libraries(gintctl - LibProf::LibProf LibImg::LibImg JustUI::JustUI Gint::Gint) + LibProf::LibProf JustUI::JustUI Gint::Gint) + +if("${FXSDK_PLATFORM_LONG}" STREQUAL fx9860G) + target_link_libraries(gintctl LibImg::LibImg) +endif() if("${FXSDK_PLATFORM_LONG}" STREQUAL fx9860G) diff --git a/assets-cg/img/applejack_31x27.png b/assets-cg/img/applejack_31x27.png deleted file mode 100644 index eaab18652f472e4b5471f4a50b2e6332d9e86207..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 919 zcmV;I18Dq-P)>Jb0{02y>e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{00RF>L_t(Y$E{btOB+!f|J*}p zhIXj!aErYR7O7BzgCs+*a5{9dLkU$^H-};h{sA32I>au5gJX>%g_6lZ13iZe4iXB2 zw1d|y8B`oPNQd`2T)$txm)s>W=@%Zn@ZP=8_s8e^BbHVg!-&$#0DxB7l6yL%eUgj} z3tY-)qkUbOO3{w?dyx{Qd={#nu7EYD0mi&;&)001=zs8-r)gdr+Ln*mAA z)@EbBF9Q!sD?{rt@NgM;gU4LyTXHSzwUBch_Cg~Jv9UA-0GOE^_Rw+GD( z1Crz%2g_S00D!~OD}4C+2LNz!q_Derjor=b;n+@u^K1*XRun?dwmA00heg-rZ(ctA z4FFi)I$;hB1un(2EoQk)!6d#6MYwkHYzu|48yI64v@mu9;)Pb)q7^e@5UbDDW;xE} zZjxv3o-+}9zSRqemIRhUF$Ms9dL28Pcc)?2=VH0tv%Jz}%EyZ%g^ASz&f&w;D<%)c zo?L&I^4bATg@EMZNHO5@)(PkEw;%Tb0NcI~Nj@0{B3xgMMFPuwBr8cMg|>YkrF=H# zdYSXx+Gz}2##6eLWaq&Py#4qPJN_|~sZzALnaKR^1sZEC5_n?ufDg_3T%_Sjm4U7O zaa4-^4;Wo72VgdqrZ6)(iiy<&1_Xc||M>Re{y5C5pB-dsXT0om6oND*xTTV-2{3wC z_U9II$4+7?m1Jv(CMTzyBn3FniM>HH6B`Q3_45u(YAusWGTCP7PAQ*F%=OqXvFN%e z`+nlkz(ZjeJ2*6 diff --git a/assets-cg/img/applejack_36x25.png b/assets-cg/img/applejack_36x25.png deleted file mode 100644 index d97574b230cdd7e764099e92dd7832348c70d4e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 877 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 jsxE>0{p;bO3N1|MG00000NkvXXu0mjf!G9?P diff --git a/assets-cg/img/potion_18x22.png b/assets-cg/img/potion_18x22.png deleted file mode 100644 index fb2d049c8b06494a3e86863ebe605485e3438023..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10515 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 Dsu3P$ diff --git a/include/gintctl/assets.h b/include/gintctl/assets.h index 358796e..a270c69 100644 --- a/include/gintctl/assets.h +++ b/include/gintctl/assets.h @@ -5,10 +5,10 @@ #ifndef _GINTCTL_ASSETS #define _GINTCTL_ASSETS -#include - #ifdef FX9860G +#include + extern font_t font_hexa, font_mini, @@ -61,20 +61,13 @@ extern img_t #ifdef FXCG50 extern bopti_image_t - img_applejack_31x27, - img_applejack_36x25, img_kbd_events, img_kbd_pressed, img_kbd_released, - img_potion_17x22, - img_potion_18x22, - img_potion_21x22, img_rtc_arrows, img_rtc_segments, img_swift, - img_swords; - -extern img_t + img_swords, img_libimg_even_odd, img_libimg_odd_even, img_libimg_sq_even, diff --git a/src/gint/image.c b/src/gint/image.c index a9722da..e3e3b93 100644 --- a/src/gint/image.c +++ b/src/gint/image.c @@ -6,60 +6,189 @@ #include #ifdef FXCG50 +static void scene_1(void) +{ + dclear(0x5555); + + extern image_t img_libimg_sq_even; + extern image_t img_libimg_sq_odd; + extern image_t img_libimg_even_odd; + extern image_t img_libimg_odd_even; + extern image_t img_libimg_train; + + image_t const *in[4] = { + &img_libimg_sq_even, &img_libimg_sq_odd, + &img_libimg_odd_even, &img_libimg_even_odd + }; + image_t *train = &img_libimg_train; + image_t *vram = image_create_vram(); + + image_fill(vram, 0xffff); + image_fill(image_sub(vram, 138, 0, 28, -1), 0xc618); + + /* TODO: Missing test coverage: + image_alloc() + image_copy_palette() + image_clear() + image_copy() with P4 formats + image_set_pixel() */ + + for(int i=0, y=8; i<4; i++, y+=52) + { + /* P8 */ + if(i <= 1) { + image_t *tmp; + + // img_rotate (in[i], img_at(vram, 8, y), 90); + // img_rotate (in[i], img_at(vram, 8, y+26), 0); + // img_rotate (in[i], img_at(vram, 34, y), 180); + // img_rotate (in[i], img_at(vram, 34, y+26), 270); + // img_upscale(in[i], img_at(vram, 60, y+1), 2); + + if(i == 0) { + tmp = image_hflip_alloc(in[i]); + image_copy(tmp, image_at(vram, 110, y), false); + image_free(tmp); + + tmp = image_vflip_alloc(in[i]); + image_copy(tmp, image_at(vram, 110, y+26), false); + image_free(tmp); + } + else { + tmp = image_copy_alloc(in[i], in[i]->format); + image_hflip(tmp, tmp, true); + image_copy(tmp, image_at(vram, 110, y), false); + image_free(tmp); + + tmp = image_copy_alloc(in[i], in[i]->format); + image_vflip(tmp, tmp, true); + image_copy(tmp, image_at(vram, 110, y+26), false); + image_free(tmp); + } + + image_copy (in[i], image_at(vram, 140, y+13), false); + /* img_dye (in[i], img_at(vram, 248, y), 0x25ff); + img_dye (in[i], img_at(vram, 248, y+26), 0xfd04); + + img_t light = img_copy(in[i]); + img_t dark = img_copy(in[i]); + + for(int k=0, x=172; k<=2; k++, x+=26) + { + img_whiten(light, light); + img_darken(dark, dark); + + img_render(light, img_at(vram, x, y)); + img_render(dark, img_at(vram, x, y+26)); + } + + img_destroy(light); + img_destroy(dark); */ + } + /* RGB16 */ + else { + // img_rotate (in[i], img_at(vram, 8, y), 90); + // img_rotate (in[i], img_at(vram, 8, y+26), 0); + // img_rotate (in[i], img_at(vram, 34, y), 180); + // img_rotate (in[i], img_at(vram, 34, y+26), 270); + // img_upscale(in[i], img_at(vram, 60, y+1), 2); + image_hflip (in[i], image_at(vram, 110, y), false); + image_vflip (in[i], image_at(vram, 110, y+26), false); + image_copy (in[i], image_at(vram, 140, y+13), false); + /* img_dye (in[i], img_at(vram, 248, y), 0x25ff); + img_dye (in[i], img_at(vram, 248, y+26), 0xfd04); + + img_t light = img_copy(in[i]); + img_t dark = img_copy(in[i]); + + for(int k=0, x=172; k<=2; k++, x+=26) + { + img_whiten(light, light); + img_darken(dark, dark); + + img_render(light, img_at(vram, x, y)); + img_render(dark, img_at(vram, x, y+26)); + } + + img_destroy(light); + img_destroy(dark); */ + } + } + +// img_t light = img_lighten_create(img_libimg_train); +// img_t dark = img_darken_create(img_libimg_train); + +// img_render(light, img_at(out, 282, 24)); + image_copy(train, image_at(vram, 282, 56+24), false); +// img_render(dark, img_at(out, 282, 56+56+24)); + +// img_destroy(light); +// img_destroy(dark); + + image_free(vram); +} + +static void print_linear_map(int x, int y, struct image_linear_map *map) +{ + dprint(x, y, C_BLACK, "Input: %dx%d (stride %d)", + map->src_w, map->src_h, map->src_stride); + dprint(x, y+14, C_BLACK, "Output: %dx%d (stride %d)", + map->dst_w, map->dst_h, map->dst_stride); + dprint(x, y+28, C_BLACK, "uv initial: %f %f", + (double)map->u / 65536, (double)map->v / 65536); + dprint(x, y+42, C_BLACK, "uv per x: %f %f", + (double)map->dx_u / 65536, (double)map->dx_v / 65536); + dprint(x, y+56, C_BLACK, "uv per y: %f %f", + (double)map->dy_u / 65536, (double)map->dy_v / 65536); +} + +static void scene_2(void) +{ + dclear(C_WHITE); + + extern image_t img_libimg_train; + image_t *train = &img_libimg_train; + image_t *vram = image_create_vram(); + + struct image_linear_map map; + int cx1 = train->width * 3 / 4; + int cy1 = train->height / 4; + int cx2=cx1, cy2=cy1; + image_rotate_around_scale(train, 1.4, 1.3*65536, true, &cx2, &cy2, &map); + + int new_format = + IMAGE_IS_RGB16(train->format) ? IMAGE_RGB565A : IMAGE_P8_RGB565A; + image_t *tmp = image_alloc(map.dst_w, map.dst_h, new_format); + image_copy_palette(train, tmp, -1); + image_clear(tmp); + + image_linear(train, tmp, &map); + image_copy(tmp, image_at(vram, 10, 10), true); + + dprint(4, 116, C_BLACK, "Center: %d %d -> %d %d", cx1, cy1, cx2, cy2); + print_linear_map(4, 130, &map); + image_free(vram); + image_free(tmp); +} + /* gintctl_gint_image(): Test image rendering */ void gintctl_gint_image(void) { - extern bopti_image_t img_swords; - extern bopti_image_t img_potion_17x22, img_potion_18x22; - extern bopti_image_t img_applejack_31x27, img_applejack_36x25; - int key = 0, x, y; + int tab=0, key=0; - while(key != KEY_EXIT) - { - dclear(C_WHITE); - row_title("Image rendering"); + while(key != KEY_EXIT) { + if(tab == 0) + scene_1(); + else if(tab == 1) + scene_2(); - x=51, y=25; - dtext(x, y, C_BLACK, "E.E"); - dtext(x+35, y, C_BLACK, "E.O"); - dtext(x+70, y, C_BLACK, "O.E"); - dtext(x+105, y, C_BLACK, "O.O"); - - x=52, y=40; - dtext(10, y+6, C_BLACK, "OxE"); - dimage(x, y, &img_potion_17x22); - dimage(x+35, y+1, &img_potion_17x22); - dimage(x+71, y, &img_potion_17x22); - dimage(x+106, y+1, &img_potion_17x22); - - x=52, y=67; - dtext(10, y+6, C_BLACK, "ExE"); - dimage(x, y, &img_potion_18x22); - dimage(x+35, y+1, &img_potion_18x22); - dimage(x+71, y, &img_potion_18x22); - dimage(x+106, y+1, &img_potion_18x22); - - x=44, y=95; - dtext(10, y+9, C_BLACK, "OxO"); - dimage(x, y, &img_applejack_31x27); - dimage(x+35, y+1, &img_applejack_31x27); - dimage(x+71, y, &img_applejack_31x27); - dimage(x+106, y+1, &img_applejack_31x27); - - x=40, y=127; - dtext(10, y+9, C_BLACK, "ExO"); - dimage(x, y, &img_applejack_36x25); - dimage(x+35, y+1, &img_applejack_36x25); - dimage(x+71, y, &img_applejack_36x25); - dimage(x+106, y+1, &img_applejack_36x25); - - dimage(190, 35, &img_swords); - - dtext(67, 210, C_BLACK, - "Some images by Pix3M (deviantart.com/pix3m)"); + fkey_button(1, "SCENE 1"); + fkey_button(2, "SCENE 2"); dupdate(); key = getkey().key; + if(key == KEY_F1) tab = 0; + if(key == KEY_F2) tab = 1; } } #endif diff --git a/src/gintctl.c b/src/gintctl.c index adfcf4e..66d4717 100644 --- a/src/gintctl.c +++ b/src/gintctl.c @@ -85,8 +85,6 @@ struct menu menu_libs = { { "libm: " _("OpenLibm", "OpenLibm floating-point functions"), gintctl_libs_openlibm, 0 }, - { "libimg" _("",": Image transforms"), - gintctl_libs_libimg, 0 }, { "JustUI widgets", gintctl_libs_justui, 0 }, { "BFile filesystem", diff --git a/src/libs/libimg.c b/src/libs/libimg.c deleted file mode 100644 index fe9927f..0000000 --- a/src/libs/libimg.c +++ /dev/null @@ -1,107 +0,0 @@ -#include -#include -#include -#include - -#ifdef FX9860G -#include -static void render(void) -{ - extern img_t img_libimg_swords; - - img_render_vram_gray(img_libimg_swords, 8, 8); -} - -void gintctl_libs_libimg(void) -{ - int key = 0; - dgray(DGRAY_ON); - - while(key != KEY_EXIT) - { - dclear(C_WHITE); - render(); - dupdate(); - - key = getkey().key; - } - - dgray(DGRAY_OFF); -} -#endif - -#ifdef FXCG50 -static void render(void) -{ - extern img_t img_libimg_sq_even; - extern img_t img_libimg_sq_odd; - extern img_t img_libimg_even_odd; - extern img_t img_libimg_odd_even; - extern img_t img_libimg_train; - - #define sq_even img_libimg_sq_even - #define sq_odd img_libimg_sq_odd - #define even_odd img_libimg_even_odd - #define odd_even img_libimg_odd_even - #define train img_libimg_train - - img_t in[4] = { sq_even, sq_odd, odd_even, even_odd }; - img_t out = img_vram(); - - img_fill(out, 0xffff); - img_fill(img_sub(out, 138, 0, 28, -1), 0xc618); - - for(int i=0, y=8; i<4; i++, y+=52) - { - img_rotate (in[i], img_at(out, 8, y), 90); - img_rotate (in[i], img_at(out, 8, y+26), 0); - img_rotate (in[i], img_at(out, 34, y), 180); - img_rotate (in[i], img_at(out, 34, y+26), 270); - img_upscale(in[i], img_at(out, 60, y+1), 2); - img_hflip (in[i], img_at(out, 110, y)); - img_vflip (in[i], img_at(out, 110, y+26)); - img_render (in[i], img_at(out, 140, y+13)); - img_dye (in[i], img_at(out, 248, y), 0x25ff); - img_dye (in[i], img_at(out, 248, y+26), 0xfd04); - - img_t light = img_copy(in[i]); - img_t dark = img_copy(in[i]); - - for(int k=0, x=172; k<=2; k++, x+=26) - { - img_whiten(light, light); - img_darken(dark, dark); - - img_render(light, img_at(out, x, y)); - img_render(dark, img_at(out, x, y+26)); - } - - img_destroy(light); - img_destroy(dark); - } - - img_t light = img_lighten_create(train); - img_t dark = img_darken_create(train); - - img_render(light, img_at(out, 282, 24)); - img_render(train, img_at(out, 282, 56+24)); - img_render(dark, img_at(out, 282, 56+56+24)); - - img_destroy(light); - img_destroy(dark); -} - -void gintctl_libs_libimg(void) -{ - int key = 0; - - while(key != KEY_EXIT) - { - dclear(C_WHITE); - render(); - dupdate(); - - key = getkey().key; - } -} -#endif