MiMoEngine ASM: x86-64 MASM汇编+C混合架构游戏引擎
核心热路径(数学/内存/字符串/性能分析)用MASM汇编(SSE/AVX2) 外围系统(窗口/渲染/ECS/音频/UI/脚本)用C语言 含自研编辑器、VisualScript积木编程、中文渲染(glyph_atlas)
This commit is contained in:
commit
2d56cb3bc9
91 files changed
+9988
No files matched your search
@@ -0,0 +1,95 @@
|
||||
// 独立 D3D11 测试 - 不依赖引擎框架
|
||||
#include <windows.h>
|
||||
#include <d3d11.h>
|
||||
#include <dxgi.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#pragma comment(lib, "d3d11.lib")
|
||||
#pragma comment(lib, "dxgi.lib")
|
||||
|
||||
static ID3D11Device* device = NULL;
|
||||
static ID3D11DeviceContext* context = NULL;
|
||||
static IDXGISwapChain* swap_chain = NULL;
|
||||
static ID3D11RenderTargetView* rtv = NULL;
|
||||
|
||||
static LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) {
|
||||
if (msg == WM_DESTROY) { PostQuitMessage(0); return 0; }
|
||||
return DefWindowProcW(hwnd, msg, wParam, lParam);
|
||||
}
|
||||
|
||||
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) {
|
||||
(void)hPrevInstance; (void)lpCmdLine; (void)nCmdShow;
|
||||
|
||||
// 注册窗口类
|
||||
WNDCLASSEXW wc = {0};
|
||||
wc.cbSize = sizeof(WNDCLASSEXW);
|
||||
wc.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
|
||||
wc.lpfnWndProc = WndProc;
|
||||
wc.hInstance = hInstance;
|
||||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
wc.lpszClassName = L"D3D11Test";
|
||||
RegisterClassExW(&wc);
|
||||
|
||||
// 创建窗口
|
||||
HWND hwnd = CreateWindowExW(0, L"D3D11Test", L"D3D11 Test",
|
||||
WS_OVERLAPPEDWINDOW, 100, 100, 800, 600,
|
||||
NULL, NULL, hInstance, NULL);
|
||||
ShowWindow(hwnd, SW_SHOW);
|
||||
UpdateWindow(hwnd);
|
||||
|
||||
// 创建 D3D11 设备和交换链
|
||||
DXGI_SWAP_CHAIN_DESC scd = {0};
|
||||
scd.BufferCount = 1;
|
||||
scd.BufferDesc.Width = 800;
|
||||
scd.BufferDesc.Height = 600;
|
||||
scd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM;
|
||||
scd.BufferDesc.RefreshRate.Numerator = 60;
|
||||
scd.BufferDesc.RefreshRate.Denominator = 1;
|
||||
scd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
|
||||
scd.OutputWindow = hwnd;
|
||||
scd.SampleDesc.Count = 1;
|
||||
scd.Windowed = TRUE;
|
||||
scd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
|
||||
|
||||
D3D_FEATURE_LEVEL levels[] = {D3D_FEATURE_LEVEL_11_0};
|
||||
HRESULT hr = D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, levels, 1, D3D11_SDK_VERSION, &scd, &swap_chain, &device, NULL, &context);
|
||||
|
||||
if (FAILED(hr)) {
|
||||
MessageBoxW(hwnd, L"D3D11 CreateDevice Failed!", L"Error", MB_OK);
|
||||
return -1;
|
||||
}
|
||||
|
||||
// 创建渲染目标
|
||||
ID3D11Texture2D* back_buffer = NULL;
|
||||
swap_chain->lpVtbl->GetBuffer(swap_chain, 0, &IID_ID3D11Texture2D, (void**)&back_buffer);
|
||||
device->lpVtbl->CreateRenderTargetView(device, (ID3D11Resource*)back_buffer, NULL, &rtv);
|
||||
back_buffer->lpVtbl->Release(back_buffer);
|
||||
|
||||
// 设置渲染目标
|
||||
context->lpVtbl->OMSetRenderTargets(context, 1, &rtv, NULL);
|
||||
|
||||
// 主循环
|
||||
MSG msg = {0};
|
||||
while (msg.message != WM_QUIT) {
|
||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
|
||||
if (msg.message == WM_QUIT) break;
|
||||
TranslateMessage(&msg);
|
||||
DispatchMessage(&msg);
|
||||
}
|
||||
|
||||
// 清屏 - 蓝色
|
||||
float color[4] = {0.2f, 0.5f, 0.8f, 1.0f};
|
||||
context->lpVtbl->ClearRenderTargetView(context, rtv, color);
|
||||
|
||||
// 呈现
|
||||
swap_chain->lpVtbl->Present(swap_chain, 0, 0);
|
||||
}
|
||||
|
||||
// 清理
|
||||
rtv->lpVtbl->Release(rtv);
|
||||
swap_chain->lpVtbl->Release(swap_chain);
|
||||
context->lpVtbl->Release(context);
|
||||
device->lpVtbl->Release(device);
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in new issue
Block a user