Opengl es GLES2:GLTEXAGE2D,具有GL_亮度,给我黑屏/纹理

Opengl es GLES2:GLTEXAGE2D,具有GL_亮度,给我黑屏/纹理,opengl-es,Opengl Es,我正在尝试从拜耳缓冲区渲染视频 所以我使用GL_亮度/GL_无符号字节创建了一个纹理。我将一些着色器应用于该纹理以生成RGBA输出 以下呼叫在我的电脑上正常工作,但在目标板(iMX6/GLES2)上不正常: 在目标板上,我有一个黑色纹理 bufferFormat是GL_亮度。 纹理格式是GL_亮度 GLES2实现了OpenGL API的较小子集: bufferFormat应等于textureFormat。如果我尝试其他格式,它会在PC上工作。在目标板上,我会得到一个黑屏和一些由glGetErr

我正在尝试从拜耳缓冲区渲染视频

所以我使用GL_亮度/GL_无符号字节创建了一个纹理。我将一些着色器应用于该纹理以生成RGBA输出

以下呼叫在我的电脑上正常工作,但在目标板(iMX6/GLES2)上不正常:

在目标板上,我有一个黑色纹理

bufferFormat是GL_亮度。 纹理格式是GL_亮度

GLES2实现了OpenGL API的较小子集:

bufferFormat应等于textureFormat。如果我尝试其他格式,它会在PC上工作。在目标板上,我会得到一个黑屏和一些由glGetError()报告的错误

其他测试不合格 如果我尝试GL_ALPHA,纹理似乎由(0,0,0,1)填充

如果我尝试GL_RGBA/GL_RGBA(这对应用程序没有意义,但它会检查硬件/API功能),我会在电路板上获得非黑色纹理。显然,这张照片不是我所期望的

为什么GL_亮度给我黑色纹理?如何做到这一点?

猜测:

  • 纹理不是二维的幂,并且您没有设置兼容的包装模式
  • 您尚未设置适当的mip映射模式,因此着色器正在对您上载的级别以外的级别进行采样
  • GL\u夹紧到\u边缘
    *和
    GL\u线性
    GL\u最近
    而不是
    GL\u线性
    解决问题了吗

    根据第3.8.2节(警告:PDF):

    如果以下任一条件为真,则从片段着色器调用采样器将返回(R、G、B、a)=(0,0,0,1):

    •如第3.7.1节和第3.7.10节所述,称为二维取样器,缩小过滤器需要mipmap(既不是最近的也不是线性的),且取样器的相关纹理对象不完整

    •称为二维取样器,缩小过滤器不需要mipmap(最近或线性),并且相关纹理对象的零级数组的任一维度都不是正的

    •调用二维取样器,相应的纹理图像是两个图像的非幂(如第3.7.7节的Mipmapping讨论中所述),并且纹理包裹模式不是钳制到边缘,或者缩小过滤器既不是最近的也不是线性的

    •调用立方体贴图采样器,任何相应的纹理图像都不是两个图像的幂,并且纹理包裹模式不是钳制到边缘,或者缩小过滤器既不是最近的也不是线性的

    •调用立方体贴图采样器,相应的立方体贴图纹理图像不是立方体完整,或者纹理_MIN_过滤器是需要mipmap且纹理不是mipmap立方体完整的过滤器

    。。。因此,我的猜测是检查第一个和第三个要点。

    猜测:

  • 纹理不是二维的幂,并且您没有设置兼容的包装模式
  • 您尚未设置适当的mip映射模式,因此着色器正在对您上载的级别以外的级别进行采样
  • GL\u夹紧到\u边缘
    *和
    GL\u线性
    GL\u最近
    而不是
    GL\u线性
    解决问题了吗

    根据第3.8.2节(警告:PDF):

    如果以下任一条件为真,则从片段着色器调用采样器将返回(R、G、B、a)=(0,0,0,1):

    •如第3.7.1节和第3.7.10节所述,称为二维取样器,缩小过滤器需要mipmap(既不是最近的也不是线性的),且取样器的相关纹理对象不完整

    •称为二维取样器,缩小过滤器不需要mipmap(最近或线性),并且相关纹理对象的零级数组的任一维度都不是正的

    •调用二维取样器,相应的纹理图像是两个图像的非幂(如第3.7.7节的Mipmapping讨论中所述),并且纹理包裹模式不是钳制到边缘,或者缩小过滤器既不是最近的也不是线性的

    •调用立方体贴图采样器,任何相应的纹理图像都不是两个图像的幂,并且纹理包裹模式不是钳制到边缘,或者缩小过滤器既不是最近的也不是线性的

    •调用立方体贴图采样器,相应的立方体贴图纹理图像不是立方体完整,或者纹理_MIN_过滤器是需要mipmap且纹理不是mipmap立方体完整的过滤器

    。。。因此,我的猜测是检查第一个和第三个要点

    glTexImage2D(GL_TEXTURE_2D, 0, textureFormat, m_texture_size.width(), m_texture_size.height(), 0, bufferFormat, GL_UNSIGNED_BYTE, imageData);