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

Windows Discussion :

pitch d'une surface directdraw en 16bits


Sujet :

Windows

  1. #1
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 340
    Points : 177
    Points
    177
    Par défaut pitch d'une surface directdraw en 16bits
    J'ai initialise directdraw avec cette fonction:

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    static int
    _directdraw_init (HWND                 window,
    		  LPDIRECTDRAW        *object,
    		  LPDIRECTDRAWSURFACE *surface_primary,
    		  LPDIRECTDRAWSURFACE *surface_back,
    		  int                 *depth,
    		  int width,
    		  int height)
    {
       DDSURFACEDESC2      surface_desc;
       DDPIXELFORMAT       pixel_format;
       LPDIRECTDRAWCLIPPER clipper;
       LPDIRECTDRAW        o;
       DDSURFACEDESC2     *sd;
       HRESULT             res;
    
       res = DirectDrawCreateEx (NULL, (void **)&o, &IID_IDirectDraw7, NULL);
       if (FAILED(res))
         return 0;
    
       res = IDirectDraw7_SetCooperativeLevel (o, window, DDSCL_NORMAL);
       if (FAILED(res))
         {
    	IDirectDraw7_Release (o);
    	return 0;
         }
    
       res = IDirectDraw7_CreateClipper (o, 0, &clipper, NULL);
       if (FAILED(res))
         {
    	IDirectDraw7_Release (o);
    	return 0;
         }
    
       res = IDirectDrawClipper_SetHWnd (clipper, 0, window);
       if (FAILED(res))
         {
    	IDirectDrawClipper_Release (clipper);
    	IDirectDraw7_Release (o);
    	return 0;
         }
    
       memset(&surface_desc, 0, sizeof(surface_desc));
       surface_desc.dwSize = sizeof(surface_desc);
       surface_desc.dwFlags = DDSD_CAPS;
       surface_desc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
    
       sd=&surface_desc;
       res = IDirectDraw7_CreateSurface (o, &surface_desc,
    				     surface_primary, NULL);
       if (FAILED(res))
         {
    	IDirectDrawClipper_Release (clipper);
    	IDirectDraw7_Release (o);
    	return 0;
         }
    
       res = IDirectDrawSurface7_SetClipper (*surface_primary, clipper);
       if (FAILED(res))
         {
    	IDirectDrawClipper_Release (clipper);
    	IDirectDrawSurface7_Release (*surface_primary);
    	IDirectDraw7_Release (o);
    	return 0;
         }
    
       memset (&surface_desc, 0, sizeof(surface_desc));
       surface_desc.dwSize = sizeof(surface_desc);
       surface_desc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
       surface_desc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
       surface_desc.dwWidth = width;
       surface_desc.dwHeight = height;
    
       sd=&surface_desc;
       res = IDirectDraw7_CreateSurface (o, (DDSURFACEDESC *)sd,
    				     surface_back, NULL);
       if (FAILED(res))
         {
    	IDirectDrawClipper_Release (clipper);
    	IDirectDrawSurface7_Release (*surface_primary);
    	IDirectDraw7_Release (o);
    	return 0;
         }
    
       ZeroMemory(&pixel_format, sizeof(pixel_format));
       pixel_format.dwSize = sizeof(pixel_format);
       IDirectDrawSurface7_GetPixelFormat(*surface_primary, &pixel_format);
    
       *object = o;
       *depth = pixel_format.dwRGBBitCount;
    
       return 1;
    }
    j'ai mis mon affichage en 16 bits, et cree une surface de taille 400x400 (width et height dans la fonction ci-dessus).

    A priori, le pitch devrait etre de width * depth / 8, ou depth est le nombre de bits de l'affichage. Donc le pitch devrait etre de 800.

    Mais quand j'affiche la valeur de surface_desc->lPitch, ou surface_desc est la description de ma surface, j'obtiens 832.

    quelqu'un voit-il pourquoi ?

    merci
    L'Opus attire les Prélats

  2. #2
    Membre éprouvé
    Avatar de NiamorH
    Inscrit en
    Juin 2002
    Messages
    1 309
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 1 309
    Points : 1 051
    Points
    1 051
    Par défaut
    Tu aurais peut-être plus de succès dans la section du forum dédié à directx ?

  3. #3
    Membre habitué
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 340
    Points : 177
    Points
    177
    Par défaut
    je n'avais pas vu ce forum. Est-il possible qu'un moderateur deplace ce thread et le thread http://www.developpez.net/forums/sho...d.php?t=375536 dans le forum directX ? A priori, je n'ai pas la possibilite de le faire moi-meme.

    merci
    L'Opus attire les Prélats

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 360
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 360
    Points : 20 377
    Points
    20 377
    Par défaut
    Regarder cette article
    http://msdn.microsoft.com/archive/de...dover_4oxj.asp
    Mais la valeur 832 me semble normale le pitch devrait être un multiple de DWORD

Discussions similaires

  1. Réponses: 2
    Dernier message: 06/05/2007, 12h52
  2. Réponses: 8
    Dernier message: 10/05/2006, 20h56
  3. Pb lors de l'accès à une surface DirectDraw
    Par Mark53 dans le forum DirectX
    Réponses: 8
    Dernier message: 30/11/2004, 00h03
  4. Réponses: 1
    Dernier message: 12/05/2004, 19h02
  5. Effet Fade In / Fade Out sur une surface DirectDraw
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 08/09/2002, 17h37

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