2009-11-11 176 views
6

我爲iPhone編寫圖形應用程序,我正在尋找將我最近的應用程序「層」移植到Android平臺。圖層是繪畫應用程序,允許用戶在屏幕上繪製並使用不同的畫筆,顏色等創建多層次的繪畫......並輸出到PSD。這是有桌面同步,塗抹工具,很多好東西... http://www.layersforiphone.com/Android OpenGLES渲染到紋理

我開始在星期一看Android平臺,我遇到了一個主要問題。我使用OpenGL來完成所有繪圖,因爲它提供了最佳性能。但是,有幾個地方需要渲染到紋理中,然後使用紋理。例如:

  1. 使用刷子的質地和精靈的行來創建紋理黑色塗料衝程甲
  2. 穿戴刷色+α的glColor4f然後繪製紋理阿到屏幕上。

在iPhone上,隨着用戶的手指移動,我可以持續這樣做,我可以在第一代iPod Touch上實現12-15fps。這是必要的,因爲將顏色和alpha應用於構成畫筆描邊的單個精靈並不會產生正確的結果(因爲精靈重疊並且使筆畫太暗)。

Android平臺支持OpenGL ES 1.0,但似乎忽略了處理幀緩衝區的關鍵函數。我無法找到將紋理綁定到幀緩衝區並使用OpenGL進行繪製的方法。

以下是我通常會去了解它在iPhone上:

// generate a secondary framebuffer and bind it to OpenGL so we don't mess with existing output. 
glGenFramebuffers(1, &compositingFramebuffer); 
glBindFramebuffer(GL_FRAMEBUFFER, compositingFramebuffer); 

// attach a texture to the framebuffer. 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); 

// subsequent drawing operations are rendered into the texture 

// restore the primary framebuffer and (possibly) draw the rendered texture 
glBindFramebuffer(GL_FRAMEBUFFER, originalActiveFramebuffer); 

有沒有這樣的事情在Android平臺上?在iPhone上,OpenGL比基於軟件的繪圖要快得多,而且是唯一可行的解​​決方案(相信我 - 我也寫了一個CoreGraphics繪畫應用程序......)。也許我可以在Android上採用另一條路線?我願意跳過任何必要的箍環,但我不會發布應用程序,除非性能爲(當您在屏幕上繪製時爲10fps +)。

回答

7

我對所有Android設備都支持完全相同的OpenGL ES擴展集或者他們都支持完全相同版本的OpenGL ES表示懷疑。

幀緩衝區對象(FBO)是OpenGL ES 2.0核心規範的一部分;如果你的android設備支持ES 2.0,那麼它支持FBO。

如果你的Android設備支持ES 1.1,然後檢查擴展字符串使用glGetString(GL_EXTENSIONS)GL_OES_framebuffer_object

+3

剛興趣的人,下面是幾個不同的Android設備的GL_EXTENSIONS: http://www.rbgrn.net/content/345-hands-on-motorola-droid-opengl-es-specs 它看起來像DROID是目前唯一支持幀緩存的Android手機。 – 2009-11-29 17:56:48