Verschiedene Grafikbuffer beim Sprite und Canvas.

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
funker
Beiträge: 33
Registriert: 02.06.2014 12:32

Verschiedene Grafikbuffer beim Sprite und Canvas.

Beitrag von funker »

Hallo, guten Tag.
Was ist bitte der Unterschied beim Buffer vom Sprite und vom Canvas?

Danke.
Gruss

Hier beim Sprite wird der rote Pixel von links Oben nach rechts Oben gesetzt
und geht dann in die nächtse Zeile und der Zähler muß um 4 erhöht werden :

Code: Alles auswählen

Global zaehler.l

InitSprite()

OpenWindow(0,0,0,800,600,"sprite",#PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(0),10,10,200,200,0,0,0)

CreateSprite(1,256,256,#PB_Sprite_PixelCollision)

StartDrawing(SpriteOutput(1))
  Box(0,0,256,256,RGB(255,255,255))
StopDrawing()

Repeat
  
  Event.l = WindowEvent()
  
  StartDrawing(SpriteOutput(1))
    Buffer      = DrawingBuffer()             
    Pitch       = DrawingBufferPitch()        
    PixelFormat = DrawingBufferPixelFormat()  
  StopDrawing()

  If GetAsyncKeyState_(#VK_Q)
    PokeL(buffer+zaehler,$ff0000)
    zaehler+4
  EndIf
  
  DisplaySprite(1,0,0)
  FlipBuffers()
  
Until Event = #PB_Event_CloseWindow

End
Hier beim Cancas wird der rote Pixel von links unten nach rechts unten gesetzt
und geht dann in die nächtse Zeile nach Oben und der Zähler muß um 3 erhöht werden.
Beim Canvas habe ich keinen guten Ausgangspunkt wie beim Sprite :

Code: Alles auswählen

Global zaehler.l

Enumeration
  #Window_0
EndEnumeration

OpenWindow(#window_0, 10,10, 520, 300, "Canvas")
CanvasGadget(1, 10, 10, 200, 200)

Repeat
  Event = WaitWindowEvent()  
  
  StartDrawing(CanvasOutput(1))
  Buffer      = DrawingBuffer()             
  Pitch       = DrawingBufferPitch()        
  PixelFormat = DrawingBufferPixelFormat()  
  StopDrawing()
  
  If GetAsyncKeyState_(#VK_Q)   
    PokeL(buffer+zaehler,$ff0000)
    zaehler+3
    Delay(10) 
  EndIf 
  
  Select Event
    Case #PB_Event_Gadget
      EventGadget = EventGadget() 
      EventType = EventType
    Case #PB_Event_CloseWindow
      EventWindow = EventWindow()
      If EventWindow = #Window_0
        CloseWindow(#Window_0)
        Break
      EndIf
  EndSelect
   
ForEver
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Verschiedene Grafikbuffer beim Sprite und Canvas.

Beitrag von STARGÅTE »

Mal abgesehen davon das der Code hier und da Fehler hat (If GetAsyncKeyState_(#VK_Q) ist eine völlig falsche abfrage), so werden dir die Unterschiede doch in DrawingBufferPixelFormat() aufgelistet:
#PB_PixelFormat_8Bits ; 1 Byte pro Pixel, mit Palette ("palettised")
#PB_PixelFormat_15Bits ; 2 Byte pro Pixel
#PB_PixelFormat_16Bits ; 2 Byte pro Pixel
#PB_PixelFormat_24Bits_RGB ; 3 Byte pro Pixel (RRGGBB)
#PB_PixelFormat_24Bits_BGR ; 3 Byte pro Pixel (BBGGRR)
#PB_PixelFormat_32Bits_RGB ; 4 Byte pro Pixel (RRGGBB)
#PB_PixelFormat_32Bits_BGR ; 4 Byte pro Pixel (BBGGRR)
#PB_PixelFormat_ReversedY ; Die Y-Koordinate der Ausgabe ist umgekehrt im Speicher (die untere Reihe ist zuerst gespeichert).

Generell gilt, beim schreiben in den Buffer für die Zeilen immer DrawingBufferPitch() nutzen, und nicht selbst einfach einen Pixel weiter schreiben und denken er wäre dann in der Nächsten zeile.
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8679
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 32 GB DDR4-3200
Ubuntu 22.04.3 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken
Kontaktdaten:

Re: Verschiedene Grafikbuffer beim Sprite und Canvas.

Beitrag von NicTheQuick »

Das kommt wohl einfach darauf an wie das Betriebssystem das macht. Unter Linux fängt es im Canvas auch oben links an und geht oben rechts.
Siehe auch '#PB_PixelFormat_ReversedY' in Stargates Post.
Bild
funker
Beiträge: 33
Registriert: 02.06.2014 12:32

Re: Verschiedene Grafikbuffer beim Sprite und Canvas.

Beitrag von funker »

---------------------------------------------
Das kommt wohl einfach darauf an wie das Betriebssystem das macht.
--------------------------------------------

Da hat man bei LINUX nachgedacht bei der Umsetzung und hat es nach dem alten Prinzip:
0,0 ist oben Links
gleich für den User umgerechnet.

Gruss
Antworten