Canvas WebGL图形缓冲区大小不等于画布大小
我有一个webapp,它使用three.js绘制多个webgl层,有时(在Chrome中)会得到drawingBufferHeight和drawingBufferWidth不等于画布高度和宽度的层 可以打开和关闭每个层。我有一堆这样它们就可以重复使用了:Canvas WebGL图形缓冲区大小不等于画布大小,canvas,three.js,webgl,Canvas,Three.js,Webgl,我有一个webapp,它使用three.js绘制多个webgl层,有时(在Chrome中)会得到drawingBufferHeight和drawingBufferWidth不等于画布高度和宽度的层 可以打开和关闭每个层。我有一堆这样它们就可以重复使用了: Layers.GLRendererPool = new (function() { this.renderers = []; this.getRenderer = function() { if(this.ren
Layers.GLRendererPool = new (function() {
this.renderers = [];
this.getRenderer = function() {
if(this.renderers.length == 0) {
var r = new THREE.WebGLRenderer({ alpha: true });
r.setClearColor(0x000000, 0);
return r;
} else {
var r = this.renderers.shift();
return r;
}
};
this.saveRenderer = function(r) {
r.setSize(0, 0); //EXPERIMENTAL
this.renderers.push(r);
};
return this;
})();
使用THREE.WebGLRenderer.setSize()获取它们后,会调整它们的大小。调用setSize()后,canvas.width==renderer.context.drawingBufferWidth和canvas.height==renderer.context.drawingBufferHeight,但并不总是这样。即使当前使用的渲染器只有1个,它们也不相等
你知道为什么会这样吗?我假设视频卡内存有一些限制,我尝试在每个未使用的渲染器上调用setSize(0,0),但没有成功。这是Chrome+WebGL错误吗?存在多个问题
window.devicePixelRatio
,这意味着如果设备像素比不是1,您的画布将与您要求的大小不同。在过去2-3年里,几乎任何一款智能手机都不会是1drawingBufferWidth
和drawingBufferHeight
存在的原因,因此您可以检查它生成的drawingBuffer的大小我会在上提交一个bug,因为chrome最近似乎在每个网页上添加了512meg的任意限制,这给许多用户带来了问题。存在多个问题
window.devicePixelRatio
,这意味着如果设备像素比不是1,您的画布将与您要求的大小不同。在过去2-3年里,几乎任何一款智能手机都不会是1drawingBufferWidth
和drawingBufferHeight
存在的原因,因此您可以检查它生成的drawingBuffer的大小我会在上提交一个bug,因为chrome最近似乎在每个网页上添加了512meg的任意限制,这会给许多用户带来问题。这个错误会因为我的应用程序存在非视频内存泄漏而触发吗?有没有一个好的方法来处理渲染器,或者至少在完成后释放它使用的内存?我正在使用saveRenderer()中的r.setSize(0,0)尝试此操作。是否会因为我的应用程序存在非视频内存泄漏而触发此错误?有没有一个好的方法来处理渲染器,或者至少在完成后释放它使用的内存?我正在使用saveRenderer()中的r.setSize(0,0)尝试此操作。