Unborn 8.0 Yellow Pointer
본문 바로가기
42 SEOUL/2_frect-ol

[42Seoul/fract'ol] mlx 함수

by 에삐니 2022. 7. 27.
728x90

miniLibX기술을 연마하고 복소수의 수학적 개념을 발견/사용하고 컴퓨터 그래픽의 최적화 개념을 엿볼 수 있는 기회가 될 것입니다. 

mlx를 사용하기 위해 Makefile에 다음을 추가합니다.

cc -lmlx -framework OpenGl -framework AppKit -Imlx 소스파일명.c

 

실행 결과 화면

 

사용 예시

#include <mlx.h>

typedef struct	s_data {
	void    *img;
	char    *addr;
	int    bits_per_pixel;
	int    line_length;
	int    endian;
}		t_data;

int	main(void)
{
	void	*mlx;
	void	*mlx_win;
	t_data	img;

	mlx = mlx_init();
	mlx_win = mlx_new_window(mlx, 1920, 1080, "Hello world!");
	img.img = mlx_new_image(mlx, 1920, 1080);
	img.addr = mlx_get_data_addr(img.img, &img.bits_per_pixel, &img.line_length,&img.endian);
	my_mlx_pixel_put(&img, 5, 5, 0x00FF0000);
	mlx_put_image_to_window(mlx, mlx_win, img.img, 0, 0);
	mlx_loop(mlx);
}

 

mlx_init

void * mlx_init ();

mlx 초기화로 mlx를 사용하기 위해 가장 먼저 사용하는 함수입니다. 

 

mlx_new_window

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

새 창을 스크린에 띄웁니다. size_x, size_y는 창의 크기, title은 창 타이틀바에 표시될 문구, mlx_ptr = mlx_init이 반환한 연결 식별자입니다. 

 

mlx_new_image

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

새 이미지를 메모리에 생성시킵니다.

 

mlx_get_data_addr

char mlx_get_data_addr ( void img_ptr, int bits_per_pixel, int size_line, int *endian );
  •  img_ptr : 사용할 이미지를 지정합니다.
  • bits_per_pixel : 픽셀 색상으로 이미지 깊이라고도 합니다.
  • size_line : 이미지의 한 줄의 메모리에 저장하는 데 사용되는 바이트 수로 다른 줄로 이동하는데 필요합니다.
  • endian : 이미지의 필셀 색상을 리틀 엔디안 또는 빅 엔디안으로 저장해야하는지 알려줍니다.

 

mlx_put_image_to_window

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

(x,y) 위치의 지정된 창 인스턴스에 이미지를 넣습니다. 한 번에 많은 양의 그래픽 데이터를 작성하는 데 권장되는 방법이며 위치의 메모리를 변경할 때 창에 직접 표시됩니다.

 

mlx_destroy_image

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

 창 개체를 삭제합니다.

 

mlx_key_hook

int mlx_key_hook(void *win_ptr, int (*f)(), void *param);

주요 이벤트에 연결합니다. 포커스 된 창에서 키를 누를 때마다 트리거 됩니다. 초점이 맞지 않는 창은 주요 이벤트를 등록하지 않습니다.

  • win_ptr : 윈도우 인스턴스
  • (*f)() : 핸들러 함수로 (int button, int x, int y, void *param)와 같이 호출됩니다.
  • param : 이벤트에 제공할 매개변수입니다.

 

mlx_mouse_hook

int mlx_mouse_hook(void *win_ptr, int (*f)(), void *param);

마우스 이벤트에 연결합니다. 지정된 화면의 아무 곳이나 클릭할 때마다 트리거 됩니다.현재 이러한 마우스 이벤트는 거의 작동하지 않으므로 사용하지 않는 것이 좋습니다.

  • win_ptr : 윈도우 인스턴스
  • (*f)() : 핸들러 함수로 (int key_code, void *param)와 같이 호출됩니다.
  • param : 이벤트에 제공할 매개변수입니다.

 

mlx_loop

int mlx_loop ( void *mlx_ptr );

그래픽 시스템은 양방향으로 한쪽에서는 스크린에 디스플레이할 필셀과 이미지 등을 명령하고 한쪽에서는 키보드나 마우스로부터 이벤트를 받을 수 있습니다. 이 이벤트를 받기 위해서는 mlx_loop를 사용해야 하며 키보드나 마우스로부터 받은 이벤트를 기다립니다. 또한 이벤트에 연결되는 사용자 정의 함수를 호출합니다. 

 

https://harm-smits.github.io/42docs/

 

Home

42Docs is a documentation website for the new 2019 curriculum’s assignment

harm-smits.github.io

 

728x90
반응형

댓글