在ios beta 4,ipad2上,我做了一些检查,看看该设备是否支持gpu粒子模拟..
gl.getParameter(gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS) >= 1
!!gl.getExtension( 'OES_texture_float' )
他们都说是,但事情并没有真正起作用......
我想知道如何检测这种bug ... 所以我可以回到其他事情来展示......
webgl预览和src: https://googledrive.com/host/0B2CX8zXCqhScelpNMkpSX1pmRHM
截图: https://drive.google.com/folderview?id=0B2CX8zXCqhScR0d2SExtZm9EWDA
我用它来检测iOS 8 beta4之前...... 有没有更好的方法来检测和回退?
if (
navigator.userAgent.match(/(iPod|iPhone|iPad)/)
){
var usrA= navigator.userAgent;
var info = usrA.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
if (parseFloat(info[2],10) <= 9537){
check.gpuSim = false;
}
}
用于阅读此&gt; v&lt;〜
答案 0 :(得分:0)
userAgent
检查HTML / JavaScript is an anti-pattern中的任何内容。
他的案例的正确方法是检查是否可以渲染到浮点纹理(粒子模拟通常需要的东西)。要测试是否可以渲染到浮点纹理,您需要创建一个帧缓冲区,附加浮点纹理,然后检查它是否完整。
var gl = someCanvasElement.getContext("experimental-webgl");
var ext = gl.getExtension("OES_texture_float");
if (!ext) {
alert("no OES_texture_float");
return;
}
现在您可以使用浮点纹理创建和渲染。接下来要做的是看看你是否可以渲染到浮点纹理。
var tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.FLOAT, null);
gl.texParameteri(gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_MIN_FILTER, gl.NEAREST);
gl.texParameteri(gl.TEXTURE_MAG_FILTER, gl.NEAREST);
var fb = gl.createFramebuffer();
gl.bindFrameBuffer(gl.FRAMEBUFFER, fb);
gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, tex, 0);
var status = gl.checkFramebufferStatus(gl.FRAMEBUFFER);
if (status != gl.FRAMEBUFFER_COMPLETE) {
alert("can not render to floating point textures");
return;
}
此外,如果在渲染到浮点纹理时使用深度或模板附件,则需要在检查它是否完整之前附加它。