IAVis
IAVis is a Vulkan-based real-time visualization library for scientific applications.
IAVis has been migrated to a module-only API (
import iavis;). License holders receive migration details from IASoft separately.
Core features
- Vulkan-based rendering — high-performance real-time backend
- Simple C++ API — contexts, scenes, entities, materials, textures
- Instanced rendering — many identical objects with low CPU overhead
- Built-in primitives — quad, cube, sphere, cylinder
- Materials and textures — custom assets plus built-in defaults
- Lighting and shadows — Blinn-Phong point lights and shadow mapping
- Windowing-agnostic — SDL3, GLFW, or any library via surface creation callbacks
Requirements
- C++20 modules (C++23 recommended; matches Auxid toolchain)
- CMake 3.28+
- Vulkan-capable GPU and drivers
- Documentation builds: Python 3, Doxygen 1.9.8+ (1.11+ recommended for C++ modules)
Quick start (CMake)
include(FetchContent)
FetchContent_Declare(
iavis
GIT_REPOSITORY https://github.com/I-A-S/IAVis.git
GIT_TAG main
)
FetchContent_MakeAvailable(iavis)
add_executable(my_app main.cpp)
target_link_libraries(my_app PRIVATE IAVis)
Minimal SDL3 example:
#include <SDL3/SDL.h>
#include <SDL3/SDL_vulkan.h>
#include <glm/gtc/matrix_transform.hpp>
import iavis;
int main(int argc, char *argv[]) {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window *window = SDL_CreateWindow("IAVis Example", 800, 600,
SDL_WINDOW_RESIZABLE | SDL_WINDOW_VULKAN);
iavis::ContextCreateInfo init_info{
.debug_mode = true,
.surface_width = 800,
.surface_height = 600,
.surface_creation_callback = [](void *instance, void *user_data) -> void * {
VkSurfaceKHR surface;
SDL_Vulkan_CreateSurface(static_cast<SDL_Window *>(user_data),
static_cast<VkInstance>(instance), nullptr, &surface);
return surface;
},
.surface_creation_callback_user_data = window,
};
auto context = iavis::create_context(init_info).unwrap();
auto scene = iavis::create_scene(context).unwrap();
iavis::set_background_color(context, {0.1f, 0.2f, 0.3f});
iavis::set_projection_matrix(context,
glm::perspective(glm::radians(45.0f), 800.0f / 600.0f, 0.1f, 100.0f));
iavis::set_view_matrix(context,
glm::lookAt(glm::vec3(0.0f, 0.0f, 3.0f), glm::vec3(0.0f, 0.0f, 0.0f),
glm::vec3(0.0f, 1.0f, 0.0f)));
auto material = iavis::get_default_material(scene);
auto cube = iavis::get_cube_geometry(scene);
auto entity = iavis::add_entity(scene, cube, material).unwrap();
SDL_ShowWindow(window);
bool running = true;
while (running) {
SDL_Event event;
while (SDL_PollEvent(&event)) {
if (event.type == SDL_EVENT_QUIT)
running = false;
}
float time = static_cast<float>(SDL_GetTicks()) / 1000.0f;
iavis::set_entity_transform(scene, entity,
glm::rotate(glm::mat4(1.0f), time, glm::vec3(0.0f, 1.0f, 0.0f)));
iavis::render_scene(scene);
}
SDL_DestroyWindow(window);
SDL_Quit();
return 0;
}
Examples
| Example | Description |
|---|---|
examples/unlit-cube/ |
Simple unlit rotating cube |
examples/lights/ |
Blinn-Phong dynamic point lights |
examples/shadows/ |
Shadow mapping |
examples/off-screen/ |
Off-screen render and image export |
API reference
Generated from Doxygen comments in the source:
- API overview
- Module
iavis - Module
iavis.definitions - Namespace
iavis - Namespace functions
- Classes and structs
Building the documentation
Install Python dependencies:
pip install -r docs/requirements.txt
Serve locally (Doxygen must be on PATH; mkdoxy runs Doxygen automatically):
cd docs
mkdocs serve
Open http://127.0.0.1:8000.
Or build a static site:
cd docs
mkdocs build
Output: docs/site/.
With CMake (when Doxygen and Python3 are found):
cmake --build --preset <your-preset> --target docs
cmake --build --preset <your-preset> --target docs-serve
License
Copyright © 2026 IASoft (PVT) LTD. Licensed under the PolyForm Noncommercial License 1.0.0.