Инициализация OpenGL

OpenGL.Initialize()

Главная точка входа для регистрации OpenGL в системе окон.

// Вызовите один раз перед созданием окна
OpenGL.Initialize();

// Теперь "OpenGL" доступен как движок
var options = new WindowOptions { Engine = "OpenGL" };
Igdrasil.InitializeWindow(options);

Что происходит при инициализации

  1. Регистрация фабрикиGameWindow.AddRenderEngine("OpenGL", loaders => new GLPipeline(loaders))
  2. "OpenGL" становится доступным в GameWindow.RenderEngines
  3. При выборе этого движка создается GLPipeline

GLPipeline

Внутренний класс, управляющий жизненным циклом OpenGL.

Этапы загрузки

// 1. Конструктор (до создания окна)
var pipeline = new GLPipeline(loaders);
// На этом этапе GPU недоступен

// 2. OnInit (до создания окна)
pipeline.OnInit(ref options);
// Здесь можно изменить параметры Silk.NET (MSAA, глубину и т.д.)

// 3. OnLoad (после создания окна)
pipeline.OnLoad(gameWindow);
// Получаем OpenGL API, создаём контекст, загружаем ресурсы
// Включаем Depth Test и Blending

// 4. Cleanup (при закрытии)
pipeline.Cleanup();
// Выгружаем ресурсы, освобождаем GPU

Состояние пайплайна

// Доступен сразу после OnLoad
var context = Igdrasil.Context; // IRenderContext

// Буферы ресурсов создаются по мере добавления задач
var shaders = context.GetShaderBuffer();
var textures = context.GetTextureBuffer();

Смена пайплайна (OpenGL → Vulkan)

// Инициализируем оба движка
OpenGL.Initialize();
// Vulkan.Initialize(); — если есть

// Создаём окно с OpenGL
var options = new WindowOptions { Engine = "OpenGL" };
Igdrasil.InitializeWindow(options);

// Позже можем переключиться
Igdrasil.Window.Engine = "Vulkan";
// GLPipeline.Cleanup() выполнится автоматически
// VulkanPipeline.OnLoad() выполнится для загрузки Vulkan

Расширенная конфигурация

Параметры инициализации движка

// В GLPipeline.OnInit можно изменить Silk.NET параметры
var options = new WindowOptions
{
    PreferredDepthBufferBits = 24,
    PreferredStencilBufferBits = 8,
    Samples = 4 // MSAA 4x
};

Igdrasil.InitializeWindow(options, renderThreads: 4);

Включение/выключение возможностей

В GLPipeline.OnLoad по умолчанию включены:

Для изменения:

// Нужно расширить GLPipeline (создать свой класс) или
// использовать контекст напрямую в OnLoad:
var gl = Igdrasil.Context; // низкоуровневый API зависит от реализации

Многопоточность

Для многопоточных движков (если добавлять Vulkan):

Igdrasil.InitializeWindow(options, renderThreads: 4);
// 4 потока для рендера, доступны в GLRenderContext

Версия: 1.0