2016-10-07 4 views
1

다른 개체에 대해 OpenGL에서 두 가지 셰이더 프로그램을 사용해야합니다.OpenGL에서 다른 셰이더 프로그램을 사용합니까?

다른 셰이더 프로그램간에 전환하려면 glUseProgram()을 사용해야한다는 것을 알았지 만 그에 대한 정보는 많지 않습니다.

서로 다른 객체에 사용하는 두 개의 다른 셰이더 프로그램이있는 경우 각 셰이더 프로그램에 대해 VAO 및 VBO 생성 및 바인딩은 어떻게됩니까 (& 경우)? 당신의 OpenGL에서 개체를 렌더링 할 때

+1

나는 이것을 섬세하게 넣으려고 노력할 것입니다. 당신은 "지금까지는 전체적으로 OpenGL에 매우 익숙합니다."라고 말했지만보다 겸손하게 주제에 접근하는 것이 도움이 될 수 있습니다. 최신 OpenGL은 셰이더 프로그램을 실행하는 기반 위에 구축되며 대부분의 기술은 그 기반 위에 구축됩니다. –

+0

@DietrichEpp 글쎄, 꽤 익숙한 나는 대학에서 여러 프로젝트를했는데 그 중 일부는 꽤 복잡했다. 하지만 문제는 우리가 항상 기본 코드를 작성했거나 최신 OpenGL이 아니었기 때문입니다. 그래서 저는 처음으로이 특정 부분에 직면하고 있으며 이것은 제가이 질문을하는 방법입니다. – nurgan

답변

3

, 코드는 다음과 같이 표시됩니다

  • 바인드 프로그램을 glUseProgram으로, 세트 유니폼을 glUniform4fv, glUniformMatrix4fv와 등

  • 바인드 정점 배열 glBindVertexArray로 .

  • glActiveTextureglBindTexture으로 필요한 텍스처를 바인딩하십시오.

  • 다른 상태로 변경하십시오 (예 : glEnable, glDisable, glBlendFunc).

  • glDrawArrays 또는 glDrawElements으로 그립니다.

  • 원하는 경우 상태를 기본값으로 다시 설정하십시오.

이들은 모두 바닐라 OpenGL 3 코드에서하는 경향이 있습니다. 이미이 부분을 사용해야합니다.

다른 셰이더 프로그램으로 여러 개체를 작성해야하는 경우 위의 단계를 여러 번 수행하면됩니다. 상태 변경은 여러 프로그램에 대해 동일한 상태를 사용하려는 경우 생략 될 수 있습니다. 예를 들어, 동일한 VAO, 동일한 질감, 동일한 혼합 기능 등을 사용할 수 있습니다.

자세한 예제를 찾고있는 경우 OpenGL 3 그리기 명령이 작동하는 방법에 대한 자습서가 많이 있습니다.

+1

추가적으로 서로 다른 쉐이더로 동일한 VAO를 사용하고자한다면, 입력 변수가 두 쉐이더에서 같은 위치를 유지하는지 확인해야합니다. – BDL

+0

@DietrichEpp 그래서 두 개의 다른 VAO에서 다른 오브젝트를 렌더링하면, 하나의 오브젝트와 쉐이더에 대해 VAO를 프로그램하고 바인딩 한 다음 다른 오브젝트와 쉐이더에 대해서도 같은 작업을 수행합니까? 정화를 위해서. 그렇다면 그것은 매우 직설적이며 나는 그 부분을 실제로 혼동했기 때문에 그 부분을 혼란스럽게 생각하지 않습니다. – nurgan

+0

VAO와 두 개의 프로그램이 있는지 묻는 중입니까? 예, 하나의 프로그램 + VAO를 바인드하고 다른 프로그램 + VAO를 바인딩 한 다음 그립니다. 물론 하나의 VAO와 두 개의 프로그램 또는 두 개의 VAO와 하나의 프로그램을 가질 수도 있습니다. –

관련 문제