IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Overlay et DirecDraw


Sujet :

Développement 2D, 3D et Jeux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 107
    Par défaut Overlay et DirecDraw
    Bonjour,
    je me penche actuellement sur la création d'overlay avec directX.
    J'ai trouvé sur le net quelque source., qui m'ont servi a ecrire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    LPDIRECTDRAW7 lpDD=NULL;
      LPDIRECTDRAWSURFACE7 lpDDSPrimary=NULL;
      LPDIRECTDRAWSURFACE7 lpDDSSecondary=NULL;
      LPDIRECTDRAWSURFACE7 lpDDSBack;
      LPDIRECTDRAWCLIPPER lpClip=NULL;
      DDSURFACEDESC2 ddsd;
      DDSURFACEDESC2 ddsdOverlay;
      DirectDrawCreateEx(NULL,(LPVOID*)&lpDD,IID_IDirectDraw7,NULL);
      lpDD->SetCooperativeLevel(Form1->Handle,DDSCL_NORMAL);
      lpDD->CreateClipper(NULL,&lpClip,NULL);
      lpClip->SetHWnd(0,Form1->Handle);
    
    
      ZeroMemory(&ddsd,sizeof(ddsd));
      ddsd.dwSize=sizeof(ddsd);
      ddsd.dwFlags=DDSD_CAPS;
      ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE;
    lpDD->CreateSurface(&ddsd,&lpDDSPrimary,NULL);
      lpDDSPrimary->SetClipper(lpClip);
    
      ddsdOverlay.ddsCaps.dwCaps = DDSCAPS_OVERLAY | DDSCAPS_FLIP | DDSCAPS_COMPLEX ;
      ddsdOverlay.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_BACKBUFFERCOUNT | DDSD_PIXELFORMAT;
      ddsdOverlay.dwBackBufferCount=1;
      ddsdOverlay.dwHeight=240;
      ddsdOverlay.dwWidth = 320;
    
      DDPIXELFORMAT dd_format;
      ZeroMemory(&dd_format, sizeof(dd_format));
      dd_format.dwSize = sizeof(dd_format);
      dd_format.dwFlags = DDPF_RGB;
      dd_format.dwRGBBitCount = 32;
      dd_format.dwRBitMask = 0x00FF0000;
      dd_format.dwGBitMask = 0x0000FF00;
      dd_format.dwBBitMask = 0x000000FF;
    
      ddsdOverlay.ddpfPixelFormat=dd_format;
    lpDD->CreateSurface(&ddsd,&lpDDSSecondary,NULL);
    
      DDSCAPS2 ddscaps;
      ZeroMemory(&ddscaps, sizeof(ddscaps));
      ddscaps.dwCaps = DDSCAPS_BACKBUFFER;
    
      lpDDSSecondary->GetAttachedSurface(&ddscaps,&lpDDSBack);
    
      DDOVERLAYFX m_overlay_fx;
      ZeroMemory(&m_overlay_fx, sizeof(m_overlay_fx));
      m_overlay_fx.dwSize = sizeof(m_overlay_fx);
      m_overlay_fx.dckDestColorkey.dwColorSpaceLowValue=0x00FF0000;
      m_overlay_fx.dckDestColorkey.dwColorSpaceHighValue=0x00FF0000;
    
      RECT dest_rect;
      dest_rect.left   = 0;
      dest_rect.top    = 0;
      dest_rect.right  = 200;
      dest_rect.bottom = 300;
    
       HDC dc;
      lpDDSSecondary->GetDC(&dc);
      AnsiString str="lklklkkkl";
      SetTextColor(dc, RGB(255, 255, 255));
      SetBkColor(dc, 0);
      TextOut(dc, 5, 5, str.c_str(), str.Length());
      lpDDSSecondary->ReleaseDC(dc);
    
      lpDDSSecondary->Flip(0, DDFLIP_WAIT);
    
      int m_overlay_flags = DDOVER_SHOW;;
      lpDDSSecondary->UpdateOverlay(0, lpDDSPrimary, &dest_rect, m_overlay_flags, &m_overlay_fx);
    Le programme compile parfaitement, quand il s'execute, il y a un plantage au niveau des lignes en rouges.
    Le probleme vient surement de lpDDSSecondary, mais je n'arrive pas a le resoudre.
    Merci d'avance pour votre aide
    ++
    Michael

  2. #2
    Membre éclairé
    Avatar de Mindiell
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    735
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 735
    Par défaut
    As-tu vérifié que ta variable est bien initialisée ?
    Au niveau de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lpDD->CreateSurface(&ddsd,&lpDDSSecondary,NULL);
    Tu devrais vérifier ce que contient lpDDSSecondary, si c'est NULL, il y a un problème

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 107
    Par défaut
    Merci Mindiell pour ta réponse.
    Effectivement tu a vu juste !
    Apres l'appel a la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    lpDD->CreateSurface(&ddsd,&lpDDSSecondary,NULL);
    ma variable lpDDSSecondary est toujours initialisé à NULL.
    J'en ai profité pour verifier qu'il n'y avait pas le meme souci avec lpDDSPrimary : lpDDSPrimary marche parfaitement, alors pourquoi pas lpDDSSecondary?

    Surement a cause des parametres de ddsd ?
    Mais je ne voit pas comment corriger ce probleme.
    Merci encore pour ton aide
    ++
    Michael

Discussions similaires

  1. Pb. d'exécution programme overlay DX sous Vista
    Par mchk0123 dans le forum DirectX
    Réponses: 1
    Dernier message: 10/09/2007, 18h52
  2. [Overlay] Livre de Mr Brouard et Mr Soutou
    Par smutmutant2003 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 28/06/2007, 22h25
  3. [XUL] Rechargement d'un overlay
    Par Christophe Charron dans le forum Autres langages pour le Web
    Réponses: 8
    Dernier message: 12/09/2006, 08h28
  4. Ecrire du texte sur une Overlay Surface
    Par deakuk dans le forum DirectX
    Réponses: 1
    Dernier message: 17/02/2006, 13h52
  5. Overlay avec Direct3D9
    Par Marekh dans le forum DirectX
    Réponses: 10
    Dernier message: 23/06/2005, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo