본문 바로가기
42seoul/circle-2

[so_long] 01. MiniLibX

by saniii 2022. 4. 11.

 

 

 

 

https://harm-smits.github.io/42docs/libs/minilibx/prototypes.html#initialization-functions

 

Prototypes

Find code examples, optimization tricks, and much more.

harm-smits.github.io

이 분의 정리를 제 나름대로 번역...이라기보다는 독해했습니다....

 

 

# MiniLibX

X-Window, Cocoa 프로그래밍 지식없이, 그래픽 소프트웨어를 생성할 수 있는 쉬운 방법으로 간단한 윈도우 상성, 드로잉 툴, 이미지, 기본 이벤트 관리를 제공한다. 

  • MiniLibX의 API를 올바르게 사용하기 위해서는 mlx.h를 인클루드해야한다. 
    • mlx.h는 함수들의 프로토타입만을 포함하고 있다. 

 

MiniLibX is a tiny graphics library which allows you to do the most basic things for rendering something. This can vary from making a copy of Wolfenstein, to presenting complicated data in a simple form.

It is truly recommended to catch up on bitwise operands if you have no clue what they are.

 

MiniLibX는 렌더링을 위한 가장 기본적인 작업을 수행할 수 있는 작은 그래픽 라이브러리입니다. 이것은 Wolfenstein의 복사본을 만드는 것부터 복잡한 데이터를 간단한 형식으로 표시하는 것까지 다양할 수 있습니다.

비트 피연산자가 무엇인지 모를 경우 비트 단위 피연산자를 따라잡는 것이 좋습니다.

 

 

 

# OpenGL ,   Open Graphics Library

실리콘 그래픽스사에서 만든 2차원 및 3차원 그래픽스 표쥰 API 규격으로, 프로그래밍 언어 간 플랫폼 간의 교차 응용 프로그래밍을 지원

  • 약 250여개의 함수 호출을 이용하여 단순한 기하도형부터 복잡한 3차원 장면을 생성할 수 있다. 

 

 

# mlx.h

Initialization function

MiniLibX 사용을 시작할 때 거의 항상 필요한 표준 기능

 

  • mlx_init()
void	*mlx_init();
MiniLibX 라이브러리를 초기화한다. 다른 함수보다 먼저 호출되어야하며 초기화를 실패하면 NULL을 반환한다. 

 

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

새 윈도우 창을 생성한다. 윈도우 창의 인스턴스 포인터를 반환하며, 나중에 참조할 수 있도록 저장해야한다. 

+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터
    - int      size_x   : 윈도우 창 너비
    - int      size_y   : 윈도우 창 높이 
    - char *title       : 윈도우 창 이름

+ 반환
    - void  *  : 윈도우 창의 인스턴스 포인터
 
 
 
  • mlx_clear_window
int	mlx_clear_window(void *mlx_ptr, void *win_ptr);
현재의 창을 지운다. (권장하지 않는 함수)
이것보다는 삭제한 재사용된 이미지를 mlx_put_image_to_window로 사용하는 것이 좋다. 
(Instead it is recommended to use the function mlx_put_image_to_window with a recycled image that you have cleared.)
 
+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터
    - void *win_ptr : 윈도우 창 인스턴스 포인터

+ 반환
    - int  :  반환값이 없다. 

 
 
  • mlx_destroy_window
int	mlx_destroy_window(void *mlx_ptr, void *win_ptr);

윈도우창 인스턴스를 삭제한다. 

+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터
    - void *win_ptr : 윈도우 창 인스턴스 포인터

+ 반환
    - int  :  반환값이 없다. 
 

- mlx 창을 띄우고 나서 종료를 할 때는 이 함수를 사용하고 종료를 해야 메모리 누수가 발생하지 않는다. 

 

 

Util function

conversions(변환)이나  pixel writing(픽셀 쓰기)를 할 때 사용하는 함수 

 

  • mlx_get_color_value
unsigned int	mlx_get_color_value(void *mlx_ptr, int color);
(int) color에 따라 색상 값을 가져온다. 특정 비트에 쓰기 전에 스스로 정의한 int값을 변환할 때 유용하게 쓰인다. 
 
+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터
    - int     color      : 헥스코드(?)로 된 색상값

+ 반환
    - uint  :  변환된 색상. 
 
 
  • mlx_pixel_put
int	mlx_pixel_put(void *mlx_ptr, void *win_ptr, int x, int y, int color);
화면에 픽셀을 넣는다.
 
