1

libvpx(WebMデコードライブラリ)とOpenGL ES 2.0シェーダー(Android用)で取得したyuvデータを組み合わせてプログラミングしています。

これらは同じバイト配列ですが、この場合は正しく描画されません。

成功:

// ex) unsigned char *p = yuv.y, yuv.u or yuv.v;
for(int dy = 0; dy < hh; dy++){
    glTexSubImage2D(GL_TEXTURE_2D, 0,   0, dy, ww, 1, GL_LUMINANCE, GL_UNSIGNED_BYTE, p);
    p += ww;
}

失敗 :

glTexSubImage2D(GL_TEXTURE_2D, 0,  0, 0, ww, hh, GL_LUMINANCE, GL_UNSIGNED_BYTE, p);

私は OpenGL に詳しくないので、この理由がわかりません。1行ごとにglTexSubImage2Dを呼び出すとパフォーマンスが悪くなると思います。もう改善できないのでしょうか?

4

1 に答える 1

1

私の推測では、glTexSubImage2D に渡すデータが正しく配置されていないということです。

OpenGL ES 2.0のglTexSubImage2D リファレンス ページから:

glPixelStorei によって設定されるストレージ パラメータ GL_UNPACK_ALIGNMENT は、データがクライアント メモリから読み出される方法に影響します。説明については、glPixelStorei を参照してください。

データから一度に 1 行ずつ渡すと、各行が正しく配置されていないという事実が隠され、呼び出しが成功する可能性があります。

于 2013-04-02T16:34:35.463 に答える