소스코드
#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <stdlib.h>
int main(void)
{
if (!glfwInit())
exit(EXIT_FAILURE);
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
GLFWwindow* window = glfwCreateWindow(1080, 720, "title", NULL, NULL);
if (!window)
{
glfwTerminate();
exit(EXIT_FAILURE);
}
glfwMakeContextCurrent(window);
int framebuf_width, framebuf_height;
glfwGetFramebufferSize(window, &framebuf_width, &framebuf_height);
glViewport(0, 0, framebuf_width, framebuf_height);
if (glewInit() != GLEW_OK)
{
glfwTerminate();
exit(EXIT_FAILURE);
}
// NDC space (-1.0 ~ 1.0)
float vertices[] = {
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
};
GLuint VAO; // 아래 모든 작업을 하나의 state로 저장할 OpenGL Object ID (vertex array)
GLuint VBO; // vertex buffer object ID (vertex buffer)
glGenVertexArrays(1, &VAO); // VAO 생성
glBindVertexArray(VAO); // VAO를 OpenGL context에 연결(bind)
glGenBuffers(1, &VBO); // pram:(만들고자 하는 버퍼의 갯수, 버퍼의 ID 포인터)
glBindBuffer(GL_ARRAY_BUFFER, VBO); // param:(target, 버퍼의 ID)
glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); // parm:(target, 복사할 데이터 크기, 복사할 데이터, 힌트)
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GL_FLOAT), (void*)0); // location pointer parm:(0, 3차원, float, no normalize, stride, start offset)
glEnableVertexAttribArray(0);
//glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 5 * sizeof(GL_FLOAT), (void*)(3 * sizeof(GL_FLOAT))); // uv pointer example
//glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, 0); // ID 대신 0을 넣으면 unbind
glBindVertexArray(0);
while (!glfwWindowShouldClose(window))
{
glClearColor(1.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glBindVertexArray(VAO);
glDrawArrays(GL_TRIANGLES, 0, 3);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
함수 정리
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 4)
기계에서 호환하는 OpenGL major 버전 설정
ex) Version 4.5 - Major 4
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 5)
기계에서 호환하는 OpenGL minor 버전 설정
ex) Version 4.5 - Minor 5
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE)
OpenGL Profile 설정
GLFW_OPENGL_CORE_PROFILE / GLFW_OPENGL_COMPAT_PROFILE / GLFW_OPENGL_ANY_PROFILE 가 올 수 있음
OpenGL 버전이 3.2 이하면 반드시 GLFW_OPENGL_ANY_PROFILE을 사용해야 함.
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE)
현재 OpenGL 버전에서 deprecated된 함수들을 삭제할지 여부
GL_TRUE / GL_FALSE 가 올 수 있음
glVertexAttribPointer(GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const void * pointer)
https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glVertexAttribPointer.xhtml
glVertexAttribPointer - OpenGL 4 Reference Pages
www.khronos.org
다른 함수들은 아래 레퍼런스나 구글에 쳐보면 잘 나온다.
https://www.glfw.org/docs/3.3/window_guide.html#GLFW_OPENGL_PROFILE_hint
GLFW: Window guide
This guide introduces the window related functions of GLFW. For details on a specific function in this category, see the Window reference. There are also guides for the other areas of GLFW. Window objects The GLFWwindow object encapsulates both a window an
www.glfw.org
'DirectX | OpenGL' 카테고리의 다른 글
[OpenGL] 기초 4. 삼각형에 vertex shader / fragment shader 적용 (0) | 2021.12.02 |
---|---|
[OpenGL] 기초 2. GLFW로 window 띄우기 (0) | 2021.12.02 |
[OpenGL] 기초 1. Visual Studio 2019에서 OpenGL, GLFW, GLES 사용하기 (0) | 2021.12.02 |