2014-12-20 2 views
1

완성 된 고정 함수 파이프 라인을 쉐이더로 에뮬레이트하는 것이 가능합니까? By the fly는 셰이더를 사용하는 고정 함수 코드를 다시 작성하지 않고 고정 함수 GLES 호출을받는 중간 드라이버의 종류를 의미합니다 (고정 파이프 라인에서 프로그래밍 가능한 파이프 라인으로의 일대일 직접 변환이 없으므로 전체 프레임을 캐싱 할 수 있음). 동등한 GLES2.0 호출을 출력합니다.OpeGLES1.1 고정 함수 파이프 라인을 즉시 프로그래밍 가능한 파이프 라인으로 변환

그리고 가능한 경우에도 실제로 얼마나 많은 작업을 할 수 있습니까?

+0

나는 이것들이 어떤 안드로이드 장치에서 발생하므로 OpenGl의 두 가지 다른 버전을 지원할 필요가 없다는 것을 읽었습니다. –

답변

0

ES 1.1의 대부분은 매우 단순 해 보입니다. 변형, 조명 및 재질과 같은 일반적인 고정 된 기능은 모두 셰이더 코드로 직접 변환됩니다.

완전히 교체하려면 분명히 모든 기능을 구현해야합니다. ES 1.1 진입 점을 살펴본 결과, ES 2.0으로 직접 변환되지 않는 몇 가지 항목을 발견했습니다. 마지막 항목은 특히 문제가있는 것 같습니다.

  • 임의의 클리핑 평면. ES 2.0에서는 사용할 수 없지만 버텍스 쉐이더에서 거리를 계산 한 다음 조각 쉐이더에서 클리핑 된 파편을 버리면 셰이더에서 에뮬레이트 할 수 없습니다.
  • ES 1.1에는 "팔레트 텍스처"라는 것이 있습니다. 내 이해에서, 그것은 ES 2.0에서 구현하는 것이 다소 힘들어 보이지만 가능합니다. 조각 쉐이더에서 두 가지 수준의 샘플링을 사용하여 두 개의 텍스처, 즉 인덱스와 팔레트에 대한 텍스처가 필요할 것입니다.
  • ES 1.1은 조각 셰이더 이후에 실행되는 조각 단위 작업의 일부로 논리 연산 (glLogicOp)을 지원합니다. ES 2.0에는이 기능이 없으므로이를 복제하는 좋은 방법을 생각할 수 없습니다. 마음에 떠오르는 유일한 점은 렌더링하고, 결과를 다시 읽고, CPU에서 논리 연산을 수행 한 다음 결과 이미지를 렌더링하는 것입니다. 그리고 수술이 바뀔 때마다 그렇게해야합니다.
+0

featureset 관점에서 직접 변환 할 수없는 특정 API 기능이 있다는 것을 알고 있지만 내 질문은 GLES2.x 스트림을 사용하여 실제로 GLES2.x를 사용하도록 응용 프로그램을 수정하지 않고 즉석에서 GLES2.x 스트림으로 변환하는 것입니다. GLES1.1. – Divick

+0

물론, 그게 내가 대답 한 것입니다. "쉐이더 코드로 변환"에 대해 말하면, 쉐이더 코드를 작성해야하는 것이 아니라 쉐이더 코드로 ES 1.1 상태를 변환하는 코드를 작성한다는 의미입니다. 나는 그 대답을 나중에 더 명확하게하려고 노력할 수있다. –

+0

나는 비슷한 질문을 받았다. http://stackoverflow.com/questions/18806175/opengl-fixed-pipeline-shader-defaults-mimic-fixed-pipeline-with-shaders 질문에 대한 의견을 살펴보면, 셰이더를 사용하는 고정 된 기능 파이프 라인을 모방하는 것은 고정 된 기능 파이프 라인에있을 수있는 모든 종류의 다른 상태에서 가능하지 않을 수 있습니다. – Divick

관련 문제