이 함수는 사용을 권장하지 않는다. 
이 함수는 윈도우 창 출력을 잠그고 강제로 새로 고침, 재계산을 실행한다.
그러므로 이미지를 렌더링하고 넣을 때 mlx_put_image_to_window 함수를 사용하는 것을 권장한다. 
 
+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터
    - void *win_ptr : 윈도우 창 인스턴스 포인터
    - int      x            : 그릴 픽셀의 좌표
    - int      y            : 그릴 픽셀의 좌표
    - int     color      : 픽셀에 그릴 색상

+ 반환
    - int  :  반환값이 없다. 
 

 

  • mlx_string_put
int	mlx_string_put(void *mlx_ptr, void *win_ptr, int x, int y, int color, char *string);

 

주어진 윈도우 창 안의 위치에 문자열을 넣는다. 

+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터
    - void *win_ptr : 윈도우 창 인스턴스 포인터
    - int      x            : 그릴 픽셀의 좌표
    - int      y            : 그릴 픽셀의 좌표
    - int     color      : 글자 색상
    - char *string    : 쓰려는 내용(문자열)

+ 반환
    - int  :  반환값이 없다. 
 
 
 

Image function

이미지 객체 관련 함수.

프레임을 하나씩 변경하는 효과적인 방법을 제공한다. 

 

  • mlx_new_image
void	*mlx_new_image(void *mlx_ptr,int width,int height);

새 MLX 호환이미지를 생성한다. 렌더링 중인 이미지를 버퍼링하는데 권장하는 방법이다. 

MLX 인스턴스 포인터를 허용하고, 너비와 높이를 필요로 한다. 

이미지 참조 포인터를 반환한다. 

+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터
    - int      width    : 그릴 픽셀의 좌표
    - int      height   : 그릴 픽셀의 좌표

+ 반환
    - int  :  반환값이 없다. 
 
 
 
  • mlx_get_data_addr
char	*mlx_get_data_addr(void *img_ptr, int *bits_per_pixel, int *size_line, int *endian);

Gets the memory address of the given image.

주어진 이미지의 메모리 주소를 가져온다.

Memory of images is weird.

이미지의 메모리는 이상하다.

It will set the line size in your given pointer.

주어진 포인터의 라인 사이즈를 설정한다. 

To get or set the value of the pixel (5, 100) in an image size of (500, 500), we would need to locate the position as follows:

(500,500)의 이미지 사이즈에서 픽셀 (5,100) 값을 가져오거나 설정하려면 다음과 같이 위치를 찾아야한다. 

int pos = (y * size_line + x * (bits_per_pixel / 8));

Here we multiply size_line by y as we need to skip y lines (and yes, line size is not equal to the amount of pixels in a line).

여기서 size_line에 y를 곱하면 y 라인들을 건너뛸 수 있다(라인의 크기는 라인의 픽셀 양과 동일하지 않다).

We then add the remaining x units multiplied by bits_per_pixel / 8 to align with the final location.

그런 다음 나머지 x 단위에 bits_per_pixel/8을 곱하여 최종 위치에 정렬한다.

To modify each pixel with the correct color, we need to do some more fancy stuff. As we need to align the bits before writing, we need to do the following for the best result:

각각의 픽셀을 정확한 색으로 수정하기 위해서,  쓰기 전에 비트를 정렬해야 하므로 최상의 결과를 위해 다음 작업을 수행힌다.

char *mlx_data_addr = mlx_get_data_addr();
*(unsigned int *)mlx_data_addr = color;

 

+ 파라미터
    - void *img_ptr : 
    - int    *bits_per_pixel : 
    - int    *size_line : 
    - int    *endian  : 

+ 반환
    - int  :  반환값이 없다. 

 

 

 

  • mlx_put_image_to_window
int	mlx_put_image_to_window(void *mlx_ptr, void *win_ptr, void *img_ptr, int x, int y);

Puts an image to the given window instance at location (x,y). This is the recommended way to write large amounts of graphical data in one go. Do mind that when changing the memory of the locations, it will be displayed directly on the window.

이미지 위치를 지정된 창 인스턴스(x,y)로 지정합니다. 이것은 많은 양의 그래픽 데이터를 한 번에 쓸 수 있는 권장 방법입니다. 위치 메모리를 변경할 때 창에 직접 표시됩니다.

 
+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터
    - void *win_ptr : 윈도우 창 인스턴스 포인터
    - void *img_ptr : 집어넣을 이미지 인스턴스 포인터
    - int      x            : 이미지를 넣을 좌표
    - int      y            : 이미지를 넣을 좌표

