Seite 1 von 1

FullScreenMode unter Linux extrem langsam

Verfasst: 05.11.2007 12:37
von legion
Hallo !

Ich hab da wieder mal ne Frage !
Warum läuft der selbe Code unter Windows mit einer NVIDIA GeForce 8600GT total flüssig und unter Linux ruckelt das ganze.
Die NVIDIA-Treiber hab ich unter Linux installiert.
Getestet mit OpenSuse 10.2 und Kanotix Thorhammer am selben PC.

Lg. Legion

Code: Alles auswählen

Procedure SpriteConture(Sprite,Color)
StartDrawing(SpriteOutput(Sprite))
Line(0,0, SpriteWidth(Sprite),0,Color)
Line(0,0,0,SpriteHeight(Sprite),Color)
Line(0,SpriteHeight(Sprite)-1,SpriteWidth(Sprite)-1,0,Color)
Line(SpriteWidth(Sprite)-1,0,0,SpriteHeight(Sprite),Color)
StopDrawing()
EndProcedure
;-----------------------------------------------------------------------------------------------------------
Procedure ScreenConture(Image,Color)
StartDrawing(ImageOutput(Image))
Line(0,0, DesktopWidth(0),0,Color)
Line(0,0,0,DesktopHeight(0),Color)
Line(0,DesktopHeight(0)-1,DesktopWidth(0)-1,0,Color)
Line(DesktopWidth(0)-1,0,0,DesktopHeight(0)-1,Color)
StopDrawing()
EndProcedure
;-----------------------------------------------------------------------------------------------------------
Procedure ScreenRaster(Image,Color,Raster)
Protected i,XAbstand,YAbstand,XPos,YPos
StartDrawing(ImageOutput(Image))
XAbstand = Round(DesktopWidth(0)/Raster,1)
YAbstand = Round(DesktopHeight(0)/Raster,1)
XPos = XAbstand
YPos = YAbstand
For i = 1 To Raster -1
Line(XPos,0,0,DesktopHeight(0),Color)
Line(0,YPos,DesktopWidth(0),0,Color)
XPos + XAbstand
YPos + YAbstand
Next i
StopDrawing()
EndProcedure
;----------------------------------------------------------------------------------------------------------- 
If InitSprite() And InitSound() And InitKeyboard() And ExamineDesktops() And InitMouse()And OpenScreen(DesktopWidth(0),DesktopHeight(0),DesktopDepth(0),"") 
 CreateImage(0,DesktopWidth(0),DesktopHeight(0),24)
 CreateSprite(0,20,20,0)
 SpriteConture(0,$7BFE84)
 ScreenRaster(0,$1D3D1F,24)
 ScreenConture(0,$7BFE84)
