首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >GLES2 : glTexImage2D和GL_LUMINANCE给了我黑色屏幕/纹理

GLES2 : glTexImage2D和GL_LUMINANCE给了我黑色屏幕/纹理
EN

Stack Overflow用户
提问于 2016-03-23 11:33:03
回答 1查看 676关注 0票数 1

我试着用拜耳缓冲器渲染一个视频。

因此,我创建了一个纹理使用GL_亮度/GL_无符号_字节。我在这个纹理上应用了一些着色器来生成一个RGBA输出。

以下调用在我的PC上正常工作,在目标板(iMX6 6/GLES2 2)上不起作用:

代码语言:javascript
运行
复制
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会给我黑色的纹理?怎样才能让这件事成功?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-23 13:30:10

猜测:

  1. 纹理不是二维的力量,你还没有设置一个兼容的包装模式;
  2. 您还没有设置适当的mip映射模式,因此着色器正在采样一个级别而不是您上传的级别。

设置GL_CLAMP_TO_EDGE*和GL_LINEARGL_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多维数据集的数据集。

..。所以我的猜测是检查第一个和第三个要点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36177067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档