- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我尝试修复在 iPad3(PowerVR SGX543MP4,iOS 8.1)和旧硬件上运行良好但在 iPad Air(PowerVR G6430,iOS 8.1)上失败的液体模拟应用程序时......我偶然发现了非常“好奇”的处理后者的小浮点值。它归结为这样的测试用例:
片段着色器1(写入测试值):
precision highp float;
const highp float addValue = 0.000013;
uniform highp sampler2D maskField;
varying mediump vec2 pixelUv;
void main()
{
highp vec4 mask = texture2D(maskField, pixelUv);
gl_FragColor = vec4(addValue * mask.x);
}
片段着色器2(检查值并输出红色)
precision highp float;
uniform highp sampler2D testTexture;
varying highp vec2 pixelUv;
void main()
{
highp vec4 test = texture2D(testTexture, pixelUv);
gl_FragColor = vec4(test.a > 0.000012, 0.0, 0.0, 1.0);
}
第一个着色器正在写入 HALF_FLOAT_OES 纹理。结果在 Ipad3 上是红色,在 ipad air 上是黑色。并且不要急于发布有关 mask.x 值的信息。通过两个设备上的调试器验证它是正确的 (1.0)。
更奇怪的是,如果我将“addValue”的值增加到 0.000062,它会成功写入。但如果它低于该值并且变量与常量以外的任何值交替出现,则它会在 iPad Air 上截断为 0.0。所以...这有效:
const highp float addValue = 0.000013;
void main()
{
gl_FragColor = vec4(addValue * 1.0);
}
但这不是:
uniform highp float one; //= 1.0
const highp float addValue = 0.000013;
void main()
{
gl_FragColor = vec4(addValue * one);
}
与添加相同。如果我尝试像这样积累值(value),它不会增加任何东西:
const highp float addValue = 0.000013;
uniform highp sampler2D pressureField;
varying mediump vec2 pixelUv;
void main()
{
highp vec4 pressureData = texture2D(pressureField, pixelUv);
pressureData.a += addValue;
gl_FragColor = vec4(addValue);
}
欢迎就正在发生的事情以及如何修复它提出任何建议!使用的算法确实需要高精度 float 。现在我正处于向苹果提交错误报告并等待永恒的边缘。
最佳答案
将 0.000013 存储为 GL_HALF_FLOAT
时,您处理的是非规范化数字。可以用标准表示的最小归一化数 half float (IEEE 754-2008) 为 2^-14,大约为 0.000061,或大于您所代表的值。
OpenGL 规范在如何处理非规范化 16 位 float 方面为实现留出了一定的自由度。这在 extension spec 中的记录非常相似适用于 ES 2.0 和 ES 3.0 规范。
扩展规范使用它作为指数为 0 的情况的主要定义,这是非规范化数字的情况:
(-1)^S * 2^-14 * (M / 2^10), if E == 0 and M != 0,
这个精度足以解决 0.000012 和 0.000013 之间的差异。但它也说“实现也被允许使用以下任何替代编码”:
(-1)^S * 0.0, if E == 0 and M != 0,
使用这种编码,0.000012 和 0.000013 都四舍五入为 0.0,因此变得相等。
ES 3.0 规范有第一个定义,但随后在文本中添加:
Providing a denormalized number or negative zero to GL must yield predictable results, whereby the value is either preserved or forced to positive or negative zero.
这也允许将这些值四舍五入为 0.0。
至于为什么不同代的硬件会有不同的表现,我没有任何详细的见解。但在我看来,这两种实现都符合规范,因为它们使用了规范明确允许的两种不同变体。
如果您想确保这些值以您所需的范围/精度表示,则必须使用类型为 GL_FLOAT
的纹理,它将以完整的 32 位格式存储这些值范围/精度。
关于ios - 从 iPad Air 开始的 GLSL small float value truncation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28763410/
我开发了一个 Adobe AIR 应用程序,用户可以从我的网页上安装和启动它。如果用户计算机上尚未安装 AIR 应用程序,我将使用安装标志来安装它。在我对应用程序进行签名之前,此安装仅在 AIR
是否可以让我的 AIR 应用程序能够将自己添加到启动程序列表中? (我想在多个平台上进行这项工作 - 即 Windows、Mac 和 Linux)我将如何去做? 最佳答案 if (NativeAppl
我希望能够从Adobe AIR应用程序中启动第三方进程(实际上是命令行进程)。 AIR应用程序在运行时是否存在安全上下文,可以防止这种情况发生? 最佳答案 Adobe AIR 最需要的两个功能是从 A
我希望使用 Adobe Air 来可视化来自串行端口的信息。有没有办法在 Air 中天真地做到这一点?我假设不是。 如果是这种情况,我的最佳途径是创建一个本地应用程序,通过 TCP/IP 连接使串
Adobe 应用支持多核还是仍然使用单核? 如果我使用的是 Pentium 4 处理器 (3 ghz) 与双核处理器 (2.7 ghz) 相比,速度(应用程序的性能)是否会有所不同 编辑:如 Andr
我需要为 mac 和 Windows 开发一个桌面应用程序,使用 HTML JqueryMobile 和 CSS,我只是想确认 Adobe air 是否完全免费用于开发,并且想知道任何 IDE 支
我正在尝试将网络摄像头的视频和音频录制到存储在用户本地硬盘上的 FLV 文件中。我有此代码的一个版本,它使用 NetConnection 和 NetStream 通过网络将视频流式传输到 FMS (R
关闭。这个问题是opinion-based .它目前不接受答案。 想改进这个问题?更新问题,以便 editing this post 提供事实和引用来回答它. 8年前关闭。 Improve this
我的问题是 如何防止用户关闭应用程序? .我需要出现一条警告消息,询问用户是否真的想离开应用程序。 我的应用程序是在 中开发的Adobe AIR .请帮忙,我有麻烦了。 最佳答案 是的,我也发现了这个
我一直使用自行生成的证书为我的 Adobe AIR 应用程序签名,但现在我想要看起来更正式的证书。我应该从哪里获得什么样的商业证书? 一如既往,感谢您的帮助! 最佳答案 经过一番寻找,我在 AIR
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 8年前关闭。 Improve this qu
Adobe Air 究竟是什么?我看到很多人在谈论它,我什至看到了它的应用程序,但我仍然不完全确定它的独特之处或它与其他语言的不同之处。有人可以从程序员的角度给我简明的版本吗? 编辑: 我不熟悉 Fl
我想显示位于我的 AIR 应用程序的 app-storage 目录中的图像。此图像必须显示在 html 文本区域中,其中 html 文本来自本地嵌入式 sqlite 数据库。 当我输入以下代码时: i
我刚开始学习 Adobe AIR。我想通过引用示例应用程序我会学得很快。您能告诉我任何 Adobe AIR 开源应用程序吗? 感谢您的帮助。 最佳答案 超过 20 个示例应用程序(来自 Ado
创建 adobe air 文件后,我可以使用 winrar 或任何其他存档程序打开它,并查看所有内容,包括我的程序的代码。 有办法避免这种情况吗?某种加密或其他什么? 非常感谢。 最佳答案 没有。 “
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我们的代码签名证书最近过期了。它已更新,但现在每当我尝试使用更新的证书打包应用程序(无论我是否尝试迁移过期的证书),安装后,每当我尝试运行应用程序时都会收到以下消息: “此应用程序的此安装已损坏。请尝
我遇到了这个问题,我需要一个简单的医疗设备来将一串逗号分隔的数字输出到我的 Adobe Air 应用程序。我很高兴能与 Web 服务以外的东西交谈! 所以,我得到了一个 USB 转串口适配器,插入
是否可以在不安装的情况下运行 Adobe AIR 应用程序? AIR 运行时已经安装,我们需要一个解决方案来控制应用程序的“安装”——所以我们需要的是运行一个 adobe air 应用程序,该应用
我们有一个 Adobe Air 应用程序,可以将大量图像下载到应用程序存储中。我扫描了文档并没有发现任何迹象,但我想我会仔细检查:任何人都知道是否有可能看到用户在他们的 HD 上有多少可用存储空间
我是一名优秀的程序员,十分优秀!