๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ˜ธ OpenGL

[Learn OpenGL] Creating a window(M1 Mac, Xcode)

by HOENDEV 2023. 11. 16.

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

 

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