Инициализация OpenGL
OpenGL.Initialize()
Главная точка входа для регистрации OpenGL в системе окон.
// Вызовите один раз перед созданием окна
OpenGL.Initialize();
// Теперь "OpenGL" доступен как движок
var options = new WindowOptions { Engine = "OpenGL" };
Igdrasil.InitializeWindow(options);
Что происходит при инициализации
- Регистрация фабрики —
GameWindow.AddRenderEngine("OpenGL", loaders => new GLPipeline(loaders)) - "OpenGL" становится доступным в
GameWindow.RenderEngines - При выборе этого движка создается
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 по умолчанию включены:
GL_DEPTH_TEST— тестирование глубиныGL_BLEND— смешивание цветов
Для изменения:
// Нужно расширить GLPipeline (создать свой класс) или
// использовать контекст напрямую в OnLoad:
var gl = Igdrasil.Context; // низкоуровневый API зависит от реализации
Многопоточность
Для многопоточных движков (если добавлять Vulkan):
Igdrasil.InitializeWindow(options, renderThreads: 4);
// 4 потока для рендера, доступны в GLRenderContext
Версия: 1.0