iOS で OpenGL を使用して、(各ピクセルを個別に設定することにより) 小さなテクスチャを更新し、それを拡大して画面全体 (毎秒 60 フレーム) に合わせることができますか?
2 に答える
glTexImage2D を使用してテクスチャのコンテンツを更新できるはずです。
テストされていない例:
GLubyte data[1024]; // 32x32 (power of two)
for (int i=0; i<1024; i+=4) {
// write a red pixel (RGBA)
data[i] = 255;
data[i+1] = 0;
data[i+2] = 0;
data[i+3] = 255;
}
glBindTexture(GL_TEXTURE_2D, my_texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
// then simply render a quad with this texture.
一般的に、答えはイエスです。可能です。ただし、何を描く必要があるかによって異なる場合があります。
詳細を提供しないため、一般的なアプローチについて説明します。
テクスチャをフレームバッファにバインドします (これを行う方法については、コード付きの適切な説明があります。「例 6.10. スーパーサンプリングのための Initialize()」のコード例を参照してください) 。
画面上と同じ方法で必要なものを描画します (変換、モデルビュー マトリックスなど)。(すべてのピクセルを変更するために) ピクセル精度が必要な場合は、正投影の使用を検討してください。これが可能かどうかは、何を描く必要があるかによって異なります。この描画はすべてテクスチャで実行され、「テクスチャの更新」部分を実現します。
画面に描画するために使用する通常のフレームバッファをバインドします。前の手順のテクスチャを使用する四角形を描画します (正投影を再度使用する可能性があります)。この四角形を拡大縮小して画面いっぱいに表示できます。
上記のアプローチで 60 fps を達成できるかどうかは、ターゲット デバイスとレンダリングする必要があるシーンによって異なります。
それが役立つことを願っています