簡體   English   中英

OpenGL ES在不同混合模式下的性能

[英]OpenGL ES performance of different blending modes

我需要在渲染的場景上應用全屏攝影般的暈影效果。 顯然,我必須使用混合來實現這一目標。 我想選擇最快的混合模式,因為它將應用於所有屏幕空間。

OpenGL ES中的某些混合模式是否比其他模式更快? 還是有任何混合模式以相同的填充率工作? 到目前為止,我還沒有在Internet上找到任何資源說某些混合模式比另一種慢或快,所以我決定在SO上問這個問題。

這是針對Android應用程序的,因此我了解這種行為當然取決於GPU供應商,但也許有一些共同的考慮因素可以加快混合速度?

混合的一個較慢部分是從后緩沖區讀取像素(僅與alpha或rgb或兩者無關)。 因此,只要它是使用dst color / alpha進行的“真實”混合(即不使用像glBlendFunc(GL_ONE, GL_ZERO)glBlendFunc(GL_ZERO, GL_ONE)類似的退化混合函數),就沒有性能差異。

不管選擇哪個混合選項,都將減慢片段着色器的速度,因為它需要從目標幀緩沖區中讀取像素值。 通過將效果分成圍繞屏幕邊框設置的四邊形,並保留幀緩沖區的中心部分而不覆蓋四邊形,可以節省一些周期。 您還可以做一些更棘手的方法來使用某些基於圖塊的移動GPU(如Mali)所采用的早期片段丟棄,但是也許不值得付出努力。

簡而言之,沒有可能沒有可衡量的更差的混合模式(只要您正在執行“真實”混合)。

混合可以通過具有固定功能的混合階段來實現,也可以通過將短尾巴添加到將進行實際混合的着色器程序中來實現。 另一個解決方案是,固定功能用於大多數常見的混合模式,而着色器將在不常見的混合模式下接管。 如果您打了一個着色器,您的性能可能會受到影響。

知道什么是好還是壞是硬件特定的-可能由於最大的成本而無法衡量,因為您需要讀取並組合兩個緩沖區,而不是相對較小的額外着色成本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM