계기

42 과제중에서는 그래픽 과제가 있다. 이 과제는 42에서 제공해주는 minilibx(mlx) 라는 그래픽 라이브러리를 사용하여, GUI 화면을 출력하는 응용프로그램을 만드는 과제이다.

그런데 문제는, mlx 라는 놈이 맥에서만 돌아간다는 점이다. (...)

특히 코로나로 인해서 클러스터에 자주가지 못하는 상황에서는 윈도우 노트북으로는 정말 답이 없다.

그나마 나는 운좋게 맥북을 대여할 수 있었고, 그래픽 과제를 수월하게 진행 할 수 있었지만,

다른 카뎃들을 위해서 윈도우용 mlx를 만들어야겠다고 마음 먹었다.

특히 mlx로 TENET 이라는 게임을 제작하였는데, 윈도우로 배포하려다 보니까 너무 필요했다.

그래서 윈도우, 리눅스, 맥 모두 호환되는 SDL 2.0 을 사용하여 mlx를 다시 만들어보도록 하겠다.

SDL 에 대한 자세한 설명은 다음을 참고

1단계 목표 설정

mlx 에 있는 모든 기능을 혼자서 다 구현하는것은 현실적으로

따라서 so_long 서브젝트를 기준으로 주로 많이 쓰이는 함수를 우선으로 구현하도록 하겠다.

mlx.h 을 열어보면 mlx 에서 제공해주는 다양한 함수들이 있는데, 그중에서 아래의 함수만 구현하겠다.

// mlx 초기화 관련
void	*mlx_init();

// window 관련
void	*mlx_new_window(void *mlx_ptr, int size_x, int size_y, char *title);
int	mlx_destroy_window(void *mlx_ptr, void *win_ptr);

// image 관련
void	*mlx_new_image(void *mlx_ptr,int width,int height);
void    *mlx_png_file_to_image(void *mlx_ptr, char *file, int *width, int *height);
int	mlx_put_image_to_window(void *mlx_ptr, void *win_ptr, void *img_ptr,
				int x, int y);

// 이벤트 관련
int	mlx_key_hook (void *win_ptr, int (*funct_ptr)(), void *param);
int	mlx_loop_hook (void *mlx_ptr, int (*funct_ptr)(), void *param);
int	mlx_loop (void *mlx_ptr);
int	mlx_hook(void *win_ptr, int x_event, int x_mask,
                 int (*funct)(), void *param);

기술적 이슈

SDL 2.0 에서 이미지를 띄우는 방식은 Surface 와 Texture 두가지 방식이 있다.

둘중에 어느방식이 mlx에 어울리는지 잘 모르기떄문에, 먼저 Surface 방식으로 만들어보고,

문제가 있거나 개선이 필요하다고 생각되면 Texture 로 리펙토링 할것이다.