0

OpenGL ES2 を搭載した Android で NDK を使用しています。

  1. 解像度 1024x576 の eglCreatePbufferSurface を使用して PBuffer サーフェスを作成します。GL_RGBA 形式を使用します。色成分ごとに 8 ビット。
  2. ビットマップからテクスチャをロードし、サーフェスにブリットします。glFlush() を呼び出します。
  3. 別のテクスチャを作成し、glCopyTexImage2D を使用してフレーム バッファをこのテクスチャに読み込むよりも。テクスチャの内部フォーマットは GL_RGBA です。
  4. 新しいテクスチャを同じフレーム バッファに再度ブリットします。glFlush() を呼び出します。
  5. 最後に glReadPixels を呼び出してフレーム バッファを読み取り、ビットマップとして保存します。

結果はピクセル化されます。
サンプル画像

すべてのテクスチャには次のパラメータがあります。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);

また、PBuffer の代わりにウィンドウ サーフェスを使用し、結果を画面に描画すると、正しく、ピクセル化されません。
私が試したもう 1 つのことは、元のテクスチャを PBuffer にレンダリングし、バッファからピクセルをすぐに読み取ることです。glCopyTexImage2D を使用した余分なパスなし。結果も正解。

glCopyTexImage2D 内部フォーマットを GL_RGBA から GL_RGB に変更すると、すべて正常に動作します。私の PBuffer 色空間形式は RGBA です。

更新:私のコードはエミュレータでは正常に動作するようですが、Nexus 7 デバイスでは動作しません。

glCopyTexImage2D を GL_RGBA 形式で使用すると、ピクセル化されるのはなぜですか?

4

0 に答える 0