teaconmc / SlideShow

Simple slide show projector in Minecraft.
BSD 3-Clause "New" or "Revised" License
39 stars 24 forks source link

Optimizations & Performance #9

Closed BloCamLimb closed 2 years ago

BloCamLimb commented 2 years ago

大幅优化和性能提升

  1. 不使用TextureManager,不再向其内部Map不断创建不可回收的键值对。
  2. 不使用DynamicTexture,直接使用OpenGL texture ID,避免TextureManager查表,同时不会在回收Texture以后由于TextureManager依然持有其强引用导致DynamicTexture对象本身无法回收。
  3. 为幻灯片图片添加2级mipmap,使用线性采样,自动生成mipmap,远距观察更平滑清晰。
  4. 不使用原版创建RenderType的方法,直接创建自定义RenderType子类,避免在原版内部Map中存储大量不可回收的无用对象。
  5. 直接由URL获得Slide对象,不再通过摘要获得Texture,打破了原先的耦合性(原先Image和Entry分别释放,如果Entry用到了Image则报OpenGL错误),同时避免二次查表
  6. 减少State种类,使代码更简洁高效,同时不破坏原本Image的很长一段时间后强制回收,重新下载资源。
  7. 图片下载失败或URL无效,重试/重下间隔为8s,全局通用,若不再渲染,则不会重下,直接回收对象。
  8. 正常加载的图片不再渲染后2分钟回收OpenGL纹理。
  9. 每54分钟回收一次In-Memory HTTP Cache Entries。
  10. 安装OptiFine后不再高亮附近投影仪,避免游戏卡死,(如需该功能,则先移除OptiFine)
3TUSK commented 2 years ago

安装OptiFine后不再高亮附近投影仪,避免游戏卡死

我更好奇到底是什么原因触发了「卡死」。 以及这个应该做成一个配置选项,允许无条件直接禁用。

BloCamLimb commented 2 years ago

帧缓冲问题吧,开着OptiFine Shader画面就会卡死,但是还能正常操作客户端,比如破坏方块,打开GUI啥的

ustc-zzzz commented 2 years ago

唯一一处不太对的地方是:红石信号打开(投影仪关闭)的时候 slide 也应该预加载,这个是 feature。

这个算 minor fix,我自己来吧。