Создание простого экземпляра Windows, способного отображать графику Direct3D

Я только недавно начал узнавать о Direct3D, когда я научился создавать простое окно, я начал задаваться вопросом, могу ли я автоматизировать этот процесс, поэтому всякий раз, когда мне нужно было бы создать окно, мне просто нужно было бы вызвать функцию с мои конфиги уже настроены. Это основная часть кода, который я написал:

void CreateWindow(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
//Inside this function is the code used to create a simple window.
{
HWND hWnd;
WNDCLASSEX(wc);
ZeroMemory(&wc, sizeof(WNDCLASSEX));

wc.cbSize = sizeof(WNDCLASSEX);
wc.style = CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.hInstance = hInstance;
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
wc.lpszClassName = L"D3D11Class";
wc.hbrBackground = (HBRUSH)COLOR_WINDOW;

RegisterClassEx(&wc);

hWnd = CreateWindowEx(NULL, L"D3D11Class", L"WINDOW", WS_OVERLAPPEDWINDOW, 50, 50, 1080, 720, NULL, NULL, hInstance, NULL);
ShowWindow(hWnd, nCmdShow);
Init3D(hWnd);
}

int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
//The main function where the CreateWindow function was called, also used a loop to keep it running.
{
std::atexit(CleanD3D);
CreateWindow(hInstance, hPrevInstance, lpCmdLine, nCmdShow);
MSG msg;
while (true)
{
    if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
        if (msg.message == WM_QUIT)
        {
            break;
        }
    }
    RenderFrame();
}
return msg.wParam;
}

Некоторые из функций, которые я использовал, не были вставлены сюда, потому что я считаю, что они не имеют отношения к тому, что я хочу просмотреть. Кажется, что все работает нормально, когда я запускаю приложение, но я не уверен, что это правильный способ делать что-то, так как я только новичок, поэтому, если кто-нибудь, кто более опытен в кодировании DirectX, может посоветовать мне, я бы будьте благодарны.

0

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *