2012-04-27 3 views
6

OpenGL ES는 이론적으로 모든 OpenGL ES 프로그램이 PC에서 일반 OpenGL로 실행될 수 있다는 것을 의미하는 OpenGL의 하위 집합이라고 주장합니다. 그러나 OpenGL ES는 일부 기능 (glOrthoglOrthof)에 대해 약간 다른 이름 지정 규칙을 사용합니다. 이게 중요합니까? OpenGL ES 응용 프로그램이 OpenGL GPU/드라이버를 그대로 사용하거나 다시 컴파일 할 수 있습니까?OpenGL과 OpenGL ES의 역 호환이 가능합니까?

답변

9

OpenGL GPU/OpenGL GPU/드라이버와 함께 작동 할 수 있습니까? 아니면 다시 컴파일해야합니까?

번호 일종의하지만 이후 당신은 당신이하지 당신을 위해, ES 1.x에서보다는 2.X에 대해 얘기하고 의미 glOrtho을 가져왔다. ES 3.0에서는 몇 가지 새로운 기능을 믹스에 추가합니다. 자세한 내용은 하단을 참조하십시오.

OpenGL ES 1.x는 OpenGL의 모든 버전의 하위 집합이 아닙니다. 그것들은 꽤 중요한 차이점입니다. 이 공통 부분 집합으로 코딩 할 수도 있지만, 그렇게하려면 많이 버릴 수 있습니다. 두 플랫폼에서.

ES 2.x는 데스크톱 GL 2.1과 훨씬 더 유사하지만 여전히 적절한 하위 집합은 아닙니다. 예를 들어 glTexImage2D은 근본적으로 다른 동작을합니다. 데스크탑 GL에서 마지막 세 매개 변수는 텍스처의 실제 형식에 영향을주지 않습니다. ES 2.0에서는 이 텍스처의 실제 이미지 형식 인을 정의합니다. ES2.0 및 데스크톱 GL 2.1에서 똑같은 작업을 수행 할 수있는 유효한 glTexImage2D 명령을 작성할 수 있지만, 크기가 큰 내부 형식 선택과 같이 데스크톱 GL에서 많은 것을 버리게됩니다.

일반적으로 추상화로 API 차이점을 정리할 수 있습니다. ES 2.0에서 큰 문제는 GLSL입니다.

GLSL ES는 몇 가지 새로운 키워드, 특히 정밀 한정자를 추가했습니다. 데스크톱 GLSL 1.20 (GL 2.1과 짝을 이루는)에는 해당 키워드가 없습니다. 데스크톱 GLSL 1.30 이상 이지만 GL 3.0 하드웨어에 바인딩됩니다. 따라서 데스크탑 GL 2.1 하드웨어에서 수정없이 실행되는 ES 2.0 용 셰이더를 작성하는 것은 어렵습니다.

이것은 물론 극복 할 수없는 것은 아닙니다. 서로 다른 언어에 #ifdef 될 수있는 몇 가지 현명한 #define을 사용하면이 작업을 상당히 간단하게 처리 할 수 ​​있습니다. 그러나 당신은 여전히 ​​이러한 모든 경우를 찾아야합니다.

최근에 릴리스 된 OpenGL ES 3.0은 OpenGL 3.3의 적절한 하위 집합이 아니지만 ES 2.0보다 다소 비슷합니다. 정말로 중요한 것은 GLSL 3.30이 GLSL ES 3.00과 거의 동일하다는 것입니다. 따라서 두 개체 사이에서 셰이더를 훨씬 쉽게 교환 할 수 있습니다.

ES 3.0에는 3.3에없는 몇 가지 제한 사항이 있지만 일반적으로 이러한 사항은 쉽게 피할 수 있으며 대부분은 나쁜 연습입니다. ES 3.0의 기능 중 일부는 기술적으로 GL 3.3이 아니지만 일반적으로 GL 3.3의 핵심 확장 (예 : ARB_texture_storage 및 호환성을 높이기위한 ES3_compatibility 확장)에 있습니다. 그러나 실제로는 glTexImage2D이 실제로 두 가지 경우에서 같은 방식으로 작동한다는 점에서 훨씬 쉽게 작업 할 수 있습니다. 이제 interop은 둘 다 사용할 수없는 기능을 피하는 문제입니다.

4

현재 버전의 OpenGL (4.x)과 OpenGL ES (2.x)는 비슷하지만, 재 컴파일만으로는 이식 코드가 작동하지 않을만큼의 차이점이 있습니다. @Nicol Bolas가 지적한 것처럼, OpenGL ES에는 존재하지 않는 많은 기능들이 있지만 일부 API는 약간 다르게 동작합니다. 또한 플랫폼 지원은 매우 다릅니다 (즉, 렌더링 컨텍스트 설정 등).

OpenGL ES 2.0은 이전의 직접 모드 스타일 (OpenGL 2.1 및 이전 버전에서 제공됨)에서보다 최신의 셰이더 기반 모델로 모델이 변경되어 실제로 1.x와 역 호환되지 않습니다.

OpenGL v3 및 v4는 많은 이전 시대의 2.x 기능을 더 이상 사용하지 않지만 주요 드라이버는 이전 버전의 지원을 계속하기 위해 호환 모드를 유지합니다.

OpenGL 4.x의 GL_ARB_ES2_compatibility extension은 데스크탑과 모바일 버전을보다 가깝게 만들어 휴대 성을 향상시킵니다.

glOrthoglOrthof과 같은 사소한 차이점은 분명 관리하기 쉽지만 다른 기능을위한 래퍼를 작성해야합니다.

+0

"OpenGL (4.x) 및 OpenGL ES (2.x)의 현재 버전은 매우 유사하며 대체로 호환됩니다. * 실제로 post * 2.1 기능을 * 사용하지 않는 경우. 정수 텍스처, 균일 버퍼 오브젝트, separate_shader_objects, 고급 셰이더 (기하학 및 모자이크)와 같이 계속 진행할 수 있지만 요점은 분명합니다. 당신이 데스크탑 GL 코드를 못쓰게된다면 그것들은 비슷합니다. –

+2

고마워. 위의 내용을 적절하게 업데이트 했으므로 지금 당장 바란다. 나는 너의 대답을 너무 upvoted. – gavinb

관련 문제