backend

package
v0.9.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 19, 2025 License: MIT Imports: 4 Imported by: 0

Documentation

Overview

Package backend provides a pluggable rendering backend abstraction.

The backend package allows the gg library to support multiple rendering implementations. Currently, only the software backend is available, but this architecture enables future GPU-accelerated backends via gogpu/wgpu.

Backend Registration

Backends are registered via init() functions and selected at runtime. The software backend is automatically registered on import:

import _ "github.com/gogpu/gg/backend"

Backend Selection

Use Default() to get the best available backend, or Get() to request a specific backend by name:

// Get the default (best available) backend
b := backend.Default()

// Or request a specific backend
b := backend.Get("software")

Usage with Context

The backend provides renderers that implement gg.Renderer:

b := backend.Default()
if err := b.Init(); err != nil {
	log.Fatal(err)
}
defer b.Close()

renderer := b.NewRenderer(800, 600)

Retained Mode Rendering

For complex scenes, use RenderScene for optimized rendering:

scene := scene.NewScene()
scene.Fill(scene.FillNonZero, scene.IdentityAffine(),
	scene.SolidBrush(gg.Red), circle)

pixmap := gg.NewPixmap(800, 600)
if err := b.RenderScene(pixmap, scene); err != nil {
	log.Fatal(err)
}

Available Backends

- "software": CPU-based scanline rasterizer (always available) - "wgpu": GPU-accelerated via gogpu/wgpu (future)

Index

Constants

View Source
const (
	// BackendSoftware is the name of the CPU-based software backend.
	BackendSoftware = "software"
	// BackendWGPU is the name of the GPU-based wgpu backend.
	BackendWGPU = "wgpu"
)

Backend name constants.

Variables

View Source
var (
	// ErrBackendNotAvailable is returned when a requested backend is not available.
	ErrBackendNotAvailable = errors.New("backend: not available")

	// ErrNotInitialized is returned when operations are called before Init.
	ErrNotInitialized = errors.New("backend: not initialized")
)

Common backend errors.

Functions

func Available

func Available() []string

Available returns a list of registered backend names.

func IsRegistered

func IsRegistered(name string) bool

IsRegistered checks if a backend with the given name is registered.

func Register

func Register(name string, factory BackendFactory)

Register registers a backend factory with the given name. This is typically called from init() functions in backend packages. If a backend with the same name is already registered, it will be replaced.

func Unregister

func Unregister(name string)

Unregister removes a backend from the registry. This is useful for testing.

Types

type BackendFactory

type BackendFactory func() RenderBackend

BackendFactory creates a new backend instance.

type RenderBackend

type RenderBackend interface {
	// Name returns the backend identifier (e.g., "software", "wgpu").
	Name() string

	// Init initializes the backend.
	// This should be called before any rendering operations.
	Init() error

	// Close releases all backend resources.
	// The backend should not be used after Close is called.
	Close()

	// NewRenderer creates a renderer for immediate mode rendering.
	// The renderer is sized for the given dimensions and can be
	// used with gg.Context for drawing operations.
	NewRenderer(width, height int) gg.Renderer

	// RenderScene renders a scene to the target pixmap using retained mode.
	// This is more efficient for complex scenes as it can optimize
	// the rendering pipeline.
	RenderScene(target *gg.Pixmap, s *scene.Scene) error
}

RenderBackend is the interface for rendering backends. It abstracts the rendering implementation, allowing the library to support multiple backends (software, GPU via wgpu, etc.).

Backends must be registered via Register() and are selected via Get() or Default().

func Default

func Default() RenderBackend

Default returns the best available backend based on priority. Priority order: wgpu > software Returns nil if no backends are registered.

func Get

func Get(name string) RenderBackend

Get returns a backend instance by name. Returns nil if the backend is not registered.

func InitDefault

func InitDefault() (RenderBackend, error)

InitDefault initializes the default backend based on availability. This is called automatically when using gg.NewContext() without explicit backend selection.

func MustDefault

func MustDefault() RenderBackend

MustDefault returns the default backend or panics.

type SoftwareBackend

type SoftwareBackend struct {
	// contains filtered or unexported fields
}

SoftwareBackend is a CPU-based rendering backend. It wraps the existing SoftwareRenderer for immediate mode and scene.Renderer for retained mode rendering.

func NewSoftwareBackend

func NewSoftwareBackend() *SoftwareBackend

NewSoftwareBackend creates a new software rendering backend.

func (*SoftwareBackend) Close

func (b *SoftwareBackend) Close()

Close releases all backend resources.

func (*SoftwareBackend) Init

func (b *SoftwareBackend) Init() error

Init initializes the backend.

func (*SoftwareBackend) Name

func (b *SoftwareBackend) Name() string

Name returns the backend identifier.

func (*SoftwareBackend) NewRenderer

func (b *SoftwareBackend) NewRenderer(width, height int) gg.Renderer

NewRenderer creates a renderer for immediate mode rendering. This wraps gg.NewSoftwareRenderer to provide a gg.Renderer interface.

func (*SoftwareBackend) RenderScene

func (b *SoftwareBackend) RenderScene(target *gg.Pixmap, s *scene.Scene) error

RenderScene renders a scene to the target pixmap using retained mode. This uses parallel tile-based rendering for efficiency.

func (*SoftwareBackend) SceneRenderer

func (b *SoftwareBackend) SceneRenderer() *scene.Renderer

SceneRenderer returns the underlying scene renderer for advanced usage. Returns nil if no scene has been rendered yet.

Directories

Path Synopsis
Package wgpu provides a GPU-accelerated rendering backend using gogpu/wgpu.
Package wgpu provides a GPU-accelerated rendering backend using gogpu/wgpu.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL