Fehler bei StartDrawing(SpriteOutput())

Fragen und Bugreports zur PureBasic 4.0-Beta.
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Fehler bei StartDrawing(SpriteOutput())

Beitrag von Kai »

Ich habe fehler beim zeichnen auf sprites endeckt.
Unzwar zeichnet er nicht mit dem Box-Befehl nicht korekt.
das merkwürdige, bei Windows Home gehts, bei Windows Pro nicht.
Oder mach ich ma wieder was falsch? :mrgreen:

Code: Alles auswählen

If InitSprite() = #False Or InitSprite3D() = #False
 MessageRequester("Fehler", "Init failed", #MB_OK|#MB_ICONERROR)
 End
EndIf

If OpenWindow(0, 0, 0, 640, 480, "Testfenster", #PB_Window_ScreenCentered|#PB_Window_SystemMenu) <> #False
 If OpenWindowedScreen(WindowID(0), 0, 0, WindowWidth(0), WindowHeight(0), 0, 0, 0) = #False
  MessageRequester("Fehler", "WindowScreen failed", #MB_OK|#MB_ICONERROR)
  End
 EndIf
Else
 MessageRequester("Fehler", "Window failed", #MB_OK|#MB_ICONERROR)
 End
EndIf

spr = CreateSprite(#PB_Any, WindowWidth(0), WindowHeight(0), #PB_Sprite_Texture)
StartDrawing(SpriteOutput(spr))
 Box(0, 0, 250, 250, $00FFFF)
 Box(5, 5, 100, 100, $FF0000)
StopDrawing()
spr3d = CreateSprite3D(#PB_Any, spr)
 
Repeat
 Repeat
  Event = WindowEvent()
  Select Event 
   Case #PB_Event_CloseWindow
    End 
  EndSelect
 Until Event = 0
  
 FlipBuffers()
 ClearScreen($000000)

 Start3D()
  DisplaySprite3D(spr3d, 0, 0, 255)
 Stop3D()

 Delay(1)
ForEver
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Benutzeravatar
Olaf
Beiträge: 117
Registriert: 20.04.2006 14:51
Wohnort: 66606 St.Wendel (Niederlinxweiler, Dr.Albert-Schweitzer-Str.9)
Kontaktdaten:

Beitrag von Olaf »

@Kai:
Hm...also im Code sind keine "Fehler" drin, dafür aber ein paar überflüssige Dinge:
1. Warum benutzt du nicht DisplaySprite (also 2D), sondern DisplaySprite3D zum anzeigen der Sprites?
(Dann kannste dir den ganzen 3D-Kram schenken)
2. Die innere Repeat-Schleife (mit den Events) ist völlig überflüssig:

Code: Alles auswählen

Repeat
  Event = WindowEvent()
  Select Event
    Case #PB_Event_CloseWindow
      End
  EndSelect
  ;...
ForEver
tut's auch :wink: .

Aber abgesehn davon ist mir jetzt nichts "falsches" aufgefallen.
Mangels WinXP Pro konnt' ich jetzt nicht testen, ob's tatsächlich am OS liegt.
Möglicherweise 'n Bug. Haste's mal mit dem neusten Update nochmal versucht?
(Bei mir war nämlich unter PB V.4.00 die IDE ne Katastrophe, seit PB V.4.02 geht aber alles)
PB 4.xx (Windows & Linux & Mac OS X)
Treffen sich 2 Kurven in der Unendlichkeit. Sagt die eine zur anderen: "Hau ab aus meinem Definitionsbereich oder ich leite dich ab!"
Darauf die andere: "Mach nur! Ich bin die e-Funktion." :lol:
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Olaf hat geschrieben:2. Die innere Repeat-Schleife (mit den Events) ist völlig überflüssig:
nein, ist sie nicht!

in diesem fall wird sie nicht unbedingt gebraucht,
aber falls man zusätzliche gadgets neben den screen packen will,
ist ein extra event-loop nötig.

das steht auch so ausdrücklich in der help.
sämtliche auftretende Events sollen innerhalb eines Frames abgehandelt werden.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Olaf
Beiträge: 117
Registriert: 20.04.2006 14:51
Wohnort: 66606 St.Wendel (Niederlinxweiler, Dr.Albert-Schweitzer-Str.9)
Kontaktdaten:

Beitrag von Olaf »

@Kaeru:
Ja, wenn noch weitere Gadgets etc. dazu kommen sollen, klar, haste Recht.
Aber ich hab mich ja jetzt auf das aktuelle Beispiel (ohne Gadgets etc.) bezogen. :wink:
PB 4.xx (Windows & Linux & Mac OS X)
Treffen sich 2 Kurven in der Unendlichkeit. Sagt die eine zur anderen: "Hau ab aus meinem Definitionsbereich oder ich leite dich ab!"
Darauf die andere: "Mach nur! Ich bin die e-Funktion." :lol:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

@Olaf
Ich denke mal mit Deinem EventLoop soll die CPU beheizt werden :mrgreen:
Wie wäre es mit WaitWindowEvent() ?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

ts-soft hat geschrieben:Wie wäre es mit WaitWindowEvent() ?
BEEEEP!

ho ts, da ist ein FrameLoop außen drumrum... hoast mi?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
DrShrek
Beiträge: 1970
Registriert: 08.09.2004 00:59

Beitrag von DrShrek »

Sein Problem ist primär die (falsche) Anzeige...nicht die Loops ;-)
Siehste! Geht doch....?!
PB*, *4PB, PetriDish, Movie2Image, PictureManager, TrainYourBrain, ...
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo... eben.... wie soll der fehler eigentlich aussehen... gibts da nen screenshot von?

ich kann bei mir nix beobachten, schließlich hab ich Win2Kpro und ne NVidia-Karte...
(da passieren so fehler einfach nicht. ätsch.)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Olaf hat geschrieben: 2. Die innere Repeat-Schleife (mit den Events) ist völlig überflüssig:

Code: Alles auswählen

Repeat
  Event = WindowEvent()
  Select Event
    Case #PB_Event_CloseWindow
      End
  EndSelect
  ;...
ForEver
Kaeru Gaman hat geschrieben:
ts-soft hat geschrieben:Wie wäre es mit WaitWindowEvent() ?
BEEEEP!

ho ts, da ist ein FrameLoop außen drumrum... hoast mi?
Wo ist der FrameLoop? Bzw. die Eventschleife wird erst bei schliessen des
Fensters verlassen, solange wird die CPU geheizt, aber der Frame steht
evtl. auch Still :mrgreen:

// Nachtrag:
Ich sehe gerade, bei Kai ist es anders, aber den meinte ich nicht, sorry
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

Also erstmal, sry, ich glaub ich hab mich net genau genug ausgedrückt.
Das Problem ist, das ich zb. eine Box zeichnen möchte die bei koordinaten 5, 5 beginnt, was sie aber nicht tut, zumindest nicht auf windows xp pro inner schule sowie bei windows home bei meiner mutter, bei mir, auch windows xp home läuft es jedoch genau.
Das ganze funktioniert nur nicht richtig, wenn ich mit StartDrawing auf Sprites zeichne, direkt auf dem Screen klappt es perfekt.

Hier eine Grafik zur verdeutlichung:
(In Paint öffnen und vergrößerst die Position in Pixel der blaue Box kontrolieren, dann seht ihr das diese nicht bei 5, 5 ist sondern bei 6, 7 gezeichnet wurde.
Bild

Das meine Eventschleife nicht optimal ist,
und unnötige Sachen beinhaltet weiß ich,
es war nur als Beispiel gedacht, also seht davon erstmal ab.
Ausserdem gehts darum ja nicht. ^^

@Olaf
Also das ich nen Sprite direkt auf dem Screen zeichnen kann weiß ich auch,
aber erstens möchte ich es transparent darstellen, darum Sprite3D und es soll im Programmverlauf immer der Größe entsprechend erstellt werden.
Also ein zusammengezeichnetes Sprite3D das dann transparent angezeigt wird.
Es war einfach nur ein Code zum darstellen meines Problems, bei dem es nicht um sinnvoll oder nicht geht.

Nachtrag: Das ganze benutz ich in dem Programm hier:
(Da könnt ihr sehen das es Fehler gibt)
http://www.kaispage.de/include.php?path ... &themeid=0
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Gesperrt