我试着用拜耳缓冲器渲染一个视频。
因此,我创建了一个纹理使用GL_亮度/GL_无符号_字节。我在这个纹理上应用了一些着色器来生成一个RGBA输出。
以下调用在我的PC上正常工作,在目标板(iMX6 6/GLES2 2)上不起作用:
glTexImage2D(GL_TEXTURE_2D, 0, textureFormat, m_texture_size.width(), m_texture_size.height(), 0, bufferFormat, GL_UNSIGNED_BYTE, imageData);
在目标板上,我有黑色的纹理。
bufferFormat是GL_LUMINANCE。textureFormat是GL_LUMINANCE。
GLES2实现了OpenGL API的一个小子集:https://www.khronos.org/opengles/sdk/docs/man/xhtml/glTexImage2D.xml
bufferFormat应该等于textureFormat。如果我尝试另一种格式,它可以在PC上工作。在目标板上,我看到一个黑屏和glGetError()报告的一些错误。
不通过其他测试
如果我尝试GL_ALPHA,它似乎纹理填充(0,0,0,1)。
如果我尝试GL_RGBA/GL_RGBA (这对应用程序没有意义,但它检查HW/API功能),我将在板上得到一个非黑色的纹理。很明显,这个形象并不是我所期望的那样。
为什么GL_LUMINANCE会给我黑色的纹理?怎样才能让这件事成功?
发布于 2016-03-23 13:30:10
猜测:
设置GL_CLAMP_TO_EDGE
*和GL_LINEAR
或GL_NEAREST
而不是GL_LINEAR_MIPMAP_...
是否解决了问题?
根据ES 2规范第3.8.2节(警告: PDF):
从片段着色器调用采样器将返回(R,G,B,A) = (0,0,0,1),如果下列条件之一为真: ·称为二维取样器,小型化滤波器需要一个mipmap (既不是最近的也不是线性的),而取样器的相关纹理对象不完整,如第3.7.1节和3.7.10节所定义的, ·二维取样器被称为,小型化滤波器不需要mipmap (最近或线性),相关纹理对象的零级数组的任一维都不是正的。 ·二维取样器,对应的纹理图像是非幂的两幅图像(如3.7.7节的混合映射讨论所述),或者纹理包装模式不是CLAMP_TO_EDGE,或者小型化滤波器既不是最近的,也不是线性的。 ·一个立方体地图采样器,任何相应的纹理图像都是非幂的两幅图像,或者纹理包装模式不是钳位- TO_EDGE,或者小型化滤波器既不是最近的,也不是线性的。 ·一个立方体地图采样器被调用,或者对应的立方体映射纹理图像不是立方体完整的,或者是TEXTURE_MIN_FILTER是一个需要mipmap而纹理不是mipmap多维数据集的数据集。
..。所以我的猜测是检查第一个和第三个要点。
https://stackoverflow.com/questions/36177067
复制相似问题