cc -L[mlx 폴더 경로] -lmlx -framework OpenGL -framework AppKit *.c
mlx_init으로 리턴받는 식별자이다.
과제를 진행하며 항상 사용하게 될 식별자로 소프트웨어와 디스플레이를 연결한다.
밑에 나올 mlx_win_list_t 구조체와 mlx_img_list_t 구조체에 대한 포인터를 멤버로 가진다. 각각 구조체는 연결 리스트 형태를 띄고 있어 한 개의 포인터로 모든 식별자를 관리하는 것으로 보인다.
typedef struct mlx_ptr_s { void *appid; mlx_win_list_t *win_list; mlx_img_list_t *img_list; void (*loop_hook)(void *); void *loop_hook_data; void *loop_timer; mlx_img_list_t *font; int main_loop_active; } mlx_ptr_t;
mlx_new_window로 리턴받는 식별자이다.
말 그대로 윈도우 창과 연관된 식별자이다.
자기 자신에 대한 포인터를 멤버로 가진다.
연결 리스트 형태로 모든 윈도우를 관리한다.
윈도우를 새로 생성할 때마다 새로 생성한 포인터가 next를 mlx_ptr_t의 mlx_win_list_t 포인터를 가리키며 헤드를 차지하게 된다.
typedef struct mlx_win_list_s { void *winid; mlx_img_ctx_t *img_list; int nb_flush; int pixmgt; struct mlx_win_list_s *next; } mlx_win_list_t;
mlx_new_image로 리턴받는 식별자이다.
mlx_win_list_t처럼 하나의 연결 리스트로 모든 이미지를 관리하게 된다.
typedef struct mlx_img_list_s { int width; int height; char *buffer; GLfloat vertexes[8]; struct mlx_img_list_s *next; } mlx_img_list_t;
void * mlx_init ();
X
디스플레이 장치와의 연결에 대한 식별자를 void * 타입의 포인터로 반환한다. 실패 시 NULL을 리턴한다.
위에서 언급했다시피 연결리스트 형태의 win 식별자 포인터와 img 식별자 포인터를 구조체 멤버로 가지고 있다.
void mlx_new_window (void mlx_ptr, int size_x, int size_y, char *title);
연결 식별자인 img_ptr 포인터를 리턴한다. 실패 시 NULL을 리턴한다.
실질적으로 리턴되는 식별자는 mlx_ptr->win_list이다.
동적할당된 새로운 win 식별자는 mlx 식별자의 win 식별자 연결리스트의 헤드를 차지하게 된다.void *mlx_new_window(mlx_ptr_t *mlx_ptr, int size_x, int size_y, char *title) { mlx_win_list_t *newwin; NSString *str; if ((newwin = malloc(sizeof(*newwin))) == NULL) return ((void *)0); newwin->img_list = NULL; newwin->next = mlx_ptr->win_list; newwin->nb_flush = 0; newwin->pixmgt = 1; mlx_ptr->win_list = newwin; //이하 생략
void mlx_new_image(void mlx_ptr, int width, int height);
이미지 식별자를 void *형태로 리턴한다. 실패 시 NULL을 리턴한다.
mlx_new_window와 방식이 유사하다.
char mlx_get_data_addr(void img_ptr, int bits_per_pixel, int size_line, int *endian);
이미지가 저장된 메모리 영역의 시작을 나타내는 주소를 리턴한다.
int mlx_put_image_to_window(void mlx_ptr, void win_ptr, void *img_ptr, int x, int y);
헤더 상에서는 int 리턴이라고 명시되어 있으나 실제 함수는 void 형. 리턴하지 않는다.
int mlx_hook(void win_ptr, int x_event, int x_mask, int (funct)(), void *param);
win_ptr : 윈도우 식별자.
x_event : 이벤트마다 정해진 일종의 코드가 존재. https://github.com/VBrazhnik/FdF/wiki/How-to-handle-mouse-buttons-and-key-presses%3F
x_mask : 사용하지 않는 함수? 기본적으로 0을 넣어준다.
int (*funct)() : 호출할 함수 포인터.
param :
없다.
모든 이벤트에 대해 hook이 가능. 자바스크립트의 addEventListener와 비슷한 개념같다.
mlx_ptr : mlx 식별자.
없다.
이벤트를 기다린 다음 이 이벤트와 연결된 사용자 정의 함수를 호출하는 무한 루프.
창을 렌더링한다.