2016-01-06 3 views
0

Dans le code source que j'utilise mon programme ouvre une fenêtre qui affiche un écran blanc et devient immédiatement ne répond pas. S'il vous plaît aidez-moi à trouver le problème avec mon code.La fenêtre Direct3D s'ouvre à l'écran blanc

Windows.cpp

#include "DirectX.h" 

using namespace std; 
bool gameover = false; 

//Windows event handler 
LRESULT WINAPI WinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { 
    switch (msg) { 
    case WM_DESTROY: 
     gameover = true; 
     PostQuitMessage(0); 
     return 0; 
    } 

    return DefWindowProc(hwnd, msg, wParam, lParam); 
} 

//Windows entry point 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, 
    LPSTR lpCmdLine, int nCmdShow) { 

    //initializes window settings 
    WNDCLASSEX wc; 
    wc.cbSize = sizeof(WNDCLASSEX); 
    wc.style = CS_HREDRAW | CS_VREDRAW; 
    wc.lpfnWndProc = (WNDPROC)WinProc; 
    wc.cbClsExtra = 0; 
    wc.cbWndExtra = 0; 
    wc.hInstance = hInstance; 
    wc.hIcon = NULL; 
    wc.hCursor = LoadCursor(NULL, IDC_ARROW); 
    wc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH); 
    wc.lpszMenuName = NULL; 
    wc.lpszClassName = L"MainWindowClass"; 
    wc.hIconSm = NULL; 
    RegisterClassEx(&wc); 

    //create a new window 
    HWND window = CreateWindow(L"MainWindowClass", APPTITLE, 
     WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 
     SCREENW, SCREENH, NULL, NULL, hInstance, NULL); 

    if (window == 0) return 0; 

    //display the window 
    ShowWindow(window, nCmdShow); 
    UpdateWindow(window); 

    //initialize the game 
    if (!Game_Init(window)) return 0; 

    //main message loop 
    MSG message; 
    while (!gameover) { 
     if (PeekMessage(&message, NULL, 0, 0, PM_REMOVE)) { 
      TranslateMessage(&message); 
      DispatchMessage(&message); 
     } 

     //process game loop 
     Game_Run(window); 
    } 

    //shutdown game 
    Game_End(); 
    return message.wParam; 
} 

DirectX.cpp Je suppose que c'est où le problème se passe

bool Direct3D_Init(HWND window, int width, int height, bool fullscreen) 
{ 
    //initialize Direct3D 
    d3d = Direct3DCreate9(D3D_SDK_VERSION); 
    if (!d3d) return false; 

    //set Direct3D presentation parameters 
    D3DPRESENT_PARAMETERS d3dpp; 
    ZeroMemory(&d3dpp, sizeof(d3dpp)); 
    d3dpp.Windowed = !fullscreen; 
    d3dpp.SwapEffect = D3DSWAPEFFECT_COPY; 
    d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; 
    d3dpp.BackBufferCount = 1; 
    d3dpp.BackBufferWidth = width; 
    d3dpp.BackBufferHeight = height; 
    d3dpp.hDeviceWindow = window; 

    //create Direct3D device 
    d3d->CreateDevice(D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, window, 
     D3DCREATE_SOFTWARE_VERTEXPROCESSING, &d3dpp, &d3ddev); 
    if (!d3ddev) return false; 

    //get a pointer to the back buffer surface 
    d3ddev->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &backbuffer); 

    //create sprite object 
    D3DXCreateSprite(d3ddev, &spriteobj); 

    return true; 
} 
+0

Où dessinez-vous le sprite sur la surface? Votre pompe de message n'inclut pas de code pour permettre de vérifier une frappe ou un clic de souris pour quitter, il est donc logique que toutes les entrées soient ignorées. –

+0

Comment 'Direct3D_Init' est-il appelé? Vous n'incluez pas tout le code pertinent. –

+0

Direct3D_Init est appelé depuis Game_Init(), ce qui est le cas de Game_Init(). –

Répondre

-2

Mon projet de jeu ont tout le même problème. Le jeu a été construit avec succès mais quand je le démarre. Il montre l'écran blanc. Je viens de corriger cette erreur. Si vous avez un GPU (NVidia ou ...) vous devriez le désactiver. Comme je l'ai fait dans cette image. `CreateDevice()`, `GetBackBuffer()`, et `D3DXCreateSprite()` renvoient tous un HRESULT que vous jetez .. êtes-vous sûr qu'ils ne vous donnent pas plus d'informations? enter image description here

+0

La question à laquelle vous répondez est dans le style de "J'ai un problème, s'il vous plaît arrêtez-le pour moi." Je ne pense pas qu'il mérite une réponse, surtout celle qui est hautement subjective. – Kaspar