GraphicsLost Rückgabewert?

Übersicht BlitzBasic Allgemein

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

hectic

Sieger des IS Talentwettbewerb 2006

Betreff: GraphicsLost Rückgabewert?

BeitragDo, Dez 24, 2009 0:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Hat jemand schon mit dem Befehl GraphicsLost sinnvolle Ergebnise bekommen? Irgendwie hab ich so meine Probleme mit.

Vielleicht kennt der eine oder andere das Problem. Wenn man bei Blitz3D im Fenstermodus Graphics3D X,Y,0,2 anwendet, und zur gleichen Zeit parallel eine Vollbildanwendung mit 3D öffnet, gehen alle Texturen und sogar die gesamte Grafik im Blitz3D-Fenster kaputt. Und mein Ziel ist es nun, diesen kaputten Zustand heraus zu finden, denn dann kann man zumindest mit EndGraphics und das neuladen aller Texturen und Entities wieder herstellen.

Aber GraphicsLost gibt mir nie ein True zurück. Egal ob 2D-Images oder 3D-Texturen.

Auch ein anderer Weg über das überprüfen eines groben Sollzustantes des Fensters über ReadPixel löst ein MAV aus, sobald ein anderes 3D-Programm in den Vollbildmodus geht.

-

Also, wie kann ich so ein kaputten Zustand heraus finden?
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Silver_Knee

BeitragDo, Dez 24, 2009 2:24
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich bekomme es grde einfach nicht auf die reihe meine grafiken zu verlieren...

hab grade alel möglichen todsünden begangen: Adminfrage, ausgeloggt, anderes prog im vollbild... hmm

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Dez 24, 2009 2:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Kannst ja mal versuchen, unten stehendes Programm auszuführen und dann wärend es noch läuft ein anderes (nicht Blitz3D-Programm) im Vollbild starten. Zum Beispiel Antiwar - starten und gleich wieder auf Quit klicken. Dann sieht das Blitz3D-Programm alles andere als toll aus. Man kann es dann nur noch durch EndGraphics und dem anschliessenden neu laden und erstellen aller Entities retten.

Ich wollte nebenbei eine neue Version vom Dreamplayer machen, aber so lange das Problem nicht behoben ich, nützt ja alles nichts.

Code: [AUSKLAPPEN]
Graphics3D 640,480,0,2
SetBuffer BackBuffer()

Local Timer=CreateTimer(58)
Local Camera=CreateCamera()

Local Light=CreateLight()
RotateEntity Light, 90,0,0

Local Cube=CreateCube()
RotateEntity Cube,20,50,50
PositionEntity Cube,0,0,3

While Not KeyHit(1)
   TurnEntity Cube,1,0,0
   WaitTimer Timer
   RenderWorld
   Flip 0
Wend
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Silver_Knee

BeitragDo, Dez 24, 2009 3:06
Antworten mit Zitat
Benutzer-Profile anzeigen
kannst sicher irgendwie das Appresume event aus b+ über ne dll abfangen und einfach vorsorglich die GFX neu laden

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Dez 24, 2009 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Verstehe ich nicht ganz, wieso B+, ich arbeite mit Blitz3D.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Silver_Knee

BeitragDo, Dez 24, 2009 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
in b+ gibt es ein event namens AppResume das kann man bestimmt auch über die winapi in b3d abfangen.
Das event tritt dann auf wenn man von einer anderen anwendung auf die eigene wechselt. da könnte man ja für alle fäälle die grafiken neu laden.

PSY

BeitragDo, Dez 24, 2009 22:21
Antworten mit Zitat
Benutzer-Profile anzeigen
hm,

hab deinen code mal ausgeführt und 2 vollbildspiele gestartet, wieder raus, würfel sieht normal aus.
wieder 2 gestartet, während laufzeit getabbed, würfel sieht normal aus.

kann dein problem nicht reproduzieren...

l8er,
PSY
PSY LABS Games
Coders don't die, they just gosub without return

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Dez 24, 2009 23:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will nicht ausschliessen das eine moderne Grafikkarte da weniger Probleme verursacht (ich habe im Moment eine on-Board), aber es muß schon eine 3D-Vollbildanwendung sein. Mit Vollbild meine ich im übrigen nicht das maximieren eines Fensters. Es muß schon eine Anwendung sein die 3D verwendet und auf Vollbild die Auflösung ändert, will dir aber auch nichts unterstellen.
Wink

Dannach sieht das obige Programm bei mir aus, als ob man irgendwo etwas aus dem RAM gezogen hätte. Komplett durcheinander und man erkennt manchmal auch zerstückelt Bilder die man vor Stunden mal angesehen hat... Kann ja auch irgendwie nicht sein das ich der einzige mit dem Problem bin, denn das Problem hatte ich mit meinem alten Rechner zusammen mit einer billigst ATI, einer GeForce 7600 dann eine nVidia on-Board und nun eine ATI on-Board. Das ganze auf WinXP.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Xaymar

ehemals "Cgamer"

