실행 화면

 

소스코드

#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

 

+ Recent posts