Tool

OaViewer

Universal GPU-accelerated image and video viewer with smooth pan, zoom, and channel inspection. One binary, any Vulkan device.

API levelLevel 0 — OaViewer + OaDeviceUiApp
ModesImage2D, Video, Scene3D, Matrix heatmap
GPU pipelineVulkan compute → bindless descriptor → swapchain blit
InputMouse drag/wheel pan & zoom, keyboard shortcuts, Wayland touch gestures
SourceSource/Public/Oa/Ui/Viewer.h

Image Viewer — Pan & Zoom

Video Player — H.264 Decode

Controls

InputAction
Scroll wheelZoom in / out (animated)
DragPan the view
+ / -Keyboard zoom in / out
0Fit to window
9Zoom to 100%
1Red channel (grayscale)
2Green channel (grayscale)
3Blue channel (grayscale)
4Alpha channel (grayscale)
5RGB full colour
Arrow keysPan up / down / left / right
Q / EscQuit

Quick Start

Minimal setup — pass a path and run:

Viewerquickstart.cpp

// ═══════════════════════════════════════════════════════════════════════════
// OA Viewer — Universal Image & Video Viewer
// Level 0 API — OaViewer with OaDeviceUiApp
// ═══════════════════════════════════════════════════════════════════════════
#include <Oa/Ui/Viewer.h>
int main(int argc, char** argv) {
OaViewer viewer(argc > 1 ? argv[1] : "Asset/Image/Realm1024px.jpg");
return viewer.Run().IsOk() ? 0 : 1;
}

Configuration

Full configuration via OaViewerConfig:

Viewerconfig.cpp

OaViewerConfig config;
config.Mode = OaViewerMode::Image2D;
config.Path = "Asset/Image/Realm1024px.jpg";
config.Title = "OA Image Viewer";
config.Width = 1280;
config.Height = 720;
OaViewer viewer(config);
viewer.Run();