gpt4 book ai didi

javascript - 是否可以使用 WebGL 最大纹理大小?

转载 作者:数据小太阳 更新时间:2023-10-29 05:00:04 25 4
gpt4 key购买 nike

我正在开发一款分辨率越高越好的应用。

但我被 WebGL max_texture_size 问题困住了。我创建了一个尺寸正好是这个尺寸的图像(在我的笔记本电脑上是 16384x16384),WebGL 崩溃说:

GL_INVALID_ENUM : glBindFramebuffer: target was GL_READ_FRAMEBUFFER_ANGLE GL_INVALID_ENUM : glBindFramebuffer: target was GL_READ_FRAMEBUFFER_ANGLE WebGL: CONTEXT_LOST_WEBGL: loseContext: context lost

当我尝试使用最大值的 0.75 时,也会发生同样的情况。仅在最大分辨率的一半下工作,但这意味着我的图形内存中仅使用了 1/4 的像素!

所以我的问题是是否可以使用最大纹理大小,如果不能,如何找到 WebGL 可以吃的最大纹理?我在网上发现很少(如果有的话)关于此的文档。

以防万一,这是我绑定(bind)纹理的方式:

gl.activeTexture(glTexture);
texture = gl.createTexture();
gl.bindTexture(gl.TEXTURE_2D, texture);
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, true);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, image);
with(gl){
texParameteri(TEXTURE_2D, TEXTURE_MAG_FILTER, LINEAR);
texParameteri(TEXTURE_2D, TEXTURE_MIN_FILTER, NEAREST);
texParameteri(TEXTURE_2D, TEXTURE_WRAP_S, CLAMP_TO_EDGE);
texParameteri(TEXTURE_2D, TEXTURE_WRAP_T, CLAMP_TO_EDGE);
}
program.samplerUniform = gl.getUniformLocation(program, textureName);
gl.uniform1i(program.samplerUniform, textureNb);

最佳答案

gl.getParameter(gl.MAX_TEXTURE_SIZE) 返回 GPU 可以寻址的最大尺寸。换句话说,您可以制作一个 1xMAXMAXx1 纹理,如果您有足够的内存,它应该一直工作到 MAXxMAX

另一方面,您不能生成 (MAX+1)x1,因为 MAX+1 是 > MAX

但是,MAXxMAX,好吧,在你的情况下

16384 * 16384 * 4 (RGBA) * UNSIGNED_BYTE = 1073741824 or 1GIG!!!

您的 GPU 有 1Gig 吗?事实上,它需要超过 1Gig,因为它正在为操作系统和 Chrome 本身以及 mips 和其他任何东西使用内存。也许更好的例子

16384 * 16384 * 4 (RGBA) * FLOAT = 4294967296 or 4GIG!!!

即使您的 GPU 有很多内存,浏览器也可能会限制您可以访问的内存量。很可能您的浏览器内存不足,这就是它崩溃的原因。

至于知道任何设备的限制,可以说没有办法知道。首先,除了 Chrome(其他浏览器认为这是一个隐私问题)之外,您无法检查用户机器有哪个 GPU。其次,您不知道他们的机器上还有什么正在运行并占用内存。

关于javascript - 是否可以使用 WebGL 最大纹理大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29975743/

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