begin process at 2012 05 29 03:03:28
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

DirectX

 > 

DirectX pb avec la surface primaire sans le plein écran


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

DirectX pb avec la surface primaire sans le plein écran

lundi 16 février 2004 à 20:52:56 | DirectX pb avec la surface primaire sans le plein écran

Diabolus

Salut à tous !

J'ai un problème concernant le mode plein écran de Direct Draw que je veux supprimer.
J'arrive enfin a créer une simple fenêtre (qui n'est pas en plein écran) mais la création de la surface primaire plante et je ne sais pas du tout pourquoi.

La partie qui plante marchait très bien avec le mode plein écran.


DDraw(HINSTANCE hInstance, int nCmdShow){
//Méthode initialisant DirectDraw

WNDCLASS wc; //fenêtre Windows

//Création et déclaration de la classe de la fenêtre.
wc.style = CS_DBLCLKS | CS_OWNDC | CS_HREDRAW | CS_VREDRAW;
wc.lpfnWndProc = WindowProc;
wc.cbClsExtra = 0;
wc.cbWndExtra = 0;
wc.hInstance = hInstance;
wc.hIcon = LoadIcon( hInstance, IDI_APPLICATION );
wc.hCursor = LoadCursor( NULL, IDC_ARROW );
wc.hbrBackground = NULL;
wc.lpszMenuName = NAME;
wc.lpszClassName = NAME;
RegisterClass(&wc);


hwnd = CreateWindowEx(WS_EX_TOPMOST, NAME, TITLE, WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX | WS_VISIBLE,CW_USEDEFAULT, CW_USEDEFAULT,largeurFenetre, hauteurFenetre, 0,0,hInstance, 0 );

ShowWindow( hwnd, nCmdShow );
UpdateWindow( hwnd );
hwndfm=hwnd;
ShowCursor( true );

//Création de l'objet DirectDraw;
DirectDrawCreateEx(NULL,(void**)&lpDD,IID_IDirectDraw7,NULL);

//On demande le mode exclusif (priorité au niveau de Windows)
lpDD->SetCooperativeLevel( hwnd, DDSCL_EXCLUSIVE | DDSCL_NORMAL |DDSCL_ALLOWREBOOT );




//Création de la surface primaire associée à un backbuffer
memset (&ddsd, 0, sizeof (DDSURFACEDESC2));
//initialisation de la structure
ddsd.dwSize = sizeof( DDSURFACEDESC2 );
ddsd.dwFlags = DDSD_CAPS | DDSD_BACKBUFFERCOUNT;
//on associe un backbuffer à la surface
//les flags suivants décrivent la surface comme étant primaire, associée à un backbuffer, et chargée en mémoire vidéo
ddsd.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_FLIP | DDSCAPS_COMPLEX | DDSCAPS_VIDEOMEMORY ;
ddsd.dwBackBufferCount = 1;
//nombre de back buffers associés à la surface
lpDD->CreateSurface(&ddsd,&lpDDSPrimary,NULL);

//On crée un pointeur vers le back buffer pour permettre le flipping des deux surfaces
ZeroMemory(&ddscaps, sizeof(ddscaps)); //initialisation de la structure
ddscaps.dwCaps = DDSCAPS_BACKBUFFER;


// ça plante à la ligne suivante !!!

lpDDSPrimary->GetAttachedSurface(&ddscaps,&lpDDSBack);


//Sélection du noir comme clé de couleur transparente
ddsd.ddckCKSrcBlt.dwColorSpaceLowValue = 0;
ddsd.ddckCKSrcBlt.dwColorSpaceHighValue = 0;

//Description des surfaces offscreen de l'exemple
//Il n'est pas utile de répéter ces opération pour chaque surface car
//la description ddsd ne s'efface pas entre deux création de surface
memset (&ddsd, 0, sizeof (DDSURFACEDESC2));
//initialisation de la structure
ddsd.dwSize = sizeof( DDSURFACEDESC2 );
//description de la surface, notamment pour la clé de couleur associée (DDSD_CKSRCBLT)
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_CKSRCBLT;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;

//Création des différentes surfaces
//....
}


Merci



Mon CV, tous mes projets...
mardi 17 février 2004 à 00:05:50 | Re : DirectX pb avec la surface primaire sans le plein écran

ymca2003

