Skip to content

Renderer

Renderer interface for drawing a scene with a given camera.

The renderer owns GPU state and draw logic for rendering a Scene with a specified Camera. It is typically constructed and driven by the Application runtime but can also be used directly in manual setups.

This class defines the rendering interface only. The actual rendering implementation is provided by a backend, and multiple backends (for example, OpenGL or Vulkan) may exist behind this interface.

cpp
vglx::Renderer renderer({
  .framebuffer_width = window.FramebufferWidth(),
  .framebuffer_height = window.FramebufferHeight(),
  .clear_color = 0x444444
});

auto ok = renderer.Initialize();
if (!ok) {
  HandleError(ok.error());
}

The renderer assumes a valid graphics context is current on the calling thread. When the window is resized, call SetViewport to adjust the render area (or recreate with new parameters if you manage your own framebuffers).

Construction

Constructors


Renderer()

Constructs a renderer.

GPU resources are not created until Initialize is called.

cpp
Renderer::Renderer(const Renderer::Parameters& params);
ParameterDescription
paramsInitialization parameters for constructing the renderer.

Types

Renderer::Parameters struct

Parameters for constructing a Renderer object.

ParameterDescription
framebuffer_width intCurrent framebuffer width in pixels.
framebuffer_height intCurrent framebuffer height in pixels.
sample_count intAntialiasing level (e.g., 4x MSAA).
clear_color ColorClear color used at the start of a frame.

Functions

CreateTextureFromRenderTarget() std::shared_ptr<Texture2D>

Returns the color texture associated with an offscreen render target.

When rendering to a RenderTarget the renderer attaches a 2D texture that receives the color output of the frame. This method retrieves that texture so it can be bound in subsequent passes.

The returned pointer is shared with the render target and remains valid as long as both the renderer and the render target are alive. If target is null or does not have an associated color texture an empty pointer is returned.

cpp
std::shared_ptr<Texture2D> Renderer::CreateTextureFromRenderTarget(RenderTarget* target);
ParameterDescription
targetRender target whose color texture should be retrieved.

Initialize() std::expected<void, std::string>

Initializes GPU state and allocates required resources.

cpp
std::expected<void, std::string> Renderer::Initialize();

operator=() Renderer&

cpp
Renderer& Renderer::operator=(Renderer& &) noexcept;
ParameterDescription

Render() void

Renders the given scene from the specified camera.

The scene is expected to be in a consistent state for rendering. If you are using the runtime path, this is handled automatically. In direct initialization flows, call tye per-frame update routine Scene::Advance prior to rendering.

cpp
void Renderer::Render(Scene* scene, Camera* camera, RenderTarget* target=nullptr);
ParameterDescription
scenePointer to the scene to render.
cameraPointer to the active camera.
target

RenderedObjectsPerFrame() size_t

Returns the number of renderable objects drawn in the last frame.

Intended for statistics overlays and debugging.

cpp
size_t Renderer::RenderedObjectsPerFrame() const;

SetClearColor() void

Sets the clear color for subsequent frames.

The color is applied at the start of each frame when the framebuffer is cleared. Typically used to define the background color of the rendering surface.

cpp
void Renderer::SetClearColor(const Color& color);
ParameterDescription
colorClear color in RGB format.

SetViewport() void

Sets the active viewport rectangle in pixels.

Adjusts the area of the framebuffer that subsequent draw calls will target. This should be called whenever the window or framebuffer size changes, or when rendering to a specific sub-region of the target surface.

When using the runtime-managed rendering path, the viewport is updated automatically. In manual initialization flows, you are responsible for calling this method whenever the framebuffer dimensions change.

cpp
void Renderer::SetViewport(int x, int y, int width, int height);
ParameterDescription
xLeft pixel of the viewport.
yBottom pixel of the viewport.
widthViewport width in pixels.
heightViewport height in pixels.

Released under the MIT License.