OpenGL에는 이미 '개체'개념이 있습니다.
예를 들어, ID가있는 것은 객체로 통할 수 있습니다 (특별히 'Objects'라고 불리는 것들도 있습니다). 버퍼, 텍스처, 정점 버퍼 오브젝트, 정점 배열 오브젝트, 프레임 버퍼 오브젝트 등. 약간의 작업으로 수업을 둘러 쌀 수 있습니다. 또한 컨텍스트가 확장을 지원하지 않는 경우 사용되지 않는 이전 OpenGL 함수로 쉽게 넘어갈 수있는 방법을 제공합니다. 예를 들어 VertexBufferObject는 glBegin (), glVertex3f () 등을 사용하여 대체 될 수 있습니다.
기존 OpenGL 개념에서 벗어나야하는 몇 가지 방법이 있습니다. 예를 들어 버퍼에 메타 데이터를 버퍼 객체에 저장하려고합니다. 예를 들어 버퍼가 꼭짓점을 저장하는 경우입니다. 꼭짓점의 형식은 무엇입니까 (예 : 위치, 법선, 텍스 코드 등). 사용하는 기본 요소 (GL_TRIANGLES, GL_TRIANGLESTRIP 등), 크기 정보 (저장된 부동 수, 삼각형 수 등). 그것들을 draw arrays 명령에 쉽게 꽂기 위해.
나는 당신이 보는 것이 좋습니다 OGLplus . OpenGL에 대한 C ++ 바인딩입니다.
또한 glxx 는 확장 로딩에만 해당됩니다.
OpenGL API를 래핑하는 것 외에도 약간 더 높은 수준의 빌드를 만들어야합니다.
예를 들어 모든 셰이더를로드하고 사용하는 모든 셰이더를 담당하는 머티리얼 매니저 클래스가 있습니다. 또한 속성을 그들에게 전송하는 책임이 있습니다. 그렇게하면 다음과 같이 전화 할 수 있습니다 : materials.usePhong (); material.setTexture (sometexture); material.setColor (). 공유 균일 버퍼 객체와 같은 최신 기능을 사용하여 쉐이더가 1 블록에서 사용하는 모든 속성을 포함하는 하나의 큰 버퍼를 가질 수 있기 때문에 유연성이 향상됩니다. 지원되는 경우 균일 한 루틴을 사용하여 1 개의 큰 모 놀리 식 셰이더를 사용하고 서로 다른 셰이더 모델간에 교체하거나 여러 개의 작은 셰이더를 사용할 수 있습니다.
또한 셰이더 코드 작성을 위해 GLSL 사양에서 소비되는 것을 볼 수 있습니다. 예를 들어 #include는 셰이더 로딩 코드에서 매우 유용하고 구현하기가 매우 쉽습니다 ( ARB 확장 기능 도 있음). 또한 지원되는 확장명에 따라 코드를 즉시 생성 할 수 있습니다 (예 : 공유 유니폼 객체 사용 또는 일반 유니폼 사용으로 대체).
마지막으로 장면 그래프, 특수 효과 (흐림, 광선), 그림자, 조명 등과 같은 여러 렌더링 패스가 필요한 작업을 수행하는 고급 렌더링 파이프 라인 API가 필요합니다. 그리고 그 위에 그래픽 API와는 관련이 없지만 세계의 객체 만 다루는 게임 API가 있습니다.