이번 mlx 사용법은 제가 코딩에서 사용한 mlx함수들 위주로 정리 할 것입니다.
mlx함수에 대해 더 알고싶으시다면 yeosong님의 git을 참고해주세요.
1. 시작
(1) mlx_init()
void *mlx_init()
- mlx함수들을 사용하기에 앞서 반드시 필요한 함수.
- 디스플레이와 내 소프트웨어를 연결시켜준다.
- 연결 실패 시 NULL을 return한다.
(2) mlx_new_window(void mlx_ptr, int size_x, int size_y, char title)
void *mlx_new_window(void mlx_ptr, int size_x, int size_y, char *title)
- 스크린에 새 창을 띄운다.
- mlx_ptr : 위 이미지에서 사용된 mlx_init()의 값이 들어있는 void *mlx를 사용하면 된다.
- size_x, size_y : 스크린의 사이즈.
- char *title : 스크린 이름.
- 창 생성 실패 시 NULL을 return 한다.
위의 코드를 실행시키면 아래와 같은 창이 뜬다.
2. 이벤트 관리
(1) mlx_loop()
int mlx_loop(void *mlx_ptr)
- 무한루프를 돌며 키보드나 마우스에서 받는 이벤트를 기다리는 함수이다.
만약 이 함수가 없다면 위의 코드를 실행시켰을때 검은 화면이 뜨지 않고 바로 꺼지는 것을 알 수 있다.
- 이 함수는 리턴값이 없다.
(2) mlx_loop_hook()
int mlx_loop_hook(void *mlx_ptr, int (*func)(), void *param)
- 아무 이벤트도 발생하지 않을 시 전달된 함수를 실행한다.
- (*func) 원하는 함수 포인터
- 함수로 넘겨줄 변수
(3) mlx_hook()
int mlx_hook(void *win_ptr, int x_event, int x_mask, int (*funct)(), void *param)
- 사용자 정의 핸들러
- x_event : press_key, release, exit(x버튼 클릭)등 원하는 이벤트 설정 가능
- x_mask : 0
- (*funct) : 원하는 기능의 함수 포인터
- *param : 함수로 넘겨줄 변수
mlx_hook을 통해 키보드나 마우스로 입력을 받는다.
mlx_loop_hook으로 main_loop 함수를 실행시킨다.
3. 이미지 만들기, 이미지 조작하기
이미지 만들기
(1) mlx_new_image()
void *mlx_new_image(void *mlx, int width, int height)
- width * height 사이즈의 빈 이미지 생성 및 이미지 포인터를 반환한다.
- image 정보 수정은 mlx_get_data_addr 함수를 통해 가능하다.
- 오류 발생 시 NULL포인터를 반환한다.
(2) mlx_get_data_addr()
char *mlx_get_data_addr(void *img, int *bpp, int *size_line, int *endian)
- img 포인터와 int형 포인터를 넘겨주면 char형 배열의 주소로 변환
- bpp(bits_per_pixel) : 한 픽셀을 표현하는데 필요한 비트 수
- size_line : 이미지의 width를 표현하는데 필요한 비트 수
- endian : 리틀 엔디언이면 0, 빅 엔디언이면 1
- 해당 배열에 들어가서 이미지 정보 수정 가능
- bpp, size_line, endian은 함수에 인자로 넘겨주기만 하면 된다.
(3) mlx_put_image_to_window()
int mlx_put_image_to_window(void * mlx, void *win, void *img, int x, int y)
- win에 해당하는 창에서 좌표(x, y)부터 (x + 이미지의 width, y + 이미지의 height)만큼 이미지를 그린다.
하얀색 이미지를 출력하기 위한 코드
- 출력 결과
- 정리한 부분
(4) mlx_xpm_file_to_image()
void *mlx_xpm_file_to_image(void *mlx, char *filename, int *width, int *height)
- filename과 int형 변수의 주솟값을 넘겨주면 xpm파일을 이미지 형태로 변환후 이미지 포인터를 반환한다.
- 이미지 정보 수정은 mlx_get_data_addr() 함수로 가능하다.
- 이 함수를 이용하면
기둥 이미지도 출력하고
슬라임도 출력이 가능하다.
이상 mlx함수 사용법이였습니다!
참고자료
yeosong님의 git
구름코딩 님의 velog
너무 멋있어용