MiniLibX 란?
X-Window 나 Cocoa 와 같은 프로그래밍 지식 없이도 그래픽 소프트웨어를 생성할 수 있도록 해 주는 자그마한 그래픽 라이브러리 이다. 단순한 창 생성, 그리기 툴, 이미지 기능, 이벤트 관리 등을 기본적으로 제공한다.
42Seoul so_long 과제는 MiniLibX를 제공하며, 이를 활용해 간단한 2D 그래픽 미니게임을 만드는 과제이다.
MiniLibX 컴파일
cc -L ./minilibx_opengl_20191021 -lmlx -framework OpenGL -framework AppKit
-L 옵션: 라이브러리의 경로를 지정
minilibx_opengl_20191021 : so_long 과제에서 제공한 opengl 폴더
MiniLibx 함수들
so_long 과제를 하면서 내가 사용했던 함수들 위주로 정리 해 보았다.
❄️ MiniLibx 시작 함수
mlx_init
#include <mlx.h>
void *mlx_init ();
다른 모든 mlx 함수들에 앞서서 사용해야 하는 함수
소프트웨어와 디스플레이를 연결하는 역할
반환값
- 연결 실패 시 null
- 연결 성공 시 non null 포인터
이 반환값은 주로 다른 함수들에서 식별자(void *mlx_ptr)로 쓰인다.
❄️ Window 관리 함수
mlx_new_window
void *mlx_new_window (void *mlx_ptr, int size_x, int size_y, char *title);
새로운 창을 생성해 주는 함수
매개 변수
- mlx_ptr : 연결 식별자
- size_x, size_y : 창 사이즈
- title : 창 상단바 부분에 표시할 이름
반환값
- 창 생성 실패 시 null
- 창 생성 성공 시 non null 포인터 창 식별자(void *win_ptr)
mlx_clear_window
int mlx_clear_window (void *mlx_ptr, void *win_ptr);
창을 검은색으로 초기화 해주는 함수
매개 변수
- mlx_ptr : 연결 식별자
- win_ptr : 창 사용 식별자
mlx_destroy_window
int mlx_destroy_window (void *mlx_ptr, void *win_ptr);
창을 삭제 하는 함수
매개 변수
- mlx_ptr : 연결 식별자
- win_ptr : 창 사용 식별자
❄️ 드로잉 함수
mlx_pixel_put
int mlx_pixel_put (void *mlx_ptr, void *win_ptr, int x, int y, int color);
지정된 픽셀을 그리는 함수
매개 변수
- x, y : 창의 x, y 좌표값
- color : 000 - 255 사이의 값 [ 투명도 | R | G | B / 0x00RRGGBB ]
mlx_string_put
int mlx_string_put (void *mlx_ptr, void *win_ptr, int x, int y, int color, char *string);
지정된 문자열을 그리는 함수
매개 변수
- string : 표시할 문자열
드로잉 함수는 창 밖의 모든 디스플레이를 삭제하므로 처리 속도가 느리다. 이 대신 밑에 나오는 이미지 함수로 대체하는 것을 고려하라.
❄️ 이미지 함수
mlx_xpm_to_image
mlx_xpm_file_to_image
mlx_png_file_to_image
void *mlx_xpm_to_image(void *mlx_ptr, char **xpm_data, int *width, int *height);
void *mlx_xpm_file_to_image(void *mlx_ptr, char *filename, int *width, int *height);
void *mlx_png_file_to_image(void *mlx_ptr, char *filename, int *width, int *height);
파일 또는 데이터를 받아 새로운 이미지를 생성해주는 함수
반환값
- 이미지 생성 실패 시 null
- 이미지 생성 성공 시 non null 포인터 이미지 식별자(void *img_ptr)
mlx_put_image_to_window
int mlx_put_image_to_window(void *mlx_ptr, void *win_ptr, void *img_ptr, int x, int y);
매개 변수
- img_ptr : 사용할 이미지 식별자
- win_ptr : 창 식별자
- x, y : 이미지가 위치할 창 내의 x, y좌표
mlx_get_data_addr
생성된 이미지의 정보를 반환하는 함수이다. 이 정보를 이용해 이미지를 수정할 수도 있다.
char *mlx_get_data_addr(void *img_ptr, int *bits_per_pixel, int *size_line, int *endian);
- 000 - 255 사이의 값 [ 투명도 | R | G | B / 0x00RRGGBB ]
- bpp : 픽셀 하나(색상 하나)를 표현하는 데 필요한 비트 수
endian 은 숫자를 1바이트씩 쪼개서 저장할 때 저장순서를 나타낸다.
빅엔디언: 큰 자릿수가 앞에 저장됨
리틀엔디언: 작은 자릿수가 앞에 저장됨
형변환 이유
char * 포인터에 연속으로 색상을 저장할 때는 4칸 간격으로 저장하고
저장한 값을 뽑아올 때도 4칸 간격으로 가져온다.
mlx_destroy_image
int *mlx_destroy_image(void *mlx_ptr, void *img_ptr);
생성했던 이미지를 삭제하는 함수
❄️ 이벤트 처리 함수
키보드나 마우스로 부터 이벤트를 입력 받으면 그것을 그래픽 창에 표시하도록 만들어주는 함수이다.
mlx_loop
int mlx_loop(void *mlx_ptr);
이벤트가 발생할 때 까지 기다린 다음 해당 이벤트와 연결된 사용자 정의 함수를 호출하는 무한 루프
mlx_hook
mlx_key_hook, mlx_mouse_hook, mlx_expose_hook 과 같은 이벤트 처리 함수들을 종합적으로 사용할 수 있는 함수
int mlx_hook(void *win_ptr, int x_event, int x_mask, int (*funct)(), void *param);
매개 변수
- x_event : 발생한 이벤트 코드값 -> 밑에 사이트에서 X11의 "X.h" 부분에 정의되어 있다.
- x_mask : MacOS에서는 사용하지 않는 값. 0으로 넣어서 안쓰는 것을 명시할 수 있도록 하자.
- x, y : 이미지가 위치할 창 내의 x, y좌표
Data Definitions for libX11
struct _XDisplay; typedef struct XColor; typedef void *XVaNestedList; typedef int (*XErrorHandler) (void); typedef int (*XIOErrorHandler) (void); typedef void (*XConnectionWatchProc) (void); typedef char *XPointer; typedef struct _XExtData { int number; st
refspecs.linuxfoundation.org
MacOS key code
https://wonillism.tistory.com/181
[Mac] 맥 키 코드
wonillism.tistory.com
'42Seoul' 카테고리의 다른 글
42Philosophers (0) | 2022.05.19 |
---|---|
Born2beroot 평가 준비 (1) | 2022.03.30 |
댓글