OpenGL을 배우는 중입니다.보다 복잡한 쉐이더 효과를 구현하기 위해 기본적으로 두 가지 상태가 있다는 것을 알고 있습니다. 첫 번째는 주 프로그램에서 여러 가지 다른 균일 변수를 허용하는 하나의 복잡한 버텍스 및 프래그먼트 셰이더를 작성하고 셰이더에서 수행 할 작업을 결정하는 것입니다. 전의.하나의 복잡한 셰이더 또는 여러 개의 셰이더를 쓰는 것이 더 효과적입니까?
uniform int whichColor;
int main() {
if (whichColor == 1) {
gl_FragColor = vec4(0,1.0,0,1.0);
}
else {
gl_FragColor = vec4(0,0,1.0,1.0);
}
}
및 루프를 그리기 내 C++에서 whichColor에 다른의 int를 통과 : 나는 파란색 한 상황에서 다른 상황에 맞는 녹색 픽셀을 만들고 싶어, 나는 GLSL에서 할 수 있습니다. 또는 두 개의 별도 쉐이더 프로그램을 정의 할 수 있습니다. 그 중 하나는 gl_FragColor를 파란색으로 설정하고 다른 하나는 녹색으로 설정하고, OpenGL 씬에서 특정 객체를 그릴 때가되면 다른 하나를로드하는 것입니다.
이러한 전략 중 어떤 것이 더 나은지에 대한 정보는 찾을 수 없습니다. 첫 번째 전략은 그래픽 카드에서 렌더링해야 할 모든 것을 복잡하게 만드는 것이 더 효과적 일 것이라고 기대할 수 있습니다.하지만 픽셀 단위 계산이 아닌 무언가를 결정할 생각을하는 경우에는 병렬 처리의 이점. 그래픽 카드에서 쉐이더 프로그램이 어떻게 실행되는지, 그리고 변수를 연결하고 전달하는 데 필요한 비용이 무엇인지는 잘 모르겠다. 그래서 내 직감이 실제로 올바른지 확신 할 수 없다.
"더 나은"주관적인 질문입니다. 대답 할 수 없으므로 "더 나은"질문은 SO에 환영받지 못합니다. 적어도, 그것에 몇 가지 기준을 두십시오. "더 나은"어떤면에서? –
"더 나은"은 "일반적으로 더 빠름"을 의미하거나 "시스템과 gfx 카드 메모리간에 최소한의 데이터 전송"또는 "전문 OpenGL 개발자가 실제로하는 일에 더 가깝습니다"를 의미합니다. glut display 함수에서 새로운 셰이더를로드하는 데 드는 비용은 복잡한 셰이더 하나를 작성하고 유니폼을 통해 데이터를 지속적으로 전달하는 비용과 비교하면 얼마입니까? – Tneuktippa