;-----------------------------------------------------------------------------------------------------------
Repeat  
 ExamineMouse()
 StartDrawing(ScreenOutput())
 DrawImage(ImageID(0),0,0) 
 StopDrawing() 
 DisplayTransparentSprite(0,MouseX(),MouseY())
 If MouseButton(#PB_MouseButton_Right)
  Break
 EndIf
 If MouseButton(#PB_MouseButton_Left)
   Break
 EndIf
FlipBuffers()
Delay(10)
ForEver
FreeImage(0)
FreeSprite(0) 
EndIf
End
;-----------------------------------------------------------------------------------------------------------

Verfasst: 05.11.2007 14:37
von #NULL
bei mir das gleiche.
NVIDIA GeForce 6100
flüssig unter windows.
unter OpenSuse 10.2 ziemlich erbärmlich. nvidia treiber sind installiert.
wenn man das DrawImage() aus der hauptschleife auskommentiert ruckelt es nicht mehr.
..ach jetzt sehe ich erst das 24-bit. tritt das problem nur damit auf?

Verfasst: 05.11.2007 14:41
von NicTheQuick
Images und Screens vertragen sich nicht so gut unter Linux.

Bei mir läuft es flüssig, wenn ich nur Sprites verwenden.

Komischerweise hab ich bei mir hier noch einen anderen Fehler
versursacht, der mit ExamineDesktops() zu tun hat:
"[COMPILER] Desktop.a(ExamineDesktops.o): in function `PB_ExamineDesktops':"

Code: Alles auswählen

Procedure SpriteConture(Sprite,Color)
  StartDrawing(SpriteOutput(Sprite))
    Line(0,0, SpriteWidth(Sprite),0,Color)
    Line(0,0,0,SpriteHeight(Sprite),Color)
    Line(0,SpriteHeight(Sprite)-1,SpriteWidth(Sprite)-1,0,Color)
    Line(SpriteWidth(Sprite)-1,0,0,SpriteHeight(Sprite),Color)
  StopDrawing()
EndProcedure
;-----------------------------------------------------------------------------------------------------------
Procedure ScreenConture(Sprite,Color)
  StartDrawing(SpriteOutput(Sprite))
    Line(0,0, DesktopWidth(0),0,Color)
    Line(0,0,0,DesktopHeight(0),Color)
    Line(0,DesktopHeight(0)-1,DesktopWidth(0)-1,0,Color)
    Line(DesktopWidth(0)-1,0,0,DesktopHeight(0)-1,Color)
  StopDrawing()
EndProcedure
;-----------------------------------------------------------------------------------------------------------
Procedure ScreenRaster(Sprite,Color,Raster)
  Protected i,XAbstand,YAbstand,XPos,YPos
  StartDrawing(SpriteOutput(Sprite))
    XAbstand = Round(DesktopWidth(0)/Raster,1)
    YAbstand = Round(DesktopHeight(0)/Raster,1)
    XPos = XAbstand
    YPos = YAbstand
    For i = 1 To Raster -1
      Line(XPos,0,0,DesktopHeight(0),Color)
      Line(0,YPos,DesktopWidth(0),0,Color)
      XPos + XAbstand
      YPos + YAbstand
    Next i
  StopDrawing()
EndProcedure
ExamineDesktops()
;-----------------------------------------------------------------------------------------------------------
If InitSprite() And InitSound() And InitKeyboard() And InitMouse()And OpenScreen(DesktopWidth(0),DesktopHeight(0),DesktopDepth(0),"")
  CreateSprite(1,DesktopWidth(0),DesktopHeight(0),24)
  CreateSprite(0,20,20,0)
  SpriteConture(0,$7BFE84)
  ScreenRaster(1,$1D3D1F,24)
  ScreenConture(1,$7BFE84)
  ;-----------------------------------------------------------------------------------------------------------
  Repeat 
    ExamineMouse()
    DisplaySprite(1, 0, 0)
    DisplayTransparentSprite(0,MouseX(),MouseY())
    If MouseButton(#PB_MouseButton_Right)
      Break
    EndIf
    If MouseButton(#PB_MouseButton_Left)
      Break
    EndIf
    FlipBuffers()
    Delay(10)
  ForEver
  FreeSprite(1)
  FreeSprite(0)
EndIf
End
;----------------------------------------------------------------------------------------------------------- 
Kommt der Fehler bei dir auch?

Verfasst: 05.11.2007 15:10
von #NULL
die fehlermeldung ist ja auch wieder mal extrem aussagekräftig 8) (ich bekomme hier übrigens keine)
ich hab auch mal verschiedene farbauflösungen versucht, sowohl für screen als auch für's image. hat aber nichts verändert. das ruckeln ist lediglich proportional zur bildgroesse.

Verfasst: 06.11.2007 12:37
von legion
OK, hab jetzt anstatt des Image ein Sprite genommen.
Nur dann kommt diese Fehlermeldung:

Bild

Code: Alles auswählen

Procedure SpriteConture(Sprite,Color)
StartDrawing(SpriteOutput(Sprite))
Line(0,0, SpriteWidth(Sprite),0,Color)
Line(0,0,0,SpriteHeight(Sprite),Color)
Line(0,SpriteHeight(Sprite)-1,SpriteWidth(Sprite)-1,0,Color)
Line(SpriteWidth(Sprite)-1,0,0,SpriteHeight(Sprite),Color)
StopDrawing()
EndProcedure
;-----------------------------------------------------------------------------------------------------------
Procedure ScreenConture(Image,Color)
StartDrawing(SpriteOutput(Image))
Line(0,0, DesktopWidth(0),0,Color)
Line(0,0,0,DesktopHeight(0),Color)
Line(0,DesktopHeight(0)-1,DesktopWidth(0)-1,0,Color)
Line(DesktopWidth(0)-1,0,0,DesktopHeight(0)-1,Color)
StopDrawing()
EndProcedure
;-----------------------------------------------------------------------------------------------------------
Procedure ScreenRaster(Image,Color,Raster)
Protected i,XAbstand,YAbstand,XPos,YPos
StartDrawing(SpriteOutput(Image))
XAbstand = Round(DesktopWidth(0)/Raster,1)
YAbstand = Round(DesktopHeight(0)/Raster,1)
XPos = XAbstand
YPos = YAbstand
For i = 1 To Raster -1
Line(XPos,0,0,DesktopHeight(0),Color)
Line(0,YPos,DesktopWidth(0),0,Color)
XPos + XAbstand
YPos + YAbstand
Next i
StopDrawing()
EndProcedure
;----------------------------------------------------------------------------------------------------------- 
If InitSprite() And InitSound() And InitKeyboard() And ExamineDesktops() And InitMouse()And OpenScreen(DesktopWidth(0),DesktopHeight(0),DesktopDepth(0),"")
 CreateSprite(0,20,20,0)
 CreateSprite(1,DesktopWidth(0),DesktopHeight(0),0)
 SpriteConture(0,$7BFE84)
 ScreenRaster(1,$1D3D1F,24)
 ScreenConture(1,$7BFE84)
;-----------------------------------------------------------------------------------------------------------
Repeat  
 ExamineMouse()
 DisplayTransparentSprite(1,0,0)
 DisplayTransparentSprite(0,MouseX(),MouseY())
 If MouseButton(#PB_MouseButton_Right)
  Break
 EndIf
 If MouseButton(#PB_MouseButton_Left)
   Break
 EndIf
FlipBuffers()
Delay(10)
ForEver
FreeSprite(0)
FreeSprite(1) 
EndIf
End

Verfasst: 07.11.2007 00:33
von legion
NicTheQuick hat geschrieben:.Komischerweise hab ich bei mir hier noch einen anderen Fehler versursacht, der mit ExamineDesktops() zu tun hat:
"[COMPILER] Desktop.a(ExamineDesktops.o): in function `PB_ExamineDesktops':"
Ich denke das ist der selbe Fehler wie bei mir, oder ?

Lg. Legion

Verfasst: 07.11.2007 00:41
von NicTheQuick
Ja, genau.

Aber ich kann mich noch daran erinnern, dass der erste Versuch funktioniert
hat. Der zweite hingegen nicht mehr.

Vielleicht muss man am Ende noch ein 'ClearScreen()' setzen. Das habe ich
noch nicht getestet. Sitze außerdem gerade an meinem Windows-Rechner.

Verfasst: 07.11.2007 13:42
von legion
Hallo !

Ich hab mich mal durch den Code gekämpft.
Wenn man "CreateImage(0,DesktopWidth(0),DesktopHeight(0),24)"
entfernt tritt der Fehler auf !

Man muss also ein Image erzeugen obwohl man nur mit Sprites arbeitet
um den Fehler zu vermeiden.

Ich schätze das ist ein Bug in der PB-Linuxversion V4.01 ! :(

Lg. Legion

Verfasst: 07.11.2007 13:54
von Thalius
Hmmm - also bei mir ist der Code unter Win und Linux ca. gleich lahm.... :/

mmhm...

EDIT: Bug zu ExamineDesktops() gepostet.

Thalius

Verfasst: 07.11.2007 14:41
von NicTheQuick
@legion: :? Tatsächlich!

Das muss ein Bug sein.