小编Ray*_*eeA的帖子

在iOS上的OpenGL ES 2.0中浮点纹理而不将它们钳制到[0,1]

我需要gl_FragColor来"绘制"浮点值,它也可以是负值(x <0)和> 1.0.然后,我想使用FBO的颜色附件,这个值在渲染时使用,并将其用作另一个FBO中的纹理.现在我已经阅读http://www.khronos.org/opengles/sdk/docs/man/(GlTexImage2D下),所有值都被限制在[0,1]的范围内,而且我没有找到glClampColor指令.有没有可能在这里找到一个解决方法,或者有人有一个想法可以帮助我解决我的问题?:)

解决了

当使用浮点纹理时,可能并且值根本不会被钳制到[0,1],但它只能使用GL_HALF_FLOAT_OES作为纹理的内部格式.使用GL_FLOAT会导致一个不完整的帧缓冲对象,这真的很难过,因为我正在构建一个求和区域表(SAT)并且在这里遇到了很大的精度问题.所以一般来说,iPad2上只支持半精度(2个字节,1个符号位+ 5个指数位+ 10个分数)浮点数.

工作创建FBO的颜色附件纹理

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_HALF_FLOAT_OES, NULL);
Run Code Online (Sandbox Code Playgroud)

还有一件事要提到:仪器将报告"无效枚举参数'类型'"消息,但无论如何它确实有效.此外,模拟器将使用全精度纹理而不是指定的半精度(我认为因为C中没有这样的数据类型).这就是为什么你可以在模拟器上获得较少的精度问题.

但最令人困惑的是打印glGetString(GL_EXTENSIONS)时支持"GL_OES_texture_float".但是如前所述,它不起作用.

opengl-es glsl ios opengl-es-2.0 ios6

7
推荐指数
1
解决办法
5375
查看次数

GL_APPLE_shader_framebuffer_fetch gl_lastFragData

Apple推出了一个名为GL_APPLE_shader_framebuffer_fetch的新着色器扩展,它允许完全可编程混合.还有一个解释功能的wwdc视频.这是2012年wwdc的视频513.

可悲的是,这个扩展对我不起作用.

F-着色器:

#extension GL_APPLE_shader_framebuffer_fetch : require

varying lowp vec4 colorVarying;

void main(void) {
    gl_FragColor = gl_lastFragData[0] + vec4(colorVarying.x, colorVarying.y, colorVarying.z, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

调试输出:不支持扩展"GL_APPLE_shader_framebuffer_fetch"

试图在6.0 6.0的实际iPad上运行iOS 6.0 iPad模拟器

怎么可能?我该怎么做才能真正使用这个扩展?

opengl-es glsl ios opengl-es-2.0

6
推荐指数
1
解决办法
1423
查看次数

标签 统计

glsl ×2

ios ×2

opengl-es ×2

opengl-es-2.0 ×2

ios6 ×1