Release notes
On this page
Migration guide
Migrating to 1.60
Changes in shaders
The pixel shader additional flags in CohCommonPS.ihlsl
should be updated with the following values:
static const int PSAF_LinearColorSpace = 0x1;
static const int PSAF_LinearTextureSpace_0 = 0x2;
static const int PSAF_LinearTextureSpace_1 = 0x4;
static const int PSAF_ColorTextAtlas = 0x8;
The flags PSAF_LinearTextureSpace_0
and PSAF_LinearTextureSpace_1
indicate whether the shader should convert from SRGB to linear color space manually for texture slot txBuffer
and txBuffer1
respectively. The conversion should be applied after sampling from textures that contain color values and not arbitrary data (e.g. signed distance field). Example:
float4 source = SAMPLE2D(txBuffer, input.Additional.xy);
if (IS_SET(int(perCommandData.y), PSAF_LinearTextureSpace_0))
{
source.rgb = SRGBToLinear(source.rgb);
}
...
float4 source1 = SAMPLE2D(txBuffer1, input.Additional.xy);
if (IS_SET(int(perCommandData.y), PSAF_LinearTextureSpace_1))
{
source1.rgb = SRGBToLinear(source1.rgb);
}
New shader types
In an effort to reduce stencil usage by improving clipping commands, we introduced 4 new shader types: ST_RoundedRectTexture
, ST_CircleTexture
, ST_EllipseTexture
, ST_RoundedRectTextureRepeat
. Their corresponding pixel shader types: PST_RoundedRectTexture
, PST_CircleTexture
(same as PST_RoundedRectTexture
), PST_EllipseTexture
, PST_RoundedRectTextureRepeat
have been implemented in the CohShadeGeometryRare.ihlsl
file. They are almost identical to their respective non-texture shader types, however instead of using the input color, they sample from an image.
In order to send additional data with every vertex, we utilized the StandardVS
’s input.Position.z
and output.ScreenNormalPosition.z
fields, and as a result the CohStandardVS.hlsl
shader was altered to null the Z output.Position
for the new shader types. Below is the meaning of this field for each new shader type:
Shader Type | input.ScreenNormalPosition.z |
---|---|
PST_RoundedRectTexture | value of the edge distance |
PST_RoundedRectTextureRepeat | value of the edge distance |
PST_CircleTexture | circle’s radius |
PST_EllipseTexture | ellipse’s X-radius |
The ellipse’s Y-radius in the PST_EllipseTexture
shader type is stored inside the perCommandData.x
field
Image repetition adjustments
Along with these changes, the logic behind the way Prysm does image repetition has also been slightly modified. Before, Prysm used to generate a lot of geometry when repeating a subimage from a texture. This has been replaced by a mathematical approach that allows us to correctly calculate the UVs that we need to sample from the texture. In order to do this, the pixel shader type PST_DrawImageRepeat
had to be added and implemented inside the CohClipMasking.ihlsl
, CohShadeGeometry.ihlsl
and CohShadeGeometryStencil.ihlsl
files.
Note: If you rely on a custom backend, all of the mentioned pixel shader types must be implemented:
- A combined pixel shader for
PST_RoundedRectTexture
andPST_CircleTexture
PST_RoundedRectTextureRepeat
PST_EllipseTexture
PST_DrawImageRepeat
You can check CohShadeGeometryRare.ihlsl
, CohClipMasking.ihlsl
, CohShadeGeometry.ihlsl
and CohShadeGeometryStencil.ihlsl
for reference on how the new shader types are used.
Changelog
Version 1.60.0
Released 07 Nov 2024
API | Added several new shader types to reduce stencil usage. For more information, see the Rendering Migration guide |
API | At-rules now support ordering. This mostly affects existing media at-rules that were previously position independent and were always overriding regular rules. Such stylesheets need to be reworked according to the standard behavior respecting cascade order. |
APIUnity | Moved the Unity3D-specific log handling functionality within the LogWriter class |
APIUnity | Renamed the LogHandler class to CohtmlLogHandler |
Feature | Persistent local storage for the Player on Windows Desktop and Mac OS |
FeatureUnity | Add Performance logging support |
FeatureUnity | Added sample hub for easier access to all samples |
FeatureUnreal Engine | Added profiling scopes for Unreal insights |
Enhancement | Added conversion to linear colorspace when sampling from textures. For more information, see the Rendering Migration guide |
Enhancement | Added a library option to set the scripting engine (V8) flags |
Enhancement | Improved error messages when loading ES6 modules with syntax errors |
Enhancement | Added inventory to the Multiplayer UI sample |
Enhancement | Added marketplace to the Multiplayer UI sample |
Enhancement | Allow passing view specific developer options in the command line arguments of the Player |
Enhancement | Added tutorial for creating a 3D compass |
Enhancement | Improved the performance of drawing repeated images |
Enhancement | Added a dialogue tree sample |
EnhancementUnity | Added a new UI Surface Partitioning sample to the Unity3D package |
EnhancementUnity | Added a new Localization sample to the Unity3D package |
EnhancementUnity | Added a new in-world view sample to the Unity3D package |
EnhancementUnity | Added a new View in Canvas UI sample to the Unity3D package |
EnhancementUnity | Configured the correct color space in the rendering library based on the active color space in Unity3D |
EnhancementUnreal Engine | Add extra guards when accessing RHI Textures |
EnhancementUnreal Engine | Improved the flow of freeing rendering resources owned by the cohtml::System object |
EnhancementUnreal Engine | Added texture pool for Custom Effect textures preventing memory accumulation between GC intervals |
Fix | Fixed MinimalHelloCohtml sample resource handler crash when trying to load missing resources |
Fix | Fixed fonts with GPOS kerning rendering composed glyphs incorrectly |
Fix | Fixed missing timeline when making performance captures on Android |
Fix | Fixed crash when capturing a screenshot for the Inspector on Sony PlayStation 5 |
Fix | Fixed setRangeText preserving incorrect selection |
Fix | Fixed an issue with position: fixed when used within inline layout |
Fix | Fixed a possible crash when calling UpdateWholeModel() |
Fix | Fixed caret position when changing <input> /<textarea> value from JavaScript |
Fix | Fixed potential crashes when using custom variables inside of @keyframes declarations |
Fix | Fixed custom effect sample with OpenGL |
Fix | Fixed samples linking with Vulkan on Windows ARM64 |
Fix | Fixed elements not being re-rendered when a valid font for weight fallback becomes available |
Fix | Fixed detection of base64 URLs that was causing warnings for exceeding URL size limits and failures to parse |
Fix | Fixed a wrong debug assert failure when unloading base64 images stating that the image was not found in the pending images collection |
Fix | Fixed a wrong debug assert failure when using a defer attribute on inline scripts |
Fix | Fixed setRangeText to throw an error when an invalid selection mode is provided |
Fix | Fixed memory accumulation in the InspectorPageAgent when reloading resources |
Fix | At-rules are now accessible through cssRules , making rule order correct |
Fix | Styles in link elements are now accessible through stylesheets API |
Fix | Media attribute of link elements can now contain 'or' and ',' |
Fix | Fixed wrong style in some cases when using insertrule and deleterule |
Fix | Fixed nested media rules with non-absolute URLs |
Fix | Fixed using insertrule with rules that have properties with non-absolute URLs |
Fix | Link elements with now respond correctly to removing, adding or changing the media attribute |
Fix | Fixed sometimes applying wrong styles when using complex selectors inside media rules |
Fix | Fixed holding resources of inactive font-face rules in memory |
Fix | Fixed sometimes applying wrong font-face rules when using multiple ones with the same FontDescription but different URLs |
Fix | Added the ability to use insertrule and deleterule with media and font-face rules |
Fix | Fixed a wrong debug assert failure in the DOM Builder |
Fix | Fixed a bug with the CSS transitions when transitioning more than one property of the same value type |
Fix | Removed dead code triggering cast-align warnings in Renoir backends |
FixUnity | Fixed surface partitioning in Unity3D Integration after changing the scene |
Fix | Fixed a possible crash when calling UpdateWholeModel every frame |
FixUnity | Add data URL requests support |
FixUnreal Engine | Fixed crash when capturing the backend buffer through the Inspector |
FixUnreal Engine | Fixed Unreal Engine 4.27 Linux and Android compilation issues |
FixUnreal Engine | Fixed rendering artifacts caused by wrongly calculated scissor rect |
FixUnreal Engine | Fixed custom effects texture memory accumulation |