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,所以我不明白这个原因。我认为如果每行都调用 glTexSubImage2D ,性能会变差。是不是不能再改进了?

4

1 回答 1

1

我最好的猜测是您传递给 glTexSubImage2D 的数据未正确对齐。

从 OpenGL ES 2.0 的glTexSubImage2D 参考页面

由 glPixelStorei 设置的存储参数 GL_UNPACK_ALIGNMENT 会影响从客户端内存中读取数据的方式。有关说明,请参见 glPixelStorei。

从您的数据中一次传递一行可能会隐藏每行未正确对齐的事实,因此调用成功。

于 2013-04-02T16:34:35.463 回答