Feature guide » Debugging helpers

Convenience classes to help you during development.

DebugTools library provides various helper classes to help you with prototyping and debugging applications without the need to write too much common code. They probably have no usage in production code, but can be useful in development. See documentation of DebugTools namespace for more information about building and usage with CMake.

Debug renderers

Debug renderers provide a way to visualize objects and object features in scene graph without the need to mess around with meshes and shaders. They are implemented as object features, so you can attach any number of them to any object.

Basic usage involves instancing DebugTools::ResourceManager and keeping it for the whole lifetime of debug renderers. Next you need some SceneGraph::DrawableGroup instance. You can use the same group as for the rest of your scene, but preferably use dedicated one for debug renderers, so you can easily enable or disable debug rendering.

Next step is to create configuration for your debug renderers and create particular debug renderer. The configuration is managed using the resource manager - you create configuration instance, add it to the manager and then reference it using particular resource key. This way you can easily share the same options with more renderers. If no options are specified or resource with given key doesn't exist, default fallback is used.

Example usage: visualizing object position, rotation and scaling using DebugTools::ObjectRenderer :

// Global instance of debug resource manager, drawable group for the renderers
DebugTools::ResourceManager manager;
SceneGraph::DrawableGroup3D debugDrawables;

// Create renderer options which will be referenced later by "my" resource key
manager.set("my", DebugTools::ObjectRendererOptions{}.setSize(0.3f));

// Create debug renderer for given object, use "my" options for it. The
// renderer is automatically added to the object features and also to
// specified drawable group.
new DebugTools::ObjectRenderer3D{manager, *object, "my", &debugDrawables};

See DebugTools::ObjectRenderer and DebugTools::ForceRenderer for more information.