Kann man irgendwie in BB+ direkt in den Frontbuffer malen?

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

DerHase

Betreff: Kann man irgendwie in BB+ direkt in den Frontbuffer malen?

BeitragDo, Dez 23, 2004 13:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich möchte, ein Programm schreiben, das mit readpixel writepixel und rect arbeitet und ohne flip auf dem Bildschirm malt. Laut Online Handbuch geht es ja nicht mehr.

Vertex

BeitragDo, Dez 23, 2004 14:03
Antworten mit Zitat
Benutzer-Profile anzeigen
Was hindert dich daran das ganze in Backbuffer zu machen? Bist kein Freund von Geschwindigkeit?
vertex.dreamfall.at | GitHub

DerHase

BeitragDo, Dez 23, 2004 14:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber dann muss ich doch trotzdem flippen und genau das will ich NICHT.
 

David

BeitragDo, Dez 23, 2004 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Wenn du mit dem Backbuffer arbeitest musst du gezwungenermasen flippen, sonst siehst du nämlich nichts.
Das war auch noch nie anders...

grüße

Jan_

Ehemaliger Admin

BeitragDo, Dez 23, 2004 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
nimm einfach den Desktopbuffer Smile
between angels and insects

DerHase

BeitragDo, Dez 23, 2004 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich will nicht mit Backbuffer arbeiten, aber man ist dazu ja quasi gezwungen. Ich will einfach direkt in den Bildschirmbuffer schreiben, so dass ich nicht flippen muss.
 

David

BeitragDo, Dez 23, 2004 14:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi!

Warum auch immer... Rolling Eyes

grüße

DerHase

BeitragMo, Dez 27, 2004 14:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich weiß zwar nicht warum Menschen in einem Thread antworten, die keine Antwort wissen, aber was soll´s. Ich hab mal ein kleines Beispiel gemacht. DarkAngel war so freundlich mir den selben Code in BlitzBasic, in dem man kein flip braucht um auf den Monitor zu schreiben, zu kompilieren. Hier BlitzBasic Version. Der selbe Code liefert in BlitzPlus einen schwarzen Bildschirm. Also muss ein "flip" eingefügt werden. Dies aber macht das Program extrem langsamer. Hier die BlitzPlus Version. Ich weiß selber, dass ich auch nach jedem 10 Durchlauf flippen könnte usw, aber das frag ich hier nicht. Ich will wissen, ob es in BlitzPlus eine Möglichkeit hat ohne flippen auf den Bildschirm zu malen.

@Jan_: Ich dacht zuerst, das wär die Lösung, aber das ist genau so langsam als wenn ich flippen würde.

Hubsi

BeitragMo, Dez 27, 2004 15:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Flip macht nichts langsamer, es stellt sich nur auf die Bildwiederholrate des Bildschirms ein. Ist dies nicht gewünscht einfach en False an das Flip hängen:Code: [AUSKLAPPEN]
Flip False
Wenn ich Dich richtig verstehe ist es das was Du suchst.
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...

DerHase

BeitragMo, Dez 27, 2004 15:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
flip false

Hab ich auch schon probiert. Da wird die Frame Synkronisation ausgeschalten. Im Fenstermodus wird es dadurch nicht schneller, bzw kaum. Im Vollbildmodus ist es zwar schneller, aber flimmert zu sehr Crying or Very sad Ich weiß nicht warum die das bei BlitzPlus so umgestellt haben und warum es so schlecht dokumentiert ist. In BlitzPlus kann man sich nebenbei die Zeile Code: [AUSKLAPPEN]
Setbuffer Backbuffer()

sparen.
 

GeGenesis

BeitragMo, Dez 27, 2004 16:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
setbuffer frontbuffer()

ist doch klar was er machen will

Hubsi

BeitragMo, Dez 27, 2004 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Und genau das gibts bei BlitzPlus nicht mehr Wink
Den ganzen Doag im Bett umanandflagga und iaz daherkema und meine Hendl`n fressn...
 

Dreamora

BeitragMo, Dez 27, 2004 16:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Flimmern bei Flip 0 ist übrigens nicht ein Problem von Blitz oder so, sondern entsteht wenn die Framerate kein ganzes vielfaches der Bildschirmwiederholfrequenz ist.

Es gibt jedoch eine sehr simple möglichkeit es auszutricksen

Code: [AUSKLAPPEN]

; den renderinterval auf 100 bilder pro Sekunde einstellen
interval = 1000 / 100

; in der mainloop
if millisecs() - last_render >= interval
 last_render = millisecs()
 flip 0
endif



Damit läuft dein Spiel- oder Programcode mit maximaler Geschwindigkeit, während der Flip nur eine bestimmte Anzahl Male pro Sekunde aufgerufen wird ( spart viel rechenzeit und lässt das flacken verschwinden )
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

walski

Ehemaliger Admin

BeitragMo, Dez 27, 2004 16:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Meine Vermutung für deinen Fenstermodus: Im Fenstermodus benutzt DirectX automatisch die Wiederholfrequenz des Desktops, da kann man nichts machen. Ich meine das mal irgendwo gelesen zu haben.

Die einzige Chance ist also entweder denn Vollbildmodus benutzen oder mit der eingestellten Bildwiederholrate auskommen.

walski
buh!

DerHase

BeitragMo, Dez 27, 2004 20:50
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora! Du bist ein Schatz! Scheint genau das zu sein was ich gesucht hab. Danke! Also hier der Code falls jemand damit Lust hat zu experementieren, komme Strange sachen raus, mit bisschen Veränderung kommt ein Nautilus aus Dreiecken raus. Ich werd noch paar andere Sachen in der Richtung coden und dann einen Thread eröffnen. Noch nicht optimiert, vorallem der Teil mit dem Affen Wink
Code: [AUSKLAPPEN]

Graphics 800,600,16,2
x =400
y=300
d=1
affe =ReadPixel( 3,3)
interval = 1000 / 100



Repeat
   c=ReadPixel(x,y)

   If c = affe
      Color 255,255,255
      Rect x,y,2,2,1
      d=d+1   
   Else
      Color 0,0,0
      Rect x,y,2,2,1
      d=d-1
   End If


   If d >=7
      d=d-6
   End If

   If d <= 0
      d=d+6
   End If

   Select d
      Case 1
         x=x+2
      Case 2
         y=y-2
         x=x+1
      Case 3
         y=y-2
         x=x-1
      Case 4
         x=x-2
      Case 5
         y=y+2
         x=x-1
      Case 6
         y=y+2
         x=x+1

   End Select

        If MilliSecs() - last_render >= interval
              last_render = MilliSecs()
              Flip 0
        EndIf

Until KeyHit(1)

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group