2017-03-28 20 views
0

我有兩個不同的片段着色:使用乘着色器在Android開放GL

  1. 一是靜態
  2. 其次取決於值的改變每onDrawFrame事件

我如何使用這兩種這個着色器?我需要第一個變化圖像,而第二個需要結果?

我試圖將所有的代碼在一個着色器,但工程進展緩慢

回答

0

如果你能加入2個着色成一個單一的一個,然後通常是最快的方法。當你有很多片段重繪時,發生速度較慢的情況就會發生。例如,一個普通的3D場景可能有平均每個像素重繪5次,這意味着片段着色器將被調用5次,然後再優化。在這種情況下,保持着色器儘可能基本並使用後處理是有意義的。

就你而言,如果你添加了一些着色器代碼並解釋你到底在做什麼,這可能會有所幫助。但看看你的問題,看起來你正在尋找的是帶有附加紋理的FBO(幀緩衝區對象)。

要達到此目的,您需要創建一個新的幀緩衝區(glGenFramebuffers)並將其綁定。那麼你需要創建一個新的空的紋理glTexImage2DNULL數據應該做的。使用glFramebufferTexture2D將2連同顏色相連。在成功完成此操作後,其餘代碼應該大致相同,結果是您現在直接繪製到紋理而不是主緩衝區。

有些事情要注意:除非啓用,否則您的紋理尺寸必須爲POT。請記住設置適當的視口。

所以現在你有2幀緩衝區,FBO和你的主。您收到您的FBO的ID,而我認爲主緩衝區的ID應爲0。所以現在你需要綁定你的FBO並用第一個着色器繪製它。一旦完成,您需要綁定您的主幀緩衝區,並使用第二個着色器將FBO的紋理重新繪製到主緩衝區。

重新繪製到主緩衝區只是意味着您需要繪製一個填充整個屏幕的2D紋理矩形。使用來自FBO的紋理。