LibGame v0.4.0
The LG Game Engine - Copyright (C) 2024-2025 ETMSoftware
Loading...
Searching...
No Matches
lg_misc.c File Reference

Functions

void lg_enable_transparency ()
 
void lg_disable_transparency ()
 
int lg_check_gl_errors (long long log_time, const char *file, int line, const char *func)
 
int lg_check_gl_context ()
 
lg_endianness lg_get_arch_endianness ()
 
float lg_tv_diff (struct timeval *t_diff, struct timeval *t2, struct timeval *t1)
 
int delta_i (int i)
 
float delta_f (float f)
 
zboolean has_changed_i (int i)
 
zboolean has_changed_f (float f)
 
double clamp (double v, double min, double max)
 
void * lg_align_up_to_next_4_bytes_boundary (void *addr)
 
void * lg_align_up_to_next_8_bytes_boundary (void *addr)
 
void lg_swap_values (void *x, void *y, WidthInBytes width)
 
void debug_start_max_int_in_loop ()
 
void debug_max_int_in_loop (unsigned long i, const char *file, int line)
 
void debug_end_max_int_in_loop ()
 
void debug_start_max_float_in_loop ()
 
void debug_max_float_in_loop (float f, const char *file, int line)
 
void debug_end_max_float_in_loop ()
 
int lg_check_datatype_sizes ()
 
void lg_show_struct_sizes (zboolean everything)
 
int lg_show_pixel_format_info_from_sdl_display_mode (SDL_DisplayMode *display_mode)
 
void lg_show_utf8_drawings (zboolean extra_n)
 

Detailed Description

 A loose collection of funcs that don't belong to a specific module (so far ...)

Function Documentation

◆ lg_enable_transparency()

void lg_enable_transparency ( )

Enabling transparency before calling glDraw* funcs

◆ lg_disable_transparency()

void lg_disable_transparency ( )

Disabling transparency (default)

◆ lg_check_gl_errors()

int lg_check_gl_errors ( long long  log_time,
const char *  file,
int  line,
const char *  func 
)

Check GL errors

Parameters
log_timelg_log_time()
file__ FILE __ (without spaces)
line__ LINE __ (without spaces)
func__ func __ (without spaces)
Returns
LG_OK if OK

◆ lg_check_gl_context()

int lg_check_gl_context ( )

Check OpenGL context, ie if the current context is not NULL and whether it has changed since app startup

Returns
LG_OK if OK, LG_ERROR otherwise

◆ lg_get_arch_endianness()

lg_endianness lg_get_arch_endianness ( )

Get architecture endianness

From: https://developer.ibm.com/articles/au-endianc/

Returns
LG_LITTLE_ENDIAN or LG_BIG_ENDIAN

◆ lg_tv_diff()

float lg_tv_diff ( struct timeval *  t_diff,
struct timeval *  t2,
struct timeval *  t1 
)

Compute t2 - t1 (in s and µs), store the result in t_diff (in s and µs), and return diff in ms (as a float)

Example use:

struct timeval t1, t2, t_diff;
gettimeofday(&t1, NULL);
// Do sth
gettimeofday(&t2, NULL);
VERBOSE_INFO_OUT("Doing sth: done in %d ms\n", (int)lg_tv_diff(&t_diff, &t2, &t1));
float lg_tv_diff(struct timeval *t_diff, struct timeval *t2, struct timeval *t1)
Definition lg_misc.c:133
Parameters
t_diffA pointer to a struct timeval
t2A pointer to a struct timeval
t1A pointer to a struct timeval
Returns
t_diff in (float) ms

◆ delta_i()

int delta_i ( int  i)

Return delta of an int value since last call

Parameters
iAn int value
Returns
The difference as an int

◆ delta_f()

float delta_f ( float  f)

Return delta of a float value since last call

Parameters
fA float value
Returns
The difference as a float

◆ has_changed_i()

zboolean has_changed_i ( int  i)

Check if an int value has changed since last call

Parameters
iAn int value
Returns
TRUE if value has changed, FALSE otherwise

◆ has_changed_f()

zboolean has_changed_f ( float  f)

Check if a float value has changed since last call, using LG_FLOAT_EPSILON for comparison

