Skip to content

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:

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.