-1
我正在用Glsl編寫一個OpenGl程序。 現在我有兩個需要繪製的對象。兩者都有不同的着色器。 通常情況下,我認爲我應該做這樣的事情在我的draw()方法:Opengl glsl多個着色器凍結屏幕
void draw() {
shaderObjektOne.bind();
glBegin(xxx);
//draw Object one
...
glEnd()
shaderObjektTwo.bind();
glBegin(xxx);
//draw Object two
...
glEnd()
}
如果我這樣做,這樣我的屏幕凍結。 僅爲一個對象綁定着色器沒有問題。 我一直在環顧四周,但我無法找到一個真正的解釋爲什麼會發生此錯誤。 是否因爲渲染目標只能用一個着色器渲染? 如何避免巨型着色器文件或有多個渲染目標?
謝謝。
編輯: 我想爲每個對象分別編譯着色器程序。這些將在繪製對象的頂點之前被綁定。我想避免一個大着色器,我需要設置特定的參數來選擇對象的功能。我使用glut,並且當前所有繪圖都在glutSwapBuffers()之前完成。 '凍結'意味着屏幕上出現了實際的東西(我用最後一個着色器繪製的最後一個對象),但是我的輸入不再工作。這意味着,我無法在世界上移動相機,但程序仍然正常運行(使用調試器進行測試)。
你通過屏幕凍結是什麼意思?東西是否繪製?代碼是無限循環的嗎? (另外,混合着色器和即時模式?) –
@ColonelThirtyTwo:「混合着色器和即時模式」這當然是可能的。這是可怕的代碼,但OpenGL喜歡這樣的向後兼容性... –
你可以實現這與一箇中間glsl文件的功能?然後包括其他,但使用參數過濾到所需的功能。基本上,使你的兩個着色器更加模塊化。 – Krythic