January 20, 2025

SDK 41


New Engine features:
  • C++ reflection.
  • JavaScript API.
  • Node-based materials editing.
  • Material depth intersection blending.
  • Randomized texture coordinate sampling.
  • All Core SDK language examples render torii objects.
Plugin changes:
  • C++ API reflection plugin has been added.
  • JavaScript API plugin for JavaScript-only applications has been added.
  • MaterialFlow plugin provides full node-based material editing functionality.
  • webp Image format plugin has been added.
  • Bound types have been added to all languages.
  • Flow plugin includes base GLSL generation library.
  • Flow plugin supports different variants and versions.
  • Input and output attachment, and create callbacks have been added to the Flow plugin.
  • Primitive plugin skips zero-sized cylinder caps.
Tools changes:
  • All Explorer Material uniform sliders have text editing mode on the right mouse click.
  • Explorer Material editor supports vec2 uniforms.
  • Old scenes are backed up before the Explorer scene save action.
  • Explorer includes a MaterialFlow plugin for node-based material editing.
Sample changes:
  • 10_hello_image manual sample.
  • 11_hello_bindless manual sample.
  • platform/storage test has been added.
  • materials/material_foliage.scenex animation material example.
  • nodes/node_geometry.scenex geometry selection example.
  • render/render_refraction.scenex render refraction example.
  • material_flow_animation|anisotropy|bumpmap|cell|forward|fractal|parallax|perlin|skinned|texcoord|transparent|vertex sample scenes with MaterialFlow-based materials have been added to Engine SDK.
API changes:
  • Each API class has reflection methods getClassName() and getClassNamePtr().
  • makeQuickCompare() function has been added to enable simple inline comparison lambdas.
  • Parser::expectToken|Name() functions have been added.
  • Spatial::intersection() correctly handles single Node cases.
  • Control::addChild() method replaces/swaps the child control and returns the old one if it was replaced (new child) or null if it was swapped.
  • ControlCombo can hide the current text with setTextEnabled() and act as simple menu.
  • ControlSlider has Double and Right mouse button callback handlers.
  • ControlSlider has unconstrained editing mode with the Option key pressed.
  • ControlEdit can handle user keyboard events (keyboard events from other controls) with updateKeyboard() method.
  • HSV color conversion has been added to the Color struct.
Internal features:
  • An issue with a wrong number of parameters returned from String::scanf() function on empty numbers has been fixed.
  • Variables with “step” or any other reserved by external function names are automatically renamed into “step_%x” by the compiler to avoid name collision on some API.
  • The shader preprocessor recognizes “quiet” pragma and hides macro debug information during errors.
  • The shader compiler recognizes “dynamic” pragma and avoids shader cache creation for such shaders.
  • ControlRoot::setOverlayOrder() automatically fixes the issue with overlays rendering inside ControlArea.
  • ControlDialog limits the number of iterations to 8 to avoid hangs.
  • A vertex shader pass has been added to the MaterialShading class. This pass is performed after vertex skinning and morphing and is useful for dynamic geometry that calculates motion vectors automatically.
  • All Object shaders use #assign instead of #define macro to avoid “macro has been redefined” warnings.
  • attribute_position and attribute_normal shader inputs provide pre-skinned|morphed values good for procedural texture coordinate generation.
  • GLTF KHR_materials_anisotropy extension support.
  • HLSL access to half SSBO types.
  • Global GLSL constant arrays support has been added.
  • GLSL array initialization is compatible with vector types.
  • MeshMaterial::Anisotropy|AnisotropyAngle parameters have been added.
  • The number of SSBO buffers in Pipelines, Kernels, and Traversals has been increased to 32.
  • Correct evaluation of nested shader macros without values.
  • The number of barriers per barrier() call has been increased to 128.
  • A random bug with incorrect parsing of some JPEG files has been fixed.
  • isFinite|Normal|Inf|Nan functions are manually implemented.
  • Access to SpatialTree internal buffers has been added.
  • WebGPU can be initialized from a preinitialized device.
  • Frame Viewport struct includes scene_time|ifps|seed|layer members.
  • Correct depth bias evaluation for screen space occlusion. The banding artifact has been removed.
  • HDR reflection overflow has been fixed on iOS.
  • Temporal antialiasing has a better reaction to luminance changes.
  • An incorrect first frame motion vector artifact has been removed.
  • NodeObject has a new geometry index parameter for strict geometry selection.
  • LightGlobal has a new split offset parameter for a better split distribution.
  • MaterialMetallic|Specular has a PixelDepth option for random depth value for smooth depth intersection.
  • MaterialMetallic|Specular has a Randomized texture coordinates option for tile-less texture sampling.
  • New Apple devices have been added to system Info. A device version is also included in the system info string.
SDK 41