1.) In meinem Thread-Execute bastle ich mit nem TBitmap rum... unter anderem benutze ich da auch Bitmap.CopyRect.. Wenn ich diesen befehl mehrmals in ner schleife innerhalb des threads aufrufe bleibt die fläche nach ein paar mal nurnoch weiß (nie die gleiche anzahl... mal nach 2 aufrufen, mal nach 3.. 4 etc..)
Weiß jemand woran das liegt???
2.) Kann ich in nem Thread eine Textur laden...??? Oder muß ich das in einer procedure machen die ich mit Synchonize aufrufe..?
Wenn ich im Execute mit wglMakeCurrent und ActivateRenderingContext das zuweise scheint der Thread nichtmal bis zum ende durchzulaufen sondern er bricht mitten drin ab...
Also mal ganz blöd gesagt: Nicht alle Kommandos sind thread-sicher, und so ziemlich alles was irgendwie auf das Grafik-Subsystem von Windows zugreift ist es nicht. Da bleibt dir nur noch, die widerspenstigen Befehle in eine eigene Routine zu packen und dann mittels Synchronize im Hauptthread ausführen zu lassen. Das TBitmap-Objekt ist übrigens auch nicht threadsicher, da hatte ich selber schonmal ein Problem:
Posting in de.comp.lang.delphi.misc Falls der Link so nicht geht: Das Posting steht unter dem Titel "JPEGs im Thread laden" in de.comp.lang.delphi.misc und kann über groups.google.de gefunden werden.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Also ich hatte das schon mal mit Threads gemacht. Das hat auch alles super funktioniert. Mit Threads und Texturen etc. ABER ich hatte das alles in EINEM Thread gemacht. Dazu würde ich auch raten. Wer kann so genau sagen, ob OpenGL da nicht durcheinander kommt.
Wenn du aus dem VCL Thread rendert solltest du Synchronize aufrufen. Also rendern und gleichzeitig Texturen laden halte ich für nicht sinnvoll.
Zum Thema Abbrechen. Wenn du in dem Execute eine exception hast, dann terminiert sich der Thread. Ohne Delphidebugger terminiert dann allerdings Windows augenblicklich auch deine Anwendung. Also immer schön mit try except arbeiten.
@Arno: Ich habe mir mal kurz dein Quellcode angesehen. Nichts für Ungut aber eine Textur zu laden in dem ein Bitmap geladen und das dann auf ein TBitmap32 gezeichnen wird empfinde ich als äußerst unsinnig. Und nicht gerade der beste weg, wo man doch SEHR einfach direkt auf den Speicher eines Bitmaps zugreifen kann.
@Lossy eX: Ich verstehe absolut nicht, worauf du herauswillst - in dem angesprochenen Posting war nirgends von OpenGL und/oder Texturen die Rede. Es wurde schlicht und ergreifend in einem Hintergrundthread eine JPEG-Datei in ein TBitmap32 geladen, über den Umweg über TPicture, wie das ja auch gedacht ist. Es geht hier also erstmal gar nicht um eine Lademöglichkeit für Texturen sondern schlicht und ergreifend darum, dass TBitmaps nicht threadsicher sind (TBitmap32 hingegen schon - aber das Laden mit LoadFromFile geschieht intern dann doch wieder über TPicture und TBitmap). Und darum ging's im Ursprungsposting. Im Übrigen habe ich das Problem letzten Endes dann wirklich dadurch umschifft, dass ich die JPGs "von Hand" direkt in ein TBitmap32-Objekt lade, damit geht's dann auch einwandfrei.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Tschuldige Arno ich wollte dich nicht persönlich angreifen, wenn ich dies getan habe (wordurch auch immer) dann tut es mir leid. Aber in Aya's Posting Frage 2 ist von Texturen laden die Rede und das ist für mich nun mal in OpenGL. Auch, wenn nicht konkret von OpenGL die Rede ist.
Ich fühle mich nicht persönlich angegriffen (so einfach geht das auch wieder nicht...), aber dein Posting hatte einfach im Zusammenhang mit dem verlinkten Quellcode keinen Sinn. Es ging ausschließlich um die "Threadfähigkeit" von TBitmap-Objekten, was ja erstmal nichts mit OpenGL-Texturen zu tun hat. Der Originalposter hatte ja scheinbar TBitmaps verwendet, deshalb wollte ich auf diese Problematik hinweisen. Ob er einen anderen Weg wählen sollte, Texturen zu laden, ist eine ganz andere Frage.
Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.