DXEngine — компактный и лёгкий движок, написанный на C++ с использованием DirectX 11. Он предназначен для быстрого создания оконных приложений с рендерингом 2D и 3D графики. Весь движок упакован в DLL, что позволяет отделить логику рендеринга от основной программы и значительно сократить код в EXE.
Все функции движка экспортируются через DLL и предоставляют простой интерфейс для работы с окном и DirectX:
Скачать DLL:
VT:
Как добавить длл?
Заходим в папку где хранится наша exe
Кидаем длл в папку и используем в коде
Пример кода:
Архитектура DLL
Все функции движка экспортируются через DLL и предоставляют простой интерфейс для работы с окном и DirectX:
- DX_Init — инициализация движка и создание окна.
- DX_BeginFrame — подготовка кадра для рендеринга (очистка буфера и установка рендер таргета).
- DX_EndFrame — завершение кадра и вывод на экран.
- DX_Shutdown — завершение работы движка и освобождение ресурсов.
- DX_GetHWND — получение дескриптора окна (HWND).
- DX_GetDevice / DX_GetContext — получение ID3D11Device и ID3D11DeviceContext для дополнительного рендеринга прямо из EXE.
Преимущества
- Быстрая интеграция в любой C++ проект.
- Минимальное количество кода в EXE: достаточно вызвать несколько функций из DLL.
- Возможность рисовать свои объекты и графику поверх базового рендеринга движка.
- Полный контроль над DirectX 11 через предоставленные Device и Context.
Скачать DLL:
Пожалуйста, авторизуйтесь для просмотра ссылки.
VT:
Пожалуйста, авторизуйтесь для просмотра ссылки.
Как добавить длл?
Заходим в папку где хранится наша exe
Кидаем длл в папку и используем в коде
Пример кода:
X:
#include <windows.h>
#include <d3d11.h>
#include <cmath>
#pragma comment(lib,"d3d11.lib")
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int nCmdShow) {
HMODULE dll = LoadLibraryA("DXEngine.dll");
if (!dll) { MessageBoxA(NULL, "Не удалось загрузить DLL", "Ошибка", MB_ICONERROR); return -1; }
auto Init = (bool(*)(const wchar_t*, int, int))GetProcAddress(dll, "DX_Init");
auto Begin = (void(*)(float, float, float))GetProcAddress(dll, "DX_BeginFrame");
auto End = (void(*)())GetProcAddress(dll, "DX_EndFrame");
auto Shut = (void(*)())GetProcAddress(dll, "DX_Shutdown");
if (!Init(L"Переливающийся фон", 800, 600)) return -1;
MSG msg = {};
float t = 0.0f;
while (msg.message != WM_QUIT) {
if (PeekMessage(&msg, 0, 0, 0, PM_REMOVE)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else {
float r = (std::sin(t) + 1.0f) / 2.0f;
float g = (std::sin(t + 2.0f) + 1.0f) / 2.0f;
float b = (std::sin(t + 4.0f) + 1.0f) / 2.0f;
Begin(r, g, b);
End();
t += 0.01f;
}
}
Shut();
FreeLibrary(dll);
return 0;
}