浏览代码

Merge pull request #9565 from sebavan/master

Fix env creation check
David Catuhe 4 年之前
父节点
当前提交
0a62d4bd38
共有 2 个文件被更改,包括 16 次插入2 次删除
  1. 1 1
      Tools/Gulp/tasks/gulpTasks-symlink.js
  2. 15 1
      src/Misc/environmentTextureTools.ts

+ 1 - 1
Tools/Gulp/tasks/gulpTasks-symlink.js

@@ -46,7 +46,7 @@ config.modules.map(function(module) {
 });
 
 /**
- * Build all es 6 libs.
+ * Build all symlinks.
  */
 gulp.task("generate-symlinks", gulp.series(config.modules.map((module) => module + "-symlinks")));
 

+ 15 - 1
src/Misc/environmentTextureTools.ts

@@ -154,7 +154,12 @@ export class EnvironmentTextureTools {
 
         let engine = internalTexture.getEngine() as Engine;
 
-        if (texture.textureType === Constants.TEXTURETYPE_UNSIGNED_INT) {
+        if (texture.textureType !== Constants.TEXTURETYPE_HALF_FLOAT &&
+            texture.textureType !== Constants.TEXTURETYPE_FLOAT &&
+            texture.textureType !== Constants.TEXTURETYPE_UNSIGNED_BYTE &&
+            texture.textureType !== Constants.TEXTURETYPE_UNSIGNED_INT &&
+            texture.textureType !== Constants.TEXTURETYPE_UNSIGNED_INTEGER &&
+            texture.textureType !== -1) {
             return Promise.reject("The cube texture should allow HDR (Full Float or Half Float).");
         }
 
@@ -181,6 +186,15 @@ export class EnvironmentTextureTools {
             // All faces of the cube.
             for (let face = 0; face < 6; face++) {
                 let faceData = await texture.readPixels(face, i, undefined, false);
+                if (faceData && faceData.byteLength === (faceData as Uint8Array).length) {
+                    const faceDataFloat = new Float32Array(faceData!.byteLength * 4);
+                    for (let i = 0; i < faceData.byteLength; i++) {
+                        faceDataFloat[i] = (faceData as Uint8Array)[i] / 255;
+                        // Gamma to linear
+                        faceDataFloat[i] = Math.pow(faceDataFloat[i], 2.2);
+                    }
+                    faceData = faceDataFloat;
+                }
 
                 let tempTexture = engine.createRawTexture(faceData, faceWidth, faceWidth, Constants.TEXTUREFORMAT_RGBA, false, true, Constants.TEXTURE_NEAREST_SAMPLINGMODE, null, textureType);