+ 반환
    - int  :  반환값이 없다. 

 

 

  • mlx_destroy_image
int	mlx_destroy_image(void *mlx_ptr, void *img_ptr);

Destroys an image instance accordingly.

이미지 인스턴스를 삭제합니다

+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터
    - void *img_ptr : 삭제할 이미지 인스턴스 포인터

+ 반환
    - int  :  반환값이 없다. 

 

 

Hooks

These functions will allow you to hook into the MiniLibX functions. This is core functionality and is required to use the library effectively. Please look at the Hooks chapter if you have no clue what this means.

이러한 기능을 통해 MiniLibX 기능에 연결할 수 있습니다. 이것은 핵심 기능이며 라이브러리를 효과적으로 사용하기 위해 필요합니다.
 
  • mlx_mouse_hook
int	mlx_mouse_hook (void *win_ptr, int (*funct_ptr)(), void *param);

Hook into mouse events. This will trigger every time you click somewhere in the given screen. Do mind that currently these mouse events barely work, it is therefore suggested to not use them.

마우스 이벤트에 연결합니다. 지정된 화면에서 원하는 위치를 클릭할 때마다 트리거됩니다. 현재 이러한 마우스 이벤트는 거의 작동하지 않으므로 사용하지 않는 것이 좋습니다.
+ 파라미터
    - void *win_ptr : 윈도우 창 인스턴스 포인터
    - int   (*funct_ptr)() : 해당 이벤트가 들어왔을 때 동작할 함수
    - void *param   :

+ 반환
    - int  :  반환값이 없다. 

 

  • mlx_key_hook
int	mlx_key_hook (void *win_ptr, int (*funct_ptr)(), void *param);

Hook into key events. This will trigger every time a key is pressed in a focused window. Unfocused windows will not register any key events.

주요 이벤트에 연결합니다. 이렇게 하면 초점을 맞춘 창에서 키를 누를 때마다 트리거됩니다. 포커스가 없는 창은 키 이벤트를 등록하지 않습니다.
 
+ 파라미터
    - void *win_ptr : 윈도우 창 인스턴스 포인터
    - int   (*funct_ptr)() : 해당 이벤트가 들어왔을 때 동작할 함수
    - void *param   :

+ 반환
    - int  :  반환값이 없다. 
 
 
 
  • mlx_expose_hook
int	mlx_expose_hook (void *win_ptr, int (*funct_ptr)(), void *param);

Has no defined behaviour.

 

+ 파라미터
    - void *win_ptr : 윈도우 창 인스턴스 포인터
    - int   (*funct_ptr)() : 
    - void *param   :

+ 반환
    - int  :  반환값이 없다. 

 

 

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

Hook into the loop.

+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터
    - int   (*funct_ptr)() : 
    - void *param   :

+ 반환
    - int  :  반환값이 없다. 

 

  • mlx_loop
int	mlx_loop (void *mlx_ptr);

Loop over the given MLX pointer. Each hook that was registered prior to this will be called accordingly by order of registration.

지정된 MLX 포인터를 루프합니다. 이전에 등록된 각 후크는 등록 순서에 따라 호출됩니다.
+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터

+ 반환
    - int  :  반환값이 없다. 

main에 넣고 main함수가 끝나지 않도록하면서 들어오는 이벤트를 잡아 지정한 hook대로 동작하게 한다. 

 

 

Image conversion

These are functions that are useful for loading sprites or even saving images.

스프라이트를 로드하거나 이미지를 저장하는 데 유용한 기능입니다.
 
  • mlx_xpm_to_image
void	*mlx_xpm_to_image(void *mlx_ptr, char **xpm_data, int *width, int *height);

Converts xpm data to a new image instance.

xpm 데이터를 새 이미지 인스턴스로 변환합니다.

 

+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터
    - char **xpm_data : 
    - int    *width    : 
    - int    *height   : 

+ 반환
    - void  *  : 

 

  • mlx_xpm_file_to_image
void	*mlx_xpm_file_to_image(void *mlx_ptr, char *filename, int *width, int *height);

Converts an xpm file to a new image instance.

xpm 파일을 새 이미지 인스턴스로 변환합니다.

+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터
    - char *filename : 이미지로 변환할 xpm파일의 이름(경로포함)
    - int    *width    : 이미지의 너비
    - int    *height   : 이미지의 높이

