我正在研究更高分辨率总是更好的应用程序。是否可以使用WebGL max纹理大小?
但我坚持WebGL max_texture_size的问题。我(对我的笔记本电脑16384x16384)创建大小正是这种尺寸的图像和WebGL崩溃说:
GL_INVALID_ENUM:glBindFramebuffer:目标是GL_READ_FRAMEBUFFER_ANGLE GL_INVALID_ENUM:glBindFramebuffer:目标是GL_READ_FRAMEBUFFER_ANGLE 的WebGL:CONTEXT_LOST_WEBGL:loseContext:上下文丢失
而当我用0.75的最大值尝试时也是如此。只能以最大分辨率的一半工作,但这意味着我的图形内存中只有1/4的像素被使用!
所以我的问题是,是否有可能使用最大纹理尺寸,如果没有,如何才能找到最大的纹理WebGL可以吃?我发现很少(如果有的话)关于这个在线文档。
以防万一,这是我如何绑定我的质地:
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);
好的,谢谢,我错过了这个最大值的含义。这实际上是有道理的。但我应该如何去寻找适合内存的最大纹理尺寸(有一定的余量)我猜标签是在沙箱中运行的,并且无法猜测它们的可用内存? – mrudelle
即使它们未在沙箱中运行,您如何知道它们没有在每个选项卡中使用WebGL应用程序打开的50个选项卡?除了分配逐渐变大的纹理和祈祷之外,我确实没有办法知道。如果你正在制作一个应用程序,尽量使用尽可能少的内存/合理的内存。你可能会看到'navigator.platform'猜测一点,至少移动与桌面。否则,请考虑为用户提供喜欢大多数PC游戏的细节与低细节的选项。 – gman
对不起,但我认为这可能是一个错误。从Khronos规范: “对于1D和2D纹理(以及任何使用类似维度的纹理类型,如立方图),其最大尺寸为E_MAX_TEXTURE_SIZE。” – Jackalope