매우 기초적인 OpenGL 프로그램 코드이다.
#include <stdio.h>
#include <GL/glew.h>
#include <GLFW/glfw3.h>
// 창 크기
const GLint WIDTH = 800, HEIGHT = 600;
int main()
{
// GLFW 초기화
if (!glfwInit())
{
printf("GLFW 초기화 실패\n");
glfwTerminate();
return 1;
}
// GLFW 윈도우 속성 셋업
// OpenGL 버전
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); // 버전 3.3
// Core profile = 이전 버전 호환성 없음
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
// 앞으로의 호환성을 허용
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
GLFWwindow* mainWindow = glfwCreateWindow(WIDTH, HEIGHT, "Test", NULL, NULL);
if (!mainWindow)
{
printf("GLFW 창 생성 실패\n");
glfwTerminate();
return 1;
}
// 프레임 버퍼 크기 정보를 가져온다
int bufferWidth, bufferHeight;
glfwGetFramebufferSize(mainWindow, &bufferWidth, &bufferHeight);
// glew가 사용할 컨텍스트 설정
glfwMakeContextCurrent(mainWindow);
// 최신 확장 기능을 허용
glewExperimental = GL_TRUE;
if (glewInit() != GLEW_OK)
{
printf("GLEW 초기화 실패\n");
glfwDestroyWindow(mainWindow);
glfwTerminate();
return 1;
}
// 뷰포트 크기 설정
glViewport(0, 0, bufferWidth, bufferHeight);
// 창이 닫힐 때까지 반복
while (!glfwWindowShouldClose(mainWindow))
{
// 사용자 입력 이벤트 가져오고 처리
glfwPollEvents();
// 초록색 띄우기
glClearColor(0.f, 1.f, 0.f, 1.f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(mainWindow);
}
return 0;
};
내부가 초록색으로 채워친 창을 만드는 코드이다.
glfw로 윈도우를 셋업 및 생성해주었고, glew도 initialize해준 뒤(아직 glew의 기능을 쓴 것은 없음) while문 안에서 화면을 초록색으로 계속하여 업데이트해주고 있다.
항상 glewInit() 이전 glfwInit()을 수행해야 한다. glew는 상호작용할 context가 먼저 만들어져있어야 하기 때문이다.
마지막의 glfwSwapBuffers의 의미는, 내가 지금 그린 것을 이제 모니터에 뿌리겠다는 의미이다.
대부분의 OpenGL 프로그램은 2개의 씬을 가지고 돌아가는데, 하나는 지금 그리는 중인 씬, 하나는 지금 보여지는 씬이다.
glfwSwapBuffer는 이 2개의 씬을 교대시켜준다는 의미이다.
실행 결과:
'OpenGL > 공부' 카테고리의 다른 글
[OpenGL] ModelView Matrix (glm::lookAt) (0) | 2024.06.01 |
---|---|
[OpenGL] Polygon Rasterization (Bilinear Interpolation) (0) | 2024.05.28 |
[OpenGL] Model Matrix (Translate, Rotate, Scale) (0) | 2024.05.28 |
[OpenGL] 쉐이더 사용, 삼각형 그리기 (+ VAO, VBO) (0) | 2024.05.27 |
[OpenGL] OpenGL 시작, 개발 환경 세팅 (0) | 2024.05.25 |