Окно и движки рендера
GameWindow
Основной класс для работы с окном и управлением рендер-движками.
Регистрация движков
// Регистрируем свой пайплайн
GameWindow.AddRenderEngine("OpenGL", loaders =>
new OpenGLPipeline(loaders));
GameWindow.AddRenderEngine("Vulkan", loaders =>
new VulkanPipeline(loaders));
// Список доступных движков
var engines = GameWindow.RenderEngines; // ["OpenGL", "Vulkan", ...]
// Удаление движка
GameWindow.RemoveRenderEngine("OpenGL");
Смена движка во время работы
// Менять движок можно даже после загрузки окна
Igdrasil.Window.Engine = "Vulkan";
// Старый пайплайн будет очищен, новый инициализирован
События окна
// События заложены в GameWindow
Igdrasil.Window.OnLoad += () =>
{
// вызывается после загрузки пайплайна
};
Igdrasil.Window.OnRender += (context, dt) =>
{
// вызывается каждый кадр перед SwapBuffers
};
Igdrasil.Window.Update += dt =>
{
// вызывается для логики (из Igdrasil.OnUpdate)
};
Igdrasil.Window.Closing += () =>
{
// вызывается при закрытии окна
};
Управление окном
// Запуск основного цикла (блокирует)
Igdrasil.Window.Run();
// Закрытие
Igdrasil.Window.Close();
// Текущий рендер-контекст
var context = Igdrasil.Window.Context; // IRenderContext
// Базовое Silk.NET окно (если нужен низкоуровневый доступ)
var silkWindow = Igdrasil.Window.Window;
WindowOptions
Опции для создания окна и выбора движка рендера.
Готовые пресеты
// OpenGL 1280×720, VSync включен
var opts = WindowOptions.Default;
// Vulkan 1280×720, VSync отключен
var opts = WindowOptions.DefaultVulkan;
Создание с параметрами
var options = new WindowOptions
{
// Основное
Title = "My Game",
Engine = "OpenGL", // какой движок использовать
Size = new IVector2(1280, 720),
Position = new IVector2(100, 100),
// Поведение
IsVisible = true,
VSync = true,
IsEventDriven = false, // true = ждёт событий вместо постоянного цикла
// Состояние окна
WindowState = WindowState.Normal, // Normal, Maximized, Minimized, Fullscreen
WindowBorder = WindowBorder.Resizable, // Resizable, Fixed, Hidden
TopMost = false,
// Производительность
FramesPerSecond = 0.0, // 0 = неограниченно
UpdatesPerSecond = 0.0,
// Буферы
PreferredDepthBufferBits = 24,
PreferredStencilBufferBits = 8,
Samples = 4, // MSAA
// API
TransparentFramebuffer = false,
IsContextControlDisabled = false
};
Igdrasil.InitializeWindow(options);
Инициализация окна
При вызове Igdrasil.InitializeWindow() происходит:
- Создание GameWindow с выбранным пайплайном
- Вызов OnInit пайплайна (может изменить Silk.NET опции)
- Создание Silk.NET окна
- Вызов OnLoad пайплайна (загрузка GPU-ресурсов)
- Готово к подписке на
Igdrasil.OnLoadи запускуIgdrasil.Start()
// Инициализация с опциями
Igdrasil.InitializeWindow(
options,
renderThreads: 4, // для Vulkan/D3D12
onlyLatestLog: true // перезаписывать logs/latest.log
);
// Без окна (headless, для тестов)
Igdrasil.InitializeWithoutWindow(onlyLatestLog: true);
Версия: 1.0