programing

OpenGL ES 2.0 다중 프로그램 또는 다중 셰이더 또는 무엇입니까?

itsource 2021. 1. 16. 09:47
반응형

OpenGL ES 2.0 다중 프로그램 또는 다중 셰이더 또는 무엇입니까? 어떻게 작동합니까?


문제 (TL; DR)

내 문제는 근본적으로 OpenGL ES 2.0이 여러 셰이더를 작성하고 사용할 것으로 기대하는 방식을 모른다는 것입니다. 또는 사람이 그렇게 할 것이 타당하거나 예상되는 경우.

여기서 근본적인 질문은 다음과 같습니다. 만약 제가 사과, 빛나는 바위, 퍼지 메시가 모두 같은 3D 세계에 있고 모두 다른 셰이더 프로그램으로 가장 잘 그려졌지만 동일한 mvpMatrix를 사용한다면 어떻게 모두 사용할 수 있을까요? 내가 작성한 가장 적합한 셰이더를 모두 사용하도록 동일한 OpenGL 렌더링을 사용합니까?

내가 무슨 짓을 한

그래서 화면에 개체의 윤곽을 그릴 수 있다는 점에서 완벽하게 작동하는 Android 게임용 기본 OpenGL ES 2.0 프로그램을 작성했습니다. 그러나 다른 것은 없습니다. 셰이더가 다음과 같이 보이기 때문입니다.

정점 셰이더

uniform mat4 uMVPMatrix;
attribute vec4 aPosition;

void main() {
    gl_Position = uMVPMatrix * aPosition;
}

조각 셰이더

void main() {
    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}

이제 그들은 매우 기본적입니다. 내가 더 이상 진행하지 않은 이유는 다른 모든 오브젝트에 적용 할 하나의 셰이더를 작성해야하는지 아니면 여러 셰이더를 사용해야하는지 알 수 없기 때문입니다. 여러 셰이더를 사용하여 여러 다른 개체를 그리는 경우 어떻게 효율적으로 수행 할 수 있습니까?

나는 이것이 OpenGL ES 2.0을 매일 수행하는 모든 사람에게 기본 지식이어야한다는 느낌을 받았으므로 누군가가 내 질문에 답하거나 올바른 방향을 알려줄 수 있기를 바랍니다.

나는 가지고있다:

  • 여러 튜토리얼을 보았습니다. 가장 기본적인 쉐이더 외에는 아무것도 사용하지 않습니다.
  • 전체 OpenGL ES 2.0 GLSL 사양을 읽으십시오 (그 중 어느 것도 사용 용도에 대해서는 언급하지 않았습니다. 함께 맞추는 방식보다는 모든 것이 무엇을했는지에 관한 것입니다).
  • 내 셰이더를 약간 수정하려고했습니다.

그래서 저는 OpenGL 워크 플로우를 이해하는 데 가까워 졌으면하는데 아직 거기에 있지 않은 것 같습니다.

편집 : 나중에 잘 찾았습니다.

응용 프로그램이 OpenGL ES 2.0 용으로 작성된 경우 응용 프로그램에서 장면을 렌더링하는 데 필요한 모든 작업을 수행하는 많은 스위치와 조건이있는 단일 셰이더를 만들지 마십시오. 대신 특정 집중 작업을 수행하는 여러 셰이더 프로그램을 컴파일하십시오.

이는 iOS OpenGL ES 2.0 가이드 라인 에서 가져온 것 입니다.


여러 셰이더를 사용할 수 있지만 셰이더간에 전환하는 데 비용이 많이들 수 있으므로 셰이더의 모든 개체를 그린 다음 다음 셰이더로 전환하고 해당 셰이더를 사용하여 모든 개체를 그리는 등의 방법을 사용하는 것이 좋습니다.
셰이더간에 전환하려면 glUseProgram().

참조 URL : https://stackoverflow.com/questions/9209700/opengl-es-2-0-multiple-programs-or-multiple-shaders-or-what-how-does-it-work

반응형