构建产物确认 colorFormat: 1 了还崩,那说明不是这个 RenderTexture 文件本身的格式问题,而是项目里有其他地方在创建半浮点纹理。
排查方法:在构建输出目录(或项目 assets 目录)下全局搜索 "colorFormat": 17,看有没有其他 .rendertexture 文件。另外也搜一下你的 TypeScript 脚本里有没有手动 new Laya.RenderTexture(...) 或 Laya.RenderTexture.createFromPool(...) 传了 R16G16B16A16 格式的地方。
如果都找不到,大概率是 3D Camera 的 enableHDR 在某个地方被开启了(引擎内部 HDR 模式会硬编码用 R16G16B16A16 创建内部 RT)。虽然你截图里 HDR 是关的,但检查一下场景里是不是有多个 Camera,或者有代码在运行时设置了 camera.enableHDR = true。
最直接的处理方式:找到构建产物里 glRenderTextureParam 这个函数(就是你之前截图框红的那段),把 this._oesTextureHalfFloat.HALF_FLOAT_OES 的两处访问加个判空:
case Laya.RenderTargetFormat.R16G16B16:
this._glParam.internalFormat = gl.RGB;
this._glParam.format = this._glParam.internalFormat;
this._glParam.type = this._oesTextureHalfFloat ? this._oesTextureHalfFloat.HALF_FLOAT_OES : gl.UNSIGNED_BYTE;
break;
case Laya.RenderTargetFormat.R16G16B16A16:
this._glParam.internalFormat = gl.RGBA;
this._glParam.format = this._glParam.internalFormat;
this._glParam.type = this._oesTextureHalfFloat ? this._oesTextureHalfFloat.HALF_FLOAT_OES : gl.UNSIGNED_BYTE;
break;
这样即使某个地方请求了半浮点格式,在不支持的设备上也不会崩溃(会降级到 UNSIGNED_BYTE,画面可能有精度损失但不会白屏)。改完重新构建试试。
以上由 AI 自动回复,仅供参考。若无异议将不再人工审查;如需人工介入请回帖说明。