SetBuffer für BlitzMax, gibts sowas?

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

rema

Betreff: SetBuffer für BlitzMax, gibts sowas?

BeitragDo, Mai 26, 2005 23:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Unter allen BB Varianten gibts SetBuffer( ImageBuffer( meinImage ) ) oder so ähnlich. Gibts das unter BlitzMax nicht mehr? Oder sieht dies jetzt anders aus?

Danke für jedlichen Tip Smile
 

Dreamora

BeitragFr, Mai 27, 2005 0:01
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein gibt es nicht. Da OpenGL im Unterschied zu DX keine Surfaces kennt, wird es dies auch nicht geben, da es nicht möglich ist. Der einzige Buffer den OpenGL kennt ist der Backbuffer auf den du zeichnest und der rein geflipt wird.
(höchstens als Usererweiterung für das DX7 Modul wenns da ist)
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

regaa

BeitragFr, Mai 27, 2005 0:56
Antworten mit Zitat
Benutzer-Profile anzeigen
Benutze unter anderem GrabImage.
UltraMixer Professional 3 - Download
QB,HTML,CSS,JS,PHP,SQL,>>B2D,B3D,BP,BlitzMax,C,C++,Java,C#,VB6 , C#, VB.Net

Henry

BeitragFr, Mai 27, 2005 10:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist auch im Endeffekt ganz einfach...Du erstellst wie üblich ein leeres Bild, nutzt allerdings den Backbuffer, um alle Elemente zu zeichnen, die in dieses Bild sollen...dann führst Du einen GrabImage (oder GrabPixmap) aus und löscht den Backbuffer wieder.
Aiya Eärendil Elenion Ancalima!

All you have to decide is what to do with the time that is given to you.

Robsite.de ist eine Anlaufstelle für Tutorials und Tools, die Noobs das Leben leichter machen!
Forensuche ist nicht nur als Lückenfüller in den oberen Links gedacht!

Vertex

BeitragSa, Mai 28, 2005 12:06
Antworten mit Zitat
Benutzer-Profile anzeigen
Zum Verständnis: Die Grafikkarte hat zwar mehrere Renderingpages aber keine Surfaces. Da Max2D z. Z. den glMax2D-Treiber nutzt - ergo das ganze auf OpenGL basiert, würde soetwas höchstens über RenderToTexture-Extension her gehen. Nachteile sind an die Textur selber gebunden - sie muss quadratisch sein.

