2015-12-12 37 views
-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()之前完成。 '凍結'意味着屏幕上出現了實際的東西(我用最後一個着色器繪製的最後一個對象),但是我的輸入不再工作。這意味着,我無法在世界上移動相機,但程序仍然正常運行(使用調試器進行測試)。

+2

你通過屏幕凍結是什麼意思?東西是否繪製?代碼是無限循環的嗎? (另外,混合着色器和即時模式?) –

+1

@ColonelThirtyTwo:「混合着色器和即時模式」這當然是可能的。這是可怕的代碼,但OpenGL喜歡這樣的向後兼容性... –

+0

你可以實現這與一箇中間glsl文件的功能?然後包括其他,但使用參數過濾到所需的功能。基本上,使你的兩個着色器更加模塊化。 – Krythic

回答

0

明白了。 這是我的程序設計的問題。我不小心添加了一個我想綁定的着色器的副本。 每次我嘗試綁定着色器時,它都會綁定它的副本。

感謝您的幫助球員:)