BeitragDo, Dez 24, 2009 23:45
Antworten mit Zitat
Benutzer-Profile anzeigen
hectic, du bist nicht allein mit dem Problem. Ich erhalte das auch.
Etwas schlimmer sind bei mir cubemaps. Ich brauch nur das Fenster wechseln und ich sehe viel müll anstatt ner cubemap
Warbseite
 

n-Halbleiter

BeitragDo, Dez 24, 2009 23:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Okay, ich habe das ganze jetzt auch mal getestet. Egal ob mit oder ohne Vollbild, minimieren oder ein anderes Proggi drüberschieben, es ist überhaupt nichts passiert. PC siehe Signatur. Woran das liegen könnte, kann ich nicht sagen, auf jeden Fall hoffe ich, dass ich bei der Eingrenzung mithelfen kann. Wink
mfg, Calvin
Maschine: Intel Core2 Duo E6750, 4GB DDR2-Ram, ATI Radeon HD4850, Win 7 x64 und Ubuntu 12.04 64-Bit
Ploing!
Blog

"Die Seele einer jeden Ordnung ist ein großer Papierkorb." - Kurt Tucholsky (09.01.1890 - 21.12.1935)

PSY

BeitragFr, Dez 25, 2009 0:40
Antworten mit Zitat
Benutzer-Profile anzeigen
hectic hat Folgendes geschrieben:
Ich will nicht ausschliessen das eine moderne Grafikkarte da weniger Probleme verursacht (ich habe im Moment eine on-Board), aber es muß schon eine 3D-Vollbildanwendung sein. Mit Vollbild meine ich im übrigen nicht das maximieren eines Fensters. Es muß schon eine Anwendung sein die 3D verwendet und auf Vollbild die Auflösung ändert, will dir aber auch nichts unterstellen.
Wink


is klar Wink
PSY LABS Games
Coders don't die, they just gosub without return

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Dez 25, 2009 1:16
Antworten mit Zitat
Benutzer-Profile anzeigen
War wiklich nicht böse gemeint PSY, wollte nur absolut sicher gehen, da es zu Beginn den Anscheind hatte das ich der einzige mit dem Problem wäre.
Wink

Zu den anderen scheint wohl noch keiner eine Lösunf zu gefunden haben. Das ist schon ein wenig blöd. Wer dennoch eine Idee dazu hat, immer her damit.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

PSY

BeitragFr, Dez 25, 2009 4:52
Antworten mit Zitat
Benutzer-Profile anzeigen
hectic hat Folgendes geschrieben:
War wiklich nicht böse gemeint PSY, wollte nur absolut sicher gehen, da es zu Beginn den Anscheind hatte das ich der einzige mit dem Problem wäre.
Wink


habs auch nicht so aufgefasst Smile

ich werd noch ein wenig dran rumspielen, auch mal an anderen rechnern.
leider haben alle meine kisten ne nvidia drin, deshalb denk ich ich kanns auf keinem rechner reproduzieren.

ich sag dir auf jeden fall mal bescheid wenn ich was rausfind...

l8er,
PSY
PSY LABS Games
Coders don't die, they just gosub without return

Pummelie

BeitragFr, Dez 25, 2009 11:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist mir bekannt, jedoch nicht mit einem Blitz3D Prog.
z.b. Ich habe Der Herr der Ringe online offen und starte Empire Earth (1 oder 2) HdRo hat keine Probleme aber Empire Earth kann man in die Tonne kloppen.
Das Problem tritt nur bei ältern Spielen auf (DX 7?).
Die Lösung war, das ich im Catalyst Control Center alle Einstellungen auf Programm bestimmt gestellt hab, darufhin konnte ich die Spiele wechseln und keine Fehler mehr ausmachen.
Jedoch passt sich die Grafikkarte nun jedes mal an, das heißt, ich wechsel das Spiel, und der Bildschirm bleibt 4 Sekunden schwartz.
It's done when it's done.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragFr, Dez 25, 2009 13:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist ein interessanter Ansatz Pummelie. Das werde ich heute oder morgen auf jeden Fall noch ausprobieren, denn ich hab gleich noch Familientreffen. Ist bei mir immer an einem der Weihnachtstagen, nicht Heiligabend.

PSY, wie gesagt, ich hatte es auch mit meiner GeForce 7600 gehabt. Ich probiere dann mal die Lösung von Pummelie und werde dann notfalls das in die FAQ schreiben, wobei mir eine Selbstkontrolle des Programmes lieber währe. Denn das neuladen von Grafiken dauert 0.2 Sekunden. Aber ständig neuladen bei einem Musikplayer geht ja auch nicht.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D
 

BadDeath

BeitragMo, Dez 28, 2009 23:20
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bin eben zufällig auf einen Beitrag von Abrexxes gestoßen:

Zitat:
Im 2D Modus werden die Grafiken nicht von der Grafikkarte gemanagt, Windows gibt deswegen beim schliessen des Vollbild die Grafiken frei und sie werden überschrieben.

Seit 1.99 gibt es dafür denn Befehl fehler = GraphicsLost ()

Dieser Befehle gibt eine 1 zurück wenn die Grafiken nicht mehr vorhande sind. Du kannst also zb eine Funktion bauen die alle Grafiken neu läd (benutze die alten Image Handles*).

