Main
Highlights:
- MC 1.20.3, 1.20.4, 1.20.6 support
- No forge support for 1.20.6 due to Forge compiler issues
- Added NeoForge support for 1.20.6
- Massive memory decrease, especially at high render distances
- 1024 at medium can be loaded with 4 GB of memory
- Massive database file size decrease
- Note: This will only affect new worlds, old databases will be migrated to the new format, but have to be manually vacuumed to shrink their file size.
- Frustum culling
- Fixed rendering hollow structures
- Up the api version number 1.0.0 -> 2.0.0
- This means there were some breaking API changes
- World gen doesn't regenerate the same terrain twice
- World gen also starts faster after loading into the world.
- API methods needed for Iris 1.7.0 support
Core DH Changes
Additions:
- MC 1.20.3 / 1.20.4 support - coolGi, James
- Frustum culling - NULL
- New rendering option so grass fades to dirt - IMS, James
- Simple material IDs to rendering data for use with Iris - James
- corrupt data read handling - James
- JarUtil/SelfUpdater error handling - James
- Buffer count to the F3 menu - James
- IP only server folder mode - James
Improvements:
- Improve downsampling / low detail rendering - James
- IE hollow structures will no longer render incorrectly at lower detail levels
- Smaller database file sizes - James
- Added LZMA as the new default compression option
- LZMA provides roughly 3x the compression vs the previous compressor
- Add lossy world compression, defaults to "visually equal"
- Added LZMA as the new default compression option
- Massively reduce memory use and reduce GC pressure - James
- Speed up world gen queue initial loading - James
- Vertical LOD rendering improvements - Builderb0y
- RenderDataTransformer improvements - Cola
- Glass/transparent block improved color rendering - Cola, IMS
Changes:
- Overhaul data structure and file handling - James
- Fixes holes with world gen - James
- Overhaul the database format - James
- Add automatic DB migration - James
- Migration progress can be seen in the log and f3 menu
- Removed DhRenderData - James
- Change overdraw to a number input - James
- Improve transparent rendering (IE Glass) - IMS, Cola
- rename "Horizontal Quality" -> "LOD Dropoff Distance" - James
- Refactored logos into assets/distanthorizons - coolGi
- Change the SQLite journal mode DELETE -> WAL - James
- Improve initalization logic - s809
- Improve StepFeatures logging - James
- Add data source pooling to reduce GC pressure - James
- Mark Iris 1.6.0 and older as incompatible - James
- Iris already hid DH rendering anyway, so this just makes it clearer
- Make leaf colors match fancy graphics - Cola
- Move most async GL calls to the render thread - James
- Only log empty biomeWrapper strings once per session - James
- Remove unnecessary string concatenations in assertions - James
- Disable cave culling in the end - James
- Rename unused debug wireframe configs - James
Bug Fixes:
-
Fix holes in the world when using world gen - James
-
Fix world gen re-generating the same terrain - James
-
Fix world gen for extreme render distances - James
-
Fix ocean lighting grid issue - James
-
Fix C2ME support - James
- Changing C2ME's config should no longer be necessary to run it with DH.
-
Fix SSAO and Fog not applying when Optifine shaders are enabled - James
-
Fix BiomeWrapper warning about null level on startup - James
-
Fix missing indium crashing with a messy error when java.awt is headless - James
- The error message will now be much clearer and in most cases, should have a pop-up dialog explaining the problem.
-
Fix Z-fighting at very high heights - James
-
Fix red LODs rendering in random places
- IE Added a config which is disabled by default to render overlapping quad errors - James
-
Fix rendering holes (most of the time) - James
-
Fix F3 menu not removing levels after leaving when multiverse support is active - James
-
Fix LodRenderSections not stopping load futures when closed - James
-
Fix a rare concurrent lighting engine issue with ChunkWrapper.getBlockLightPosList() - James
-
Fix purple Chisels & Bits block rendering - Pierre Remacle
- IE make Chisels & Bits blocks transparent
-
Fix ThreadPool null pointer before world startup - James
-
Fix world gen lockup if the file system fails - James
-
Fix chunk break/place events not triggering fabric updates post MC 1.17 - James
-
Fix Optifine not running in the dev environment - James
-
Fix light engine out of bounds for MC 1.16 and 1.17 - James
-
Fix File handler repos not closing - James
-
Fix transparent ocean floors at low detail levels - James
-
Fix warning about BiomeWrapper null level on startup - James
-
Fix white grass/water if the biome is null - James
-
Fix optifine 1.16 support - James
-
Fixed mod auto-updating on quilt - coolGi
-
Fix thread pool error logging after shutdown - James
-
Fix corrupt data or moving data between MC versions causing monoliths - James
-
Fix #49 shaders render incorrectly - IMS
- This is specifically fixed for Iris 1.7.0+
-
Fix #94 Rendering issues with Immersive Portals
-
Fix #414 Added (nearly) unlimited vertical quality graphics option
-
Fix #449 LodNodeBufferBuilder crash due to index out of bounds
-
Fix #595 crash on save and exit - James
-
Fix #597 Show Create logo in DH's update menu
-
Fix #613 multiplayer failing due to folder not existing - James
-
Fix #615 lag when rapidly breaking/placing blocks - James
-
Fix #638 optifine not rendering on 1.16 + 1.17
-
Fix #640 world gen holes not filling in
-
Fix #641 seamless overdraw issues
-
Fix #650 Fix Indium missing messages not displaying correctly in some cases - James
-
Fix #663 Fix world gen holes - James
-
Fix #670 Remove outdated world gen options from tooltip - James
-
Fix #673 Chunks without a position are ignored - James
-
Fix #680 Massive Memory Usage by ColumnRenderSource#renderDataContainer - James
Removals
- Remove Seamless Overdraw Test - James
- The experiment was interesting, but ultimately failed. There were a number of issues rendering entities and it only ever worked on Fabric.
- Near and near/far fog options - James
- Near fog was originally added back in DH 1.0 in case we couldn't remove vanilla fog, which has since proven to not be an issue.
- Remove Unlimited horizontal quality (LOD Dropoff Distance) setting - James
- Unlimited quality is unnecessary and due to how the renderer is currently set up, unable to be run on any machine at higher render distances.
- Disable cave culling for any detail level above 0 - James
- Cave culling is currently bugged and to prevent holes in the ocean that show the void this is the temporary solution.
API
Highlights:
- Due to breaking changes the api version number has been up from 1.0.0 to 2.0.0
- please make sure your implementing programs check the API version and handle old DH versions cleanly.
Full Details:
Breaking Changes
-
Renamed
- ERendererMode -> EDhApiRendererMode
- DhApiChunkOfDataPoints -> DhApiChunk
- DhApiTerrainDataPoint
- lightLevel -> blockLightLevel, skyLightLevel
- DhApiBeforeRenderEvent and DhApiAfterRenderEvent -> EventParam
- DhApiBeforeRenderEvent.EventParam -> DhApiRenderParam
- DhApiAfterRenderEvent.EventParam -> DhApiRenderParam
- Added missing "DhApi" prefix to the following enums:
- EDhApiQualityPreset
- EDhApiThreadPreset
- EDhApiBlocksToAvoid
- EDhApiDataCompressionMode
- EDhApiGLErrorHandlingMode
- EDhApiGlProfileMode
- EDhApiGpuUploadMethod
- EDhApiGrassSideRendering
- EDhApiHorizontalQuality
- EDhApiLodShading
- EDhApiLoggerMode
- EDhApiMaxHorizontalResolution
- EDhApiServerFolderNameMode
- EDhApiUpdateBranch
- EDhApiVanillaOverdraw
- EDhApiVerticalQuality
- EDhApiWorldCompressionMode
- EDhApiDebugRendering
- EDhApiFogColorMode
- EDhApiFogDrawMode
- EDhApiFogFalloff
- EDhApiHeightFogMixMode
- EDhApiHeightFogMode
- EDhApiRendererMode
- EDhApiRenderPass
- EDhApiTransparency
- EDhApiWorldGeneratorReturnType
-
Replaced
- IDhApiRenderProxy
- removed getDhFrameBufferId() and setTargetFrameBufferId()
- replaced with the bindable IDhApiFramebuffer interface
- removed getDhFrameBufferId() and setTargetFrameBufferId()
- IDhApiGraphicsConfig
- Replaced overdrawPrevention() with overdrawPreventionRadius()
- Removed DhApiScreenResizeEvent
- replaced with DhApiColorDepthTextureCreatedEvent
- IDhApiRenderProxy
Additions
-
expand API to allow world generator to generate chunks of data points in addition to actual chunks. - Builderb0y
-
usable interfaces
- IDhApiWrapperFactory
-
bindable interfaces
- IDhApiFramebuffer
- IDhApiShaderProgram
- IDhApiCullingFrustum
- IDhApiShadowCullingFrustum
-
bindable events
- DhApiBeforeApplyShaderRenderEvent
- DhApiBeforeBufferRenderEvent
- DhApiBeforeDeferredRenderEvent
- DhApiBeforeRenderCleanupEvent
- DhApiBeforeRenderPassEvent
- DhApiBeforeRenderSetupEvent
- DhApiBeforeTextureClearEvent
- DhApiColorDepthTextureCreatedEvent
-
methods
- IDhApiRenderProxy
- setDeferTransparentRendering()
- getDeferTransparentRendering()
- getNearClipPlaneDistanceInBlocks()
- IOverrideInjector.unbind()
- DhApi.isDhThread()
- DhApiConfigValue.clearValue()
- IDhApiRenderProxy.getDhFrameBufferId()
- IDhApiWorldGenerator
- generateChunks()
- generateApiChunks()
- EDhApiWorldGeneratorReturnType getReturnType()
- IDhApiConfigValue
- getApiValue()
- clearValue()
- IDhApiRenderProxy
-
variables
- DhApiRenderParam
- EDhApiRenderPass renderPass
- float nearClipPlane
- float farClipPlane
- DhApi.wrapperFactory
- DhApiRenderParam