Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 09.07.2009, 08:53 Titel: 2 Fragen |
|
|
Gute Morgen allerseits!
Ich hab mal 2 ... "kleine" fragen.. bzw. mir sind ein paar ungereimtheiten aufgefallen.
Zum 1.
Es gibt MID als Funktion und als Anweisung. Mich hat die Anweisung etwas mehr interessiert weil mir dort der Aufbau des Befehlssyntax aufgefallen ist:
MID[$](text, start[, length]) = Ausdruck
Diesen Syntax finde ich eigentlich sehr schick! Wie kann ich eigene Anweisungen in diesem Stil programmieren? (Die Herrn FB-Programmierer haben es ja auch geschafft )
Zum 2.
Zu GFX-Lib steht in der FB-Befehlsreferenz folgendes:
(...) Alle Lese/Schreibzugriffe auf den Seitenpuffer (inklusive Direktzugriffe via SCREENPTR) werden im RAM ausgeführt. Bei Win32 und Linux übernimmt ein eigener Thread die Screenupdates (...)
Ich hab selbst mal versucht einen Thread zu programmieren, der sich drum kümmert einen Buffer regelmäßig auf dem Screen zu aktualisieren.
(was mir aus folgenden Grund mislungen ist:)
Das Problem war hierbei nur, das sobald lese/schreibzugriffe des Haupt-threads mit den lese-Zugriffe im Buffer des Update-Threads kolidierten, mein Programm abgeschmiert ist.
Normalerweise kann man ja mit mutexlock und unlock sowas wunderbar synchronisieren. Aber, mit den üblichen Grafikbefehlen greife ich ja direkt auf den Bufferspeicher zu. Da kann ich keinen lock-unlock befehl unterbringen ohne das ich das vor und nach jeder Grafikanweisung reinschreibe. Also ein:
Code: |
mutexlock updatethread
line buffer, (x,y)-(a,b),RGB(255,255,255)
mutexunlock updatethread
|
wäre mir im Hauptprogramm zu viel koderei..
Es sollte wirklich ein:
Code: |
line buffer, (x,y)-(a,b),RGB(255,255,255)
|
ausreichen um eine linie im buffer zu schreiben, die dann der Thread darstellt.
zumal es ja anscheinend ja demjenigen gelungen ist, dieses Problem zu umgehen als er diesen oben erwähnten Update-Thread für die GFX-Lib geschrieben hat.
Vielen Dank schon mal für eure Mühe  |
|
Nach oben |
|
 |
volta
Anmeldungsdatum: 04.05.2005 Beiträge: 1876 Wohnort: D59192
|
Verfasst am: 09.07.2009, 11:14 Titel: |
|
|
Code: | #Macro MUTEXLINE (t, buffer, x, y, a, b, c)
MutexLock t
Line buffer, (x,y)-(a,b),c
MutexUnlock t
#EndMacro
MUTEXLINE(updatethread, buffer, x, y, a, b, RGB(255,255,255)) |  _________________ Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater. |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 09.07.2009, 11:35 Titel: |
|
|
@Volta: Sowas hätt ich auch in eine normale function reinpacken können. Dafür braucht man kein makro bemühen.
Ausserdem ändert das nichts daran, dass direkte (byte-weise) speicherzugriffe im buffer trotzdem wieder mit dem lese-zugriff des update-threads kollidieren.
Wie machen die das in der GFX-Lib?!? .. ich kann dort in den Screen-Speicher direkt bytes rein und rausschreiben, ohne das deren Update-Thread aus dem tritt kommt!! Sowas will ich auch
Es kann ja durchaus vorkommen, das ich den pointer zum buffer an eine funktion übergeben will, die ich nicht programmiert habe.. oder dessen quelltext mir nicht verfügbar ist (über eine API oder ne vorkompilierte LIB). Und trotzdem soll der Update-Thread den buffer regelmäßig ausgeben  |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 09.07.2009, 12:19 Titel: |
|
|
ein Makro ist hier deutlich schneller als eine Funktion / sub ... die Funktion / Sub muss erst "aufgebaut" werden, bevor sie ausgeführt wird. ein Makro hingegen ist eine erstetzung des quelltextes .. ohne sub / function.
Zu deinem Problem: ka, was du genau für ein problem hast.
Aber, wenn du schreibzugriffe in den speicher hast, und einen update thread brauchst, dann zeichne doch in einen eigenen speicher, und nutze den update-thread um deinen speicher auf den screen speicher zu blitten.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 09.07.2009, 12:20 Titel: |
|
|
was heisst "blitten" ?
Hat einer noch eine idee zu meiner 1. frage? |
|
Nach oben |
|
 |
