FullScreenMode unter Linux extrem langsam

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

FullScreenMode unter Linux extrem langsam

Beitrag 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
;-----------------------------------------------------------------------------------------------------------
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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?
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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?
Benutzeravatar
#NULL
Beiträge: 2238
Registriert: 20.04.2006 09:50

Beitrag 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.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag 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
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag 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
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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.
Benutzeravatar
legion
Beiträge: 467
Registriert: 08.10.2006 18:04
Computerausstattung: Intel Core i5-6500 @ 4x 3.6GHz mit Windows 10 Pro, Intel Core-i7 mit Ubuntu 18.04 bionic, x86_64 Linux 4.18.0-16-generic, Microsoft Surface Pro - Windows 10 Pro
Wohnort: Wien
Kontaktdaten:

Beitrag 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
PB 5.71 LTS Windows 10 Pro & Ubuntu 18.04.2 LTS & Linux Mint 19.3
-----------------------------------------------------
Alles ist, wie man glaubt, dass es ist!
Benutzeravatar
Thalius
Beiträge: 476
Registriert: 17.02.2005 16:17
Wohnort: Basel / Schweiz

Beitrag von Thalius »

Hmmm - also bei mir ist der Code unter Win und Linux ca. gleich lahm.... :/

mmhm...

EDIT: Bug zu ExamineDesktops() gepostet.

Thalius
Zuletzt geändert von Thalius am 07.11.2007 19:08, insgesamt 1-mal geändert.
"...smoking hash-tables until until you run out of memory." :P
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

@legion: :? Tatsächlich!

Das muss ein Bug sein.
Antworten