OpenGL

[OpenGL] OpenGL특성 및 유용한 라이브러리

usingsystem 2024. 3. 25. 17:38
728x90

OpenGL(Open Graphics Library)은 컴퓨터 그래픽스를 위한 크로스 플랫폼 API(Application Programming Interface)입니다. 이는 2D 및 3D 그래픽 애플리케이션을 개발하기 위한 강력한 도구로 널리 사용됩니다. OpenGL은 다양한 운영 체제에서 동작하며, 컴퓨터, 모바일 기기, 게임 콘솔 등 다양한 플랫폼에서 지원됩니다.

 

void glClearColor

  • 화면을 지울 때 색깔을 뭐로 할지 결정한다.

void glClear

  • 화면을 클리어 시킨다.

GLFW

htttp://www.glfw.org/

GLFW는 크로스 플랫폼 라이브러리로서 Windows, macOS 및 Linux(OpenGL ES)와 같은 다양한 운영 체제에서 사용할 수 있습니다. 또한 C 언어 기반의 API를 제공하며, 다양한 언어 및 프레임워크에서 사용할 수 있는 바인딩이 있습니다. GLFW를 사용하면 OpenGL을 사용하여 그래픽 애플리케이션을 개발하는 데 필요한 많은 부분을 간편하게 처리할 수 있습니다.

OpenGL Core Features 와 Extension

OpenGL은 버전별로 새로운 기능이나 향상된 기능이 추가됩니다. 이러한 새로운 기능들은 크게 두 가지로 나눌 수 있습니다: 코어 기능(Core Features)과 익스텐션(Extensions).

  1. 코어 기능(Core Features):
    • 코어 기능은 OpenGL의 핵심 기능으로, 해당 버전의 스펙에 포함되어 있습니다.
    • 이러한 기능들은 모든 OpenGL 구현에서 지원해야 합니다.
    • 코어 기능을 사용하여 개발하면 프로그램이 더욱 이식성이 높아집니다. 즉, 다양한 시스템에서 동일한 코드가 동작할 가능성이 높아집니다.
    • 코어 기능은 주로 최신 하드웨어와 소프트웨어에서 지원되며, 안정성이 높고 보장되는 특징이 있습니다.
  2. 익스텐션(Extensions):
    • 익스텐션은 추가 기능으로, 코어 기능에는 포함되어 있지 않습니다.
    • 새로운 기능이나 실험적인 기능을 제공하며, OpenGL 구현이 지원하지 않을 수도 있습니다.
    • 익스텐션은 특정 하드웨어 또는 소프트웨어에서만 사용할 수 있을 수 있으므로, 이식성이 코어 기능에 비해 낮을 수 있습니다.
    • 일부 익스텐션은 나중에 OpenGL의 새로운 버전의 코어 기능으로 통합될 수도 있습니다.

OpenGL에서 코어 기능과 익스텐션을 나누는 이유는 다음과 같습니다:

  1. 기능의 확장성: 익스텐션을 통해 새로운 기능을 빠르게 도입하고 실험할 수 있습니다. 이는 OpenGL을 유연하고 새로운 기술에 대한 대응력을 높입니다.
  2. 안정성 및 이식성: 코어 기능은 안정적이고 모든 OpenGL 구현에서 지원되므로 이식성이 높습니다. 이는 OpenGL 프로그램의 안정성을 유지하고 다양한 플랫폼에서 동작할 수 있도록 합니다.
  3. 표준화: 코어 기능은 OpenGL의 표준적인 기능을 정의하며, 이러한 표준화는 OpenGL 개발자들에게 일관된 개발 경험을 제공합니다.

즉개발할 때 특정 그래픽카드에서 제공하는 extension 포함 기능을 사용하면 더 빠르게 동작할 수 있다.

하지만 다른 그래픽카드에서는 해당 기능을 제공하지 않을 수 있지만 corefeature이 있기 때문에 이식성은 보장할 수 있다.

GLEW와 extension

OpenGL의 Extension을 원활 하게 사용하기 위해 도와주는 라이브러리는 GLEW가 존재한다.

어떤 Extension이 사용가능 한지 체크가 가능하다. 하드웨어(그래픽카드)가 해당 extension을 지원한는 경우에만 결과가 나오며 지원하지 않으면 error처리를 한다.

 

사용방법

#include<glew.h>
glewInit();

if(glewIsSupported("GL_VERSION_4_0")//오픈GL 4.0이 있는지 판단
{
//오픈GL 4.0이 있을 때
}
else
{
//오픈GL 4.0이 없을 때
}

GLAD

GL version, extension을 사용할 수 있는 header file, source code를 생성해준다.

즉 라이브러리 제공 없이 직접 source code "glad.c"를 사용가능하다.

 

728x90