본문 바로가기
42Seoul

MiniLibX를 공부해보자 - 42Seoul [so_long]

by 멍진 2022. 3. 22.

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_hookmlx_mouse_hookmlx_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

댓글