- Added feature level 02
- Note that EFeatureLevel_Latest now points to EFeatureLevel_02
- New features:
- Added support for Uniform Buffer Objects (Uniform Blocks) in shaders
- Added semantics for UBO:
EEffectUniformSemantic::ModelBlock
, EEffectUniformSemantic::CameraBlock
, EEffectUniformSemantic::ModelCameraBlock
(fully implemented)
EEffectUniformSemantic::FramebufferBlock
, EEffectUniformSemantic::SceneBlock
(not yet implemented on renderer side)
- Added support for merging content into an existing scene
- Added support for merging content of several files to ramses-viewer
- Add experimental support for Vulkan:
- Building vulkan device needs to be explicitly enabled using cmake option
ramses-sdk_ENABLE_DEVICE_TYPE_VULKAN
- Added new enum value
EDeviceType::Vulkan
- Scene can be configured to specify render backend compatibility using
SceneConfig::setRenderBackendCompatibility
- Added glad (OpenGL loader library)
- Redesigned CMake build option for freetype/harfbuzz. Bundled package is used by default unless
ramses-sdk_USE_PLATFORM_FREETYPE
is ON.
- Removed
ramses-sdk_ALLOW_PLATFORM_FREETYPE
and ramses-sdk_ALLOW_CUSTOM_FREETYPE
- Replaced with
ramses-sdk_USE_PLATFORM_FREETYPE
for system package, and set to OFF
by default
- SkinBindings are now updated at the end of logic update
- Upgraded internal abseil to 20240116.1
- Upgraded glslang to 14.1.0
- Allow embedded compositing using DMA buffers even if EGL extension
EGL_WL_bind_wayland_display
is not available
- Mark APIs related to system compositor controller on renderer side as deprecated
- SkinBinding update order bug where skin bindings use old values in update
- SkinBinding serializing inverse binding matrices in wrong order
- Fixed scene locked in subscription requested state, when
- Scene is created in LocalOnly mode
- Display is destroyed, before the scene entered Ready state
- Can create display with wayland IVI window without setting IVI layer if system compositor controller not enabled
- Fixed possible crash when statistics logs are enabled
- EGLContext for async effect uploader is no longer created if feature is disabled in DisplayConfig
- Improved validation messages for RenderBuffers
- Removed warning for empty render group
- added ramsh commands to modify some object parameters (visibility, uniform inputs)
- Attempt to read pixels from multisampled offscreen buffer no longer crashes but fails with an event
- Removed
ramses-sdk_ENABLE_LOGIC
flag, logic cannot be excluded from build anymore
- Added
DisplayConfig::setWindowTitle()
ramses-viewer
: show scenes that are published remotely
ramses-viewer
: show stream surfaces
- Handle time overflow when calculating watchdog notification intervals (IThreadWatchdogNotification)
- Added sanity check for display thread sleep timeout (skub mode)
- Fixed missing watchdog callbacks if notification interval is set to 1ms (RamsesFrameworkConfig::setWatchdogNotificationInterval)
- Instance prefix for logging (RamsesFrameworkConfig::setLoggingInstanceName) now works also for dynamically linked renderer library
- Integrated Ramses logic
- If you want to exclude logic, disable it over CMake (ramses-sdk_ENABLE_LOGIC=OFF)
- The version which was merged is 1.4.2. You can find the changelog/docs of Logic here
- Moved all types from
rlogic
namespace to ramses
namespace
- Added support for feature levels. RamsesFramework has to be constructed with a feature level specified
(using RamsesFrameworkConfig), see EFeatureLevel for more information.
- Added
RamsesFramework::getFeatureLevel
to easily query EFeatureLevel
- Unified math types usage across API to use GLM aliases: vec2/3/4f, vec2/3/4i, matrix22/33/44f, quat
- Added support for rotation by quaternion:
Node::setRotation(const quat&)
, Node::getRotationType
- Added
DisplayConfig::setDeviceType()
and DisplayConfig::getDeviceType()
to select device type for display creation
- Added
DisplayConfig::setWindowType()
and DisplayConfig::getWindowType()
to select window type for display creation
- Added
ramses-viewer
, ramses-viewer-headless
(replaces ramses-scene-viewer
, ramses-logic-viewer
, ramses-logic-viewer-headless
)
- Default GUI mode changed to
overlay
(--no-offscreen
in former ramses-logic-viewer)
- Added support for multiple logic engines per scene. Legacy lua configuration files need to be changed like this:
- replace
rlogic.screenshot
by R.screenshot
- replace
rlogic.views
by R.views
- replace
rlogic.
by R.logic().
or R.logic[<name>].
- added font settings
- renamed some command line options:
--no-validation
: removed short option (-nv)
--no-skub
: removed short option (-ns)
- Renamed
-x,--screenshot-file
to -x,--screenshot
- Scene file can be applied as positional argument
- Added other data types used in API to EDataType enum: EDataType::Int32, EDataType::Vector2/3/4I, EDataType::Matrix22/33/44F
- Added
RenderBufferBinding
which can be used in logic to modify RenderBuffer
properties before it is allocated on renderer
- Added
RamsesFrameworkConfig::setLoggingInstanceName
to set a global instance name used as prefix in all Ramses logs
- Added periodic statistics logs with more details and
EStatisticsLogMode
to select the log mode
- If detailed statistics is selected, the slowest executed nodes are shown
- Added experimental support for creating renderer with iOS window
- Added native support for bool uniforms, no need to use int32_t anymore to set them
- Existing application code using
Appearance::setInputValue
with int32_t
type to set boolean shader uniforms must change to use bool
type now!
- Added support for
bool
type in data container ramses::DataObject
- Added
RamsesClient::getRamsesFramework()
to be able to get reference to RamsesFramework
from RamsesClient
- this can be used for example to get feature level just by having a
Scene
instance: myScene.getRamsesClient().getRamsesFramework().getFeatureLevel()
- Added
SceneObject::getScene()
to get reference to owning Scene
from any object created from that Scene
- Added a non-const version of
LogicNode::getOutputs()
- Added a non-const version of
Property::getIncomingLink()
and Property::getOutgoingLink()
- Added a non-const version of
Property::getIncomingLink()
and Property::getOutgoingLink()
- Added support for 16bit and 32bit depth render buffers:
ERenderBufferFormat::Depth16
, ERenderBufferFormat::Depth32
- Added common cast operators for ramses and logic objects:
T* RamsesObject::as<T>()
T ramses::object_cast<T>(RamsesObject*)
- Added ramses-sdk_TEXT_SUPPORT, a CMake option to disable text support.
- Disabled by default on iOS and MacOS builds.
- Other platforms remain unaffected by the option.
- Exposed stream buffer API (previously available only via DCSM)
- Added
RamsesRenderer::createStreamBuffer
and RamsesRenderer::destroyStreamBuffer
.
- Added
RendererSceneControl::linkStreamBuffer
and corresponding callback IRendererSceneControlEventHandler::streamBufferLinked
.
- Added options to RamsesFrameworkConfig API that previously required command line parsing
- Added [[nodiscard]] flag for const getters.
- LogicEngine is now part of Scene and can only be created using
Scene::createLogicEngine
- LogicEngine is now a SceneObject of type ERamsesObjectType::LogicEngine and its lifecycle is managed by Scene as for any other SceneObject. LogicEngine is no longer a move-able type.
- Removed the ramses::Scene argument from all loading functions in LogicEngine: loadFromFile, loadFromFileDescriptor, loadFromBuffer (is now implicit)
- LogicObject now derives from SceneObject and therefore RamsesObject
LogicObject::getId
is renamed to LogicObject::getLogicObjectId
LogicObject::setName/getName
are removed, methods with same name and functionality (but different return type!) are in base class RamsesObject
LogicObject::set/getUserId
moved to its base RamsesObject so any RamsesObject can use it now
- RamsesObject.h and RamsesObjectTypes.h moved from
client
include folder to framework
, update include paths accordingly
RamsesObject::getName
returns std::string_view
instead of const char*
- Reworked API error handling for all public Ramses classes:
- Removed
status_t
, StatusOK
, StatusObject::getStatusMessage
, LogicEngine::getErrors
, ErrorData
and the whole StatusObject
class
- All API methods that can fail (at API call time) return
bool
(true for success)
- Errors are now collected centrally in
RamsesFramework
RamsesFramework::getLastError
can be used to get the last error that occurred (as optional), calling it will clear the error
- Configs and other not managed objects (
RamsesFrameworkConfig
, RendererConfig
, DisplayConfig
,SceneConfig
, RenderTargetDescription
, EffectDescription
, EffectInput
)
no longer inherit from StatusObject
. Their methods also return bool
but error messages are only logged (not tracked with getLastError
).
RenderTargetDescription::addRenderBuffer
has optional argument to get human readable description of error if failed
- Export whole API classes in shared libs, instead of exporting only public functions
- Headless shared lib always gets built
Scene::saveToFile
implicitly updates all logic engine instances and flushes the scene before saving, the method is therefore no longer const
Scene::findObject
now also searches for logic objects in all existing logic engines
- Updated fmt from 7.0.1 to 10.1.1
- Updated google-benchmark from 1.5.2 to 1.8.3
- Updated google-flatbuffers from 1.12.0 to 23.5.9
- Upgraded the minimum version of the C++ standard in Ramses to 17.
- All modern compilers support C++ 17 meanwhile.
- Some of the dependencies of Ramses have also switched to C++17.
- Some tools and linters work better and detect more issues with a higher version of the standard.
- Changed default publishing mode of scenes from EScenePublicationMode::LocalAndRemote to EScenePublicationMode::LocalOnly
- local-only scenes cannot be sent over network, as the name suggests
- local-only scenes must be periodically flushed in order to get to Ready/Rendered state if using RendererSceneControl
- local-only scenes will not keep static resources in system memory after they are uploaded to VRAM
- local-only scenes benefit from slight performance gain when flushing and slightly smaller system memory footprint
- Changed
LogicEngine::link()
, LogicEngine::linkWeak()
and LogicEngine::unlink()
to take non-const Property objects as inputs
- RamsesUtils changed to a namespace instead of class of static functions
- Changed include directory structure, and added a migrate script
- Frameowrk API headers are found under "ramses/framework"
- Client API headers are found under "ramses/client"
- Text API headers are found under "ramses/client/text"
- Logic API headers are found under "ramses/client/logic"
- Renderer API headers are found under "ramses/renderer"
- Added a script scripts/migrate_to_28_0_0.py that can migrate all includes in a codebase to new format
- Forbade to use the default constructors of
UniformInput
and AttributeInput
to create objects but objects can be
- Created via copy and move constructors, or
- Obtained via
getUniformInput
, getAttributeInput
, findUniformInput
, and findAttributeInput
- Changed to return
optional<UniformInput>
or optional<AttributeInput>
objects in getUniformInput
, getAttributeInput
, findUniformInput
, and findAttributeInput
- Removed
EffectInput::isValid
because UniformInput
and AttributeInput
objects are always valid now
- Changed
EffectInput::getDataType
to return EDataType
instead of optional<EDataType>
- DisplayConfig::validate produces warnings or errors if suboptimal or wrong settings are set, e.g., incompatible window and device types are set
- Changed LogHandlerFunc to use
std::string_view
instead of const std::string&
- ramses-logic logs are output to DLT (context 'RCLI')
- Remove cmake option
ramses-sdk_BUILD_IVI_TEST_APPS
- ivi-gears and ivi-simple-dmabuf-egl are now controlled with option for building tools
- Remove check for cmake variable
ramses-sdk_DISABLE_WAYLAND_IVI_EXTENSION
. The extensions are built if the required
dependencies are available
- Moved
ramses-client-api/TextureEnums.h
to ramses/framework/TextureEnums.h
- Moved
ramses-client-api/ERotationType.h
to ramses/framework/ERotationType.h
- Moved
ramses-client-api/EVisibilityMode.h
to ramses/framework/EVisibilityMode.h
- Moved
ramses-client-api/EScenePublicationMode.h
to ramses/framework/EScenePublicationMode.h
- Replaced
Scene::findObjectByName(..)
/Scene::findObjectById(..)
by T* Scene::findObject<T>(..)
- Replaced
LogicEngine::findByName(..)
/LogicEngine::findLogicObjectById(..)
by T* LogicEngine::findObject<T>(..)
- Added SaveFileConfig parameter to
ramses::Scene::saveToFile()
, removed compression flag
- Compression flag is part of SaveFileConfig and is disabled by default
- Changed interfaces to load/create scenes: Added sceneId and verification flag to
ramses::SceneConfig
- Changed scene validation interface to report a list of messages (see
ramses::RamsesObject::validate(ValidationReport&)
)
- Replaced
const std::vector<WarningData>& LogicEngine::validate()
by common Ramses validation (ramses::RamsesObject::validate(ValidationReport&)
)
- The scene validation will not return
StatusOK
if effects have shader warnings, and these warnings will appear in the validation report with a severity of EValidationSeverity::Warning
- Remove the 4096 upper limit of offscreen buffer size in RamsesRenderer. The buffer size is limited by the OpenGL driver.
- Draw mode is checked against geometry shader input type (Appearance::setDrawMode) also when effect was loaded from file
(previously it was checked only when effect created in same session without loading).
- Modernized
MipLevelData
and CubeMipLevelData
. Data are no longer stored with raw pointers
- Updated
RamsesUtils::GenerateMipMapsTexture2D
and RamsesUtils::GenerateMipMapsTextureCube
to return a pointer of vector of the respective mip level data
- Updated
RamsesUtils::DeleteGeneratedMipMaps
for deleting the vector pointers
Texture2DBuffer::updateData
now takes std::bytes
- Modernized mipLevelData from C-style array to vector for
Scene::createTexture2D()
, Scene::createTexture3D()
and Scene::createTextureCube()
- Changed clear flags parameters from
uint32_t
to ramses::ClearFlags
(ramses::Flags<ramses::EClearFlag>
)
- Changed key modifier flags parameters from
uint32_t
to ramses::KeyModifiers
(ramses::Flags<ramses::EKeyModifier>
)
- MeshNode instance count can be zero (nothing drawn) to match OpenGL behavior
- OpenGL drawcalls are always using glDrawElementsInstanced even for instance count 1
ETextureAddressMode
enum is now explicitly typed to uint8_t
ETextureSamplingMethod
enum is now explicitly typed to uint8_t
ETextureFormat
enum is now explicitly typed to uint8_t
DisplayConfig::setX11WindowHandle
: changed parameter from unsigned long
to X11WindowHandle
IFontInstance::getAllSupportedCharacters()
: changed return type set from unsigned long
to char32_t
- Renamed standalone renderer executable to
ramses-renderer-standalone
and renamed some command line options:
- Renamed -nd,--numDisplays to --displays
- Renamed -sm,--sceneMappings to -m,--scene-mapping
- Renamed -nomap,--disableAutoMapping to --no-auto-show
- -skub,--skub: removed short option(-skub)
- Ramses shared lib with renderer is always called ramses-shared-lib (without platform dependant postfix)
- Contents are controlled using cmake variables ramses-sdk_ENABLE_WINDOW_TYPE_*
- Ramses client only shared lib is renamed to ramses-shared-lib-headless
- Ramses examples, demos, tests and tools are enabled by default only if ramses is a top level project, otherwise
they must be explicitly enabled using respective cmake options
- Renamed ramses::EClearFlags to ramses::EClearFlag
- Renamed
ERamsesObjectType::ArrayBufferObject
to ERamsesObjectType::ArrayBuffer
to match the class name
- Renamed the classes for bindings to Ramses objects
- Renamed
RamsesAppearanceBinding
to AppearanceBinding
- Renamed
RamsesCameraBinding
to CameraBinding
- Renamed
RamsesNodeBinding
to NodeBinding
- Renamed
RamsesRenderPassBinding
to RenderPassBinding
- Renamed
RamsesRenderGroupBinding
to RenderGroupBinding
and RamsesRenderGroupBindingElements
to RenderGroupBindingElements
- Renamed
RamsesMeshNodeBinding
to MeshNodeBinding
- Renamed
GeometryBinding
to Geometry
- Replaced uint32_t with size_t in all the API for parameters describing amount or number of elements (for better match with STL containers):
Appearance
, Effect
, EffectDescription
, Node
, RamsesUtils
, Scene
, Texture2DBuffer
, UniformInput
,
ArrayResource
, ArrayBuffer
, IRendererSceneControlEventHandler::objectsPicked()
.
- Changed enums to enum classes.
- Renamed enum values for
ramses::ERendererEventResult
: OK -> Ok, FAIL -> Failed, INDIRECT -> Indirect
- Replaced all enum to string methods by:
const char* ramses::toString(T)
- Stream buffers can be linked even if content from wayland surface is not available (yet).
- Stream buffers do not get unlinked from texture consumers if content from wayland surface becomes unavailable.
- Functions that were kept static for API/ABI backcompatibility became proper member methods:
- DisplayConfig::setAsyncEffectUploadEnabled, DisplayConfig::setDepthStencilBufferType
- Effect::hasGeometryShader, Effect::getGeometryShaderInputType
- RamsesRenderer::createOffscreenBuffer and createInterruptibleOffscreenBuffer
- RamsesRenderer::setDisplayBufferClearFlags
- Renderer event handler reports creation and destruction of external buffers.
- Removed workaround with 'getExternalBufferGlId' - id can be now obtained through externalBufferCreated().
- IRendererEventHandler::renderThreadLoopTimings now reports timings per display (with additional displayId argument).
- IRendererEventHandler::renderThreadLoopTimingsPerDisplay was removed.
- Renamed RamsesRenderer::set/getMaximumFramerate to set/getFramerateLimit,
display ID argument is mandatory now, there is no global framerate limit anymore.
- RamsesFrameworkConfig/RendererConfig/DisplayConfig: replaced const char* by std::string_view
- Moved 'ramses-client-api/EDataType.h' to 'ramses-framework-api/EDataType.h'
- Renamed ERotationConvention to ERotationType
- Renamed all enums in ERotationType to start with "Euler_" prefix and so that the order is inverted
to represent extrinsic rotation rather than instrinsic notation.
- Any rotation previously defined as ERotationConvention::ABC is now renamed to ERotationType::Euler_CBA
- Extrinsic rotation convention means a rotation around any order of axes ABC is done in the specified order around
the original world axes, which are fixed and do not rotate while applying rotation to the object.
This is more conformant with existing tools.
- Node.h uses vec3f for rotation, translation, scaling
- Node::setRotation(vec3f,rotationType) has a default value Euler_XYZ for rotation convention
- Appearance::set/getBlendingColor now uses vec4f as argument.
- Appearance::set/getInputValue is now templated and uses new data types to pass vector/matrix values
(vecXf, vecXi, matrixXXf) instead of int/float arrays.
- RenderPass::setClearColor, RamsesRenderer::setDisplayBufferClearColor, DisplayConfig::setClearColor: clear color is passed as vec4f
- ArrayBuffer::updateData and ArrayBuffer::getData must be used with concrete types instead of void ptr
- ERamsesObjectType_DataBufferObject renamed to ERamsesObjectType_ArrayBufferObject to match the class ArrayBuffer name
- Removed EEffectInputDataType used in UniformInput and AttributeInput, EDataType is used instead
- Uniform/AttributeInput::getDataType now returns std::optional for case when the input is not valid (not or wrongly initialized)
- Scene::createArrayResource must be used with concrete data type instead of void ptr and data type enum
- Example how to port old code: float twoTriangles[6]={..}; myScene.createArrayResource(EDataType::Vector3F, 2, twoTriangles);
to new code: vec3f twoTriangles[2]={..}; myScene.createArrayResource(2, twoTriangles);
- Make sure to use the right math type to determine the ArrayResource data type (e.g. no floats to represent vecX, which was typical before)
- DataObject class can now hold any of the data types previously held by the removed DataXXX classes
- Example how to port old code: DataVector2I* obj = myScene.createDataVector2I(); obj->setValue(1, 2);
to new code: DataObject* obj = myScene.createDataObject(EDataType::Vector2I); obj->setValue(vec2i{ 1, 2 });
- Make sure to use the right math type when setting or getting the value
- Node::getModelMatrix() / Node::getInverseModelMatrix() use matrix44f as argument
- Replaced std::array type aliases by glm: matrix44f, vec2f, vec3f, vec4f, vec2i, vec3i, vec4i
- LogicEngine::getTotalSerializedSize and getSerializedSize can now be set to use a specific ELuaSavingMode for size calculation
- Unmanaged objects can now be copy or move constructed, and copy or move assigned:
- RamsesFrameworkConfig, RendererConfig, DisplayConfig, UniformInput, AttributeInput, EffectDescription, RenderTargetDescription
ETextureCubeFace, ERenderTargetDepthBufferType, ERenderBufferType, ERenderBufferFormat, ERenderBufferAccessMode
- The const char* parameters of the public API are replaced by std::string_view.
- The pointers to data memory (std::uint8_t*, unsigned char*) of the public API are replaced by std::byte*.
- Fixed possible crash if Texture2DBuffer is recreated with smaller size
- RamsesMeshNodeBinding now fails update if it receives invalid value (e.g. negative index count)
- Fixed RamsesNodeBinding visibility property inconsistency if saved with Ramses node 3-state visibility as 'Off'
but properties 'enable'=false and 'visible'=true
- Fixed potential renderer crash when having more than one displays in non-threaded mode and destroying all but one due to missing context enable
- Fixed race condition when instantiating multiple RamsesFramework instances in different threads
- RenderGroup no more reports 'contains no meshnodes' validation warning if it has nested RenderGroups with MeshNode(s)
- Removed automatic validation when saving scene to a file (also removed the parameter from SaveFileConfig)
- Removed cmake option
ramses-sdk_BUILD_HEADLESS_SHARED_LIB
for enabling headless shared lib since it always gets built now
- Removed
IRendererResourceCache
, DefaultRendererResourceCache
and RendererConfig::setRendererResourceCache()
- Removed
resourceCacheFlag_t
type and updated relavant classes and implementations
- Removed
ResourceCacheFlag_DoNotCache
- Removed resourceCacheFlag_t optional argument from all Scene::create*Resource
- Removed
resourceCacheFlagTag
- Removed default rotation convention from Node::setRotation(vec3f,rotationType)
- Removed support for 32-bit architectures.
- Removed
LogicEngine::setStatisticsLogLevel
: periodic log level is always set to Info
- Removed obsolete
RamsesLogicVersion
, use RamsesVersion
instead
- Removed
SceneObject::getSceneId()
, use SceneObject::getScene().getSceneId()
instead
- Removed
DisplayConfig::keepEffectsUploaded()
and --delete-effects
cli option. Effects are always kept uploaded now.
- Removed
DisplayConfig::setWindowBorderless()
and --borderless
cli option.
- Removed ERamsesObjectType::NUMBER_OF_TYPES
- Removed ETextureFormat::Invalid
- Removed ramses::AllFeatureLevels array
- Removed ramses-logic logging API:
Logger::SetVerbosityLimit()
: Use RamsesFrameworkConfig to set loglevel for context 'RCLI' (Info by default)
Logger::SetLogHandler()
: Use RamsesFramework::SetLogHandler()
Logger::SetDefaultLogging()
: Use RamsesFrameworkConfig::setLogLevelConsole(ELogLevel::Off) to disable console output
- Removed cmake option
ramses-sdk_BUILD_DAEMON
. Now ramses-deamon
is controlled by cmake option for tools ramses-sdk_BUILD_TOOLS
- Removed
ERenderBufferType
from all API (removed RenderBuffer::getBufferType, changed Scene::createRenderBuffer)
- Removed
ramses::RamsesUtils::TryConvert<T>
. Use ramses::object_cast<T>
instead.
- Removed deprecated method overload
LogicEngine::createLuaInterface
without LuaConfig parameter in favor of providing an empty LuaConfig
as the default argument.
Now modules declaration will always be verified (also when not explicitly providing LuaConfig
).
- Removed
LogicEngine::saveToFile()
, LogicEngine::load*
and LogicEngine::GetFeatureLevelFrom*
methods. Logic is stored in the ramses scene.
- Removed logic object ID and related API:
LogicObject::getLogicObjectId
, LogicEngine::findObjectById
- Use sceneObjectId_t instead as a unique numerical Id for objects
- Removed
logicfile
command line parameter from ramses-logic-viewer
- Removed cmake option ramses-sdk_CONSOLE_LOGLEVEL (use RamsesFrameworkConfig to configure log levels)
- Removed environment variables CONSOLE_LOGLEVEL and RAMSES_LOGLEVEL (use RamsesFrameworkConfig to configure log levels)
- Removed RamsesFramework::SetConsoleLogLevel (use RamsesFrameworkConfig::setLogLevelConsole)
- Removed AnimationSystem and all related classes, animations moved from Ramses to Ramses Logic.
- Removed text generator.
- Removed visual frame profiler ('fp' Ramsh command).
- Removed SomeIP support.
- Removed tools for generating and packing effects from shaders (ramses-utils, ramses-resource-tools, ramses-shader-tools).
- Removed ramses-packet-player.
- Removed DCSM support and all related API.
- Removed RamsesHMIUtils (only helper to identify unneeded objects was kept and moved to RamsesUtils).
- Removed support for Integrity.
- Ramses 27 is the last official release which supports Integrity.
- Removed RamsesFramework(argc, argv) constructor, use RamsesFrameworkConfig instead.
- Removed support for warping:
- Removed DisplayConfig::enableWarpingPostEffect()
- Removed IRendererEventHandler::warpingMeshDataUpdated()
- Removed RamsesRenderer::updateWarpingMeshData()
- Removed stream texture from client API. Renderer side stream buffers must be used for embedded compositing on wayland.
- Removed RamsesFrameworkConfig(argc, argv), DisplayConfig(argc, argv), RendererConfig(argc, argv) constructors
- Removed deprecated embedded compositor settings from RendererConfig (use DisplayConfig instead)
- Removed RamsesFrameworkConfig::setPeriodicLogsEnabled (use setPeriodicLogInterval(0) instead)
- Removed legacy ZYX (left handed) rotation convention
- Remove related APIs: Node::rotate, Node::setRotation(x,y,z) and Node::getRotation(x,y,z)
- RamsesNode_setRotationNative in JNI Interface uses right-handed Euler_XYZ rotation convention
- Removed all typed data object classes (DataInt32, DataFloat, DataVector2/3/4/f/i, DataMatrix22/33/44),
all their functionality was moved into DataObject class (see Changed section)
- Removed rlogic::ELogMessageType (replaced by ramses::ELogLevel)
- Removed deprecated enum ESceneResourceStatus
General changes
------------------------------------------------------------------------
- Unified logging for ivi surfaces and layers (ids are prefixed by "ivi-surface:"/"ivi-layer:")
- Dcsm periodic logs resolve technical content to scene id or ivi surface
Bugfixes
------------------------------------------------------------------------
- Fixed stream surface availability if a wayland client detaches/re-attaches ivi-surfaces in a single frame
General changes
------------------------------------------------------------------------
- Optimized texture buffer uploads when frequently updating subregions
Bugfixes
------------------------------------------------------------------------
- Ramses explicitly requests OpenGL ES 3.2 context instead of ES 3.x.
If 3.2 is not available it will automatically downgrade to 3.1 or 3.0 and log and error message
General changes
------------------------------------------------------------------------
- ramses-scene-viewer reports warnings for non-optimal shaders:
- interface mismatch between shader stages (unused in and out varyings)
- precision mismatch between shader stages
- unused varyings
- unused uniforms
- Added documentation about ramses::Appearance default values
- Disable ramses-sdk_ENABLE_HARFBUZZ_LEGACY_SHAPING for Integrity.
It's now disabled by default for all platforms.
Bugfixes
------------------------------------------------------------------------
- Fixed race condition when instantiating multiple RamsesFramework instances in different threads
General changes
------------------------------------------------------------------------
- improved scene dumps by ramsh / DLT injection
- Added alias for 'dumpSceneToFile': 'dumpScene'
- Filename is optional if -sendViaDLT is enabled
- Added '-flush' option for ramsh command: dumpSceneToFile
- ramses-scene-viewer:
- show contents of Texture2DBuffer objects
- added/improved ramsh commands:
- fixed parsing large integer values
- 'p,screenshot' can capture offscreen buffers
- 'clc' can clear offscreen buffers
- 'scenestate' modifies the scene state
- 'obCreate' creates an offscreen buffer
- 'assign' assigns a scene to a display / offscreenbuffer
- 'link'/'unlink' connects offscreenbuffer to a texture consumer
Bugfixes
------------------------------------------------------------------------
- Fixed HarfBuzz shaping for text blocks with special characters (punctuation,
diacritics, ligature modifiers, private use). This affects positioning (e.g.
kerning) and ligature creation for Arabic, Thai, Vietnamese and Japanese,
as well as characters common to all languages.
Previous behavior can be enabled using ramses-sdk_ENABLE_HARFBUZZ_LEGACY_SHAPING.
- Fixed possible crash when shader compilation fails with an empty error message.
- Fixed renderer crash if StreamBuffer with same ID is created or non-existing StreamBuffer is destroyed
- Fixed potential renderer crash when having more than one displays in non-threaded mode
and destroying all but one due to missing context enable
- Fixed missing streambuffer deletion towards renderer from
DcsmContentControl in cases when stream became unavailable while contents using
it were in state Ready or Shown
Bugfixes
------------------------------------------------------------------------
- Fixed wrong events given by DcsmContentControlEventHandlerMock::contentLinkedToTextureConsumer
Previously could report linked events for non-linked contents (also with wrong datalink id) when the
contents shared technical id (like same wayland surface) internally
General changes
------------------------------------------------------------------------
- ramses-scene-viewer:
- fixed validation and "Used by" links for TextureSampler2DMS
- added "--gui only" command line parameter to only show the inspection gui, not the scene itself
- show GenerateMipChain flag for texture resources
- fixed CSV export for textures
- it is possible to assign the same ID to more than one texture consumer (check moved to validate())
- updated android demo projects to modern versions of the Android SDK and tools
API changes
------------------------------------------------------------------------
- Implemented native compositing on Android
- Added type TextureSamplerExternal on client side
- For GLSL version 100, use extension "GL_OES_EGL_image_external"
- For GLSL version 300 and later, use extension "GL_OES_EGL_image_external_essl3"
- Both extensions enable a new type of texture sampler in effects: samplerExternalOES
- For more info, refer to the corresponding OpenGL extensions documentation
- Added type externalBuffer_t on renderer side, with corresponding functions for creation, destruction and
events in RamsesRenderer and IRendererEventHandler
- Added texture linking for external buffers and TextureSamplerExternal
- Added Appearance::getInputTextureExternal()
- WARNING! Using this feature makes your scene incompatible to Ramses versions prior this one
- Make sure remote renderers have this version or newer if you use the feature in a distributed setup
- Added Appearance::getInputTextureMS()
Bugfixes
------------------------------------------------------------------------
- Fixed scene validation errors for TextureSamplerMS objects and related RenderBuffers.
RenderBuffers are no longer reported as unused when they are actually used by a TextureSamplerMS.
- Fixed Scene::resetUniformTimeMs() for local-only scenes.
Time reset was not applied to the shaders, if called before the scene was subscribed.
- X11: Fixed memory leak if DisplayConfig uses external X11-Window
- Fixed dlt buffer overflow for file transfer (e.g. scene dumps)
API changes
------------------------------------------------------------------------
- Added ramses::DisplayConfig::setResourceUploadBatchSize()
Bugfixes
------------------------------------------------------------------------
- Fix Wayland Dcsm content not getting ready because DcsmProvider was not
sending contentDescription for every ready request
- Fixed SomeIP connection recovery if the initial ParticipantInfo packets
are dropped on network level.
General changes
------------------------------------------------------------------------
- set file buffer size to 8kB for Integrity OS
- ramses-scene-viewer:
- added filter for node visibility
- filter resources by hash name
- fixed resource hash name formatting (use same format as in the logs)
- added option to sort by uncompressed size
- export shader sources to file or clipboard
- Added ramses::DisplayConfig::setScenePriority()
Bugfixes
------------------------------------------------------------------------
- Fixed unexpected rendered scene after disconnect
- ramses-scene-viewer: update resource view if node visibility changed
General changes
------------------------------------------------------------------------
- ramses-scene-viewer: show effective node visibility (limited by parent)
- Periodic log statistics updated
- new information: maximum scene update transfer within 1 second
- DLT log context: RPER
- format: suX (N1[/N2[/N3[/N4[/N5[/...]]]]]) or suX(n.a) in case of errors
- N1...N5 numbers represent maximum transfered scene update in bytes during one second within the measured period
API changes
------------------------------------------------------------------------
- Added ramses::RamsesFramework::GetSynchronizedClockMilliseconds()
- Added ramses::DisplayConfig::setSwapInterval()
Bugfixes
------------------------------------------------------------------------
- Fix content never becomes ready if was once ready/rendered before and later re-requested but referenced
stream is already available at that time
General changes
------------------------------------------------------------------------
- API usage errors are no longer reported in validation report, these do not represent validity of objects
and should always be checked directly after calling any Ramses API instead
General changes
------------------------------------------------------------------------
- Updated internal scripts
API changes
------------------------------------------------------------------------
- Added configuration flag for Scene::createRealTimeAnimationSystem() to use synchronized_clock (ptp time).
This allows client and renderer to run on different ECUs.
- Added effect semantic uniform 'TimeMs' that holds the current value of the synchronized_clock in milliseconds
- Added ramses::Scene::resetUniformTimeMs() to reset the semantic uniform to 0
Bugfixes
------------------------------------------------------------------------
- Fix IDcsmContentControlEventHandler::contentLinkedToTextureConsumer in case of multiple contents
mapping to the same internal object
API changes
------------------------------------------------------------------------
- Added a new method RamsesClient::loadSceneFromFileDescriptor(sceneId_t, ...), that overrides
the sceneId stored in the file.
- Added configuratorPriority field to DCSM metadata
(configures widget configurator behaviour when it opens over an existing DCSM content)
General changes
------------------------------------------------------------------------
- Removed obsolete log messages for nodes which have nontrivial scaling and rotation set
- The scaling and rotation order has been fixed, logs no longer necessary
- Added RamsesRenderer::setExternallyOwnedWindowSize to notify RAMSES of window resize
for windows not owned by renderer
- Added --skub command line argument to ramses standalone renderer
General changes
------------------------------------------------------------------------
- Improved error logs if EGL intialization fails
- Terminate ramses tools (ramses-scene-viewer, ramses-renderer)
if display creation fails
Bugfixes
------------------------------------------------------------------------
- Use extra thread for dlt file transfer to avoid watchdog timeouts
- Fixed mousewheel direction on wayland platform
- Fix memory leak in ramses tools with imgui (e.g. ramses-scene-viewer)
- Fixed unexpected DCSM timeout, if DcsmContentControl::requestContentReady(..., timeout)
is called and the content is already in DCSM::Ready state.
Bugfixes
------------------------------------------------------------------------
- Fix wrong default value behavior in CategoryInfoUpdate constructor
Bugfixes
------------------------------------------------------------------------
- Works around a crash on AMD drivers on Windows by calling extra glFlush after shader uploads
API changes
------------------------------------------------------------------------
- Added a new method RamsesFramework::SetLogHandler, read the class docs for more details
Bugfixes
------------------------------------------------------------------------
- Emit correct event from renderer to DcsmContentControl concerning streamBufferEnabled state
Bugfixes
------------------------------------------------------------------------
- Avoid memory leak on Android due to mismatched egl initialize and terminate calls
General changes
------------------------------------------------------------------------
- Permit Scene::publish() if framework is not connected yet (RamsesFramework::connect())
General changes
------------------------------------------------------------------------
- Add backward compatible improved SomeIP connection handling
Bugfixes
------------------------------------------------------------------------
- Make display creation performance on startup more consistent
- Fixed ungraceful Ramses shutdown if X11 window is closed
(e.g. terminal echo was missing).
General changes
------------------------------------------------------------------------
- Optimized ramses-scene-viewer for texture analysis (CSV export, png
export, performance/usability improvements).
Performance improvements
------------------------------------------------------------------------
- Clear display buffers (FB or OB) right before rendering to avoid unnecessary
reactivation of render targets
- Hint OpenGL/driver to discard depth/stencil components if not needed anymore in render pipeline
API changes
------------------------------------------------------------------------
- Added function RamsesFrameWork::executeRamshCommand to programmatically execute ramsh commands
API changes
------------------------------------------------------------------------
- Introduce DMA offscreen buffers to RamsesRenderer and DisplayConfig
Bugfixes
------------------------------------------------------------------------
- Fixed coordinates for the mouse wheel event (Windows only)
- Revert "Fix SomeIP duplicate messages after multiple reconnects" because it caused reconnects
leading to very high cpu usage
- Only show display stuck message when really stuck, decrease print frequency to make it
smaller than watchdog
General changes
------------------------------------------------------------------------
- Scaling is applied before rotation in all transformation matrices
- 'M = T * R * S' replaces the old formula 'M = T * S * R'
- This behavior is consistent with standard matrix math of right-handed coordinate systems
- To restore the old behavior, create two nodes A and B where 'A = T * S' and 'B = R' and set B as a child of A
for focus request.
- Bidi markers are no longer logged as errors for freetype-only font instances
API changes
------------------------------------------------------------------------
- Added helper function TextCache::ApplyTrackingToGlyphs that makes it possible to increase or reduce space
uniformly between glyphs.
- Added option to inform DCSM Provider about active Layout via CategoryInfoUpdate.
This will replace ActiveLayoutMessage in the future.
- Add optional IRendererEventHandler::renderThreadLoopTimingsPerDisplay
Bugfixes
------------------------------------------------------------------------
- Fixed scene expiration logs if no scenes are monitored
- Fix SomeIP duplicate messages after multiple reconnects
API changes
------------------------------------------------------------------------
- Added static helper function TextCache::ContainsRenderableGlyphs that checks if a GlyphMetricsVector
contains at least one renderable glyph and thus can be used as input for TextCache::createTextLine.
Bugfixes
------------------------------------------------------------------------
- Fix open permissions for ptp device
API changes
------------------------------------------------------------------------
- Added carModelViewExtended field to DCSM metadata (extended features to transform
the remote car model).
- Added new DCSM content status message: WidgetFocusStatusMessage
for sending the widget's focus state from consumer to content provider
General changes
------------------------------------------------------------------------
- Add cmake variable ramses-sdk_FOLDER_PREFIX to configure VS folder path prefix
- Add flip content vertically metadata to dcsm provider tool
API changes
------------------------------------------------------------------------
- API for configuring EC is ADDED to DisplayConfig.
- Corresponding API in RendererConfig is marked as deprecated WITHOUT change in syntax or behavior.
- The newly added API (configuring EC on DisplayConfig) was introduced in 27.0.106 and reverted
in 27.0.107 since the change broke functionality of RendererConfig. In this release the (re-)added
API in DisplayConfig does not have a direct effect on supported use cases for configuring EC on RendererConfig.
- Added new DCSM content status message: ActiveLayoutMessage
for sending the current layout from consumer to content provider
General changes
------------------------------------------------------------------------
- Revert breaking EC configuration on RendererConfig and remove EC configuration from
DisplayConfig
General changes
------------------------------------------------------------------------
- Display creation DOES fail if EC creation fails
- A change was introduced as a temporary measure in 27.0.105 that lets display
creation not fail if EC creation fails. This change is reverted and a proper
fix is introduced. See API changes of RendererConfig and DisplayConfig.
API changes
------------------------------------------------------------------------
- API for configuring EC is moved from RendererConfig to DisplayConfig
- Allows configuring EC per display
- API in RendererConfig is not removed. It is marked as deprecated and always fails
- Add layoutAvailability field to DCSM metadata
Bugfixes
------------------------------------------------------------------------
- Failing to create EGL image from DMA buffer does not lead to a segfault
in RAMSES renderer. An error code ZWP_LINUX_BUFFER_PARAMS_V1_ERROR_INVALID_WL_BUFFER
is sent to wayland client.
- Fix segfault caused by activating VAO that was not uploaded due to wrong handling of dirtiness
in resource cached scene.
General changes
------------------------------------------------------------------------
- Display creation does not fail if EC creation fails
- This is a temporary measure to enable having multi displays with EC
on 1st display
- If several displays are created while EC is enabled on renderer config, only the 1st display
can have EC succesfully created. Other displays will attempt and fail EC creation since they
re-use the same config as the 1st display and the socket is already in use by EC in the 1st display.
- added DCSM content status message sending from consumer to provider of a content
- added sendContentStatus to DcsmConsumer and DcsmContentControl to allow sending
- added new IDcsmStatusMessageHandler and another dispatchEvents to DcsmProvider to allow handling of arriving DcsmStatusMessages
- added DcsmStatusMessage base class and StreamStatusMessage as its first implementation
General changes
------------------------------------------------------------------------
- All geometry attributes are now using OpenGL vertex array objects
- internal optimization, no action on application side needed
- Disable pkg-config usage on windows to prevent configuration issues
API changes
------------------------------------------------------------------------
- Add FontRegistry::createFreetype2FontFromFileDescriptor to load font from open
filedescriptor
Bugfixes
------------------------------------------------------------------------
- Do not destroy user provided window on X11
Bugfixes
------------------------------------------------------------------------
- Make renderer destroy and recreate work when local scenes stay published
- Camera::setViewport reports error when passing size numbers which exceed maximum (32768)
- Renderer does not crash in Debug mode when viewport size exceeds allowed maximum
Known issues
------------------------------------------------------------------------
- There will be no IRendererSceneControlEventHandler::sceneStateChanged callback
with state Available for any published scenes until a display is created and running.
- If a display is destroyed and created again and it was the only display on renderer
there will be IRendererSceneControlEventHandler::sceneStateChanged callbacks for
all previously published scenes again.
General changes
------------------------------------------------------------------------
- DcsmContentControl now supports new content type WaylandSurface
API changes
------------------------------------------------------------------------
- Add RamsesClient::loadSceneFromMemory and RamsesClient::loadSceneFromFileDescriptor.
General changes
------------------------------------------------------------------------
- bool uniforms are parsed and available in effect source code
API changes
------------------------------------------------------------------------
- Add DisplayConfig::get/setX11WindowHandle
- supports custom X11 window which ramses will use to render into
- Add contentFlippedVertically field to DCSM metadata
Bugfixes
------------------------------------------------------------------------
- Fix Node::getRotation with convention failing if translate or scale are called before setting rotation
General changes
------------------------------------------------------------------------
- Attach ramses version as cmake property RAMSES_VERSION to shared libraries
API changes
------------------------------------------------------------------------
- Add RamsesFrameWork::addRamshCommand
Bugfixes
------------------------------------------------------------------------
- Fix Node::setRotation with convention forgetting convention when identity values were set for angles
Bugfixes
------------------------------------------------------------------------
- avoid referenced scene stuck in subscription requested state due to race with its master destruction
General changes
------------------------------------------------------------------------
- Resources are decompressed before uploading to GPU in a way that the decompress time is considered for upload
interruption to prevent stalls if too many resources need to be decompressed at once
Bugfixes
------------------------------------------------------------------------
- fix loading resources and removing resource file from ResourceDataPool, when multiple files have the same file name
General changes
------------------------------------------------------------------------
- IDcsmContentControlEventHandler::contentExpirationMonitoringEnabled and IRendererSceneControlEventHandlerLLsceneExpirationMonitoringDisabled
will be emitted also when content/scene drops to state available from ready (or canceled transition to ready).
- Force applying flushes, force mapping scene or force unsubscribing scene if too many pending flushes rules changed:
- only non-empty flushes are counted for threshold
- threshold increased to 120 pending flushes to force apply and force map, 5*120 pending flushes to force unsubscribe
- Added tracing and logging for potentially hanging renderer threads
- API check to forbid creating a scene reference of self
Bugfixes
------------------------------------------------------------------------
- Fix dcsm content state handling when disconnecting/reconnecting or locally removing/readding dcsm consumers
API changes
------------------------------------------------------------------------
- Added displayed data flags to Dcsm metadata, to be used with displaycluster::DisplayedDataFlags
- DcsmMetadataCreator::setDisplayedDataFlags, DcsmMetadataUpdate::hasDisplayedDataFlags, DcsmMetadataUpdate::getDisplayedDataFlags
Bugfixes
------------------------------------------------------------------------
- Fix possible mem access violation if display destroyed while shaders are being compiled
API changes
------------------------------------------------------------------------
- Add static DisplayConfig::setAsyncEffectUploadEnabled to allow enabling/disabling async effect upload.
Bugfixes
------------------------------------------------------------------------
- Renderer no longer wrongly reports an already available (and possibly ready/rendered) scene as Available
when a new display is created.
API changes
------------------------------------------------------------------------
- Added static DisplayConfig::setDepthStencilBufferType to allow configuring depth and stencil
buffers of framebuffer
- MSAA number of samples less strict and adapting to device capabilities when possible.
- DisplayConfig::setMultiSampling allows 1, 2, 4 and 8 samples.
- Scene::createRenderBuffer, RamsesRenderer::createOffscreenBuffer allows arbitrary number of samples,
see API docs for details.
Bugfixes
------------------------------------------------------------------------
- Shaders given to EffectDescription::setXXShaderFromFile are read in binary file mode
Before this could cause effect ids to depend on operating system
- Fixed issue with scene reference actions (data un/link of scene references) getting lost sometimes
due to wrong queing up when coming from multiple flushes per frame update.
General changes
------------------------------------------------------------------------
- Enable creation of renderer with shared context for async effect upload on Android emulator
- Create dummy PBuffer surface and bind it to the shared context
- The change affects only Android platform
- Texture sampler objects are used to reduce calls needed for setting texture sampling state
- Update/render logic is now isolated for each display and runs in thread (if threaded rendering enabled)
- Consequence of this is that when reading logs, some messages are seemingly redundant or out of order,
in fact they are just happening in different display contexts (potentially in parallel).
In order to make the logs clearer each log message from a display is prefixed with its display ID.
- Temporary limitation: IRendererSceneControlEventHandler::sceneStateChanged callbacks with available/unavailable
state change (published/unpublished) will NOT be emitted if there is no display created.
API changes
------------------------------------------------------------------------
- Added static RamsesRenderer::setMaximumFramerate which also takes display argument for setting fps per displaythread
- Two new static methods for Effect, hasGeometryShader() and getGeometryShaderInputType()
- Added static RamsesRenderer::setDisplayBufferClearFlags to enable/disable clearing of display buffer components in runtime.
- Added static variants of functions createOffscreenBuffer and createInterruptibleOffscreenBuffer that enable configuring depth and stencil buffers
Bugfixes
------------------------------------------------------------------------
- Appearance's draw mode is set to expected geometry shader draw mode when created from such Effect
- Appearances created from effect with geometry shader report error when trying to set a mismatching draw mode
- used to crash the renderer, now checked by client API
- does not work for effects loaded from file (breaking change, will be fixed on ramses 28+)
- Fixed scene reference events being sent to old master if old master destroyed and scene reference changed ownership to new master
General changes
------------------------------------------------------------------------
- Method DcsmContentControl::linkContentToTextureConsumer now implemented for ramses type contents
- DcsmContentControl will emit the appropriate content state event as soon as content is released, hidden or
accepted to stop offer by the user and not wait for a potential content hide animation to finish
- Added ramses example: ramses-example-local-dcsm to show local dcsm usage
Bugfixes
------------------------------------------------------------------------
- DcsmContentControl will now properly handle rapid content reoffering/ready rerequesting
General changes
------------------------------------------------------------------------
- Dcsm safe area rect is now relative to bottom left corner of render size. Adapt documentation to the way its been implemented
Bugfixes
------------------------------------------------------------------------
- Fixed renderer crash with unsubscribing scene while compiling its shaders
- ResourceDataPool: adding the same resource pool data multiple times now requires the same amount of removing resource pool data to delete it
General changes
------------------------------------------------------------------------
- Shaders are uploaded asynchronously. A thread and shared context are created per display, where the shared context
stays active in that thread to upload shaders when needed.
Bugfixes
------------------------------------------------------------------------
- Node::getRotation with convention sets convention out argument to ERotationConvention::XYZ when setRotation was not called before
API changes
------------------------------------------------------------------------
- Added static RamsesFramework::SetConsoleLogLevel that takes new RamsesFrameworkType ELogLevel and applies it immediately.
General changes
------------------------------------------------------------------------
- IMPORTANT: Scene::flush will now fail, if resources are missing and scene is therefore invalid.
- Flush acts as aborted and scene state isn't altered by the failed flush
- Readding resources will make subsequent flushes work again
- Make sure your code handles a flush fail!
- Implement Node:setRotation(float, float, float, ERotationConvention) and Node::getRotation(float&, float&, float&, ERotationConvention&)
- Mark Node::setRotation(float, float, float), Node::rotate(float, float, float) and Node::getRotation(float&, float&, float&) as deprecated
Bugfixes
------------------------------------------------------------------------
- Fixed crash on creation of multiple instances of dcsm provider tool
API changes
------------------------------------------------------------------------
- Removed deprecated ResourceDataPool functions
- Added SceneObject::getSceneId() to retrieve scene id object belongs to
- Add support for interleaved vertex attributes for dynamic and static resources
- Added EDataType::ByteBlob
- Added GeometryBinding::setInput(const AttributeInput&, const ArrayBuffer&, uint8_t, uint8_t) and GeometryBinding::setInput(const AttributeInput&, const ArrayResource&, uint8_t, uint8_t)
- Removed LayoutUtils::FindFittingSubstring
- Add non-const version of RenderPass::getCamera()
- Removed CarCameraPlaneMetadata, DcsmMetadataUpdate::hasCarCameraPlanes, DcsmMetadataUpdate::getCarCameraPlanes
and DcsmMetadataCreator::setCarCameraPlanes, the nearPlane and farPlane parameters were moved into CarModelViewMetadata
- DCSMContentControl::addContentCategory and DCSMContentControl::removeContentCategory are no longer static, but can instead be called on the object itself
- API concerning the adding of content categories to DcsmContentControl has been simplified
- DCSMContentControlConfig is removed. DCSMContentControl::addContentCategory is now the only way to add content category.
- Renaming all affected functions from CategorySize and SafeAreaSize to CategoryRect and SafeRect on CategoryInfoUpdate (e.g. setCategoryRect).
- Constructor of CategoryInfoUpdate takes now all 3 category infos (RenderSize, CategoryRect, SafeRect) while SafeRect is non-mandatory argument and set to 0 by default.
- DCSMContentControl::addContentCategory now takes a Category, a displayId_t and a CategoryInfoUpdate as arguments. At least RenderSize and CategoryRect have to be set
on the CategoryInfoUpdate (width and height cannot be 0) or else the function will fail and return error status. Also if a category that was already added before is given
as argument the call fails and returns error status. For changing the category info of an existing category DCSMContentControl::setCategoryInfo is used.
- Enabled support for MSAA for offscreen buffers:
- Addition of optional parameter to RamsesRenderer::createOffscreenBuffer to set sample count used for MSAA.
- New EDataType TextureSampler2DMS for reading from multisampled Texture in shader
- Added support for Read/Write RenderBuffers.
- RamsesScene::createTextureSampler fails with multisampled RenderBuffer.
- New RamsesObject TextureSamplerMS for sampling multisampled Texture. Takes a Read/Write Renderbuffer and name as arguments for creation.
- Only API is implemented for reading from TextureSamplerMS yet. Attempt will always fail.
- Change of RendererSceneState::Unavailable and RendererSceneState::Available semantics
- Unavailable: Scene not available, no scene control possible.
- Available: Scene available, but user not interested, scene not guaranteed to be locally in memory.
- SceneReference and Renderer side data links now need scenes to be in Ready state.
- Removed scenePublished callback from IRendererSceneControlEventHandler, use sceneStateChanged instead
- Add possibility to set and get Euler angle rotation using a right-handed coordinate system
- Added Node::setRotation(float x, float y, float z, ERotationConvention rotationConvention) and Node::getRotation(float& x, float& y, float& z, ERotationConvention& rotationConvention)
- The functionality is not implemented yet so those API calls will always fail
- Removed RemoteCamera and the concept of using a camera defined by renderer/consumer side
- every camera in scene must be fully specified as ortho or perspective with frustum and viewport
- LocalCamera base class was merged into Camera base class
- to port RemoteCamera in legacy code use PerspectiveCamera with FOV=19, nearPlane=0.1, farPlane=1500
and viewport+aspectRatio matching desired renderer display resolution
- removed all DisplayConfig methods setting and getting projection or transformation of a remote camera on renderer,
all corresponding command line arguments were removed as well
- Cleaned up obsolete effect input semantics
- EEffectUniformSemantic and EEffectAttributeSemantic are enum class
- EEffectUniformSemantic_RendererViewMatrix and EEffectUniformSemantic_CameraViewMatrix merged into EEffectUniformSemantic::ViewMatrix
(consequence of removal of RemoteCamera)
- EEffectUniformSemantic_RendererScreenResolution renamed to more fitting EEffectUniformSemantic::DisplayBufferResolution
- Removed setMaximumTotalBytesAllowedForAsyncResourceLoading from RamsesFrameworkConfig as resources are no longer loaded indirectly
- DCSMContentControl now usable for wayland ivi surfaces (API only at the moment)
- added DcsmContentControl::linkContentToTextureConsumer to link wayland content as a texture (similar to offscreen buffers)
- new event IDcsmContentControlEventHandler::contentLinkedToTextureConsumer to inform about status of linking
- IDcsmConsumerEventHandler: ETechnicalContentType argument moved from contentDescription to offerContent
Bugfixes
------------------------------------------------------------------------
- PerspectiveCamera and OrthographicCamera are no longer invalid when loaded from file if saved as valid
General changes
------------------------------------------------------------------------
- ramses-stream-viewer does not connect to network anymore
Bug fixes
------------------------------------------------------------------------
- fix resource lifecycle issues after renaming or multiple creation of same resource
- fix potential SomeIP connection logic reconnect loop
Bugfixes
------------------------------------------------------------------------
- Fix possible crash in AnimationSystem
General changes
------------------------------------------------------------------------
- Flip ramses-stream-viewer stream rendering vertically. Add --flip-y argument to restore old behavior.
Bugfixes
------------------------------------------------------------------------
- Fix someip keepalive handling after disconnect and following connect
- Check and enforce DcsmMetadataCreator::setPreviewImagePng size limitations to ensure it can be transferred
API changes
------------------------------------------------------------------------
- Add ramses::GetRamsesVersion to query version information
Bugfixes
------------------------------------------------------------------------
- Embedded compositor resets Red/Blue swizzle state on switch between different buffer types
- Restore thread names on integrity
API changes
------------------------------------------------------------------------
- Add RendererConfig::setWaylandEmbeddedCompositingSocketPermissions to set embedded compositor socket permissions on creation
Build system
------------------------------------------------------------------------
- Add option to disable building of tools (ramses-sdk_BUILD_TOOLS). Set to OFF to reduce build time if tools not needed
API changes
------------------------------------------------------------------------
- EEffectInputDataType now differentiates between EEffectInputDataType_TextureSampler2D, EEffectInputDataType_TextureSampler3D and EEffectInputDataType_TextureSamplerCube
instead of EEffectInputDataType_TextureSampler
- Removed deprecated RendererSceneControl API (RendererSceneControl_legacy).
- Added RamsesUtils::SaveImageBufferToPng with additional flag "flipImageBufferVertically".
- SceneObjects now have a unique (within one Scene) and persistent sceneObjectId_t.
- Added Scene::findObjectById which can be used to find SceneObjects within one Scene.
- Added support for missing blending factors supported in OpenGL ES 3.0:
- Added following value to enum EBlendFactor: EBlendFactor_SrcColor, EBlendFactor_OneMinusSrcColor, EBlendFactor_DstColor, EBlendFactor_OneMinusDstColor,
EBlendFactor_ConstColor, EBlendFactor_OneMinusConstColor, EBlendFactor_ConstAlpha, EBlendFactor_OneMinusConstAlpha, EBlendFactor_AlphaSaturate
- Add Appearance::setBlendingColor to support setting blending color constant
- Added new event callbacks informing about expiration monitoring enable/disable, see docs for details
- IRendererSceneControlEventHandler::sceneExpirationMonitoringEnabled, IRendererSceneControlEventHandler::sceneExpirationMonitoringDisabled
- IDcsmContentControlEventHandler::contentExpirationMonitoringEnabled, IDcsmContentControlEventHandler::contentExpirationMonitoringDisabled
- Extended DCSM to offer Wayland IVI Surface ids as new content type next to Ramses scenes
- All usages of Wayland IVI Surface ids on the API (incl. StreamTexture and DisplayConfig) use now the same type "waylandIviSurfaceId_t"
- Use strongly typed value for Wayland IVI Layer Id
- Add support for Geometry shaders
- Added EffectDescription::setGeometryShader and EffectDescription::setGeometryShaderFromFile to specify geometry shader
- New resource API
- RamsesClient based resources become SceneObjects, resource creation, destruction and ownership move to Scene
- New ArrayResource class, replaces UIntxxArray, FloatArray and VectorxFArray classes
- New ArrayBuffer class, replaces IndexBufferObject and VertexBufferObject
- Scene::createArrayBuffer has data type as first argument and size is given in number of elements instead of bytes!
- ArrayBuffer::updateData replaces old Vertex/IndexBufferData::setData, takes offset and size as element index instead of bytes!
- ArrayBuffer: getData and both buffer size getters all based on numbers of elements instead of number of bytes!
- Scene::createTexture2D/3D/Cube have texture format as first argument, this is to make resource creation APIs consistent
- Scene::createTexture2DBuffer has texture format as first argument and mipCount last, this is to make resource creation APIs consistent
- Texture2DBuffer::updateData replaces old Texture2DBuffer::setData, reordered arguments make resource APIs consistent
- ETextureFormat and EDataType are enum classes, no implicit conversion to/from integer possible
- Scene file saving moved to Scene and now saves only one scene file, which also includes resources
- Removed all loadResources/saveResources functions from RamsesClient and removed ResourceFileDescription classes
- Added ResourceDataPool to be compatible to legacy ramses behavior: scene independent resource and resource file usage (deprecated)
- In RamsesClient replaced findObjectByName by findSceneByName, add getScene function
- Data objects can be bound to camera frustum planes, this allows 1 to N data distribution and also data linking of camera frustum planes
(indirectly also field of view and aspect ratio), see docs for details:
- LocalCamera::bindFrustumPlanes, LocalCamera::unbindFrustumPlanes, LocalCamera::isFrustumPlanesBound and RamsesUtils::SetPerspectiveCameraFrustumToDataObjects
Bugfixes
------------------------------------------------------------------------
- Fix possible crash when using EVisibilityMode::Off
- Fix oss build with vanilla abseil on MSVC
Documentation
------------------------------------------------------------------------
- Published doxygen API docs at https://bmwcarit.github.io/ramses (currently showing
only the RAMSES version released latest)
Bugfixes
------------------------------------------------------------------------
- Embedded compositor supports older versions (version 1 and version 2) of wl_output protocol
General changes
------------------------------------------------------------------------
- Embedded Compositor supports wl_output interface
- Always reports Zero for physical width, physical height and refresh
- Always reports One for scale factor
- SceneReference's master scene can be changed by destroying the SceneReference in its original master scene
and creating a new SceneReference referencing same scene ID in another master scene
API changes
------------------------------------------------------------------------
- Add DCSM metadata streamID
API changes
------------------------------------------------------------------------
- SceneReference::requestNotificationsForSceneVersionTags will trigger sending of last valid version tag applied
on the referenced scene
General changes
------------------------------------------------------------------------
- Embedded Compositor supports Linux DMA buffers interface
Bugfixes
------------------------------------------------------------------------
- Fix failure to connect to wayland display upon conflict between display config and related environment variables
API changes
------------------------------------------------------------------------
- Added DcsmContentControl::addContentCategory and removeContentCategory for being able to add categories during
runtime. Added as static method for binary compatibility. Will be switched to normalized
API on next major version
- Added RamsesUtils::SaveImageBufferToPng
API changes
------------------------------------------------------------------------
- Remove AnimatedSetter
- Rework API class constructors: Make explicit and/or remove misleading default arguments
- RamsesRenderer::createDcsmContentControl will fail if given DcsmContentControlConfig has no DCSM category
- Removed DcsmContentControl::setDisplayBufferClearColor, RendererSceneControl::setDisplayBufferClearColor
and added RamsesRenderer::setDisplayBufferClearColor instead
- behavior and arguments unchanged
- Added DcsmContentControl::unlinkData to break data link between consumer and provider
- Removed RamsesRenderer::handlePickEvent and IRendererEventHandler::objectsPicked and addded
RendererSceneControl::handlePickEvent and IRendererSceneControlEventHandler::objectsPicked instead
- behavior and arguments unchanged
- Added DcsmContentControl::handlePickEvent and IDcsmContentControlEventHandler::objectsPicked
- Added event callbacks for data provider/consumer creation/destruction
to both IRendererSceneControlEventHandler and IDcsmContentControlEventHandler
- dataProviderCreated, dataProviderDestroyed, dataConsumerCreated, dataConsumerDestroyed
- Dcsm metadata for 3d vehicle now also takes camera FOV, see struct CarModelViewMetadata
- Animation timing must be set together with Dcsm metadata for 3d vehicle via DcsmMetadataCreator::setCarModelView
- animation timing can be retrieved using DcsmMetadataUpdate::getCarModelViewAnimationInfo()
- Make RamsesFrameWork::createClient/destroyClient/createRenderer/destroyRenderer fail when connected
- DcsmProvider callbacks give CategoryInfo instead of SizeInfo. This object can be queried for multiple sets of values
- Removed DcsmProvider::requestContentFocus and callbacks in IDcsmConsumerEventHandler and IDcsmContentControlEventHandler in favour of enableContentFocusRequest
- Removed FocusRequest from DcsmMetadata in DcsmMetadataCreator and DcsmMetadataUpdate
- Added parameter "displayBuffer" to RamsesRenderer::readPixels to allow reading from offscreen buffers
- Added parameter "displayBuffer" to IRendererEventHandler::framebufferPixelsRead that corresponds to
the buffer for which read pixels event was generted
- Added RenderSize and SafeArea to CategoryInfo
General changes
------------------------------------------------------------------------
- Change display default XY position to (0,0) instead of (150,150)
- Leads to change of placement of created display window on Windows and X11 platforms if default values are used
- LZ4 compress compressed texture formats like ASTC for file or network
Bugfixes
------------------------------------------------------------------------
- Set ivi surface destination rectangle on display creation on Wayland IVI platform
General changes
------------------------------------------------------------------------
- Added DcsmContentControlEventHandlerEmpty for convenience when only subset of handlers need implementation
- Remove usage of capu library
- Unbreak windows OSS abseil build due to incompatible flags
- Update glslang 8.13.3743
Bugfixes
------------------------------------------------------------------------
- Make File tests more stable when shuffled
- Properly handle shift key in windows console input
API changes
------------------------------------------------------------------------
- New FocusRequest handling:
- Added DCSMProvider::enableFocusRequest and disableFocusRequest
- Added IDcsmConsumerEventHandler and IDcsmContentControlEventHandler callbacks
contentEnableFocusRequest and contentDisableFocusRequest if compiled with ENABLE_NEW_FOCUSREQUEST_API defined
This allows backwards compatible integration on ramses 24.x versions. For future major version this will be integrated
as usual.
General changes
------------------------------------------------------------------------
- Switch freetype to open files itself instead of from memory
- added imgui open source library
- Added Abseil open source library
API changes
------------------------------------------------------------------------
- Added IFontInstance::getAllSupportedCharacters that returns a set with all supported UTF32 char codes
- RendererConfig changes
- Rename setWaylandSocketEmbedded -> setWaylandEmbeddedCompositingSocketName
- Rename setWaylandSocketEmbeddedGroup -> setWaylandEmbeddedCompositingSocketGroup
- Rename setWaylandSocketEmbeddedFD -> setWaylandEmbeddedCompositingSocketFD
- Add getWaylandEmbeddedCompositingSocketName
- Remove partial applying of scene flush
- Remove parameter limitForSceneActionsApply from RamsesRenderer::setFrameTimerLimits
- IDcsmConsumerEventHandler: moved TechnicalDescription from contentReady to new contentDescription callback, which is issued before contentReady
- DcsmRenderer changes
- Renamed all *DcsmRenderer* symbols and files to *DcsmContentControl*
- It does not wrap or replace RamsesRenderer as the old name suggests, instead it is alternative to RendererSceneControl
- Added mandatory argument to DcsmContentControl::setDisplayBufferClearColor to specify display ID in addition to display buffer ID
- Removed custom renderer event handling from DcsmContentControl::update
- DcsmContentControl is now acting as alternative to RendererSceneControl, it does not replace or wrap RamsesRenderer, it lives alongside with it
- How to port your code if you were using custom renderer event handler in DcsmContentControl::update
- dispatch the renderer events via RamsesRenderer::dispatchEvents instead, no need to change anything in the handler implementation
- Side effect of this change that could cause problems: if you in your code do not properly flush renderer commands using RamsesRenderer::flush(),
these commands will not be executed, this was not an issue previously due to internal DcsmContentControl logic (arguably wrongly)
flushing the RamsesRenderer implicitly
- Added missing event callbacks to IDcsmContentControlEventHandler: contentFlushed, contentExpired, contentRecoveredFromExpiration
- These were previously available only in IRendererSceneControlEventHandler (scene events)
and their DcsmContentControl version (content events) were missing
- Removed redundant event callbacks IDcsmContentControlEventHandler::contentHidden and IDcsmContentControlEventHandler::contentReleased
- contentHidden is equivalent to contentReady, in sense that content state dropped to state ready
- contentReleased is equivalent to contentAvailable, in sense that content state dropped to state available
- Add RamsesFrameworkConfig::disableDLTApplicationRegistrationg
- Add Scene::getRamsesClient to retrieve parent client of a scene
- Added new API to control scene states on renderer RendererSceneControl to replace deprecated RendererSceneControl_legacy API
- the main difference is simplified scene state management and automatic transition to target state
- typical use case when simply getting scene rendered:
- api.setSceneMapping(scene, display); // regardless of whether scene already published or not
- api.setSceneState(RendererSceneState::Rendered); // regardless of whether scene already published or not
- api.flush();
- ... sceneStateChanged(scene, RendererSceneState::Rendered) will be emitted when rendered state reached
- how to port old code:
- generally any state transition previously needing strict step by step approach can now be done in a single command
- subscribe + waitForSubscription, map + waitForMapped, show + waitForShown -> setState(rendered) + waitForRendered
- step by step transitions can still be achieved with new API if needed (e.g. for controlling timing of scene appearance)
- Split legacy scene control API from RamsesRenderer (this API is now deprecated, use RendererSceneControl instead)
- the methods below were moved from RamsesRenderer to a new class RendererSceneControl_legacy:
- subscribeScene, unsubscribeScene, mapScene, unmapScene, showScene, hideScene, assignSceneToDisplayBuffer,
setDisplayBufferClearColor, linkData, linkOffscreenBufferToSceneData, unlinkData
- RendererSceneControl_legacy can be obtained via RamsesRenderer::getSceneControlAPI_legacy, there is just one instance per RamsesRenderer
- RendererSceneControl_legacy has its own flush and dispatchEvents, RamsesRenderer::flush/dispatchEvents has no effect for the new API
- how to port old code:
- renderer->mapScene -> renderer->getSceneControlAPI_legacy()->mapScene (same for any method from above)
- any call on RendererSceneControl_legacy must be additionally submitted by calling RendererSceneControl_legacy::flush
- events have to be dispatched additionally via RendererSceneControl_legacy::dispatchEvents using IRendererSceneControlEventHandler_legacy
- split your implementation of IRendererEventHandler accordingly
or let your implementation derive from both IRendererEventHandler and the new IRendererSceneControlEventHandler_legacy
- DcsmRenderer can only be instantiated using RamsesRenderer::createDcsmRenderer
- There can be only one API for scene/content control at a time, either RendererSceneControl, RendererSceneControl_legacy or DcsmRenderer
- Add FontCascade to ramses-text-api
- dataConsumerId_t, dataProviderId_t are now strongly typed value
- Remove DisplayConfig::enableStereoDisplay: stereo rendering can be fully set up using existing ramses featuers
- Remove DisplayConfig::setOffscreen
- Added scene referencing feature, which allows to remotely control rendering states of other scenes
- Added SceneReference and Scene::createSceneReference to obtain a Ramses object referring to a another scene
- Added Scene::linkData/unlinkData functions which allow to create/destroy data links between master and referenced scenes
- Added IClientEventHandler methods for callbacks related to scene referencing and their data linking
- linkData and linkOffscreenBuffer in all currently available APIs (RendererSceneControl, DcsmRenderer, Scene, RendererSceneControl_legacy)
do not fail anymore if consumer slot already linked to a provider, instead the link is updated to link to the new provider, discarding the previous link.
Bugfixes
------------------------------------------------------------------------
- Improve handling of empty CMAKE_RUNTIME_OUTPUT_DIRECTORY or CMAKE_LIBRARY_OUTPUT_DIRECTORY