MisterD

Anmeldungsdatum: 10.09.2004 Beiträge: 3071 Wohnort: bei Darmstadt
|
Verfasst am: 09.07.2009, 15:31 Titel: |
|
|
ThePuppetMaster hat Folgendes geschrieben: | ein Makro ist hier deutlich schneller als eine Funktion / sub ... die Funktion / Sub muss erst "aufgebaut" werden, bevor sie ausgeführt wird. ein Makro hingegen ist eine erstetzung des quelltextes .. ohne sub / function. |
Der Compiler sorgt eigentlich dafür, dass in dermaßen simplen fällen dir kein performance-verlust entsteht (inlining!).. ich bin mir nicht sicher ob fbc schlecht genug ist um das nicht zu machen, aber man sollte eigentlich erwarten können dass er das wegoptimiert.. _________________ "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration."
Edsger W. Dijkstra |
|
Nach oben |
|
 |
St_W

Anmeldungsdatum: 22.07.2007 Beiträge: 956 Wohnort: Austria
|
|
Nach oben |
|
 |
Jojo alter Rang

Anmeldungsdatum: 12.02.2005 Beiträge: 9736 Wohnort: Neben der Festplatte
|
Verfasst am: 09.07.2009, 17:52 Titel: |
|
|
"optimiert nicht" ist eine sehr generische aussage und dass er GAR nicht optimiert, scheint mir nicht sehr glaubhaft. _________________ » Die Mathematik wurde geschaffen, um Probleme zu lösen, die es nicht gäbe, wenn die Mathematik nicht erschaffen worden wäre.
 |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 13.07.2009, 08:27 Titel: |
|
|
ich wollte mich nochmal melden, besonders wegen meiner ersten frage XD .. |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 13.07.2009, 11:24 Titel: |
|
|
ah ok, jetzt weiss ich was blitting ist. aber wie hilft mir das weiter? .. gibts in FB einen befehl dafür den ich einsetzen kann? |
|
Nach oben |
|
 |
ThePuppetMaster

Anmeldungsdatum: 18.02.2007 Beiträge: 1839 Wohnort: [JN58JR]
|
Verfasst am: 13.07.2009, 12:10 Titel: |
|
|
"Blitting" ist eigentlich eher eine Programmiertechnik als eine Komponente. Hierbei wird der zu anzeigende Inhalt nicht direkt in den Speicher für die Direkte ausgabe auf dem Monitor geschrieben, sondern in einen zwischenspeicher. Ist man damit fertig, nutzt man einen sehr schnellen Kopiervorgang (z.B. Bei DX über einen Pointer via FLIP) oder über PUT bzw GET mit FB direkt.
MfG
TPM _________________ [ WebFBC ][ OPS ][ ToOFlo ][ Wiemann.TV ] |
|
Nach oben |
|
 |
OneCypher
Anmeldungsdatum: 23.09.2007 Beiträge: 802
|
Verfasst am: 13.07.2009, 12:18 Titel: |
|
|
Ok, mit put und get hatte ich auch vor in dem update-thread zu arbeiten. Aber wie hilft mir diese erkenntnis weiter? |
|
Nach oben |
|
 |
|