2016-03-04 37 views
1

大多數到目前爲止我已知道使用MediaCodec生成視頻代碼或者使用純OpenGL或鎖定從MediaCodec生成表面畫布和編輯它應用片段着色器。我可以混合使用嗎?上)用於lockCanvas(MediaCodec生成的表面

例如,如果我生成後者的方式我的框架,是有可能在之前或編輯表面的帆布後MediaCodec產生表面施加一個片段着色器

回答

1

表面是生產者 - 消費者對的生產者端。一次只能連接一個製作人,因此您不能在同一個Surface上使用GLES和Canvas,而無需斷開連接並連接另一個。

最後我檢查了(棒棒糖)沒有辦法斷開Canvas。所以來回切換是不可能的。

你需要做的是:

  • 創建Canvas backed by a Bitmap
  • 渲染到該畫布上。
  • 使用glTexImage2D()將渲染的位圖上傳到GLES。
  • 使用您所需的片段着色器將位圖與GLES切分。

與上傳相關的開銷是不可避免的,但請記住,您可以以較小的分辨率繪製位圖並讓GLES將其擴展。由於您使用的是位圖而不是Surface,因此無需爲每次更新重新繪製整個屏幕,因此有機會減少Canvas渲染開銷。可能是MediaCodec,SurfaceView,表面紋理等

+0

感謝您的答覆 - 不管什麼表面被連接到

上述所有持有。但是,只有一個問題:我怎樣才能用GLES來實現位圖?用所述位圖紋理矩形並在表面上繪製矩形? – Gensoukyou1337

+0

是的。您可以在Grafika中找到示例(https://github.com/google/grafika);只需查找FullFrameRect的用法。 – fadden