cocos版本:cocos2d-js v3.16
环境:仅HTML5,仅WEBGL(无需本机)
在本机环境中,可以像这样设置加载纹理的像素格式:
cc.Texture2D.setDefaultAlphaPixelFormat(cc.Texture2D.PIXEL_FORMAT_RGBA4444);
这将减少加载的纹理的内存使用量,但是此API仅在本机环境中。
在webgl环境中,纹理像这样在TexturesWebGL.js
中加载:
handleLoadedTexture: function (premultiplied) {
// ...
var gl = cc._renderContext;
cc.glBindTexture2D(self);
gl.pixelStorei(gl.UNPACK_ALIGNMENT, 4);
if (premultiplied)
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 1);
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, gl.RGBA, gl.UNSIGNED_BYTE, self._htmlElementObj);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
self.shaderProgram = cc.shaderCache.programForKey(cc.SHADER_POSITION_TEXTURE);
cc.glBindTexture2D(null);
if (premultiplied)
gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, 0);
var pixelsWide = self._htmlElementObj.width;
var pixelsHigh = self._htmlElementObj.height;
self._pixelsWide = self._contentSize.width = pixelsWide;
self._pixelsHigh = self._contentSize.height = pixelsHigh;
self._pixelFormat = cc.Texture2D.PIXEL_FORMAT_RGBA8888;
self.maxS = 1;
self.maxT = 1;
self._hasPremultipliedAlpha = premultiplied;
self._hasMipmaps = false;
if (window.ENABLE_IMAEG_POOL) {
self._htmlElementObj = null;
}
self.dispatchEvent("load");
}
我搜索了gl.texImage2D
函数并找到了其他一些标志,所以我尝试了:
handleLoadedTexture: function (premultiplied) {
// ...
gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA4, gl.RGBA4, gl.UNSIGNED_BYTE, self._htmlElementObj);
// ....
self._pixelFormat = cc.Texture2D.PIXEL_FORMAT_RGBA4444;
}
但是似乎加载的纹理的内存使用量仍然没有减少。
我想知道是否有可能为浏览器(webgl)环境获取pixelFormat。
任何建议将不胜感激,谢谢:)