версия 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;
}
Но похоже, что использование памяти для загруженной текстурывсе еще не уменьшилось.
Мне интересно, возможно ли получить среду pixelFormat for browser (webgl).
Любой совет будет признателен, спасибо:)