2010-02-26 5 views

답변

19

이렇게 할 수 있습니다 (예 : 주 진입 점에서 여러 쉐이더 객체에 구현 된 함수에 대한 함수 호출을 수행합니다.

main() { 
    callToShaderObject1() 
    callToShaderObject2() 
} 

그 callToShaderObject 기능의 각각 다른 쉐이더 객체에 살 수 있지만, 모든 객체는 사용하기 전에 같은 프로그램에 연결하고 연결해야합니다.

+0

면세점에서 왜 단순히 조각 쉐이더의 모든 기능을 사용하는 것과는 달리이 작업을 수행할까요? 코드를 다른 셰이더 프로그램과 공유 할 수 있도록하려면 중복이 필요하지 않습니까? –

+0

@ 닉 : 나는 그것이 자신을 사용하는 것을 보지 못했습니다. 셰이더 객체에서 셰이더 프로그램을 빌드하려는 아이디어에서 처음 스펙을 읽었을 때 놀랐습니다. 그것은 표준 컴파일 모델을 기반으로 제작되었습니다 ... – Bahbar

+2

업데이트 : modine 된 MineCraft 쉐이더를 연구하면서 이것을 지금 보았습니다. 이 경우, 각 셰이더는 다양한 옵션을 사용하여 여러 가지 다른 효과와 함께 작동하거나 해제 할 수 있습니다. 이와 같은 시나리오에서 여러 작성자가 참여하는 경우 함수를 별도의 파일로 분리하는 것이 훨씬 더 유용합니다. –

4

동시에 실행할 수는 없지만 다른 지오메트리에 대해 다른 셰이더를 사용하거나 다른 셰이더를 사용하여 여러 패스로 렌더링 할 수는 있습니다.

+1

그래서 다른 프로그램이 필요합니까? 각 패스마다 다른 프로그램이 있습니까? 에서와 같이 하나의 프로그램에서 정점과 조각 쉐이더를 가질 수 있고 다른 프로그램에서 정점과 조각 쉐이더를 가질 수 있습니까? 기분이 좋을 때 glUseProgram()을 바꿀 수 있습니까? 근본적으로 장면을 두 번 렌더링하고 있습니다 ...? – Harry

+1

정확히 맞습니다. 고정 파이프 라인의 다중 패스 렌더링과 비슷하지만 패스간에 OpenGL 설정을 변경하는 대신 다른 프로그램을로드하고 있습니다. –

관련 문제