2

私の Android アプリは、背景としてフルスクリーンのビットマップを表示する必要があり、その上に OpenGL ES (1.1 または 2.0 のいずれか - まだ決定されていません) を使用して動的な 3D グラフィックスを表示する必要があります。背景画像は同じアプリ内の WebView コンポーネントのスナップショットであるため、そのサイズは既に画面に完全に収まっています。

私は OpenGL を初めて使用しますが、ビットマップを表示する通常の方法には、ビットマップを POT テクスチャ (glTexImage2D) にスケーリングし、マトリックスを構成し、四角形の頂点をいくつか作成し、それを glDrawArrays で表示することが含まれることを知っています。画面にビットマップを 1:1 の縮尺で描画するだけでよいのに、(画像を POT サイズに縮小すると品質が低下するなど) 余分な作業が多くなるようです。

「デスクトップ」GLにはglDrawPixels()があり、この状況で必要なことを正確に実行しているように見えますが、GLESには明らかに欠けています。3D パイプラインを回避して、ピクセルを GLES のスクリーン バッファにコピーする方法はありますか? または、通常の Android 手段で描画された「フラットな」背景の上に OpenGL グラフィックを描画する方法はありますか? または、半透明の GLView を作成します (Renderscript ベースの表示用の RSTextureView がありますが、GL に相当するものが見つかりませんでした)。

4

1 に答える 1

1

しかし、ビットマップを表示する通常の方法は、それをPOTテクスチャ(glTexImage2D)にスケーリングすることを含むことを知っています。

その後、あなたの知識は時代遅れです。最新のOpenGL(バージョン2以降)は、テクスチャの任意の画像サイズで問題ありません。

「デスクトップ」GLにはglDrawPixels()があり、この状況で必要なことを正確に実行しているように見えますが、GLESには明らかに欠けています。

さて、最新の「デスクトップ」OpenGL、つまりバージョン3コア以降には、glDrawPixelsもありません。

この機能は魅力的ですが、パフォーマンスが低く、注意点が非常に多いため、使用を避けることができる場合はいつでも使用されることはめったにありません。

スケーリングされていない画像をテクスチャにアップロードし、ミップマップを無効にして、フルスクリーンクワッドに描画するだけです。

于 2012-07-12T09:33:10.903 に答える