LUMINANCE给我黑屏/纹理
我正在尝试渲染来自bayer缓冲区的视频。
所以我使用GL_LUMINANCE / GL_UNSIGNED_BYTE创建一个纹理。 我将一些着色器应用到该纹理上以生成RGBA输出。
以下调用在我的电脑上正常工作,不在目标板(iMX6 / GLES2)上:
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(这对应用程序没有意义,但会检查硬件/ API功能),所以我在电路板上获得了非黑色纹理。 显然,这个形象不是我所期望的。
为什么GL_LUMINANCE会给我黑色的纹理? 如何使这项工作?
猜测:
设置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(NEAREST或LINEAR),并且采样器的关联纹理对象不完整(如第3.7.1和3.7.10节中定义)
•调用二维采样器时,缩小过滤器不是需要mipmap(NEAREST或LINEAR)的缩放过滤器,并且关联纹理对象的零级数组的任何一个维度都不是正数。
•调用二维采样器,相应的纹理图像是非幂次的图像(如第3.7.7节的Mipmapping讨论中所述),并且纹理自动换行模式不是CLAMP_TO_EDGE或缩小过滤器既不是最近的也不是LINEAR。
•调用立方体贴图采样器,任何相应的纹理图像都是非幂次方图像,并且纹理自动换行模式不是CLAMP_TO_EDGE,或者缩小过滤器既不是最近的也不是LINEAR。
•调用立方体贴图采样器,并且相应的立方体贴图纹理图像不是立方体完整的,或者TEXTURE_MIN_FILTER是需要mipmap并且纹理不是mipmap立方体完整的图像。
...所以我的猜测是检查第一和第三个要点。
链接地址: http://www.djcxy.com/p/33991.html