2014-09-29 81 views
0

我一直在閱讀一些關於OpenGL-ES 2.0的教程,我注意到他們設置了每個60Hz幀的視口(glViewport)。設置視口每一幀都是一個好主意嗎?

這樣做還是僅僅是爲了簡化例子而做的一個好主意?

如果你這樣做會有性能處罰嗎?

這是針對iOS的,但其目標是可移植到其他平臺。

+2

性能影響可以忽略不計。我不打算進一步檢查:與glDrawArrays()相比,'glViewport()'是一個桶。 – 2014-09-29 05:14:10

回答

3

只要相對容易,我會避免任何形式的多餘呼叫。在glViewport()的情況下,應該很容易只在視口的大小實際發生變化時才調用它,這通常是窗口大小的調整。

事實上,在這種情況下,它不太可能會產生可測量的差異。設置視口很可能相當便宜,所以每幀一次不應該造成傷害。無論如何,司機可能會消除多餘的電話。

某些狀態更改的成本高昂與平臺高度相關。在特定的平臺上,您可能會預計某些非常便宜的通話可能會非常昂貴。例如,有些平臺將混合作爲片段着色器的一部分,所以更改混合狀態會導致着色器變化,這可能比您預期的要昂貴得多。

關於駕駛員是否應該檢查冗餘狀態變化,部分哲學討論。有些人會認爲他們不應該這樣做,因爲額外的測試會對寫好的應用程序產生一些負面的性能影響,從而避免多餘的調用。但通常沒有多少選擇,因爲有很多用作基準的寫作不佳的應用程序/遊戲,並且在驅動程序中檢測到多餘的調用可以爲這些提供顯着的性能提升。

相關問題