[so_long] 1. mlx 라이브러리

aqualung·2023년 1월 26일

🖥 so_long

1. mlx 라이브러리

mlx 라이브러리는 X-WindowCocoa에 대한 지식 없이도 스크린에 기본적인 렌더링할 수 있도록 도와주는 그래픽 라이브러리입니다.

교육용으로 자체 제작된 라이브러리라 기능이 매우 제한적입니다.

과제에서는 openglmms 두 버전이 제공됩니다.

openglmake하면 libmlx.a라는 정적라이브러리가 생성되며

mmsmake하면 libmlx.dylib라는 동적라이브러리가 생성됩니다.

📌 정적라이브러리
정적라이브러리는 다른 목적파일이나 라이브러리와 링킹되어 실행파일로 만들어집니다. 때문에 별도의 작업없이 실행파일만으로 라이브러리 내부의 코드를 이용할 수 있게 됩니다. 하지만 프로그램이 실행될때마다 매번 라이브러리도 메모리에 올라가야 하기 때문에 메모리 효율이 떨어질 수 있습니다.

📌 동적라이브러리
동적라이브러리는 런타임에 라이브러리를 참조해 원하는 내용만 가져와 사용하는 방식입니다. 여러 프로세스들이 동적라이브러리의 가상페이지를 참조할 수 있어 메모리를 효율적으로 쓸 수 있지만 오버헤드가 존재해 속도는 정적라이브러리에 비해 느린 편입니다.

mac os x에서 동적라이브러리를 이용할 때 경로 설정을 따로 해줘야하는 불편함이 있어 정적라이브러리를 이용하여 컴파일하였습니다.

Makefile에 다음 컴파일옵션들을 추가합니다.

-L./mlx -lmlx -I./mlx
-framework OpenGL -framework Appkit
  • -L : 라이브러리의 위치
  • -l : 라이브러리의 이름(libmlx.a의 lib와 확장자는 생략 가능)
  • -I : mlx.h의 위치
  • 내부적으로 mac os xOpenGLAppkit을 사용하기 때문에 컴파일시 명시해줘야 합니다.

2. mlx.h

함수에 대한 설명입니다.

1) mlx_init

void *mlx_init()

프로그램과 디스플레이 장치를 연결해주는 함수입니다.

다른 mlx.h 함수들을 이용하기 위해 선행되어야 합니다.

반환

연결에 대한 식별자를 반환합니다.

2) mlx_new_window

void *mlx_new_window(void *mlx_ptr, int size_x, int size_y, char *title)

window를 생성해주는 함수입니다.

인자

  • void *mlx_ptr - mlx_init으로 받은 연결에 대한 식별자이다.
  • int size_x - 가로 너비
  • int size_y - 세로 너비
  • char * title - window의 제목

반환

window에 대한 식별자를 반환합니다.

3) mlx_loop

int mlx_loop(void *mlx_ptr)

키보드와 마우스에 대한 event를 처리하는데에 이용됩니다.

event를 받도록 대기하며 event를 받았다면 hook함수에 등록된 callback함수를 실행시킵니다.

반환

int를 반환하도록 되어 있지만 실제로는 무엇도 반환하지 않도록 무한루프를 돌고 있습니다.

3) mlx_hook

int mlx_hook(void *win_ptr, int x_event, int x_mask, int (*funct)(), void *param)

인자

x_eventx_maskevent에 대한 값입니다. functevent를 받았을때 실행할 callback함수이며 이 callback함수에 param을 넘겨줍니다.

4) mlx_loop_hook

int mlx_loop_hook(void *mlx_ptr, int (*funct_ptr)(), void *param)

event를 받지 않을때 실행되는 함수입니다.
window델타타임마다 이 함수를 통해 렌더링 되게 됩니다.

인자

mlx_hook과 마찬가지로 callback함수와 callback함수에 넘겨줄 인자로 param을 받습니다.

0개의 댓글