MiniLibX docs문서를 보면 사용 예제, 프로토타입 등을 알 수 있다.
MiniLibX는 école 42 같은 교육 프로그램에서 주로 사용되는 간단한 그래픽 라이브러리다. 이 라이브러리는 X-Window 또는 Cocoa와 같은 복잡한 그래픽 시스템에 대한 지식 없이도 기본적인 그래픽 소프트웨어를 개발할 수 있도록 설계되었다.
void *mlx_init();
소프트웨어와 디스플레이 간의 연결을 초기화한다.
성공 시 mlx 함수들을 호출할 때 사용되는 Connection Identifier포인터를 반환하고, 실패 시 NULL을 반환한다.
int mlx_destroy_window(void *mlx_ptr, void *win_ptr)
현재 사용 중인 윈도우(창)를 제거하는 함수다.
X-Window(또는 macOS 등)에서 해당 창을 없애고, OS 리소스를 해제한다.
성공 시 0 혹은 양수, 실패 시 -1 을 반환한다.
윈도우 제거 후 mlx구조체도 free()와 같은 메모리 해제하여 누수가 생기지 않게 조심한다.
void *mlx_new_window(void *mlx_ptr, int size_x, int size_y, char *title);
새 창을 생성한다.
size_x, size_y로 창의 가로, 세로 크기를 지정하고, title로 창의 타이틀을 설정한다.
반환값은 Window Identifier로, 나중에 다른 mlx 함수에 인자로 전달해야 한다.
int mlx_clear_window(void *mlx_ptr, void *win_ptr);
지정된 창을 검은색으로 초기화한다.
매개변수:
mlx_ptr: mlx_init()에서 받은 연결 식별자
win_ptr: mlx_new_window()에서 받은 윈도우 식별자
int mlx_destroy_window(void *mlx_ptr, void *win_ptr);
지정된 윈도우 창을 종료(제거)한다.
X-Window에서 해당 윈도우를 없애는 역할을 하므로, 리소스 해제를 위해 필요한 경우 반드시 호출해야 한다.
int mlx_pixel_put(void *mlx_ptr, void *win_ptr, int x, int y, int color);
지정한 (x, y) 좌표에 특정 색상(color)의 픽셀을 그린다.
좌표 (0, 0)은 윈도우의 왼쪽 상단 모서리를 의미한다.
color는 정수형 값으로, 보통 16진수 ARGB/RGB 형태를 사용한다. (ex. 0x00FF0000는 빨간색)
int mlx_string_put(void *mlx_ptr, void *win_ptr, int x, int y, int color, char *string);
지정한 (x, y) 좌표에 string 문자열을 color 색으로 렌더링한다.
픽셀 그리기와 마찬가지로 (0, 0)은 윈도우의 왼쪽 상단이다.
color는 mlx_pixel_put()과 동일하게 24비트(또는 32비트) RGB 형식을 사용한다.
void *mlx_new_image(void *mlx_ptr, int width, int height);
지정한 가로(width), 세로(height) 크기의 메모리에 새로운 이미지(버퍼)를 생성한다.
char *mlx_get_data_addr(void *img_ptr, int *bits_per_pixel, int *size_line, int *endian);
mlx_new_image()로 만든 이미지의 메모리 주소를 얻어오는 함수다.
이미지 버퍼에 직접 접근해서 픽셀을 그릴 때 사용한다.
bits_per_pixel: 한 픽셀이 차지하는 비트 수
size_line: 한 줄(가로줄)로 이동하기 위한 바이트 수(넓이 × (bits_per_pixel/8))
endian: 시스템의 엔디안(0: 리틀엔디안, 1: 빅엔디안)
엔디안(endian)이란?
멀티 바이트 데이터를 메모리에 저장할 때의 바이트 순서다.
리틀 엔디안: LSB(가장 하위 바이트)가 먼저(낮은 주소)
대표적으로 x86(인텔, AMD) 계열 CPU가 리틀 엔디안을 사용.
빅 엔디안: MSB(가장 상위 바이트)가 먼저(낮은 주소)
대표적으로 네트워크 바이트 순서(Network Byte Order)가 빅 엔디안을 기반으로 사용.
(또한 일부 RISC 기반 CPU 등)
mlx_get_data_addr()를 통해 반환되는 endian 플래그가 0이면 리틀 엔디안, 1이면 빅 엔디안.
"실행하는 시스템의 실제 엔디안 값”이 0 또는 1로 채워져 반환된다고 이해하면 된다.예시 : 색상 0x00RRGGBB (예: 0x00FF0000 → 빨간색) 리틀 엔디안(대부분 x86 계열): 메모리에는 00 00 FF 00 순서로(Alpha=0x00, Blue=0x00, Green=0xFF, Red=0x00) 저장될 가능성이 큼 즉, (B, G, R, A) 순으로 바이트를 쌓아야 원하는 색을 얻음 빅 엔디안: 메모리에 00 FF 00 00 순서로(Alpha=0x00, Red=0xFF, Green=0x00, Blue=0x00) 저장되며, 우리가 “논리적으로” 기대하는 순서와 일치하기 쉬움
int mlx_put_image_to_window(void *mlx_ptr, void *win_ptr, void *img_ptr, int x, int y);
mlx_new_image() + mlx_get_data_addr()로 구성한 이미지를, 윈도우 창의 (x, y) 위치에 표시한다.
int mlx_destroy_image(void *mlx_ptr, void *img_ptr)
MiniLibX로 생성한 이미지(버퍼)를 제거하는 함수다.
mlx_new_image() 등으로 만든 이미지의 메모리를 해제하고, 관련 리소스를 정리한다.
성공하면 0 혹은 양수, 실패 시 -1 등을 반환한다.
int mlx_hook(void *win_ptr, int x_event, int x_mask, int (*funct)(), void *param)
특정 이벤트가 발생했을 때, 호출될 함수를 등록할 때 사용한다.
등록에 성공하면 0 또는 양수, 실패 시 -1 등의 값을 반환한다.
매개변수:
win_ptr: 이벤트를 받을 윈도우 식별자
x_event: 이벤트 타입 (키 입력, 마우스 클릭, 창 닫기 등)
x_mask: 감지하려는 이벤트의 마스크 (키 누름, 클릭 등등을 세부 설정)
(*funct)(): 이벤트가 발생했을 때 호출될 콜백 함수
param: 콜백 함수에 전달할 임의의 데이터(구조체 등)
int mlx_loop(void *mlx_ptr)
MiniLibX의 메인 이벤트 루프를 시작한다.
mlx_loop()가 호출된 뒤에는 X-Window 시스템의 이벤트가 자동으로 감지·분배되며, 우리가 등록한 Hook 함수(예: mlx_hook, mlx_loop_hook)가 적절히 호출된다.
일반적으로 mlx_loop()를 빠져나오면 프로그램을 종료한다.
int mlx_loop_hook(void *mlx_ptr, int (*funct_ptr)(), void *param)
이벤트 발생 유무와 관계없이, 매 프레임마다 또는 매 루프마다 호출되는 콜백 함수를 등록한다.
이 함수는 게임 루프나 애니메이션 업데이트처럼 주기적으로 실행이 필요한 작업을 구현할 때 유용하다.