gpt4 book ai didi

ios - GLSL 程序在某些 iOS 硬件上间歇性失败

转载 作者:行者123 更新时间:2023-11-29 12:46:09 25 4
gpt4 key购买 nike

我遇到了一个问题,即对片段着色器的更改会暂时中断渲染。着色器编译;编译步骤、链接步骤或 glValidateProgram() 没有错误条件或日志输出。但随后对 glDrawArrays() 的调用返回 GL_INVALID_OPERATION,未绘制任何内容,应用变得非常缓慢或无响应。

但是,当我从我的主要开发设备(iPad 2)切换到其他硬件(iPhone 5s 和 iPad Mini)时,相同的代码运行完美。奇怪的是,如果我随后重新连接到 iPad 2,问题就会消失,我可以继续在该设备上开发着色器。同样的循环现在已经重复了好几次:我修改并向着色器添加了一些新代码,但问题再次出现。我切换到较新的设备,代码运行良好,切换回 iPad 2,问题神秘地消失了(有时),我可以继续工作。一旦它再次开始工作,它似乎会继续工作。但是,对于下面的代码,我现在似乎陷入了解决方法无济于事的地步。

我的预感(或希望)是我的代码中的某些内容正在通过编译器,但在某些硬件接受它(A7 和 SGX 543)但有些硬件不接受它(SGX 535)的方式上有些冒险。也许解决方法的间歇性只是转移注意力。如果没有出现类似的问题,我欢迎任何其他故障排除建议。

代码很长,因此我摘录了与问题的最新迭代相关的部分。以前的迭代只涉及添加几行看似无害的代码。

uniform highp vec3  vertexColors[3];

mediump vec3 hexagonLayer (highp float edge1, highp float edge2, int layer, mediump vec3 underColor, highp float opacity) {
highp float opac = remap (length (faceP - vertexFacePositions[layer]), 0.0, edge1 * 3.0, 1.0, opacity);

mediump vec3 shadowColor = pow (underColor, vec3 (2.0));
highp float shadowOpacity = (1.0 - smoothstep (edge1, edge1 + SHADOW_WIDTH, 1.0 - trilinears[layer])) * SHADOW_OPACITY * opac;
mediump vec3 color = mix (underColor, shadowColor, shadowOpacity);

return mix (color, vertexColors[layer], (1.0 - smoothstep (edge1, edge2, 1.0 - trilinears[layer])) * opac);
}

最佳答案

至少部分地回答我自己的问题。我的第一个错误是我的 glValidateProgram() 代码从未被调用过。结果我还是收到了一条错误消息,尽管没有帮助:

Validation Failed: Fragment program failed to compile with current context state.
Validation Failed: Vertex program failed to compile with current context state.

所以第一个教训是,即使 GL_COMPILE_STATUS 和 GL_LINK_STATUS 都很好,并且两个日志都没有提示,显然也可能存在编译失败。

感谢来自 this question 的线索我开始查看不匹配的精度限定符,果然将我所有的 medimp 颜色更改为 highp 就解决了这个问题。那是因为我声明我的制服为 highp,然后在 highp 和 mediump vec3 之间进行 mix() 吗? (我缩短了问题中的代码以显示相关部分。)

这对我来说是有道理的,这可能会意外地在较新的硬件上工作,因为我想我记得在某处读到支持 GLES-3 的硬件将 highp 和 mediump 视为相同的位深度。我很想证实这个猜测。

关于ios - GLSL 程序在某些 iOS 硬件上间歇性失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23638629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com