[Direct Draw] Pixel Format

Pagina: 1
Acties:

  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
Ik werk met direct draw, en ik wil een surface maken, met als Pixelformat YUV8 Grayscale.. Alleen als ik die gebruik, dan krijg ik een onbekende error bij het creëren van mijn Surface. Dit is de code:

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
    // The pixel format that we want the surface to be in
        ZeroMemory(&ddpf, sizeof(ddpf));
    ddpf.dwSize       = sizeof(DDPIXELFORMAT);
    ddpf.dwFlags      = DDPF_YUV;
    ddpf.dwYUVBitCount= 8;
        
    
    // Create the primary surface with 1 back buffer
        ZeroMemory(&ddsd, sizeof(ddsd))             ;
        ddsd.dwSize = sizeof(ddsd)              ;
        ddsd.dwFlags = DDSD_CAPS|DDSD_PIXELFORMAT       ;               ;
        ddsd.dwHeight = 578                 ;
    ddsd.dwWidth = 768                  ;
        ddsd.ddsCaps.dwCaps =   DDSCAPS_PRIMARYSURFACE      ;
        ddsd.ddpfPixelFormat = ddpf             ;  // Use 8 bit YUV pixel format
                
        
        hRet = lpDD->lpVtbl->CreateSurface (lpDD, &ddsd, &lpDDSPrimary, NULL); 
        if (hRet != DD_OK)
    {
        return(FALSE)                   ; 
    }


Bij de createsurface springt hij eruit met een onbekende error( nr = 87)

Heeft iemand dit al eerder meegemaakt, of is er iets dat ik fout doe?

Als blikken konden doden, waarom doen ze er dan erwten in?


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
op msdn.microsoft.com:
error 87 = The parameter is incorrect. ERROR_INVALID_PARAMETER
wellicht dat je hier iet mee verder komt, anders kom je maar even de r&d binnenlopen >:)

  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
die error staat niet in de ddraw.h... Maar ik zou ook niet weten welke parameter dan fout zou zijn... Ze kloppen allemaal, en ze zijn met de goede waarden gevuld...

trouwens, R&D? Daar zit ik al... Maar het probleem is niet dat de parameter fout is, maar eerder dat hij pas eruit klapt zodra ik de pixelformat gebruik... Verder doet ie het.

[ Voor 31% gewijzigd door Garoth op 18-12-2002 10:00 ]

Als blikken konden doden, waarom doen ze er dan erwten in?


Verwijderd

R&D is 1 deur verder ;) (die deur met het appeltje)

[ Voor 65% gewijzigd door Verwijderd op 18-12-2002 13:24 ]


  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
R&D is ook deze kamer, maar ik probeer hier een serieus antwoord op mijn vraag te krijgen...
Ik heb niks aan de msdn error 87, want het is een Direct Draw error, en niet een windows error.

Als blikken konden doden, waarom doen ze er dan erwten in?


  • Krooswijk.com
  • Registratie: Mei 2000
  • Laatst online: 17-08-2024
ok, wat ie probeert te zeggen, dat ie hier zelf ook al hiermee bezig is geweest, danwel in opengl, en je waarschijnlijk kan helpen, maar goed... geen tijd

Verwijderd

Welke versie van DirectDraw gebruik je?

[ Voor 83% gewijzigd door Verwijderd op 18-12-2002 20:31 ]


  • matthijsln
  • Registratie: Augustus 2002
  • Laatst online: 30-07 16:33
Je kan als je de primary surface opvraagt niet zomaar een pixel format naar keuze zetten, die is al gegeven door wat de gebruiker heeft ingesteld voor zijn desktop (en dat is zeker geen YUV, maar RGB dus).

Wel kan je een andere surface maken met een YUV8 pixelformat en die met Blit() op de primary surface blitten.

BTW, als je interlaced TV beelden wilt blitten (ik dacht dat ik zoiets las in de andere thread) dan kan je 'bob' of 'weave' gebruiken met een overlay, zie MSDN.

[ Voor 4% gewijzigd door matthijsln op 18-12-2002 21:34 . Reden: tikfout ]


  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
Thanx allemaal. Ik gebruik direct X 6.1. Ik moet dus mijn offscreen surface naar YUV8 zetten en die inhoud naar mijn primary surface blitten? Ik zal het eens proberen, thanx!
En @Matthijs : Een de-interlacer heb ik niet meer nodig, dat regelt de framegrabber gelukkig al voor mij af...
:D

Als blikken konden doden, waarom doen ze er dan erwten in?


  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
Shit, hij wil niet, op die manier... Ik doe dit bij de offscreensurface:

C:
1
2
3
4
5
6
7
8
9
// Get the backbuffer.
    ddsd.dwFlags        = DDSD_WIDTH | DDSD_HEIGHT | DDSD_CAPS | DDSD_PIXELFORMAT;
    ddsd.dwWidth        = 768;
    ddsd.dwHeight       = 578;
    ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN;
    ddsd.ddpfPixelFormat.dwSize = sizeof(DDPIXELFORMAT) ;  // Use 8 bit YUV pixel format
    ddsd.ddpfPixelFormat.dwFlags = DDPF_FOURCC      ;
    ddsd.ddpfPixelFormat.dwFourCC = mmioFOURCC('Y', 'U', 'V', '8');
        ddsd.ddpfPixelFormat.dwYUVBitCount= 8;


En dan bij de createsurface voor de offscreenplain, geeft hij error nummer 145 -> DDERR_INVALIDPIXELFORMAT

Is er soms iets aan die pixelformat wat niet klopt? Want volgens mij staat alles goed... :'(

Als blikken konden doden, waarom doen ze er dan erwten in?


  • gvdh81
  • Registratie: Juli 2001
  • Laatst online: 13-08 18:15

gvdh81

To got or not to got..

Ik weet niet hoe het met directdraw zit, maar in direct3d moet je je surfaces maken met een power van 2, dwz, 16x16, 32x32, 64x64, 128x128, 256x256, 512x512, 1024x1024 etc etc

  • Garoth
  • Registratie: November 2002
  • Laatst online: 04-10-2024
Ik heb het geprobeerd, maar Direct Draw werkt met alle formaten voor een Surface... Ik heb eens wat in-depth debugging gedaan, en het blijkt dat ddsd.ddpfPixelFormat niet eens gevuld wordt om een of andere reden. En dan lijkt het mij logisch dat hij het niet doet. Alleen, waarom wordt hij niet gevuld? Ik gebruik dezelfde ddsd ook bij het creëeren van mijn Primary Surface. Is dit het misschien? :?

Als blikken konden doden, waarom doen ze er dan erwten in?

Pagina: 1