rendering_env.go RawHistoryFolder
1// Package port defines interfaces for external dependencies.
2package port
3
4import "context"
5
6// GPUVendor identifies the GPU manufacturer for vendor-specific optimizations.
7type GPUVendor string
8
9const (
10 // GPUVendorAMD represents AMD/ATI GPUs (vendor ID 0x1002)
11 GPUVendorAMD GPUVendor = "amd"
12 // GPUVendorIntel represents Intel integrated/discrete GPUs (vendor ID 0x8086)
13 GPUVendorIntel GPUVendor = "intel"
14 // GPUVendorNVIDIA represents NVIDIA GPUs (vendor ID 0x10de)
15 GPUVendorNVIDIA GPUVendor = "nvidia"
16 // GPUVendorUnknown represents undetected or unsupported GPUs
17 GPUVendorUnknown GPUVendor = "unknown"
18)
19
20// RenderingEnvSettings contains all rendering-related environment settings.
21// This is a port-local type to avoid import cycles with config package.
22type RenderingEnvSettings struct {
23 // --- GStreamer settings (from MediaConfig) ---
24 // ForceVSync enables vertical sync for video playback.
25 ForceVSync bool
26 // GLRenderingMode controls OpenGL API selection: "auto", "gles2", "gl3", "none".
27 GLRenderingMode string
28 // GStreamerDebugLevel sets GStreamer debug verbosity (0-5).
29 GStreamerDebugLevel int
30
31 // --- WebKit compositor settings (from RenderingConfig) ---
32 DisableDMABufRenderer bool
33 ForceCompositingMode bool
34 DisableCompositingMode bool
35
36 // --- GTK/GSK settings (from RenderingConfig) ---
37 GSKRenderer string
38 DisableMipmaps bool
39 PreferGL bool
40
41 // --- Debug settings ---
42 ShowFPS bool
43 SampleMemory bool
44 DebugFrames bool
45
46 // --- Skia rendering thread settings (from PerformanceConfig) ---
47 // SkiaCPUPaintingThreads sets WEBKIT_SKIA_CPU_PAINTING_THREADS.
48 // 0 means unset (use WebKit default).
49 SkiaCPUPaintingThreads int
50 // SkiaGPUPaintingThreads sets WEBKIT_SKIA_GPU_PAINTING_THREADS.
51 // -1 means unset; 0 disables GPU tile painting.
52 SkiaGPUPaintingThreads int
53 // SkiaEnableCPURendering forces CPU rendering via WEBKIT_SKIA_ENABLE_CPU_RENDERING=1.
54 SkiaEnableCPURendering bool
55}
56
57// RenderingEnvManager configures rendering environment variables
58// for GStreamer, WebKit, and GTK/GSK.
59// Environment variables must be set BEFORE GTK/WebKit initialization.
60type RenderingEnvManager interface {
61 // DetectGPUVendor identifies the primary GPU vendor from system info.
62 // Uses /sys/class/drm/card*/device/vendor as primary detection method.
63 DetectGPUVendor(ctx context.Context) GPUVendor
64
65 // ApplyEnvironment sets all rendering environment variables.
66 // Must be called before any GTK/GStreamer initialization.
67 ApplyEnvironment(ctx context.Context, settings RenderingEnvSettings) error
68
69 // GetAppliedVars returns a map of environment variables that were set.
70 // Useful for logging and debugging.
71 GetAppliedVars() map[string]string
72}