Parameters
fA float value
Returns
TRUE if value has changed, FALSE otherwise

◆ clamp()

double clamp ( double  v,
double  min,
double  max 
)

Clamp implementation

Parameters
vValue to clamp
minMin value
maxMax value
Returns
Clamped value

◆ lg_align_up_to_next_4_bytes_boundary()

void * lg_align_up_to_next_4_bytes_boundary ( void *  addr)

Align memory addr up to next 4 bytes boundary, unless already aligned

Parameters
addrMemory address
Returns
The new aligned addr

◆ lg_align_up_to_next_8_bytes_boundary()

void * lg_align_up_to_next_8_bytes_boundary ( void *  addr)

Align memory addr up to next 8 bytes boundary, unless already aligned

Parameters
addrMemory address
Returns
The new aligned addr

◆ lg_swap_values()

void lg_swap_values ( void *  x,
void *  y,
WidthInBytes  width 
)

Portable value swapping

No input checking is done

Helper typdef for width in bytes

typedef enum {
WBY_8_BIT = 1,
WBY_16_BIT = 2,
WBY_32_BIT = 4,
WBY_64_BIT = 8
} WidthInBytes;
Parameters
xPointer to value #1
yPointer to value #2
widthWidth in bytes of value type

◆ debug_start_max_int_in_loop()

void debug_start_max_int_in_loop ( )

For debugging purposes - 'Reset' max_int_in_loop

◆ debug_max_int_in_loop()

void debug_max_int_in_loop ( unsigned long  i,
const char *  file,
int  line 
)

For debugging purposes - Print out max value found so far while running loop

Example use:

 i = 0;
 debug_start_max_int_in_loop();
 for (y = 0; y < h; y++) {
    for (x = 0; x < w; x++) {
            debug_max_int_in_loop((unsigned long)i, __FILE__, __LINE__);
            // ...
            terrain->vbo_data[i].x = (float)x / (float)w;
            terrain->vbo_data[i].y = heightmap[x + y * w] * vert_scaling_k;
            terrain->vbo_data[i].z = (float)y / (float)h;
            // ...
            i++;
    }
 }
 debug_end_max_int_in_loop();
Parameters
iInteger to test
fileShould be "__FILE__"
lineShould be "__LINE__"

◆ debug_end_max_int_in_loop()

void debug_end_max_int_in_loop ( )

For debugging purposes - Just print out closing '\n'

◆ debug_start_max_float_in_loop()

void debug_start_max_float_in_loop ( )

For debugging purposes - 'Reset' max_float_in_loop

◆ debug_max_float_in_loop()

void debug_max_float_in_loop ( float  f,
const char *  file,
int  line 
)

For debugging purposes - Print out max value found so far while running loop

Example use: same as above with float instead of int

Parameters
ffloat to test
fileShould be "__FILE__"
lineShould be "__LINE__"

◆ debug_end_max_float_in_loop()

void debug_end_max_float_in_loop ( )

For debugging purposes - Just print out closing '\n'

◆ lg_check_datatype_sizes()

int lg_check_datatype_sizes ( )

Check C and OpenGL types at runtime - should be called early at init time

Also see: https://www.khronos.org/opengl/wiki/OpenGL_Type

Returns
LG_OK if OK

◆ lg_show_struct_sizes()

void lg_show_struct_sizes ( zboolean  everything)

Mainly for internal testing, but quite informative about memory consumption

Make sure to add new structs

Parameters
everythingEvery structs if TRUE , only big or new/interesting ones otherwise

◆ lg_show_pixel_format_info_from_sdl_display_mode()

int lg_show_pixel_format_info_from_sdl_display_mode ( SDL_DisplayMode *  display_mode)

Show pixel format info bla bla

See: https://wiki.libsdl.org/SDL_PixelFormat

Parameters
display_modePointer to a SDL_DisplayMode struct
Returns
LG_OK if OK

◆ lg_show_utf8_drawings()

void lg_show_utf8_drawings ( zboolean  extra_n)

Helper func to draw some UTF-8 stuff like arrows, lines, and corners, along with their hex codes and tokens

Is that any useful actually ?

Pretty handy when trying to draw UTF-8 boxes

Parameters
extra_nAdd an extra "\n" at end of lines (will look less "compact")