Allegro Wrapper Concerns
- Posted by Icy_Viking Oct 09, 2022
- 669 views
Hi all,
As I am starting on wrapping an allegro wrapper using the new ffi.e, I have come across a few issues that are sorta bothersome, but not a huge deal in the grand scheme of things. Though I was wondering if anyone had any thoughts on this. I want to keep the allegro as close to the C source as possible. For example color.h would be color.e and contain the functions found in color.h, but of course wrapped as Euphoria functions.
I'll show some code to show what I mean.
Main Allegro.e
--Allegro.e --Basically converted into Euphoria from C code (base.h) include std/ffi.e include std/math.e include std/machine.e public constant ALLEGRO_VERSION = 5, ALLEGRO_SUB_VERSION = 2, ALLEGRO_WIP_VERSION = 6 public constant ALLEGRO_RELEASE_NUMBER = 1 public constant ALLEGRO_UNSTABLE_BIT = -2147483648 public constant ALLEGRO_PI = 3.14159265358979323846 public constant ALLEGRO_VERSION_INT = or_all({ shift_bits(ALLEGRO_VERSION,-24), shift_bits(ALLEGRO_SUB_VERSION,-16), shift_bits(ALLEGRO_WIP_VERSION, -8), ALLEGRO_RELEASE_NUMBER,ALLEGRO_UNSTABLE_BIT}) include color.e export constant all = open_dll("allegro-5.2.dll"), xal_get_allegro_version = define_c_func(all,"+al_get_allegro_version",{},C_UINT), xal_run_main = define_c_func(all,"+al_run_main",{C_INT,C_POINTER,C_INT,C_INT,C_POINTER},C_INT), --color functions xal_map_rgb = define_c_func(all,"+al_map_rgb",{C_UCHAR,C_UCHAR,C_UCHAR},ALLEGRO_COLOR), xal_map_rgba = define_c_func(all,"+al_map_rgba",{C_UCHAR,C_UCHAR,C_UCHAR,C_UCHAR},ALLEGRO_COLOR), xal_map_rgb_f = define_c_func(all,"+al_map_rgb_f",{C_FLOAT,C_FLOAT,C_FLOAT},ALLEGRO_COLOR), xal_map_rgba_f = define_c_func(all,"+al_map_rgba_f",{C_FLOAT,C_FLOAT,C_FLOAT,C_FLOAT},ALLEGRO_COLOR), xal_premul_rgba = define_c_func(all,"+al_premul_rgba",{C_UCHAR,C_UCHAR,C_UCHAR,C_UCHAR},ALLEGRO_COLOR), xal_premul_rgba_f = define_c_func(all,"+al_premul_rgba_f",{C_FLOAT,C_FLOAT,C_FLOAT,C_FLOAT},ALLEGRO_COLOR), $ public function al_get_allegro_version() return c_func(xal_get_allegro_version,{}) end function public function al_run_main(atom argc,sequence argv,atom x,atom x2,sequence char) return c_func(xal_run_main,{argc,argv,x,x2,char}) end function --Color public function al_map_rgb(integer r,integer g,integer b) return c_func(xal_map_rgb,{r,g,b}) end function public function al_map_rgba(integer r,integer g,integer b,integer a) return c_func(xal_map_rgba,{r,g,b,a}) end function public function al_map_rgb_f(atom r,atom g,atom b) return c_func(xal_map_rgb_f,{r,g,b}) end function public function al_map_rgba_f(atom r,atom g,atom b,atom a) return c_func(xal_map_rgba_f,{r,g,b,a}) end function public function al_premul_rgba(integer r,integer g,integer b,integer a) return c_func(xal_premul_rgba,{r,g,b,a}) end function public function al_premul_rgba_f(atom r,atom g,atom b,atom a) return c_func(xal_premul_rgba_f,{r,g,b,a}) end function
Color.e
include std/ffi.e public constant ALLEGRO_COLOR = define_c_type({ C_FLOAT, --r C_FLOAT, --g C_FLOAT, --b C_FLOAT --a }) public enum type ALLEGRO_PIXEL_FORMAT ALLEGRO_PIXEL_FORMAT_ANY = 0, ALLEGRO_PIXEL_FORMAT_ANY_NO_ALPHA = 1, ALLEGRO_PIXEL_FORMAT_ANY_WITH_ALPHA = 2, ALLEGRO_PIXEL_FORMAT_ANY_15_NO_ALPHA = 3, ALLEGRO_PIXEL_FORMAT_ANY_16_NO_ALPHA = 4, ALLEGRO_PIXEL_FORMAT_ANY_16_WITH_ALPHA = 5, ALLEGRO_PIXEL_FORMAT_ANY_24_NO_ALPHA = 6, ALLEGRO_PIXEL_FORMAT_ANY_32_NO_ALPHA = 7, ALLEGRO_PIXEL_FORMAT_ANY_32_WITH_ALPHA = 8, ALLEGRO_PIXEL_FORMAT_ARGB_8888 = 9, ALLEGRO_PIXEL_FORMAT_RGBA_8888 = 10, ALLEGRO_PIXEL_FORMAT_ARGB_4444 = 11, ALLEGRO_PIXEL_FORMAT_RGB_888 = 12, --/* 24 bit format */ ALLEGRO_PIXEL_FORMAT_RGB_565 = 13, ALLEGRO_PIXEL_FORMAT_RGB_555 = 14, ALLEGRO_PIXEL_FORMAT_RGBA_5551 = 15, ALLEGRO_PIXEL_FORMAT_ARGB_1555 = 16, ALLEGRO_PIXEL_FORMAT_ABGR_8888 = 17, ALLEGRO_PIXEL_FORMAT_XBGR_8888 = 18, ALLEGRO_PIXEL_FORMAT_BGR_888 = 19, --/* 24 bit format */ ALLEGRO_PIXEL_FORMAT_BGR_565 = 20, ALLEGRO_PIXEL_FORMAT_BGR_555 = 21, ALLEGRO_PIXEL_FORMAT_RGBX_8888 = 22, ALLEGRO_PIXEL_FORMAT_XRGB_8888 = 23, ALLEGRO_PIXEL_FORMAT_ABGR_F32 = 24, ALLEGRO_PIXEL_FORMAT_ABGR_8888_LE = 25, ALLEGRO_PIXEL_FORMAT_RGBA_4444 = 26, ALLEGRO_PIXEL_FORMAT_SINGLE_CHANNEL_8 = 27, ALLEGRO_PIXEL_FORMAT_COMPRESSED_RGBA_DXT1 = 28, ALLEGRO_PIXEL_FORMAT_COMPRESSED_RGBA_DXT3 = 29, ALLEGRO_PIXEL_FORMAT_COMPRESSED_RGBA_DXT5 = 30, ALLEGRO_NUM_PIXEL_FORMATS end type
AS you can see, I can keep the flags in the color.e, but ideally I would like to have the functions in there too. When I tried to run it, I got an error saying the 'all' variable could not be found. So I put the color functions in the main allegro.e and it worked. If there's any tips or tricks I can use, I'd sure like to know them.