MaxGUI Canvas Graphics

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

ToeB

Betreff: MaxGUI Canvas Graphics

BeitragMo, Jul 16, 2012 0:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich habe ein Problem und zwar möchte ich ein Polygone auf einen Canvas malen, welches mit einem Bild versehen ist. Dazu benutze ich folgende Funktion:

BlitzMax: [AUSKLAPPEN]
Function DrawTexturedPoly( image:TImage,xyuv:Float[],frame:Int=0, vertex:Int = -1)
Local handle_x#, handle_y#
GetHandle handle_x#, handle_y#
Local origin_x#, origin_y#
GetOrigin origin_x#, origin_y#

Local D3DDriver:TD3D7Max2DDriver = TD3D7Max2DDriver(_max2dDriver)

Assert Image, "Image not found"

If D3DDriver Then
DrawTexturedPolyD3D ..
D3DDriver,..
TD3D7ImageFrame(image.Frame(frame)), ..
xyuv, handle_x, handle_y, origin_x,origin_y, vertex*4
Return
End If
Local OGLDriver:TGLMax2DDriver = TGLMax2DDriver(_max2dDriver)
If OGLDriver Then
DrawTexturedPolyOGL ..
OGLDriver,..
TGLImageFrame(image.Frame(frame)), ..
xyuv, handle_x, handle_y, origin_x,origin_y, vertex*4
Return
End If
Print "NO Driver"
End Function


Da nichts gemalt worden ist habe ich unten das "Prin "No Driver"" eingebaut um zu gucken ob der einen Driver gefunden hat. Meine Frage: Welchen GraphicsDriver benutzt die Funktion CanvasGraphics ? Kann ich den Irgendwie zu einem OpenGL Driver bzw. DirectX Driver konvertieren damit ich die Funktion verwenden kann oder muss ich das anders lösen? Und wenn ja, wie ?

Danke schonmal,

Lg, Tobias
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

BladeRunner

Moderator

BeitragMo, Jul 16, 2012 8:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich schätze mal maxgui wird den Treiber nutzen den dein System benutzt. Wenn Du also ein aktuelles Windows hast sollte das Minimum DX9 (bei XP), eher sogar 10 oder 11 sein, weshalb BMax auch den DX9-Treiber benutzen wird..
Deswegen krepiert der Code dann auch, er findet ja keine passende Schnittstelle.

Was Du versuchen könntest wäre VOR erstellen aller Inhalte den Driver zu setzen:
BlitzMax: [AUSKLAPPEN]
Import maxgui.drivers
SetGraphicsDriver(GLMax2DDriver() )
CreateWindow("" , 0 , 0 , 100 , 100 , Null)
If TGLMax2DDriver( GetGraphicsDriver())<>Null Print "yeah!"

Zumindest hier scheint das zu funktionieren, allerdings hab ich noch nicht versucht in dem Fenster was zu zeichnen.


Die bessere Lösung wäre es allerdings dein Drawtexturedpoly auch an DX9 anzupassen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

ToeB

BeitragMo, Jul 16, 2012 9:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja jetzt zeigt er mir zumindest an das er den Driver gefunden hat. Schonmal ein anfang. Da ich mich aber nicht so mit OpenGL und DirectX auskenne weiß ich leider nicht wie ich die Funktionen verändern kann damit ich auch etwas sehen kann :/

