相关疑难解决方法(0)

如何在iOS中使用GL_HALF_FLOAT_OES类型的纹理?

我正在尝试创建一个浮动纹理来存储由片段着色器创建的渲染管道的中间结果.我需要片段的值来签名浮点数.

据我所知,所有新的iOS设备都应支持OES_texture_float扩展(即根据Apple指南从iPhone 3GS/iPod Touch 3/iPad开始).

但是,当我使用创建这样的纹理时

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_HALF_FLOAT_OES, NULL);
Run Code Online (Sandbox Code Playgroud)

启动我的应用程序并在仪器中检查它,它告诉我:

glTexImage2D(GL_TEXTURE_2D,0,GL_RGB,width,height,0,GL_RGB,GL_HALF_FLOAT_OES,NULL):(无效的枚举= 0x8d61):参数'type'的枚举无效

奇怪的是,它仍然在iPhone 4S上运行,但不适用于iPhone 4(也应该支持).但是,两个设备都会显示错误消息.但是在iPhone 4上,OpenGL无法使用此纹理作为渲染目标来构建有效的帧缓冲对象.在4S上运行得非常好.

你有什么建议我做错了吗?

谢谢!

floating-point textures opengl-es ios

10
推荐指数
2
解决办法
6796
查看次数

使用OpenGL ES 2.0 for iOS的线性代数库

有没有人知道iOS下使用OpenGL ES 2.0的线性代数库?

具体来说,我正在寻找一种方法,使用iOS设备上的GPU对任意大小的矩阵(例如,远大于4x4,更像是5,000 x 100,000)进行矩阵乘法.

gpgpu opengl-es ios opengl-es-2.0 metal-performance-shaders

10
推荐指数
1
解决办法
878
查看次数

在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
查看次数