|
@@ -2773,74 +2773,74 @@
|
|
|
this._bindTextureDirectly(gl.TEXTURE_CUBE_MAP, texture);
|
|
|
gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, 0);
|
|
|
|
|
|
- if (!noMipmap && isPot) {
|
|
|
- if (mipmmapGenerator) {
|
|
|
-
|
|
|
- var arrayTemp: ArrayBufferView[] = [];
|
|
|
- // Data are known to be in +X +Y +Z -X -Y -Z
|
|
|
- // mipmmapGenerator data is expected to be order in +X -X +Y -Y +Z -Z
|
|
|
- arrayTemp.push(rgbeDataArrays[0]); // +X
|
|
|
- arrayTemp.push(rgbeDataArrays[3]); // -X
|
|
|
- arrayTemp.push(rgbeDataArrays[1]); // +Y
|
|
|
- arrayTemp.push(rgbeDataArrays[4]); // -Y
|
|
|
- arrayTemp.push(rgbeDataArrays[2]); // +Z
|
|
|
- arrayTemp.push(rgbeDataArrays[5]); // -Z
|
|
|
-
|
|
|
- var mipData = mipmmapGenerator(arrayTemp);
|
|
|
- for (var level = 0; level < mipData.length; level++) {
|
|
|
- var mipSize = width >> level;
|
|
|
-
|
|
|
- // mipData is order in +X -X +Y -Y +Z -Z
|
|
|
- gl.texImage2D(facesIndex[0], level, internalSizedFomat, mipSize, mipSize, 0, internalFormat, textureType, mipData[level][0]);
|
|
|
- gl.texImage2D(facesIndex[1], level, internalSizedFomat, mipSize, mipSize, 0, internalFormat, textureType, mipData[level][2]);
|
|
|
- gl.texImage2D(facesIndex[2], level, internalSizedFomat, mipSize, mipSize, 0, internalFormat, textureType, mipData[level][4]);
|
|
|
- gl.texImage2D(facesIndex[3], level, internalSizedFomat, mipSize, mipSize, 0, internalFormat, textureType, mipData[level][1]);
|
|
|
- gl.texImage2D(facesIndex[4], level, internalSizedFomat, mipSize, mipSize, 0, internalFormat, textureType, mipData[level][3]);
|
|
|
- gl.texImage2D(facesIndex[5], level, internalSizedFomat, mipSize, mipSize, 0, internalFormat, textureType, mipData[level][5]);
|
|
|
- }
|
|
|
+ if (mipmmapGenerator) {
|
|
|
+
|
|
|
+ var arrayTemp: ArrayBufferView[] = [];
|
|
|
+ // Data are known to be in +X +Y +Z -X -Y -Z
|
|
|
+ // mipmmapGenerator data is expected to be order in +X -X +Y -Y +Z -Z
|
|
|
+ arrayTemp.push(rgbeDataArrays[0]); // +X
|
|
|
+ arrayTemp.push(rgbeDataArrays[3]); // -X
|
|
|
+ arrayTemp.push(rgbeDataArrays[1]); // +Y
|
|
|
+ arrayTemp.push(rgbeDataArrays[4]); // -Y
|
|
|
+ arrayTemp.push(rgbeDataArrays[2]); // +Z
|
|
|
+ arrayTemp.push(rgbeDataArrays[5]); // -Z
|
|
|
+
|
|
|
+ var mipData = mipmmapGenerator(arrayTemp);
|
|
|
+ for (var level = 0; level < mipData.length; level++) {
|
|
|
+ var mipSize = width >> level;
|
|
|
+
|
|
|
+ // mipData is order in +X -X +Y -Y +Z -Z
|
|
|
+ gl.texImage2D(facesIndex[0], level, internalSizedFomat, mipSize, mipSize, 0, internalFormat, textureType, mipData[level][0]);
|
|
|
+ gl.texImage2D(facesIndex[1], level, internalSizedFomat, mipSize, mipSize, 0, internalFormat, textureType, mipData[level][2]);
|
|
|
+ gl.texImage2D(facesIndex[2], level, internalSizedFomat, mipSize, mipSize, 0, internalFormat, textureType, mipData[level][4]);
|
|
|
+ gl.texImage2D(facesIndex[3], level, internalSizedFomat, mipSize, mipSize, 0, internalFormat, textureType, mipData[level][1]);
|
|
|
+ gl.texImage2D(facesIndex[4], level, internalSizedFomat, mipSize, mipSize, 0, internalFormat, textureType, mipData[level][3]);
|
|
|
+ gl.texImage2D(facesIndex[5], level, internalSizedFomat, mipSize, mipSize, 0, internalFormat, textureType, mipData[level][5]);
|
|
|
}
|
|
|
- else {
|
|
|
- if (internalFormat === gl.RGB) {
|
|
|
- internalFormat = gl.RGBA;
|
|
|
-
|
|
|
- // Data are known to be in +X +Y +Z -X -Y -Z
|
|
|
- for (let index = 0; index < facesIndex.length; index++) {
|
|
|
- let faceData = <Float32Array>rgbeDataArrays[index];
|
|
|
-
|
|
|
- // Create a new RGBA Face.
|
|
|
- let newFaceData = new Float32Array(width * height * 4);
|
|
|
- for (let x = 0; x < width; x++) {
|
|
|
- for (let y = 0; y < height; y++) {
|
|
|
- let index = (y * width + x) * 3;
|
|
|
- let newIndex = (y * width + x) * 4;
|
|
|
-
|
|
|
- // Map Old Value to new value.
|
|
|
- newFaceData[newIndex + 0] = faceData[index + 0];
|
|
|
- newFaceData[newIndex + 1] = faceData[index + 1];
|
|
|
- newFaceData[newIndex + 2] = faceData[index + 2];
|
|
|
-
|
|
|
- // Add fully opaque alpha channel.
|
|
|
- newFaceData[newIndex + 3] = 1;
|
|
|
- }
|
|
|
- }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ if (internalFormat === gl.RGB) {
|
|
|
+ internalFormat = gl.RGBA;
|
|
|
|
|
|
- // Reupload the face.
|
|
|
- gl.texImage2D(facesIndex[index], 0, internalSizedFomat, width, height, 0, internalFormat, textureType, newFaceData);
|
|
|
- }
|
|
|
- }
|
|
|
- else {
|
|
|
// Data are known to be in +X +Y +Z -X -Y -Z
|
|
|
- for (let index = 0; index < facesIndex.length; index++) {
|
|
|
- let faceData = rgbeDataArrays[index];
|
|
|
- gl.texImage2D(facesIndex[index], 0, internalSizedFomat, width, height, 0, internalFormat, textureType, faceData);
|
|
|
+ for (let index = 0; index < facesIndex.length; index++) {
|
|
|
+ let faceData = <Float32Array>rgbeDataArrays[index];
|
|
|
+
|
|
|
+ // Create a new RGBA Face.
|
|
|
+ let newFaceData = new Float32Array(width * height * 4);
|
|
|
+ for (let x = 0; x < width; x++) {
|
|
|
+ for (let y = 0; y < height; y++) {
|
|
|
+ let index = (y * width + x) * 3;
|
|
|
+ let newIndex = (y * width + x) * 4;
|
|
|
+
|
|
|
+ // Map Old Value to new value.
|
|
|
+ newFaceData[newIndex + 0] = faceData[index + 0];
|
|
|
+ newFaceData[newIndex + 1] = faceData[index + 1];
|
|
|
+ newFaceData[newIndex + 2] = faceData[index + 2];
|
|
|
+
|
|
|
+ // Add fully opaque alpha channel.
|
|
|
+ newFaceData[newIndex + 3] = 1;
|
|
|
+ }
|
|
|
}
|
|
|
+
|
|
|
+ // Reupload the face.
|
|
|
+ gl.texImage2D(facesIndex[index], 0, internalSizedFomat, width, height, 0, internalFormat, textureType, newFaceData);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ // Data are known to be in +X +Y +Z -X -Y -Z
|
|
|
+ for (let index = 0; index < facesIndex.length; index++) {
|
|
|
+ let faceData = rgbeDataArrays[index];
|
|
|
+ gl.texImage2D(facesIndex[index], 0, internalSizedFomat, width, height, 0, internalFormat, textureType, faceData);
|
|
|
}
|
|
|
+ }
|
|
|
|
|
|
+ if (!noMipmap && isPot) {
|
|
|
gl.generateMipmap(gl.TEXTURE_CUBE_MAP);
|
|
|
}
|
|
|
- }
|
|
|
- else {
|
|
|
- noMipmap = true;
|
|
|
+ else {
|
|
|
+ noMipmap = true;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
if (textureType === gl.FLOAT && !this._caps.textureFloatLinearFiltering) {
|