6

私はiPhone用のグラフィックアプリを作成しており、最新のアプリ「レイヤー」をAndroidプラットフォームに移植したいと考えています。Layersは、ユーザーが画面に描画したり、さまざまなブラシや色などで多層の絵を作成したり、PSDにエクスポートしたりできるペイントアプリです。デスクトップ同期、スマッジツール、たくさんの良いものがあります... http://www.layersforiphone.com/

私は月曜日にAndroidプラットフォームを見始めましたが、大きな問題に遭遇しました。最高のパフォーマンスを提供するため、OpenGLを使用してすべての描画を行います。ただし、テクスチャにレンダリングしてからテクスチャを使用する必要がある場所がいくつかあります。例えば:

  1. ブラシテクスチャとスプライトのラインを使用して、テクスチャAに黒いペイントストロークを作成します
  2. ブラシcolor+alphaをglColor4fに入れてから、テクスチャAを画面に描画します。

iPhoneでは、ユーザーの指が動くときにこれを継続的に行い、第1世代のiPod Touchで12〜15fpsを達成することができます。ブラシストロークを構成する個々のスプライトに色とアルファを適用しても、正しい結果が得られないため、これが必要です(スプライトが重なり、ストロークが暗くなりすぎるため)。

AndroidプラットフォームはOpenGLES1.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以上)アプリを公開しません。

4

1 に答える 1

8

すべてのAndroidデバイスがまったく同じバージョンのOpenGLES拡張機能をサポートするのか、まったく同じバージョンのOpenGLESをサポートするのかについては懐疑的です。

フレームバッファオブジェクト(FBO)は、OpenGLES2.0コア仕様の一部です。AndroidデバイスがES2.0をサポートしている場合は、FBOをサポートしています。

AndroidデバイスがES1.1をサポートしている場合は、glGetString(GL_EXTENSIONS)を使用してGL_OES_framebuffer_objectの拡張文字列を確認してください。

于 2009-11-11T19:34:49.477 に答える