2017-01-11 13 views
0

Android上でOpenGL ES 2.0を使用して、動的に変化するピクセルをスクリーンにレンダリングする必要があります。テクスチャにピクセルをレンダリングする

色の幅*高さの配列(RGBA、4 * GLubyte)を生成するメソッドがあります。また、(x、y)座標を持つ配列のピクセルの色を置き換えるPutPixel(x、y、color)メソッドもあります。

解決方法:各Draw()メソッド呼び出し配列をテクスチャソースとして使用してBindTexture、glTexImage2Dを呼び出し、フルテクスチャの平面上にこのテクスチャをレンダリングします。

これは正しい方法ですか?それとももっと良い解決法がありますか?

+0

正しく表示されますが、glTexSubImage2Dを使用する方が意味があります。このメソッドをフレームごとに何度も呼び出さないと、実際にはPutPixelから直接フックすることができます。非常に何度も呼び出された場合は、描画フレームごとにフルバッファをテクスチャにプッシュします。 –

+0

@MaticOblakには、画面上のすべてを更新しない場合に、テクスチャを一度レンダリングしてパーツを変更する方が良い方法かもしれないと私は同意します。 しかし、私はgpuが画像を計算しないようにCPUから毎回画面を描画する必要があるユースケースを思いつくことはできません。 多分使用法をより詳しく説明する必要があります。 – andras

答えて

1

あなたの方法は、特に幅*高さがフルスクリーン解像度より低い場合は、あなたのニーズに十分対応できるパフォーマンスを得ることができます。それはまた非常に簡単であるという美徳を持っています。

しかし、一般に、ゲームプレイ中にCPUとGPU間の転送サイズを減らすことができれば、パフォーマンスが大幅に向上します。

CPUでピクセルの色を読み取る必要がなく、通常はフレームあたりわずかなピクセルしかレンダリングしないと仮定した場合、レンダリングとテクスチャのアプローチを使用するのが最善の方法です。本質的には、幅*高さのレンダリング可能なテクスチャを作成し、PutPixel関数でカラーポイントをテクスチャにレンダリングします(描画呼び出しを最小限に抑えるためにそれらを一括して描画します)。

+0

ありがとう、私はFBOについて知っています。しかし、ピクセルをテクスチャにどのように置くべきですか? PutPixel(x、y、color){//ピクセルglDrawElements(GL_POINTS、1);}にVBOをバインドする方法は良い方法ですか? –

+0

GL_POINTSはおそらくどのような方法でも良いですが、glDrawElementsの代わりにglDrawArraysを使用します(ポイントのインデックスは有用ではありません)。私はまた、できるだけ少ない描画呼び出し(理想的にはフレームごとに1つ)を行うようにバッチアップします。 – Columbo

+0

残念ながら、PutPixel()はwidth * height times(各ピクセル)と呼ばれます。その後、Render()が呼び出されます。私のものより良い解決策はありますか? –

関連する問題