Seite 1 von 4

ClearScreen() ohne Funktion (PB 4.51 / PB 4.60 Beta3)

Verfasst: 29.07.2011 16:15
von ullmann
Bei diesem Code hinterlassen die bewegten Kreise Spuren. Obwohl ein ClearScreen(0) in der Schleife drin ist:

Code: Alles auswählen

InitSprite()
InitKeyboard()

Enumeration
  #Window
EndEnumeration

Structure Ball
  x.i
  y.i
  dx.i
  dy.i
  Rot.i
  Gruen.i
  Blau.i
EndStructure

NewList Baelle.Ball()

Macro NeueRichtung
  Repeat
    \dx = Random(4) - 2
    \dy = Random(4) - 2
  Until \dx <> 0 Or \dy <> 0
EndMacro    
  
ExamineDesktops()
OpenWindow(#Window, #PB_Ignore, #PB_Ignore, DesktopWidth(0) - 200, DesktopHeight(0) - 200, "ClearScreen() Test", #PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Window), 0, 0, WindowWidth(#Window), WindowHeight(#Window), 0, 0, 0)

Repeat  
  
  ClearList(Baelle())
  
  WeiteX = WindowWidth(#window)
  WeiteY = WindowHeight(#window)
  For n = 1 To 5
  AddElement(Baelle())
  With Baelle()
    \x = Random(WeiteX - 10) + 5
    \y = Random(WeiteY - 10) + 5
    NeueRichtung
    \Rot=Random(255)
    \Gruen=Random(255)
    \Blau=Random(255)
  EndWith
  Next 
  
  Repeat
    
    ClearScreen(0)
  
    Delay(2)
    If WindowEvent() = #PB_Event_CloseWindow : End : EndIf
    
    ForEach Baelle()
      
      With Baelle()
        \x + \dx
        \y + \dy
        If \x < 5 Or \x > WeiteX - 5 Or \y < 5 Or \y > WeiteY - 5
          NeueRichtung
        EndIf
      EndWith
    Next
  
    StartDrawing(ScreenOutput())
    ForEach Baelle()
      With Baelle()
        Circle(\x, \y, 10, RGB(\Rot,\Gruen,\Blau))
      EndWith
    Next 
    StopDrawing()
  
    FlipBuffers()

    ExamineKeyboard()
    
  Until KeyboardReleased(#PB_Key_Escape)
  
ForEver
Ich habe daraufhin mal im Forum gesucht. Irgendjemand hatte 2009 oder 2010 ein ähnliches Problem mit ClearScreen.
Scheint sich bis heute nichts geändert zu haben. Mit Fehlersuche und Forumsuche habe ich mehrere Stunden vergeudet.
Ich hoffe, jemand zeigt mir, dass der Fehler bei mir liegt.

Windows XP SP 3 PB 4.51

Re: ClearScreen() ohne Funktion (PB 4.51)

Verfasst: 29.07.2011 16:43
von c4s
Kann ich mit gleichem Windows XP + PureBasic 4.51 nicht bestätigen.

Re: ClearScreen() ohne Funktion (PB 4.51)

Verfasst: 29.07.2011 16:47
von Kiffi
c4s hat geschrieben:Kann ich mit gleichem Windows XP + PureBasic 4.51 nicht bestätigen.
dito mit Vista Business SP2 + PB4.51 und PB4.6B3

Re: ClearScreen() ohne Funktion (PB 4.51)

Verfasst: 29.07.2011 18:24
von Rebon
Kann ich bestätigen, könnte möglicherweise wieder an Radeon Grafikkarten liegen. Wenn ich im Compiler auf Subsystem DirectX7 umstelle, funktioniert ClearScreen().

Re: ClearScreen() ohne Funktion (PB 4.51)

Verfasst: 29.07.2011 18:26
von STARGÅTE
nö, habe auch n RADEON und bei mir funktioniert ClearScreen()

Re: ClearScreen() ohne Funktion (PB 4.51)

Verfasst: 29.07.2011 19:03
von Rebon
STARGÅTE hat geschrieben:nö, habe auch n RADEON und bei mir funktioniert ClearScreen()
Funktioniert ClearScreen() auch bei dir mit dem Code aus dem verlinkten Beitrag?
http://forums.purebasic.com/german/view ... e39c58bc01

Edit: Jetzt habe ich den leeren Backbuffer nur am Anfang. Und das einzige was ich geändert bzw. installiert habe ist ein neuerer Grafiktreiber.

Re: ClearScreen() ohne Funktion (PB 4.51)

Verfasst: 29.07.2011 19:09
von mpz
Hi,

tritt bei mir leider auch auf trotz NVidea Grafikkarte. Ich habe ein 3d Sprites dazugepackt und siehe da es funktioniert...

Gruß Michael

Code: Alles auswählen

InitSprite()
InitSprite3D()
InitKeyboard()

Enumeration
  #Window
EndEnumeration

Structure Ball
  x.i
  y.i
  dx.i
  dy.i
  Rot.i
  Gruen.i
  Blau.i
EndStructure

NewList Baelle.Ball()

Macro NeueRichtung
  Repeat
    \dx = Random(4) - 2
    \dy = Random(4) - 2
  Until \dx <> 0 Or \dy <> 0
EndMacro    
  
ExamineDesktops()
OpenWindow(#Window, #PB_Ignore, #PB_Ignore, DesktopWidth(0) - 200, DesktopHeight(0) - 200, "ClearScreen() Test", #PB_Window_MinimizeGadget|#PB_Window_SystemMenu|#PB_Window_ScreenCentered)
OpenWindowedScreen(WindowID(#Window), 0, 0, WindowWidth(#Window), WindowHeight(#Window), 0, 0, 0)

CreateSprite(1, 256, 256, #PB_Sprite_Texture)
CreateSprite3D(1, 1)


Repeat  
  
  ClearList(Baelle())
  
  WeiteX = WindowWidth(#window)
  WeiteY = WindowHeight(#window)
  For n = 1 To 5
  AddElement(Baelle())
  With Baelle()
    \x = Random(WeiteX - 10) + 5
    \y = Random(WeiteY - 10) + 5
    NeueRichtung
    \Rot=Random(255)
    \Gruen=Random(255)
    \Blau=Random(255)
  EndWith
  Next 
  
  Repeat
    
    ClearScreen(0)
    Start3D()
    DisplaySprite3D(1, 1,1)
    
    Delay(2)
    If WindowEvent() = #PB_Event_CloseWindow : End : EndIf
    
    ForEach Baelle()
      
      With Baelle()
        \x + \dx
        \y + \dy
        If \x < 5 Or \x > WeiteX - 5 Or \y < 5 Or \y > WeiteY - 5
          NeueRichtung
        EndIf
      EndWith
    Next
  
    StartDrawing(ScreenOutput())
    ForEach Baelle()
      With Baelle()
        Circle(\x, \y, 10, RGB(\Rot,\Gruen,\Blau))
      EndWith
    Next 
    StopDrawing()
  
    FlipBuffers()

    ExamineKeyboard()
    
  Until KeyboardReleased(#PB_Key_Escape)
  
ForEver

Re: ClearScreen() ohne Funktion (PB 4.51)

Verfasst: 30.07.2011 07:45
von ullmann
Was soll das? Ich hatte dies im Forum Bugs gepostet! Wenn ClearScreen den Bildschirm nicht löscht, besteht eine
gewisse Chance, dass es sich um einen Bug handelt, zumindest auf bestimmter Hardware. Dann kann man versuchen
die Ursachen zu finden.

Warum wurde der Thread hierher verschoben? Zumal Bestätigungen vorliegen. Verschoben innerhalb von nur einem (!) Tag.
Da kann das Bugforum geschlossen werden, wenn dort keine Hinweise erwünscht sind. Es drängt sich mir der Verdacht auf,
dass durch Vertuschen / Verstecken PureBasic eine weißere Weste erhalten soll. Das ist unseriös.


Danke an alle, die sich die Mühe machen, ihre Testergebnisse zu posten. Wenn ein Programmierfehler meinerseits ausgeschlossen werden kann,
- ich bin mir da noch nicht so sicher, weil ich nur gelegentlich programmiere - sollte dieses unregelmäßige Verhalten von ClearScreen vielleicht
mal im englischen Bugforum gepostet werden. Ohne Information kann es keine Verbesserung geben. Gepostete Bugs sind nicht böse gemeint,
als Anwender hofft man aber auf eine Beseitigung, damit man leichter und schneller programmieren kann.

Rainer Ullmann

Edit: Habe es im englischen Forum gepostet.

Re: ClearScreen() ohne Funktion (PB 4.51)

Verfasst: 30.07.2011 08:04
von ullmann
Ich habe eine Nvidia GeForce 8600 GT.

@rebon: Hmm, ich weiß nicht, im ersten Testcode ist das Bild 3 Sekunden schwarz - dies könnte aber auch die
Umschaltung auf Fullscreen sein -, dann wird kontinuierlich "Bla Bla" auf türkis angezeigt. Bei einem Test aus dem
gleichen Link, aber weiter hinten, wird "Basic6", dann "Basic8", dann "Basic10" usw. angezeigt.

@mpz: Wie bist du denn auf diese Idee mit dem Sprite3D gekommen? Damit funktioniert es bei mir auch. Ist aber
sehr, sehr komisch.

Gruß

Re: ClearScreen() ohne Funktion (PB 4.51)

Verfasst: 30.07.2011 10:48
von cxAlex
Kein Fehler hier bei mir, sowohl PB 4.51 als auch 4.6b3 (beide x64). Win7, NVidia Gforce GTX 260M

//Edit: Und auf einer 7300 SE/7200 GS läuft das ganze auch super. Win 7 Ultimate, x64

Gruß, Alex