2023. 1. 9. 02:02ㆍ개발얘기/vulkan
12시가 넘은 이 시간.. 내일은 출근이지만..
설치만 하고 잠들기가 아쉬워 좀 더 진행을 해본다.
예제 코드 및 원문 튜토리얼은 여기서 확인 가능하다.
vulkan/vulkan.h를 직접 포함시켜도 되지만 GLFW 포함하기 전에 GLFW_INCLUDE_VULKAN을 선언하면
자동으로 vulkan.h를 로드한다.
#define GLFW_INCLUDE_VULKAN
#include <GLFW/glfw3.h>
또 나는 main.cpp가 지저분해지는게 싫어서 define.h 를 따로 만들었다.
//
// Define.h
//
#ifndef Define_h
#define Define_h
#pragma once
#include <iostream>
#include <stdexcept>
#include <cstdlib>
#endif /* Define_h */
아직은 다 오류 리포팅을 위한 헤더만 추가되있다.
GLFW 초기화
전체적인 코드는 튜토리얼에 다 나와있고, glfw 초기화 및 소멸을 살펴보겠다.
void initWindow() {
glfwInit();
glfwWindowHint(GLFW_CLIENT_API, GLFW_NO_API);
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
window = glfwCreateWindow(WINDOW_WIDTH, WINDOW_HEIGHT, "hey", nullptr, nullptr);
}
맨 처음 glfwInit()을 호출하여 라이브러리를 초기화하고 Window 생성 가능한 상태로 설정해 준다.
GLFW는 주로 glfwWindowHint로 설정 가능하다. glfwCreateWindow가 호출되기 전까지 그 값을 보유하고 있다. 이게 엄격한 제약조건은 아니라서, 요청한 것과 다르게 설정될 수 있다고 한다.
void glfwWindowHint(int hint, int value);
- hint : 설정하고자 하는 옵션, 여기에서 설정가능한 다양한 사항들을 확인 가능하다.
- value: 옵션 값을 설정할 정수
설정된 hint를 기반으로 window와 conterxt를 생성하고 생성된 window를 반환한다.
GLFWwindow* glfwCreateWindow(int width, int height, const char* title, GLFWmonitor* monitor, GLFWwindow* share);
- width, height : 윈도우 크기
- title : 창 이름
- monitor : 전체 화면으로 할 경우 window가 덮일 모니터를 지정해야 한다. 지정하지 않으면 창 모드가 된다.
- share : openGL 에만 관련돼서 몰라도 됨
창을 만든 후에는 glfwSetWindowMonitor를 사용해서 창모드/전체화면 모드 전환도 가능하다.
GLFW 메인 루프
void mainLoop() {
while (!glfwWindowShouldClose(window)) {
glfwPollEvents();
}
}
int glfwWindowShouldClose(GLFWwindow* window);
GLFW가 종료되도록 지시되었는지 확인한다. 지정된 윈도우의 close flag를 체크한다. 닫아야 하는 상황이면 설정돼있던 close flag(왜 int형일까?)가 true로 리턴된다.
이 close flag는 glfwSetWindowShouldClose로 명시적으로 설정할 수도 있다. (esc 키 누르면 창 꺼지는 거)
void glfwPollEvents(void);
현재 프레임의 입출력 이벤트를 모두 처리한다. 윈도우 상태를 업데이트하며 정해진 함수를 호출한다.
GLFW 해제
void cleanup() {
glfwDestroyWindow(window);
glfwTerminate();
}
창이 닫히면 glfw 리소스를 삭제하고 GLFW 자체를 종료하여 리소스를 정리해야 한다.
void glfwDestroyWindow(GLFWwindow *window)
지정된 윈도우와 컨텍스트를 해제한다. 이 함수를 호출하면 더 이상 콜백이 호출되지 않는다.
지정된 창의 컨텍스트가 메인 스레드에서 현재 상태 이면, 소멸되기 전에 분리된다.
void glfwTerminate(void)
사용된 메모리를 삭제한다. 반드시 프로그램을 종료하기 전 호출해야 한다.
이제 실행 해본다. "hey"라는 제목의 800 * 600짜리 텅빈 윈도우가 X버튼을 누를때까지 뜨고 있다.
근데 나는 답답한 창모드가 싫다.. 다음시간에 전체화면 모드도 설정해 보겠다.
여기까지 GLFW를 이용한 윈도우 설정을 진행하였다.
낯설지만 복잡하지 않아 좋았다.
졸려서 자러간다

'개발얘기 > vulkan' 카테고리의 다른 글
[VULKAN]4. Window Surface (0) | 2023.01.17 |
---|---|
[VULKAN] 3. Device 초기화 (0) | 2023.01.16 |
[VULKAN] 2. Instance 초기화 (2) | 2023.01.10 |
[VULKAN] 0. 시작하기 (2) | 2023.01.08 |