tu ne peut pas spcéfifier fome normal et exclusif en même temps (c'est soit l'un soit l'autre et en mode non plein écran c'est DDSCL_NORMAL)

extrait de la doc :

DDSCL_FULLSCREEN
The exclusive-mode owner is responsible for the entire primary surface. The GDI can be ignored. This flag must be used with the DDSCL_EXCLUSIVE flag.

DDSCL_EXCLUSIVE
Requests the exclusive level. This flag must be used with the DDSCL_FULLSCREEN flag.

DDSCL_NORMAL :
The application functions as a regular Microsoft® Windows® application. This flag cannot be used with the DDSCL_ALLOWMODEX, DDSCL_EXCLUSIVE, or DDSCL_FULLSCREEN flags.
mardi 17 février 2004 à 19:47:29 | Re : DirectX pb avec la surface primaire sans le plein écran

Diabolus

Merci pour ton explication.

J'ai enlevé les valeurs qui ne pouvaient pas être compatibles ensembles et maitenant j'ai donc :

lpDD->SetCooperativeLevel( hwnd, DDSCL_NORMAL );

mais le programme plante toujours au même endroit :

lpDDSPrimary->GetAttachedSurface(&ddscaps,&lpDDSBack);


Je pense que cette ligne va créer mon backbuffer sur lequel je vais appliquer mes sprites, donc c'est une étape obligatoire.
Je ne vois pas pourquoi ça marche en plein écran et pas en fenêtre ?

Merci
jeudi 19 février 2004 à 10:38:01 | Re : DirectX pb avec la surface primaire sans le plein écran

ymca2003

les chaînes de backbuffer ne sont possible qu'en mode plein écran. en mode fenêtré, tu doit gérer toi-même les buffers offscreen. (en faisant une copie par bitblt à l'écran)

va voir ma source d'écran de veille matrix il y a un exemple qui gère les 2 (plein écran et fenétré)


Cette discussion est classée dans : ws, wc, surface, ddscaps, ddsd


Répondre à ce message

Sujets en rapport avec ce message

Où passent mes tabulations... [ par Nebula ] Bonjour, En utilisant des richedits dans une fenêtre créée avec CreateWindowEx et dont les messages sont traités avec IsDialogMessage, je me suis ape DirectDrawn et souris [ par SnOOpss ] Bonjour je suis en train de programmer un jeu en directDrawn en mode fenetré qui se joue a la souris et j'ai eu quelques problemes. En fait a cause du Tabulation dans les champs d'une fenetre [ par billy5938 ] Bonjour,Je veux pouvoir parcourir les champs d'édition (ou même des checkBox) d'une fenetre. En utilisant la methode IsDialogMessage dans la boucle de Problème de barre de status dans une application MDI [ par julien_boss ] Bonjour à tous :en réalité, je ne sais pas si mon problème est du à une barre de status, mais étant donné qu'il est apparu après la création de celle- Problème avec fichier manifest [ par Sceyllia ] Bonjour à tous, J'aurais besoin de l'avis de connaisseurs en c/c++ pour m'éclairer sur le soucis que j'ai depuis quelques semaines concernant ce morc pb de CreateWindowEx [ par graall ] Bonjour,j'ai un pb dans une API ://---------------------------------------// dans le fichier mainlib.hpp ://--------------------------------------- EditBox [ par NeoUmbrella ] Salut et Joyeux noel a tous =)Voila, j'ai un pb avec une editbox.Lorsque j'essais de la crééer 4 erruere s'affiche :error C2143: syntax error : missin rafraichissement fenetre, ou creation de fenetre dans fenetre [ par kuruma ] Bonjour qq'un pourrait il m'indiquer comment créer une fenetre dans une autre fenetre, ou alors comment allouer une zone de ma fenetre principale, en Quelques problèmes avec MDI quand plusieurs fenêtres filles [ par ArthurAuguste ] Bonjour, Tout d'abord, je n'ai aucun problème lorsque je n'ai qu'une fenêtre fille, mais dès que j'en ai une deuxième je commence à avoir des mélanges Ascenseur vertical [ par ArthurAuguste ] Bonjour, Me voici encore avec mes questions tordues: Je voudrais que l'ascenseur vertical apparaisse lorsque ma fenêtre est trop petite pour afficher


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 3,245 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales