#include <iostream>
#include <glad/glad.h>
#include <GLFW/glfw3.h>
// DESC :> window 크기 변경 시마다 callback 함수 호출
void framebuffer_size_callback(GLFWwindow* window, int width, int height);
// DESC :> Input 이벤트
void processInput(GLFWwindow* window);
int main()
{
// DESC :> glfw initialize
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
GLFWwindow* window = glfwCreateWindow(800, 500, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
// DESC :> glad initialize
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
// DESC :> rendering infinity loop
while (!glfwWindowShouldClose(window))
{
processInput(window);
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
// DESC :> 할당된 모든 메모리 삭제
glfwTerminate();
return 0;
}
void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{
glViewport(0, 0, width, height);
}
void processInput(GLFWwindow* window)
{
if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS)
glfwSetWindowShouldClose(window, true);
}
이전에 OpenGL 설정 확인으로 사용했던 코드가 OpenGL의 기본 골격 코드이다.
기본 순서는 아래와 같다.
- glfw 초기화 및 Window 설정
- Window 생성
- glad 초기화
- Render Loop 실행
- Window Double Buffer 실행
- 입력 및 출력 이벤트 처리
- 사용된 메모리 삭제
가장 기본이 되는 실행이기 때문에, 추가적인 기능은 해당 형태에 덧붙여 사용하면 된다.
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwInit() - glfw를 초기화 하여, Window 생성을 할 수 있는 상태로 설정해준다.
glfwWindowHint() - 생성할 Window의 기본 설정을 해준다.
GLFWwindow* window = glfwCreateWindow(800, 500, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
std::cout << "Failed to create GLFW window" << std::endl;
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
glfwCreateWindow() - 설정된 glfw 기반으로, Window의 크기를 설정 및 생성한 Window 반환하여 준다.
glfwTerminate() - 사용된 메모리를 삭제하는 함수이다.
프로그램이 종료되기 직전에 반드시 호출해야 한다.
Window 생성이 실패하였기 때문에, glfw를 초기화해준 메모리를 삭제하는데에 사용되었다.
glfwMakeContextCurrent() - Double Buffer로 사용할 Window를 등록하는 함수이며, 등록되면 Thread로 설정되어 사용된다.
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
std::cout << "Failed to initialize GLAD" << std::endl;
return -1;
}
gladLoadGLLoader() - glad 초기화 및 glfw에 설정하는 함수이다.
glad를 초기화 한 이후에, Call Back 함수들을 등록하여 사용할 수 있다. (ex>glfwSetFramebufferSizeCallback)
while (!glfwWindowShouldClose(window))
{
processInput(window);
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwWindowShouldClose() - 현재 Window가 종료되었는지 확인하는 함수
glfwSwapBuffers() - 이전 Frame에 그려진 Buffer와 현재 Frame에 그려진 Buffer를 Swap (Double Buffer)
glfwPollEvents() - 현재 Frame의 입력 및 출력 이벤트를 모두 처리
'게임 개발 끄적 > OpenGL' 카테고리의 다른 글
[OpenGL] Shader File (0) | 2020.02.07 |
---|---|
[OpenGL] Shader Program (0) | 2019.11.04 |
[OpenGL] Shader Rendering (0) | 2019.10.15 |
[OpenGL] 환경 설정 구축 (0) | 2019.10.14 |