почему нет вывода в мою программу в прямом х 11? - PullRequest
0 голосов
/ 07 октября 2019

Я новичок в постановке x 3d и мало что знаю об этом. Я недавно начал (смотрел) серию обучающих программ (https://youtu.be/2NOgrpXks9A) и даже не могу отсортировать эквивалент «Привет, мир». когда я запускаю программу из учебника, у меня ничего не отображается, в то время как предполагается отображать пустое окно. Хотя проблема может показаться наивной, я не знаю, где еще поставить такой вопрос ...

Я видел в Интернете, что некоторые люди объявляют аргументы "winmain", например:

int CALLBACK WinMain(
   _In_ HINSTANCE hInstance,
   _In_ HINSTANCE hPrevInstance,
   _In_ LPSTR     lpCmdLine,
   _In_ int       nCmdShow
)

... однако, это все еще не сработало. Я работаю на платформе решения x86 с: -windows 10 -visual studio 2019

#include <Windows.h>

int CALLBACK WinMain(
    HINSTANCE  hInstance, //allows us to load bitmmaps or icons
    HINSTANCE hPrevInstance,//always 0
    LPSTR LPcmdLine,//contains cmd line arguments 
     int        nCmdShow)
{
    const auto pClassName = "hw3dbutts";
    //register window class
    WNDCLASSEX wc = { 0 };
    wc.cbSize = sizeof( wc );
    wc.style = CS_OWNDC;
    wc.lpfnWndProc = DefWindowProc;
    wc.cbClsExtra = 0;
    wc.cbClsExtra = 0;
    wc.hInstance = hInstance;
    wc.hIcon = nullptr;
    wc.hCursor = nullptr;
    wc.hbrBackground = nullptr;
    wc.lpszMenuName = nullptr;
    wc.lpszClassName = nullptr;
        RegisterClassEx(&wc);
        //create window instance
        HWND hWnd = CreateWindowEx(
            0, pClassName,
            "happy Hard Window",
            WS_CAPTION | WS_MINIMIZE | WS_SYSMENU,
            200, 200, 640, 480,
            nullptr,nullptr,hInstance, nullptr
        );
        //show the damn window!
        ShowWindow(hWnd, SW_SHOW);
        while(true);
    return 0;
}

Похоже, никаких сообщений об ошибках не возникает, поскольку ошибок нет, однако ничего не выводится, и я хотел бы знать, почему...

1 Ответ

0 голосов
/ 07 октября 2019

Проблема: while(true);

Ваша минимальная программа Win32 должна включать «насос сообщений» после создания и отображения окна:

    // Main message loop
    MSG msg = {};
    while (WM_QUIT != msg.message)
    {
        if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE))
        {
            TranslateMessage(&msg);
            DispatchMessage(&msg);
        }
    }

Поскольку вы новичок вDirect3D, я рекомендую вам взглянуть на игровые шаблоны Direct3D на GitHub .

Вам следует взглянуть на DirectX Tool Kit , и это учебники . Многие учебники в Интернете немного устарели и используют устаревший DirectX SDK , хотя все они могут быть полезны в нужном контексте.

См. АнатомияDirect3D 11 Создание устройства и Начало работы с Direct3D 11 .

...