Der bald kommende DirectDraw7 Treiber, der nicht auf 3D-Beschleuniger basiert, kann jedoch Surfaces(in dem Sinne Buffers) unterstützen. Die abstrakte Struktur eines Treibers sieht jedoch so aus:
Code: [AUSKLAPPEN]
Type TImageFrame
   
   Method Draw( x0#,y0#,x1#,y1#,tx#,ty# ) Abstract
   Method Lock:TPixmap( read_lock,write_lock ) Abstract
   Method Unlock() Abstract
   
End Type


Code: [AUSKLAPPEN]
Type TMax2DDriver

   Method Graphics( width,height,depth,hertz ) Abstract
   Method EndGraphics() Abstract
   Method Flip() Abstract
   Method SetMouseVisible( visible ) Abstract
   
   Method CreateFrameWithSize:TImageFrame( width,height,flags ) Abstract
   Method CreateFrameFromPixmap:TImageFrame( pixmap:TPixmap,flags ) Abstract
   
   Method SetBlend( blend ) Abstract
   Method SetAlpha( alpha# ) Abstract
   Method SetColor( red,green,blue ) Abstract
   Method SetClsColor( red,green,blue ) Abstract
   Method SetViewport( x,y,width,height ) Abstract
   Method SetTransform( xx#,xy#,yx#,yy# ) Abstract
   Method SetLineWidth( width# ) Abstract
   
   Method Cls() Abstract
   Method Plot( x#,y# ) Abstract
   Method DrawLine( x0#,y0#,x1#,y1#,tx#,ty# ) Abstract
   Method DrawRect( x0#,y0#,x1#,y1#,tx#,ty# ) Abstract
   Method DrawOval( x0#,y0#,x1#,y1#,tx#,ty# ) Abstract
   Method DrawPoly( xy#[],handlex#,handley#,originx#,originy# ) Abstract
      
   Method DrawPixmap( pixmap:TPixmap,x,y ) Abstract
   Method GrabPixmap:TPixmap( x,y,width,height ) Abstract
End Type


TMax2DDriver ist für die Ausgabe zuständig, glMax2D nutzt hierfür OpenGL. TImageFrame werden dann im DirectDraw7-Treiber die Surfaces sein. Der aktuelle glMax2D-Treiber nutzt zum darstellen eines ImagesFrames(ein Image hat min. ein ImageFrame) ein GL_Quad(was übrigens Performenceverluste mit sich zieht, da das Triangulieren stattfindet) das direkt von der 3D-Renderpipeline gerendert wird.

mfg olli
vertex.dreamfall.at | GitHub

DivineDominion

BeitragSa, Mai 28, 2005 13:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist dennoch ziemlich bescheuert, weil ich jetzt bei so was trivialem wie einer kleinen Textbox an 0,0 erst einmal alles malen muss um es dann zu grabben. Ichweiß ja nicht wie das im fertigen Spiel aussieht, aber jetzt bei schwarzem Hintergrund flackert das an 0,0 für eine Frame sichtbar auf. Finde ich reichlich unschön.
christian.tietze@gmail.com - https://christiantietze.de
macOS
 

klepto2

BeitragSa, Mai 28, 2005 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast du daran gedacht nach dem grabben CLS vor dem Flip zu benutzen?

Vertex

BeitragSa, Mai 28, 2005 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
Die Grafikkarte hat mehrere Pages zur verfügung. Eine könnte man für die Szene nehmen, und eine andere für die Textbox. Muss mal schauen, wie man das umsetzen kann, ohne das dabei Max2D beeinflusst wird.

http://www.mevis.de/~uwe/opengl/glDrawBuffer.html

Man setzt z. B. erst GL_BACK_LEFT für seine Szene, rendert diese, dann setzt man GL_BACK_RIGHT rendert seine Textbox, grabt diese, setzt wieder GL_BACK_LEFT zeichnet die Tetxbox und Swapt dann die Buffer(Flip).

mfg olli

Edit4:
Code: [AUSKLAPPEN]
Strict

Local Image : TImage
Local Angle : Float

Graphics(640, 480, 0, 0)

SetClsColor(255, 255, 0)
Image = CreateImage(256, 256)

While Not KeyDown(KEY_ESCAPE)
   Angle :+ 3.0

   glDrawBuffer(GL_BACK_LEFT)
   Cls
   
   glDrawBuffer(GL_FRONT_LEFT)
   SetColor Cos(Angle)*127+127, 0, 255
   DrawRect 0, 0, 256, 256
   GrabImage(Image, 0, 0)

   
   glDrawBuffer(GL_BACK_LEFT)
   DrawImage(Image, MouseX(), MouseY())
   Flip()
   
   FlushMem()
Wend
vertex.dreamfall.at | GitHub
  • Zuletzt bearbeitet von Vertex am Sa, Mai 28, 2005 15:04, insgesamt 4-mal bearbeitet

rema

BeitragSa, Mai 28, 2005 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
Also doch, ich muss mich wohl oder übel mit OpenGL beschäftigen. Naja, schon schlimmere Tage gehabt Wink

Danke für die Aufklärung!
 

Dreamora

BeitragSa, Mai 28, 2005 18:30
Antworten mit Zitat
Benutzer-Profile anzeigen
Bescheuert ist es nicht. OpenGL ist halt nur für 3D gemacht worden, entsprechend schlecht funktionieren 2D Spielereien wie direktes Arbeiten auf Texturen etc.

Wird wahrscheinlich mit ein Grund sein, warum auf Linux und so SDL eine Beliebtheit hat wie DirectX auf Windows.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group