Gå til innhold

Tegne på DX-Surfaces, problemer!


Anbefalte innlegg

Skrevet (endret)

Heisann

 

Edit: LØST. Se mitt andre innlegg.

 

Saken er som følger: Jeg loader bilder fra PropertyBag. Det funker veldig bra, og jeg kan tegne den med denne koden:

TransparentBlt frmRender.hdc, POINTAPI.x, POINTAPI.y, _
                      Cursor.Width, Cursor.Height, _
                      Cursor.CursorHdc, 0, 0, Cursor.Width, Cursor.Height, vbCyan

Tingen er jo at jeg vil bruke DirectX til dette. Derfor bruker jeg GetDC og tegner på en surface:

    Cursor.ddsdSurface.lFlags = DDSD_CAPS Or DDSD_WIDTH Or DDSD_HEIGHT
   Cursor.ddsdSurface.ddsCaps.lCaps = DDSCAPS_OFFSCREENPLAIN
   Cursor.ddsdSurface.lWidth = Cursor.Width
   Cursor.ddsdSurface.lHeight = Cursor.Height
   Set Cursor.Surface = dx_draw.CreateSurface(Cursor.ddsdSurface)
   TransparentBlt Cursor.Surface.GetDC, 0, 0, Cursor.Width, Cursor.Height, Cursor.CursorHdc, 0, 0, Cursor.Width, Cursor.Height, vbCyan

Når jeg da prøver å tegne på backsurfacen med denne koden, kommer det ingen ting opp:

BackBuffer.Blt DestRect2, Cursor.Surface, DestRect, DDBLT_KEYSRC

Noen som klarer å se hvor det skjærer seg og hvordan jeg retter det?

 

Takker for hjelp! :)

 

Jonas

 

Edit: Hvis jeg prøver å TransparentBlt'e rett på BackBuffer.GetDC, så får jeg ikke flippet bufferet. Mulig det har noe med saken? Må noe "klargjøres" får jeg kan tegne på surfacen, akkurat som med .Cls?

Endret av Jonas
Videoannonse
Annonse
Skrevet

Problemet ligger i at GetDC()-funksjonen låser tavlen slik at den verken kan leses fra eller skrives til. Det du således må gjøre, er å låse den opp igjen med ReleaseDC():

 

tempDC = Cursor.Surface.GetDC
TransparentBlt tempDC, 0, 0, Cursor.Width, Cursor.Height, Cursor.CursorHdc, 0, 0, Cursor.Width, Cursor.Height, vbCyan
Cursor.Surface.ReleaseDC tempDC

Skrevet (endret)

Takk aadnk!

 

Nå har jeg enda et problem. (Som vanlig :p )

 

Edit: LØST.

 

Jeg tegner masse forskjellige surfaces på en Backbuffer-surface. Problemet kommer når surfacens-posisjon gjør at bare halve skal tegnes. F eks når man drar musa helt nede på skjermen.

 

Når noe skal tegnes litt utenfor, tegnes det ikke i det hele tatt!

 

Det er jo gigantkrise. Hvordan løser jeg det?

Endret av Jonas
Skrevet

Clipper? Hva er det? :p

 

Nei, jeg endte opp med å endre på RECTen, slik at jeg bare tegnes det som trengte å tegnes.

 

With DestRect

.Top = Ikke over skjermen

.Bottom = Ikke under skjermen

osv, osv..

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...