(https://www.blitzforum.de/foru...hp?t=26740)

Versuch doch mal eine kleine Grafik als 2D zu laden - also LoadImage - deine anderen Grafiken sind doch wahrscheinlich alles Texturen (Draw3D), oder?
-~= real coders just code in binary =~-

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Dez 29, 2009 1:47
Antworten mit Zitat
Benutzer-Profile anzeigen
BadDeath, echtes 2D macht keine Probleme bei mir. Scheint auch Systemspezifisch zu sein. Denn ich hatte auch mal da Probleme gehabt. Nunja, für alle die sich darunter nichts vorstellen können. Hier mal zwei Bilder:

So sieht es normal aus:
user posted image

Und so, wenn es zerstört ist:
user posted image

Die : 0 müsste eine 1 sein, wenn die Grafiken verloren gegangen sind.

TestCode: [AUSKLAPPEN]
Graphics3D 400,300,0,2
SetBuffer BackBuffer()

Local Camera=CreateCamera()
Local Timer=CreateTimer(58)

Local Light=CreateLight()
RotateEntity Light,90,0,0

Local Cube=CreateCube()
RotateEntity Cube,20,50,50
PositionEntity Cube,0,0,3
Local Lost,Summ

Local Image=LoadTexture("__.png",256)

EntityTexture Cube,Image




While Not KeyHit(1)
   
   If KeyHit(57) Then
      EndGraphics
      Graphics3D 400,300,0,2
      SetBuffer BackBuffer()
      Camera=CreateCamera()
      Light=CreateLight()
      RotateEntity Light,90,0,0
      Cube=CreateCube()
      RotateEntity Cube,20,50,50
      PositionEntity Cube,0,0,3
      Image=LoadTexture("__.png",1)
      EntityTexture Cube,Image
   End If
   
   TurnEntity Cube,0.1,0,0
   WaitTimer Timer
   RenderWorld
   
   Color 120,0,0
   Rect 0,0,110,34,1
   Color 255,255,255
   Text 10,0,MilliSecs()
   Text 10,20,": "+Lost
   
   If GraphicsLost()<>0 Then Lost=1
   
   Flip 0
Wend


Aber naja, ich werde das wohl das so hinnehmen müssen.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Xaymar

ehemals "Cgamer"

BeitragDi, Dez 29, 2009 2:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Prüf doch mit Millisecs und Graphics 0,0,0,6/7 ob das Spiel minimiert wurde. Normalerweise sollte kein Frame bei 60fps über 33ms dauern.

BlitzBasic: [AUSKLAPPEN]
Graphics 800,600,32,6
SetBuffer BackBuffer()

Global Frame_MaxMS = 100 ;Maximale Zeit für einen Frame


Global Timer = CreateTimer(60)
While Not KeyHit(1)
Cls
For A = 0 To 100
For B = 0 To 10
Text 100+B*50,A*5,A^2
Next
Next

Text 0,0,Frame
Text 0,15,FrameMS
Flip 0:WaitTimer Timer

;Prüfen ob der Frame länger gedauert hat als Frame_MaxMS(Sollte schon nach WaitTimer aufgerufen werden)
FrameMS = MilliSecs()-FrameMS
If FrameMS > Frame_MaxMS
;Was passiert, wenn der zu lange gedauert hat?
Frame = FrameMS
Next
FrameMS = MilliSecs()
Wend
End
Warbseite

Pummelie

BeitragDi, Dez 29, 2009 3:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst auch überprüfen ob das Programm mal nicht im Vordergrund ist mit:

user32.decls
Code: [AUSKLAPPEN]
.lib "user32.dll"
GetActiveWindow%() : "GetActiveWindow"


Programm
BlitzBasic: [AUSKLAPPEN]
Graphics3D(640,480,32,2)
SetBuffer(BackBuffer())
Local hwnd=GetActiveWindow()
Repeat
If hwnd=GetActiveWindow() Then
Cls
Text(320,240,"Super ich bin im Vordergrund!",1,1)
Flip
Else
RuntimeError("Mist"+Chr(13)+"Du hast mich weg geklickt!")
EndIf
Until KeyDown(1)=1
End

Und statt dem Erro eben grafik neu laden
It's done when it's done.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDi, Dez 29, 2009 3:38
Antworten mit Zitat
Benutzer-Profile anzeigen
Cgamer

Die Idee ist super und funktioniert bisher auch ganz gut. Sogenannte Droped Frames muß man allerdings nicht mühsam über Millisecs selbst ausrechnen, sondern kann den Timer selbst ran ziehen. Das geht so:

Code: [AUSKLAPPEN]
Temp=WaitTimer(Timer)
If Temp>1 Then Yeah

Danke für den Hinweis. Hilft mir sehr.

Pummelie

Da die Cgamers Methode unter bestimmten Umständen auch nachteilig sein kann, werde ich wohl eine Kombination aus beiden ran ziehen. Bei einem Player der immer so nebenher läuft, finde ich ein stetiges neuladen der Grafiken problematisch. Dafür kommt eben die Kombi aus deinem und Cgamers Methode zugute.

Very Happy

Cool
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group