gpt4 book ai didi

ios - 无法在 iPad 上从 Uint16Array 创建 HALF_FLOAT_OES 纹理

转载 作者:行者123 更新时间:2023-12-01 22:10:17 25 4
gpt4 key购买 nike

我有一台装有 iOS 12.1.1 的 iPad Pro 12.9in ML0F2X/A。我正在尝试创建一个从 Uint16Array 初始化的半浮点 WebGL 纹理:

var halfExt = gl.getExtension("OES_texture_half_float");
...
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA,
halfExt.HALF_FLOAT_OES, new Uint16Array([0, 0, 0, 0]));

texImage2D 因 INVALID_OPERATION 而失败。我已经在 iPad 上使用最新(2019 年 1 月)移动版本的 Safari、Chrome 和 Firefox 进行了测试。在使用远程调试的 Safari 中,我可以看到日志消息:
WebGL: INVALID_OPERATION: texImage2D: type HALF_FLOAT_OES but ArrayBufferView is not NULL

如果我将 Uint16Array 替换为 null,则在 iPad 上调用成功,但我的纹理当然丢失了。

这是一个片段:

function log(msg) {
var div = document.createElement("div");
div.appendChild(document.createTextNode(msg));
document.body.appendChild(div);
}

function glEnum(gl, v) {
for (var key in gl) {
if (gl[key] === v) {
return key;
}
}
return "0x" + v.toString(16);
}

// Get A WebGL context
var canvas = document.getElementById("c");
var gl = canvas.getContext("webgl");
if (gl) {

function getExt(name) {
var ext = gl.getExtension(name);
log("Extension " + name + " is " + (ext ? "" : "NOT ") + "supported");
return ext;
}

function checkError(test) {
var err = gl.getError();
if (err === 0)
log(test + ": successful");
else
log(test + ": flagged error " + err + " = gl." + glEnum(gl, err));
}

var floatExt = getExt("OES_texture_float");
getExt("OES_texture_float_linear");
if (floatExt) {

var tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.FLOAT, null);
checkError("Create gl.FLOAT texture with NULL buffer");
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.FLOAT, new Float32Array([0, 0, 0, 0]));
checkError("Create gl.FLOAT texture with Float32Array buffer");
}

var halfExt = getExt("OES_texture_half_float");
getExt("OES_texture_half_float_linear");
if (halfExt) {

var tex = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, tex);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, halfExt.HALF_FLOAT_OES, null);
checkError("Create halfExt.HALF_FLOAT_OES texture with NULL buffer");
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, 1, 1, 0, gl.RGBA, halfExt.HALF_FLOAT_OES, new Uint16Array([0, 0, 0, 0]));
checkError("Create halfExt.HALF_FLOAT_OES texture with UInt16Array buffer");
}
}
<canvas id="c" width=100 height=100 style="border:solid black 1px;"></canvas>


在我的 Windows 7 机器上,在 Firefox 60.4ESR 和 Chrome 71.0 的桌面版本中,所有测试都成功了。在 iPad 上,只有最后一个失败。我怎样才能让这个电话在 iPad 上成功?

谢谢...

最佳答案

关于ios - 无法在 iPad 上从 Uint16Array 创建 HALF_FLOAT_OES 纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54248633/

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