GL_LUMINANCE与OpenGL ES 2.0上的字节数组

时间:2013-04-02 16:15:21

标签: android opengl-es opengl-es-2.0 shader

我正在编写组合由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,性能会变差。是不是可以改进了?

1 个答案:

答案 0 :(得分:1)

我最好的猜测是你传递给glTexSubImage2D的数据没有正确对齐。

来自OpenGL ES 2.0的glTexSubImage2D Reference page

  

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

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