본문 바로가기

C Language

MiniLibx 기본 구현 알고리즘

MiniLibx 기본 구현 알고리즘

입력 검사:
c
if (input_check(argc, argv[1]))
    return (1);
명령줄 인자의 수와 첫 번째 인자(파일 이름)를 검사합니다.
문제가 있으면 프로그램을 종료합니다.
파일 읽기:
c
read_file(&fdf, argv[1]);
입력 파일을 읽어 fdf 구조체에 데이터를 저장합니다.
이 과정에서 3D 맵 데이터가 로드될 것입니다.
MiniLibX 초기화:
c
minilibx_init(&fdf, argv[1]);
MiniLibX 그래픽 라이브러리를 초기화합니다.
윈도우를 생성하고 그래픽 컨텍스트를 설정합니다.
FDF 초기화:
c
fdf_init(&fdf);
FDF 프로그램에 필요한 추가 설정을 초기화합니다.
카메라 설정, 변환 매트릭스 등이 여기서 설정될 수 있습니다.
이미지 초기화:
c
image_init(&fdf);
렌더링에 사용될 이미지 버퍼를 초기화합니다.
키 이벤트 훅 설정:
c
mlx_hook(fdf.win_ptr, 2, 1l, key_hook, &fdf);
키 입력 이벤트를 처리할 함수를 등록합니다.
2는 키 누름 이벤트, 1l은 이벤트 마스크입니다.
윈도우 종료 이벤트 훅 설정:
c
mlx_hook(fdf.win_ptr, 17, 1l << 15, destroy, &fdf);
윈도우 종료 이벤트(X 버튼 클릭 등)를 처리할 함수를 등록합니다.
17은 윈도우 종료 이벤트, 1l << 15는 이벤트 마스크입니다.
메인 루프 시작:
c
mlx_loop(fdf.mlx_ptr);
MiniLibX의 메인 이벤트 루프를 시작합니다.
이 함수는 프로그램이 종료될 때까지 반환되지 않습니다.
이 main 함수는 FDF 프로그램의 전체 구조를 보여줍니다. 파일 입력부터 그래픽 초기화, 이벤트 처리 설정, 그리고 메인 루프 실행까지 프로그램의 전체 흐름을 관리합니다.

 

첫 번째 줄의 경우:
```c
mlx_hook(fdf.win_ptr, 2, 1L<<0, key_hook, &fdf);
```
여기서 2는 KeyPress 이벤트를 나타내며, 올바른 마스크는 `1L<<0` 또는 `KeyPressMask`입니다[1][8].

두 번째 줄의 경우:
```c
mlx_hook(fdf.win_ptr, 17, 1L<<15, destroy, &fdf);
```
17은 DestroyNotify 이벤트를 나타내며, `1L<<15`는 `ExposureMask`로 올바른 마스크입니다[1][8].

2l이나 4l과 같은 값은 유효한 이벤트 마스크가 아닙니다. 이벤트 마스크는 항상 2의 거듭제곱 형태(1L<<n)여야 합니다[8].

그러나 MacOS 버전의 MiniLibX에서는 X11 마스크를 지원하지 않으므로, 마스크 값(x_mask 인자)은 무시됩니다. 이 경우 0을 사용하는 것이 좋습니다[1][6].

따라서 MacOS에서는 다음과 같이 작성하는 것이 좋습니다:

```c
mlx_hook(fdf.win_ptr, 2, 0, key_hook, &fdf);
mlx_hook(fdf.win_ptr, 17, 0, destroy, &fdf);
```

이렇게 하면 플랫폼 간 호환성을 유지하면서 의도한 이벤트를 올바르게 처리할 수 있습니다.