Javascript 浏览器之间的WebGL参数不一致

Javascript 浏览器之间的WebGL参数不一致,javascript,webgl,Javascript,Webgl,我的WebGL应用程序遇到了与内存相关的问题,主要是在装有Intel Graphics IGPs的PC上 当试图找到瓶颈时,我从浏览器中得到了不一致的数据 使用: var viewport = gl.getParameter(gl.MAX_VIEWPORT_DIMS); var texturesize = gl.getParameter(gl.MAX_TEXTURE_SIZE); var renderbuffer = gl.getParameter(gl.MAX_RENDERBUFFER_SIZ

我的WebGL应用程序遇到了与内存相关的问题,主要是在装有Intel Graphics IGPs的PC上

当试图找到瓶颈时,我从浏览器中得到了不一致的数据

使用:

var viewport = gl.getParameter(gl.MAX_VIEWPORT_DIMS);
var texturesize = gl.getParameter(gl.MAX_TEXTURE_SIZE);
var renderbuffer = gl.getParameter(gl.MAX_RENDERBUFFER_SIZE);
我在同一台电脑上获得的值不一致:

  • gl.MAX_视口_DIMS=16384
  • gl.MAX_纹理_大小=16384
  • gl.MAX_RENDERBUFFER_尺寸=16384
火狐

  • gl.MAX_视口_DIMS=16384
  • gl.MAX_纹理_大小=8192
  • gl.MAX_RENDERBUFFER_SIZE=8192
狩猎

  • gl.MAX_视口_DIMS=8192
  • gl.MAX_纹理_大小=16384
  • gl.MAX_RENDERBUFFER_SIZE=8192
我使用在线WebGL浏览器报告获得相同的值

谁知道这里发生了什么?

检查差异,例如正在使用哪个底层api(无掩码渲染器),或者正在使用哪个VS和PS版本:可能一个浏览器正在使用一个库版本,而另一个浏览器正在使用另一个库版本(例如Direct3D9和Direct3D11)。甚至可能由于某种原因,不同的浏览器也会向下钳制该值

然而,即使从不同的浏览器获得不同的值,这些都是1D限制,你的应用程序应该使用更小的值

例如,对于渲染缓冲区和视口:4K分辨率为3840 x 2160像素(更小),甚至8K也小于8192。由于内存原因,您的计算机可能不支持8K,即使有8192 1D限制

对于纹理,同样的问题:16384 x 16384可能会使用1GB的VRAM(取决于texel格式和其他问题),并且由于分配问题(VRAM已经分配了块),如此大的纹理甚至可能会在2GB或4GB GPU中分配问题。。。在英特尔的GPU中可能会更加困难

如果你想让你的应用程序在不同的电脑上运行,你应该使用更小的值,这样你提到的不同值就不会真正影响你:如果你想让你的应用程序在不同的电脑上运行而不出问题,你必须使用更小的值(或者至少有使用更小值的不同选择)

  • 浏览器可以自由实现自己的限制

    例如,强制许多较小的限制

    查看WebKit(Safari)源代码,我们可以看到。不知道为什么。你得问问WebKit团队

  • 在具有多个GPU浏览器的计算机上,可以自由选择一个GPU或另一个GPU。用户还可以在操作系统级别或在浏览器设置中设置每个浏览器使用哪个GPU

  • 浏览器可以选择不同的方式来实现WebGL(通过OpenGL、通过OpenGL ES、通过DirectX、通过Metal、通过Vulkan、在软件中等等)


  • 因为这不是一个实际问题,所以没有答案

    结论是,浏览器不会显示可靠的数据,所以像:这样的统计数据只是一种指示,而不是“真实”的数据

    就我所见,最有用的信息是无掩码渲染器。 我想我必须在WebGL中构建自己的检测,并测试所需的最小值。 然后将结果与未屏蔽渲染器信息一起存储在服务器上,这样我可以提供满足最低要求的GPU列表


    谢谢你提供的精彩信息

    谢谢,现在它更有意义了。读数来自我的GPU,这个已经足够了。我正试图找到GPU上的瓶颈与较低的规格,不一致的数据困惑我