BlitzMax: [AUSKLAPPEN]
Function DrawTexturedPolyD3D( Driver:TD3D7Max2DDriver,  Frame:TD3D7ImageFrame,xyuv#[],handlex#,handley#,tx#,ty# , vertex:Int)
'If Driver.islost Return
If xyuv.length<6 Return
Local segs:Int=xyuv.length/4
Local len_:Int = Len(xyuv)

If vertex > - 1 Then
segs = vertex / 4
len_ = vertex
End If
Local uv#[] = New Float[segs*6] ' 6


Local c:Int Ptr=Int Ptr(Float Ptr(uv))

Local ii:Int = 0
For Local i:Int=0 Until len_ Step 4
Local x# = xyuv[i+0]+handlex
Local y# = xyuv[i+1]+handley
uv[ii+0] = x*Driver.ix+y*Driver.iy+tx
uv[ii+1] = x*Driver.jx+y*Driver.jy+ty
uv[ii+2] = 0 ' *********** THIS IS THE Z-COORDINATE
c[ii+3] = Driver.DrawColor
uv[ii+4] = xyuv[i+2]
uv[ii+5] = xyuv[i+3]
ii:+6
Next
Driver.SetActiveFrame Frame
Driver.device.DrawPrimitive(D3DPT_TRIANGLEFAN,D3DFVF_XYZ| D3DFVF_DIFFUSE | D3DFVF_TEX1,uv,segs,0)
End Function

Function DrawTexturedPolyOGL (Driver:TGLMax2DDriver, Frame:TGLImageFrame, xy#[],handle_x#,handle_y#,origin_x#,origin_y#, vertex:Int)
Private
Global TmpImage:TImage
Public

If xy.length<6 Return

Local rot# = GetRotation()
Local tform_scale_x#, tform_scale_y#
GetScale tform_scale_x, tform_scale_y

Local s#=Sin(rot)
Local c#=Cos(rot)
Local ix:Int= c*tform_scale_x
Local iy:Int=-s*tform_scale_y
Local jx:Int= s*tform_scale_x
Local jy:Int= c*tform_scale_y

glBindTexture GL_TEXTURE_2D, Frame.name
glEnable GL_TEXTURE_2D

glBegin GL_POLYGON
For Local i:Int=0 Until Len xy Step 4
If vertex > -1 And i >= vertex Then Exit
Local x#=xy[i+0]+handle_x
Local y#=xy[i+1]+handle_y
Local u#=xy[i+2]
Local v#=xy[i+3]
glTexCoord2f u,v
glVertex2f x*ix+y*iy+origin_x,x*jx+y*jy+origin_y
Next
glEnd
If Not tmpImage Then tmpImage = CreateImage(1,1)
DrawImage tmpImage, -100, - 100 ' Chtob zbit' flag texturi
End Function


Vielleicht hat ja einer eine Idee !

Okay lag grade an den Koordinaten. B3D7Max2DDriver geht nun Wink

Lg, Tobias
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!
  • Zuletzt bearbeitet von ToeB am Mo, Jul 16, 2012 9:35, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragMo, Jul 16, 2012 9:32
Antworten mit Zitat
Benutzer-Profile anzeigen
Also stürzt das Programm nicht mehr ab, es wird nur nix eingezeichnet? Flipst Du denn dein Canvas? Es wäre interessant den verantwortlichen Code komplett zu sehen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

ToeB

BeitragMo, Jul 16, 2012 12:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Ne abstürzen tut es nicht nur beim GL-Treiber malt er nichts. Wenn ich allerdings den DirectX7 Treiber verwende dann gehts. Und ja, Flip benutze ich:
BlitzMax: [AUSKLAPPEN]
Case EVENT_GADGETPAINT
SetGraphics CanvasGraphics(canvs)
SetClsColor( 32, 32, 32 )
Cls
SetColor( 64, 64, 64 )
DrawRect( -startx, 0, 1, 600 )
DrawRect( 0, -starty, 800, 1 )
If tree Then animation.Draw( startx, starty, zoom, True )
SetScale( 1, 1 )
SetBlend( SOLIDBLEND )
SetAlpha( 1 )
SetColor( 255, 255, 255 )
SetRotation( 0 )
SetHandle( 0, 0 )

'For i = 1 To 20
'Local t:TKeyFrame = TKeyFrame.Get( i )
'If t Then
't.tree.Draw( startx, starty, zoom )
'EndIf
'Next
If selected Then
Local p:Tvec2 = selected.GetPosition( 1 )
SetColor( 255, 255, 32 )
DrawOval_Ex( -startx+p.x*zoom, -starty+p.y*zoom, 9, 10 )
EndIf
If imagejoint[0] Then
p = imagejoint[0].GetPosition( 1 )
SetColor( 32, 32, 255 )
DrawOval_Ex( -startx+p.x*zoom, -starty+p.y*zoom, 9, 10 )
If imagejoint[1] And imagejoint[1] <> imagejoint[0] Then
Local p2:TVec2 = imagejoint[1].GetPosition( 1 )
DrawOval_ex( -startx+p2.x*zoom, -starty+p2.y*zoom, 9, 10 )
SetColor( 255, 255, 32 )
DrawLine( -startx+p.x*zoom, -starty+p.y*zoom, -startx+p2.x*zoom, -starty+p2.y*zoom )
EndIf
EndIf
Local time1:Int = Floor(animation.playTime)
Local time2:Int = Ceil(animation.playTime)
Local time:Float = animation.playTime-time1

SetColor( 200, 200, 200 )

DrawText( "FrameTime: "+animation.playTime, 0, 0 )
DrawText( "FrameSpeed: "+animation.playSpeed, 0, 15 )
DrawText( "Frame1: "+time1, 0, 30 )
DrawText( "Frame2: "+time2, 0, 45 )
DrawText( "Proz: "+time, 0, 60 )
Flip 0



Die ganzen anderen Max2D Elemente malt er ja ohne Probleme Wink

Lg, Tobias
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

Midimaster

BeitragMo, Jul 16, 2012 17:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Hast Du denn schon sichergestellt, dass der Code ohne die MaxGui aber mit dem gewünschten Treiber überhaupt was malt?
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe

ToeB

BeitragMo, Jul 16, 2012 18:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja hab ich. Und ich habe ja schon geschrieben das er jetzt das malt was ich will aber halt nur um DirectX7 Driver nicht mit OpenGL Wink

Lg, Tobias
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art
SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek
Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt!

BladeRunner

Moderator

BeitragMo, Jul 16, 2012 21:22
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich schätze mal einfach dass MaxGUI unter Windows an DX gebunden ist, da es ja native Elemente von Windows einbindet und DX da die Standardschnittstelle ist. Anders mag es auf MacOS aussehen- da ist ja OGL die Standardschnittstelle.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

ZEVS

BeitragMo, Jul 16, 2012 21:50
Antworten mit Zitat
Benutzer-Profile anzeigen
@BladeRunner: Wenn sogar minib3d mit MaxGUI läuft, sollte auch eine einfachere OpenGL-Anwendung nicht daran scheitern.
Mir liegt zwar das maxgui.bmx-Beispiel aus minib3d vor, aber mir ist es nicht gelungen, etwas vergleichbares mit GLMax2D hinzukriegen Sad

ZEVS
 

jsp

BeitragMo, Jul 16, 2012 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich benutze XP in einer virtuellen VM-Ware Umgebung, dort gibt es überhaupt kein DX sondern nur OGL und funktioniert einwandfrei mit MaxGUI und mit Canvas.
Logic Gui Professional a Gui Designer for MaxGui

BladeRunner

Moderator

BeitragDi, Jul 17, 2012 7:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Mag ja durchaus sein dass ich mich da irre, ich hab ja nur Vermutungen geäussert.
Ohne lauffähigen Code seitens ToeB kann ich auch weiter nur vermuten, da ich nicht selbst testen und basteln kann. Da es unter DX7 funzt und unter OGl nicht war es für mich nur die logische Schlussfolgerung dass sich da schnittstellenseits was in die Quere kommt.
Laufen denn OGL-Codes ganz allgemein bei dir, Toeb?
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group