+ 반환
    - void  *  : 변환한 이미지 포인터

 

  • mlx_png_file_to_image
void    *mlx_png_file_to_image(void *mlx_ptr, char *file, int *width, int *height);

Converts a png file to a new image instance.

png 파일을 새 이미지 인스턴스로 변환합니다.

 
+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터
    - char *file        : 이미지로 변환할 png파일의 이름(경로포함)
    - int    *width    : 이미지의 너비
    - int    *height   : 이미지의 높이

+ 반환
    - void  *  : 

 

 

 

Mouse function

These functions will allow you to hide, show, move or get the mouse position.

이러한 기능을 사용하여 마우스 위치를 숨기거나 표시하거나 이동할 수 있습니다.

 

 
  • mlx_mouse_hide
int     mlx_mouse_hide();

Hides the mouse.

 
+ 반환
    - int  :  반환값이 없다. 
 
 
 
  • mlx_mouse_show
int     mlx_mouse_show();

마우스를 보여준다. 

 

+ 반환
    - int  :  반환값이 없다. 

 

 

  • mlx_mouse_move
int     mlx_mouse_move(void *win_ptr, int x, int y);

커서를 주어진 위치로 이동한다. 

+ 파라미터
    - void *win_ptr : 윈도우 창 인스턴스 포인터
    - int      x            : 그릴 픽셀의 좌표
    - int      y            : 그릴 픽셀의 좌표

+ 반환
    - int  :  반환값이 없다. 

 

 

  • mlx_mouse_get_pos
int     mlx_mouse_get_pos(void *win_ptr, int *x, int *y);

현재 윈도우 위의 마우스 위치를 가져온다. 

 

+ 파라미터
    - void *win_ptr : 윈도우 창 인스턴스 포인터
    - int      x            : 그릴 픽셀의 좌표
    - int      y            : 그릴 픽셀의 좌표

+ 반환
    - int  :  반환값이 없다. 

 

 

 

 

Key auto repeat

These functions will allow you to either enable or disable key autorepeat.

이러한 기능을 통해 키 자동 반복을 활성화하거나 비활성화할 수 있습니다.
 
  • mlx_do_key_autorepeatoff
int	mlx_do_key_autorepeatoff(void *mlx_ptr);

Disable key auto repeat.

 
+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터

+ 반환
    - int  :  반환값이 없다. 
 
 
  • mlx_do_key_autorepeaton
int	mlx_do_key_autorepeaton(void *mlx_ptr);

Enable key auto repeat.

 
+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터

+ 반환
    - int  :  반환값이 없다. 

 

 

 

 

 

Un-categorized

 

  • mlx_do_sync
int	mlx_do_sync(void *mlx_ptr);
** Synchronize frames of all windows in MLX.
+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터

+ 반환
    - int  :  반환값이 없다. 

 

 

 

  • mlx_sync
int	mlx_sync(int cmd, void *param);

 

  • mlx_get_screen_size
int	mlx_get_screen_size(void *mlx_ptr, int *sizex, int *sizey);
** Get the current screen size (because macOS is sheit)
+ 파라미터
    - void *mlx_ptr : mlx 인스턴스 포인터
    - int    *sizex     : 그릴 픽셀의 좌표
    - int    *sizey     : 그릴 픽셀의 좌표

+ 반환
    - int  :  반환값이 없다. 

 

 

 

 

 

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

특정 이벤트가 들어오면 원하는 함수대로 동작하도록 지정할 수 있다. 

+ 파라미터
    - void *win_ptr : 윈도우 창 인스턴스 포인터
    - int      x_event : 후킹할 이벤트
    - int      x_mask : 후킹할 이벤트 (MAC에서는 사용하지 않음)
    - int   (*funct)() : 이벤트 발생시 호출할 함수(를 가리키는 포인터)
    - void *param   : 필요한 매개변수 저장

+ 반환
    - int  :  반환값이 없다. 

- X_EVENT

  > X11 events 표현할 수 있는 이벤트들의 번호가 지정되어 있다. 

https://harm-smits.github.io/42docs/libs/minilibx/events.html#x11-events

 

 

 

 

 

 

 

 

 

 

 

 

[참고]

https://github.com/sejinpark12/MiniLibX_man_kor/blob/main/mlx.md 

https://ko.wikipedia.org/wiki/OpenGL 

https://harm-smits.github.io/42docs/libs/minilibx/prototypes.html#initialization-functions  

댓글