OpenGL์ ์์ํ๊ธฐ ์ํด ํ์ํ ๋๊ฐ์ง๊ฐ ์์ต๋๋ค.
OpenGL ์ปจํ ์คํธ์ ์ ํ๋ฆฌ์ผ์ด์ ์ฐฝ์ ๋๋ค.
๊ทธ๋ฌ๋ ์ด๋ฌํ ์์ ์ ์ด์ ์ฒด์ ๋ง๋ค ๋ค๋ฅด๊ณ , OpenGL์ ์๋์ ์ผ๋ก ์ด๋ฌํ ์์ ์ ์ถ์ํ ์์ผฐ๊ธฐ ๋๋ฌธ์
๊ฐ๋ฐ์๊ฐ ์ฐฝ์ ์์ฑํ๊ณ ์ปจํ ์คํธ๋ฅผ ์ ์ํ๊ณ ์ฌ์ฉ์ ์ ๋ ฅ์ ๋ชจ๋ ์ฒ๋ฆฌํด์ผํฉ๋๋ค.
๋คํ์ด ์ด๋ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ฝค ์์ต๋๋ค.
GLUT, SDL, SFML, GLFW ๋ฑ์ด ์์ต๋๋ค.
์ฌ๊ธฐ์๋ GLFW๋ฅผ ์ฌ์ฉํ๊ฒ ์ต๋๋ค.
GLFW
GLFW๋ OpenGL์ ๋์์ผ๋ก ํ๋ C์ธ์ด๋ก ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๋๋ค.
GLFW๋ ํ๋ฉด์ ๋ ๋๋งํ๊ธฐ ์ํด ํ์ํ ๊ธฐ๋ณธ ์์๋ฅผ ์ ๊ณตํฉ๋๋ค.
OpenGL ์ปจํ ์คํธ๋ฅผ ์์ฑํ๊ณ , ์ฐฝ ๋งค๊ฐ๋ณ์๋ฅผ ์ ์ํ๋ฉฐ, ์ฌ์ฉ์ ์ ๋ ฅ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
GLFW ์ค์น
homebrew๋ฅผ ์ฌ์ฉํ์ฌ ์ค์นํฉ๋๋ค.
brew install glfw
Xcode์์ Command Line Tool๋ก ํ๋ก์ ํธ๋ฅผ ์์ฑํฉ๋๋ค.
Build Settings ์์ Header Search Paths์ glfw๋ฅผ ์ค์นํ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํฉ๋๋ค.
/opt/homebrew/Cellar/glfw/3.3.8/include
Build Phases ์ Link Binary With Libraries์
libglfw.3.3.dylib๊ณผ OpenGL์ ์ถ๊ฐํฉ๋๋ค.

Signing & Capabilities ์์ Harded Runtime์ Disable Library Validation์ ์ฒดํฌํฉ๋๋ค.

GLAD
์ ๊ณผ์ ๊น์ง ํ๊ฒ ๋๋ฉด GLFW๋ ์ค์น๊ฐ ๋ฉ๋๋ค.
ํ์ง๋ง ์์ง ํ์ํ ๊ฒ์ด ํ๋ ๋ ์์ต๋๋ค.
OpenGL ๋๋ผ์ด๋ฒ์๋ ๋ค์ํ ๋ฒ์ ์ด ์์ผ๋ฏ๋ก ๋๋ถ๋ถ์ ํจ์ ์์น๋ ์ปดํ์ผ ํ์์๋ ์๋ ค์ง์ง ์๊ณ
๋ฐํ์์ ์ฟผ๋ฆฌํด์ผ ํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ํ์ํ ํจ์์ ์์น๋ฅผ ๊ฒ์ํ๊ณ ๋์ค์ ์ฌ์ฉํ ์ ์๋๋ก ํจ์ ํฌ์ธํฐ์ ์ ์ฅํ๋ ๊ฒ์ด
๊ฐ๋ฐ์์ ์๋ฌด ์ ๋๋ค.
ํด๋น ์์น๋ฅผ ๊ฒ์ํ๋ ๊ฒ์ OS๋ง๋ค ๋ค๋ฅด๋ฉฐ, ์์ง ์ ์ธ๋์ง ์์ ํ์ํ ์ ์๋ ๊ฐ ํจ์์ ๋ํด
์ด๋ฐ ์์ ์ ์ํํ๋ ๊ฒ์ ๋ฒ๊ฑฐ๋ก์ด ์์ ์ ๋๋ค.
๋คํํ ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ์ค GLAD๋ผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์ต๋๋ค.
GLAD ์ค์น
https://glad.dav1d.de
gl Version 1.0Version 1.1Version 1.2Version 1.3Version 1.4Version 1.5Version 2.0Version 2.1Version 3.0Version 3.1Version 3.2Version 3.3Version 4.0Version 4.1Version 4.2Version 4.3Version 4.4Version 4.5Version 4.6None
glad.dav1d.de
์ ์ฌ์ดํธ์์ ๋ค์๊ณผ ๊ฐ์ด ์ค์ ํ๊ณ GENERATEํฉ๋๋ค.

ZIPํ์ผ์ ๋ค์ด๋ฐ์ต๋๋ค.

์์ถ์ ํผ ํ์ผ์ ํ๋ก์ ํธ ํด๋๋ก ์ฎ๊ธฐ๊ณ GLFW์์ ํ๋ ๊ฒ๊ณผ ๊ฐ์ด Header ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐํด์ค๋๋ค.
/Users/won/Documents/HelloOpenGL/glad/include
Build Phases ์ Complie Sources์ glad.c ํ์ผ๋ ์ถ๊ฐํด ์ค๋๋ค.

#include <glad/glad.h>
#include <GLFW/glfw3.h>
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);
}
int main(void)
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
GLFWwindow* window = glfwCreateWindow(800, 600, "LearnOpenGL", NULL, NULL);
if (window == NULL)
{
glfwTerminate();
return -1;
}
glfwMakeContextCurrent(window);
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress))
{
return -1;
}
glViewport(0, 0, 800, 600);
glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
while(!glfwWindowShouldClose(window))
{
processInput(window);
glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
glfwSwapBuffers(window);
glfwPollEvents();
}
glfwTerminate();
return 0;
}
์ด์ ์์ฝ๋๋ฅผ ์คํํ๋ฉด
์ฐฝ์ ๋์ธ ์ ์๊ฒ ๋ฉ๋๋ค.

'๐ธ OpenGL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Learn OpenGL] Hello Triangle - 4 (0) | 2023.11.18 |
|---|---|
| [Learn OpenGL] Hello Triangle - 3 (0) | 2023.11.17 |
| [Learn OpenGL] Hello Triangle - 2 (0) | 2023.11.17 |
| [Learn OpenGL] Hello Triangle - 1 (0) | 2023.11.16 |
| [Learn OpenGL] OpenGL (0) | 2023.11.15 |