Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[C#] DirectX StretchRectangle Error

Pagina: 1
Acties:

  • Aloys
  • Registratie: Juni 2005
  • Niet online
Hallo allemaal,

Ik ben kort geleden begonnen om eens wat in DirectX te proberen, maar nu zit ik vast. Ik heb de hele ochtend al lopen googlen, maar ik kon de oplossing niet vinden :S. Ik probeer namelijk een achtergrond te tekenen, maar ik stuit op het volgende probeem:


Deze regelt levert problemen:
C#:
1
2
DX_Device.StretchRectangle(BackField, new Rectangle(0, 0, Backinfo.Width, Backinfo.Height), surf,
   new Rectangle(0, 0, ****, ****), TextureFilter.None);

Wanneer ik op op de plaats van de sterretjes getallen invoer heb ik een prima achtergrond, maar krijg ik de volgende error wanneer ik het venster resize: D3DERR_INVALIDCALL en een verwijzing naar de bovenstaande code.

Wanneer ik op de plaats van de sterretjes this.Size.Width oid invul krijg ik de error al direct bij het opstarten van mijn programma.

Wie o Wie kan mij helpen?

mogelijk relevante code:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
            // Laad de background in
            Background = TextureLoader.FromFile(DX_Device, "c:/apple_com.bmp");
            Backinfo = TextureLoader.ImageInformationFromFile("c:/apple_com.bmp");
            BackField = DX_Device.CreateOffscreenPlainSurface(Backinfo.Width, Backinfo.Height, Manager.Adapters.Default.CurrentDisplayMode.Format, Pool.Default);
            SurfaceLoader.FromFile(BackField, "c:/apple_com.bmp", Filter.None, 0);

...

                DX_Device.BeginScene();
                
                // teken een background
                surf = DX_Device.GetBackBuffer(0, 0, BackBufferType.Mono);
                DX_Device.StretchRectangle(BackField, new Rectangle(0, 0, Backinfo.Width, Backinfo.Height), surf,
                    new Rectangle(0, 0, 100, 200), TextureFilter.None);
               
                // Stop met het Renderen
                DX_Device.EndScene();

  • Aloys
  • Registratie: Juni 2005
  • Niet online
Klein kickje, ik heb ook ontdenkt dat wanneer ik grotere waarden op de plek van de sterretjes opgeef dat ik dan dezelfde foutmelding krijg. Maar de waardes van this.Size.Heigt zijn niet te hoog (en er bijvoorbeeld 10pixels aftrekken heeft ook geen zin).

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 16-11 18:33
Kan het zijn dat je moet schalen naar screen coordinaten oid?

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


  • roy-t
  • Registratie: Oktober 2004
  • Laatst online: 17-10 16:43
Aloys schreef op donderdag 08 mei 2008 @ 16:30:
Klein kickje, ik heb ook ontdenkt dat wanneer ik grotere waarden op de plek van de sterretjes opgeef dat ik dan dezelfde foutmelding krijg. Maar de waardes van this.Size.Heigt zijn niet te hoog (en er bijvoorbeeld 10pixels aftrekken heeft ook geen zin).
ik denk dat DX_Device.StretchRectangle elke draw fase gecalled wordt? Het kan zijn dat de aller eerste keer this.size.Height anders is dan de keer daarna en dan zou het zelfde gebeuren als op het moment dat je het scherm resized, (zowiezo moet je daar meestal extra afvanging voor moeten hebben.

Verder hoe groot is te grote waarde? Toevallig 1 getal boven je resolutie, of boven 2560? dat is meestal de maximale grote die je videokaart kan renderen.

Anyway ik zag hier nog wat extra info, hoewel dit StrechRectangle voor compacte platformen is gaat het wel op zo te zien:

http://msdn.microsoft.com...etchrectangle(VS.85).aspx

succes!

~ Mijn prog blog!


  • Aloys
  • Registratie: Juni 2005
  • Niet online
Jullie hebben toch gelijk, ik heb het eventjes gecontroleerd en this.Height neemt de border mee. Maar nu gebruik ik een andere waarde (backbuffer.Description.Height) en toch crash het programma bij een resize |:( . Ik ga maar weer eventjes verder prutsen. :9

Haha het werk nu :*) .

ik heb dit stukje nu in de renderloop gestopt:
C#:
1
2
3
BackField.Dispose();
BackField = DX_Device.CreateOffscreenPlainSurface(Backinfo.Width, Backinfo.Height, Manager.Adapters.Default.CurrentDisplayMode.Format, Pool.Default);
SurfaceLoader.FromFile(BackField, "c:/apple_com.bmp", Filter.None, 0);

Ik denk dat het komt omdat de offscreenSurface nu wel opnieuw wordt opgeroepen en dus de nieuwe Size heeft. Deze had hij daarvoor niet. Thanks allemaal :)

[ Voor 52% gewijzigd door Aloys op 08-05-2008 21:17 ]