2017-03-22 3 views
0

J'essaie de faire un jeu. J'utilise directx 9 pour le faire et j'ai quelques problèmes en essayant de passer en mode plein écran. J'ai fait une fonction qui a initialisé tous les paramètres présents. Tout va bien sauf quand je fais windowed = false (ie je mets fullscreen à true).Paramètres DirectX Present Windowed = false ne fonctionne pas

ici est ma variable paramètres actuels: D3DPRESENT_PARAMETERS d3dpp;

Voici le code pour la variable d3dpp. La plupart sinon la totalité de ce code provient d'un livre intitulé Programming 2d Games de Charles Kelley.

void Graphics::initD3Dpp() 
{ 
try { 
    ZeroMemory(&d3dpp, sizeof(d3dpp));    

    d3dpp.BackBufferWidth = width; 
    d3dpp.BackBufferHeight = height; 
    if (fullscreen)         
     d3dpp.BackBufferFormat = D3DFMT_X8R8G8B8; 
    else 
     d3dpp.BackBufferFormat = D3DFMT_UNKNOWN; 
    d3dpp.BackBufferCount = 1; 
    d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD; 
    d3dpp.hDeviceWindow = mainhwnd; 
    d3dpp.Windowed = (!fullscreen); //THIS LINE RIGHT HERE IS THE ISSUE 
    d3dpp.PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; 
} 
catch (...) 
{ 
    throw(GameError(gameErrorNS::FATAL_ERROR, 
     "Error initializing D3D presentation parameters")); 

} 

} 

Je ne vois pas pourquoi .windowed ne fonctionne pas pour moi. S'il vous plaît demandez-moi si vous avez besoin de plus de contexte.

+0

Comment cela ne fonctionne-t-il pas exactement? Qu'est-ce que vous voyez et ce que vous attendiez de voir? –

+0

Quelle largeur et hauteur avez-vous choisi? Rappelez-vous qu'il doit s'agir d'un mode d'affichage pris en charge. –

+0

cela ne fonctionne pas parce que quand je crée mon périphérique directx, c'est un pointeur nul et mon programme se bloque. lorsque j'utilise le mode plein écran, mais lorsqu'il n'y a pas de plein écran, le périphérique directx est créé. – lvl99knight

Répondre

2

À partir des commentaires, vous suggérez que vous utilisez 600x480. Il est très douteux que ce soit une résolution prise en charge sur votre système, plus probablement, vous vouliez utiliser 6 0x480. Pour autant que je sache, cette résolution est supportée par pratiquement tous les pilotes D3D9.

Cependant, hardcoding la résolution n'est pas une solution robuste, il est beaucoup plus pratique de suivre les conseils indiqué dans le documentation pour D3DPRESENT_PARAMETERS et utiliser la fonction EnumAdapterModes, pour obtenir une liste des résolutions valides et formats d'affichage de votre appareil.

+0

Merci. J'ai changé mon code. Mais ça ne marche toujours pas et ça va prendre du temps à réparer. J'ai juste abandonné mon code et j'utilise maintenant le code que mon livre m'a fourni. – lvl99knight