-
Notifications
You must be signed in to change notification settings - Fork 812
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Fullscreen Resolution Slider #2642
Conversation
The resolution controls would not fit in the allocated space, so I changed the rendering of slidercontrols to enable rendering the slider bar and the value text in the same area. Signed-off-by: MeeniMc <68366846+MeeniMc@users.noreply.github.com>
reduce the length of scrollbars so that it doesn't look as busy Signed-off-by: MeeniMc <68366846+MeeniMc@users.noreply.github.com>
…hat the box can be reduced to avoid overlapping with the undo button. Signed-off-by: MeeniMc <68366846+MeeniMc@users.noreply.github.com>
# Conflicts: # src/main/java/net/caffeinemc/mods/sodium/client/gui/SodiumOptionsGUI.java # src/main/java/net/caffeinemc/mods/sodium/client/gui/options/control/SliderControl.java
It's a good idea but it doesn't work with AUTO gui scale, there is no vertical scrolling and the extra line renders outside the screen now. |
That's a good point, do you know where one makes the control element notify the GUI system of it's correct size? Is there a place where it calculates the total size of the GUI for determining the scale? |
I've updated it to be only one line but truncate the width of the label dynamically based on the slider's value width. |
LGTM |
add two-line fullscreen resolution option remove two-line option but make it the normal style refactor label truncation and slider rendering to work together, this means the label will now be truncated based on the slider's current actual content width. other control elements can but don't have to implement accurate content width information.
8e7ea7f
to
2cb97e9
Compare
resolved conflicts and brought the branch up to speed with dev |
common/src/main/java/net/caffeinemc/mods/sodium/client/gui/options/control/ControlElement.java
Show resolved
Hide resolved
This is fine as a temporary solution for now. But I wouldn't want to keep around multi-line controls once we rework the video setting screen. |
This PR doesn't add it as a multiline option (anymore), I replaced it with label truncation. |
My bad for not updating the description |
* Correctly handle colorization on NeoForge * Combine the vertex position attributes (CaffeineMC#2753) This improves terrain rendering performance significantly on Intel Xe-LP graphics under Linux. * Add option for Fullscreen Resolution (CaffeineMC#2642) The resolution controls would not fit in the allocated space, so the rendering of slider controls was changed to enable rendering the slider bar and the value text on separate lines. Co-authored-by: MeeniMc <68366846+MeeniMc@users.noreply.github.com> * Only enable Fullscreen Resolution option on Windows Additionally, adjust the rendering of the controls to be less confusing when disabled, and provide an explanation as to what the option does. * Use consistent vertex ordering in entity rendering Some core shaders were relying on the model part faces being written out in a specific order. We still don't support core shaders, but the fix here is trivial enough. Fixes CaffeineMC#2745 * Add check for NeoForge per-quad AO flag * Disable mod entrypoint on Forge when running on servers (CaffeineMC#2773) * Fix excessively large allocations in chunk meshing The requested capacity was being multiplied by the vertex stride more than once, which resulted in far too much memory being allocated. Closes CaffeineMC#2792 * Fix some issues with Uint32 representation This increases the maximum size of vertex and index buffers to 4 billion elements, since the Uint32 types stored in memory are now safely represented with Int64. For vertex buffers, this increases their maximum size to 80 GiB, and index buffers have a maximum size of 16 GiB, whereas both were limited to 2 GiB prior. * Fix cull bitmask ordering in entity rendering Closes CaffeineMC#2788 * Add support for Maven Local publishing * Fix incorrect warning message when D3DKMT is not supported * Add Flawless Frames handler for NeoForge * Add angle-based section visibility path occlusion (CaffeineMC#2811) This eliminates 8-13% of the rendered sections at higher render distances on average in testing, and correspondingly reduces graph search time by a similar amount. * Disable material downgrading on Intel Gen8 and older Fixes CaffeineMC#2830 * Delay normal face calculation to use This potentially fixes some cases of CaffeineMC#2835. * Skip particle rendering optimizations for incompatible mods Fixes CaffeineMC#2827 * Update project URLs in source and documentation We're no longer a Fabric-exclusive mod, so let's get rid of the suffix. * Add third-party license notice for Fabric API * Optimizations for some block models (CaffeineMC#2508) Co-authored-by: muzikbike <52297970+muzikbike@users.noreply.github.com> * Fix sorting failures on rotated cuboids (CaffeineMC#2812) Use the accurate vertex positions for unaligned and aligned (but rotated) quads. * Rework the Gradle build scripts for multi-loader * Shared logic is moved into a build plugin where possible * Build time is significantly improved when the Gradle daemon is warmed * Mixins are remapped in-place now, eliminating the need for refmaps at runtime. This also gets rid of some warning messages at startup. * Module relationships are now correctly represented in IDEA for other source sets (fixes a lot of code analysis features) * Split Java source and resources into different configurations * Run configurations are now consistent between NeoForge/Fabric * The common project is no longer remapped unnecessarily * Updated Gradle and build plugins * Restore versioning schema to build script * Make organization of platform mixin packages consistent Fixes CaffeineMC#2688 * Exclude README documentation from processed resources These files are only meant to be in the source distribution, and Minecraft doesn't like them. * Don't try to load a refmap from the mixin plugin * Enumerate additional PCI classes in the graphics adapter probe Some integrated GPUs, such as RDNA3.5, appear to use the PCI_CLASS_DISPLAY_OTHER class. * Remove KDE and GNOME specific backends for browsing URLs The bugs with xdg-open have been resolved upstream and most Linux distributions are shipping the patches. Also, make sure we get a successful exit code from the XDG implementation. * Remove Minecraft from classpath of the pre-launch source set This will help to avoid class-load issues and makes the code more hygienic. * Update to Minecraft 1.21.3 * Ensure tooltips are constrained to the screen (CaffeineMC#2845) * Update authors and contributors list * Remove leftover popPose * Trust existing fog color * Block the Overwolf Overlay due to graphical corruption The overlay does not correctly restore the texture unit state in OpenGL, which causes problems when Minecraft thinks a texture has already been bound to a slot. Since disabling the OpenGL state cache globally is not an acceptable solution (it would severely hurt performance) and their software doesn't give us any method to detect the problematic version, we block all versions. gep_minecraft.dll is the payload they actually inject, which has no version information or description. Fixes CaffeineMC#2862 * Avoid static memory allocation in EntityRenderer Just allocate on the stack, since it's a small amount of memory (<1 KiB) and avoids needing complex finalizers. * Fix y-offset calculation for back face culling in cloud rendering (CaffeineMC#2864) * Fix memory leak and double free in CloudRenderer * Improve color mixing functions The existing functions did not implement rounding correctly (often leading to off-by-one errors). Additionally, the improved variants are both slightly faster and easier to understand. * Fixup documentation in ColorMixer * Unify color mixing/swizzling utilities The Fabric integration code was re-implementing a lot of the utilities that already exist in Sodium unnecessarily. Also, improve the documentation so that ABGR and RGBA are not used interchangeably. * Add optimized function for bi-linear interpolation This reduces the number of ALU ops significantly and creates a common utility function in the project. * Reduce time complexity for box blurs Measuring the time spent per box blur in biome blending, the following results were observed. Radius Before After % Improvement 7 blocks 9100ns 3700ns 59% 3 blocks 5400ns 3200ns 41% 1 blocks 3700ns 2600ns 29% * Revert detection of Overwolf Overlay They claim this has since been fixed. We will re-examine in the future if we see additional reports. This reverts commit e7ea6f7. * Bump version to 0.6.0-beta.5 * Bump version to 0.6.0-final * Update render code for chunk status map Fixes CaffeineMC#2881 * Rollup of fixes and improvements for cloud rendering Some changes were made to cloud rendering in newer versions that needed to be replicated in Sodium. - The alpha cutoff for clouds was changed to (a < 10). - Texture loading can now gracefully fail, and it is expected that rendering is skipped when this happens. - The movement/positioning of clouds was slightly changed. - The render pass system now needs to be told about render target usages (fixes CaffeineMC#2883). This commit also improves mesh building time by around 35% on a fast processor (AMD Ryzen HX AI 370) through various micro-optimizations. * Fix culling behavior between transparent and opaque blocks Minecraft 1.21.2 changed some of the rules, and this was causing the faces of transparent blocks to be rendered even when they were hidden by full opaque blocks. Fixes CaffeineMC#2850 * Fix precision issues in cloud rendering at far distances * Use alternative workaround for NVIDIA drivers The NVIDIA driver enables a driver feature called "Threaded Optimizations" when it finds Minecraft, which causes severe performance issues and sometimes even crashes. Newer versions of the driver seem to use a slightly different heuristic which our workaround doesn't address. So, instead, use an alternative method that enables GL_DEBUG_OUTPUT_SYNCHRONOUS. This seems to reliably disable the functionality *even if* the user has configured it otherwise in their driver settings. Additionally, on Windows, we now always indicate to the driver that Minecraft is running, so that users with hybrid graphics don't see regressed performance. * Sort render lists for regions and sections after traversal (CaffeineMC#2780) Render sections and regions are sorted after the graph traversal is performed. This decouples their ordering from the graph, which isn't entirely correct for draw call sorting. Fixes CaffeineMC#2266 * Add support for new NeoForge fluid overlay API * Ensure depth test is configured when rendering clouds The state of the depth test prior to cloud rendering is undefined. After rendering, it is expected to be disabled again. * Fix rounding error in ColorMixer#mix Rounding of the values now happens after the 16-bit intermediaries are added together. This affected some animated textures, causing them to exhibit flickering behavior. * Add additional optimized block models This covers the following additional blocks: - Cauldrons - Brewing Stands - Bells Co-authored-by: JellySquid <jellysquid@pm.me> * Avoid marking the section graph as dirty if state didn't change (CaffeineMC#2886) Avoids rebuilding the render lists and doing a graph search more often than necessary by checking if the section actually changed in a way that's relevant to the graph search. For worlds that update their blocks frequently (every tick or every redstone tick) this avoids half the graph searches. Some graph searches are still necessary to schedule rebuild tasks, but when the task results come back, this doesn't do another graph search unless the section's visibility data or build state changed in a way that needs the render list to be updated. * Use larger bounding box for nearby sections in frustum check (CaffeineMC#2879) This fixes some problems where very large block entities in nearby sections may be incorrectly culled. But it does not comprehensively fix the problem for all other sections, since that would require visiting the 27-neighborhood of every section, which is too slow. * Bump version to 0.6.1 * Bump dependency versions * Update mod manifest * Ensure ItemRenderContext.isDefaultTranslucent is initialized * Update compatible mods listing * Update mod manifest to restrict Minecraft versions * Update to Minecraft 1.21.4 * Update NeoForge manifest for Minecraft 1.21.4 * Fix glyph effect orientation * Fix hidden surface elimination in fluid rendering for waterlogged blocks (CaffeineMC#2907) * Fix detection for specific Intel OpenGL ICDs The OpenGL ICD name now includes the file extension, which the regex expressions were not matching. * Avoid showing the incompatible driver error in some cases For systems with hybrid graphics, it may be the case that an incompatible graphics driver is installed, but that it isn't used for the OpenGL context. We can avoid showing errors in this situation by checking the vendor string of the context immediately after creation. This is not the most robust check, but in practice, a single system should not have multiple graphics drivers installed from the same vendor, so checking the string should be relatively safe. * Fix lambda mappings * Bump version and dependency requirements * Use correct coordinates for sorting chunk sections (CaffeineMC#2924) Fix section and region sorting by using the correct section coordinate instead of the integer part of the camera transform, which is incorrect near the origin. Closes CaffeineMC#2918 * Update README.md --------- Co-authored-by: IMS212 <ims@irisshaders.dev> Co-authored-by: JellySquid <1363084+jellysquid3@users.noreply.github.com> Co-authored-by: douira <douira@users.noreply.github.com> Co-authored-by: MeeniMc <68366846+MeeniMc@users.noreply.github.com> Co-authored-by: JellySquid <jellysquid@pm.me> Co-authored-by: IThundxr <me@ithundxr.dev> Co-authored-by: muzikbike <52297970+muzikbike@users.noreply.github.com>
The resolution controls would not fit in the allocated space, so the rendering of slider controls was changed to enable rendering the slider bar and the value text on separate lines. Co-authored-by: MeeniMc <68366846+MeeniMc@users.noreply.github.com>
* rename some things for clarity * fix waterlogged glass panes (once again, but more this time) by avoiding distance sorting through the detection of primary intersectors when geometry is intersecting and then sorting them in a fixed order * use Mth.clamp for clarity * refactor buffer and sort result handling, buffers are now freed immediately instead of keeping them to avoid memory usage buffer caching would be a better solution but that's complicated and doesn't currently work correctly * reduce number of unique triggers by around 5 percent without impacting sorting or building performance * importantly sort a little farther away, sort tasks are fast * use defer zero frames for important sort tasks by default * fix build * clarify authorship of BitArray * fix bug with radix sort for SNR heuristic in BSP partition generating wrong indexes * combine draw commands * correctly reset accumulated element count * remove draw call combining for indexed rendering as it's broken and hard to fix * skip heuristic if there's no quads * refactor primary intersector detection to handle large cases better, also removed the warning message about unpartitionable geometry as it seems to not be a relevant problem * fix topo sorting in some situations where the dot product was wrongly not recalculated when the normal is quantized. also fixed aligned quads not receiving the more accurate center based on the average of the unique vertexes. * reorder vertex ranges before uploaded to optimize for combined draw commands * tune primary intersector detection to handle situations where only a small amount of geometry is intersecting * Correctly handle colorization on NeoForge * Combine the vertex position attributes (CaffeineMC#2753) This improves terrain rendering performance significantly on Intel Xe-LP graphics under Linux. * Add option for Fullscreen Resolution (CaffeineMC#2642) The resolution controls would not fit in the allocated space, so the rendering of slider controls was changed to enable rendering the slider bar and the value text on separate lines. Co-authored-by: MeeniMc <68366846+MeeniMc@users.noreply.github.com> * Only enable Fullscreen Resolution option on Windows Additionally, adjust the rendering of the controls to be less confusing when disabled, and provide an explanation as to what the option does. * fix draw command combining, remove aggressive non-empty command skipping because it seems broken * Use consistent vertex ordering in entity rendering Some core shaders were relying on the model part faces being written out in a specific order. We still don't support core shaders, but the fix here is trivial enough. Fixes CaffeineMC#2745 * Add check for NeoForge per-quad AO flag * Disable mod entrypoint on Forge when running on servers (CaffeineMC#2773) * fix graphical corruption when there's a lot of geometry by appropriately picking the size of the required shared index buffer * cleanup unused and broken code * cleanup calculation of mask bit and element count * cleanup meshing, storage, and renderer * fix translucent rendering by correctly decoding vertex segments * cleanup misc, remove unused code * refactor translucent AnyOrderData to not generate its own trivial index buffer and instead share this type of data within regions * add Index Pool arena size * add arena content caching * Fix excessively large allocations in chunk meshing The requested capacity was being multiplied by the vertex stride more than once, which resulted in far too much memory being allocated. Closes CaffeineMC#2792 * Fix some issues with Uint32 representation This increases the maximum size of vertex and index buffers to 4 billion elements, since the Uint32 types stored in memory are now safely represented with Int64. For vertex buffers, this increases their maximum size to 80 GiB, and index buffers have a maximum size of 16 GiB, whereas both were limited to 2 GiB prior. * refactor storage to cope with larger amounts of geometry and use less ugly hacks, rename a bunch of methods to be consistent and clearer * remove debug code * Fix cull bitmask ordering in entity rendering Closes CaffeineMC#2788 * Add support for Maven Local publishing * Fix incorrect warning message when D3DKMT is not supported * Add Flawless Frames handler for NeoForge * Add angle-based section visibility path occlusion (CaffeineMC#2811) This eliminates 8-13% of the rendered sections at higher render distances on average in testing, and correspondingly reduces graph search time by a similar amount. * Disable material downgrading on Intel Gen8 and older Fixes CaffeineMC#2830 * Delay normal face calculation to use This potentially fixes some cases of CaffeineMC#2835. * Skip particle rendering optimizations for incompatible mods Fixes CaffeineMC#2827 * Update project URLs in source and documentation We're no longer a Fabric-exclusive mod, so let's get rid of the suffix. * Add third-party license notice for Fabric API * Optimizations for some block models (CaffeineMC#2508) Co-authored-by: muzikbike <52297970+muzikbike@users.noreply.github.com> * Fix sorting failures on rotated cuboids (CaffeineMC#2812) Use the accurate vertex positions for unaligned and aligned (but rotated) quads. * Rework the Gradle build scripts for multi-loader * Shared logic is moved into a build plugin where possible * Build time is significantly improved when the Gradle daemon is warmed * Mixins are remapped in-place now, eliminating the need for refmaps at runtime. This also gets rid of some warning messages at startup. * Module relationships are now correctly represented in IDEA for other source sets (fixes a lot of code analysis features) * Split Java source and resources into different configurations * Run configurations are now consistent between NeoForge/Fabric * The common project is no longer remapped unnecessarily * Updated Gradle and build plugins * Restore versioning schema to build script * Make organization of platform mixin packages consistent Fixes CaffeineMC#2688 * Exclude README documentation from processed resources These files are only meant to be in the source distribution, and Minecraft doesn't like them. * Don't try to load a refmap from the mixin plugin * Enumerate additional PCI classes in the graphics adapter probe Some integrated GPUs, such as RDNA3.5, appear to use the PCI_CLASS_DISPLAY_OTHER class. * Remove KDE and GNOME specific backends for browsing URLs The bugs with xdg-open have been resolved upstream and most Linux distributions are shipping the patches. Also, make sure we get a successful exit code from the XDG implementation. * Remove Minecraft from classpath of the pre-launch source set This will help to avoid class-load issues and makes the code more hygienic. * Update to Minecraft 1.21.3 * Ensure tooltips are constrained to the screen (CaffeineMC#2845) * Update authors and contributors list * Remove leftover popPose * Trust existing fog color * Block the Overwolf Overlay due to graphical corruption The overlay does not correctly restore the texture unit state in OpenGL, which causes problems when Minecraft thinks a texture has already been bound to a slot. Since disabling the OpenGL state cache globally is not an acceptable solution (it would severely hurt performance) and their software doesn't give us any method to detect the problematic version, we block all versions. gep_minecraft.dll is the payload they actually inject, which has no version information or description. Fixes CaffeineMC#2862 * Avoid static memory allocation in EntityRenderer Just allocate on the stack, since it's a small amount of memory (<1 KiB) and avoids needing complex finalizers. * Fix y-offset calculation for back face culling in cloud rendering (CaffeineMC#2864) * Fix memory leak and double free in CloudRenderer * Improve color mixing functions The existing functions did not implement rounding correctly (often leading to off-by-one errors). Additionally, the improved variants are both slightly faster and easier to understand. * Fixup documentation in ColorMixer * Unify color mixing/swizzling utilities The Fabric integration code was re-implementing a lot of the utilities that already exist in Sodium unnecessarily. Also, improve the documentation so that ABGR and RGBA are not used interchangeably. * Add optimized function for bi-linear interpolation This reduces the number of ALU ops significantly and creates a common utility function in the project. * Reduce time complexity for box blurs Measuring the time spent per box blur in biome blending, the following results were observed. Radius Before After % Improvement 7 blocks 9100ns 3700ns 59% 3 blocks 5400ns 3200ns 41% 1 blocks 3700ns 2600ns 29% * Revert detection of Overwolf Overlay They claim this has since been fixed. We will re-examine in the future if we see additional reports. This reverts commit e7ea6f7. * Bump version to 0.6.0-beta.5 * Bump version to 0.6.0-final * Update render code for chunk status map Fixes CaffeineMC#2881 * Rollup of fixes and improvements for cloud rendering Some changes were made to cloud rendering in newer versions that needed to be replicated in Sodium. - The alpha cutoff for clouds was changed to (a < 10). - Texture loading can now gracefully fail, and it is expected that rendering is skipped when this happens. - The movement/positioning of clouds was slightly changed. - The render pass system now needs to be told about render target usages (fixes CaffeineMC#2883). This commit also improves mesh building time by around 35% on a fast processor (AMD Ryzen HX AI 370) through various micro-optimizations. * Fix culling behavior between transparent and opaque blocks Minecraft 1.21.2 changed some of the rules, and this was causing the faces of transparent blocks to be rendered even when they were hidden by full opaque blocks. Fixes CaffeineMC#2850 * Fix precision issues in cloud rendering at far distances * Use alternative workaround for NVIDIA drivers The NVIDIA driver enables a driver feature called "Threaded Optimizations" when it finds Minecraft, which causes severe performance issues and sometimes even crashes. Newer versions of the driver seem to use a slightly different heuristic which our workaround doesn't address. So, instead, use an alternative method that enables GL_DEBUG_OUTPUT_SYNCHRONOUS. This seems to reliably disable the functionality *even if* the user has configured it otherwise in their driver settings. Additionally, on Windows, we now always indicate to the driver that Minecraft is running, so that users with hybrid graphics don't see regressed performance. * Sort render lists for regions and sections after traversal (CaffeineMC#2780) Render sections and regions are sorted after the graph traversal is performed. This decouples their ordering from the graph, which isn't entirely correct for draw call sorting. Fixes CaffeineMC#2266 * Add support for new NeoForge fluid overlay API * Ensure depth test is configured when rendering clouds The state of the depth test prior to cloud rendering is undefined. After rendering, it is expected to be disabled again. * Fix rounding error in ColorMixer#mix Rounding of the values now happens after the 16-bit intermediaries are added together. This affected some animated textures, causing them to exhibit flickering behavior. * Add additional optimized block models This covers the following additional blocks: - Cauldrons - Brewing Stands - Bells Co-authored-by: JellySquid <jellysquid@pm.me> * Avoid marking the section graph as dirty if state didn't change (CaffeineMC#2886) Avoids rebuilding the render lists and doing a graph search more often than necessary by checking if the section actually changed in a way that's relevant to the graph search. For worlds that update their blocks frequently (every tick or every redstone tick) this avoids half the graph searches. Some graph searches are still necessary to schedule rebuild tasks, but when the task results come back, this doesn't do another graph search unless the section's visibility data or build state changed in a way that needs the render list to be updated. * Use larger bounding box for nearby sections in frustum check (CaffeineMC#2879) This fixes some problems where very large block entities in nearby sections may be incorrectly culled. But it does not comprehensively fix the problem for all other sections, since that would require visiting the 27-neighborhood of every section, which is too slow. * Bump version to 0.6.1 * Bump dependency versions * Update mod manifest * Ensure ItemRenderContext.isDefaultTranslucent is initialized * Update compatible mods listing * Update mod manifest to restrict Minecraft versions * Update to Minecraft 1.21.4 * Update NeoForge manifest for Minecraft 1.21.4 * Fix glyph effect orientation * Fix hidden surface elimination in fluid rendering for waterlogged blocks (CaffeineMC#2907) * Fix detection for specific Intel OpenGL ICDs The OpenGL ICD name now includes the file extension, which the regex expressions were not matching. * Avoid showing the incompatible driver error in some cases For systems with hybrid graphics, it may be the case that an incompatible graphics driver is installed, but that it isn't used for the OpenGL context. We can avoid showing errors in this situation by checking the vendor string of the context immediately after creation. This is not the most robust check, but in practice, a single system should not have multiple graphics drivers installed from the same vendor, so checking the string should be relatively safe. * Fix lambda mappings * Bump version and dependency requirements * Use correct coordinates for sorting chunk sections (CaffeineMC#2924) Fix section and region sorting by using the correct section coordinate instead of the integer part of the camera transform, which is incorrect near the origin. Closes CaffeineMC#2918 * Update README.md --------- Co-authored-by: douira <douira100@gmail.com> Co-authored-by: IMS212 <ims@irisshaders.dev> Co-authored-by: JellySquid <1363084+jellysquid3@users.noreply.github.com> Co-authored-by: douira <douira@users.noreply.github.com> Co-authored-by: MeeniMc <68366846+MeeniMc@users.noreply.github.com> Co-authored-by: JellySquid <jellysquid@pm.me> Co-authored-by: IThundxr <me@ithundxr.dev> Co-authored-by: muzikbike <52297970+muzikbike@users.noreply.github.com>
As a compromise, this adds a fullscreen resolution slider but truncates the label to fit into one line. The design can be refined later, but at least users won't have to go to the vanilla settings for this now.
Thanks to @MeeniMc for their previous work in #2296 on adding the option in the first place. I added the two-line functionality and changed the style.
related: #46
Closes #2692