GLMax2dDriver() oder doch ganz anders?
Übersicht

OldSkool90Betreff: GLMax2dDriver() oder doch ganz anders? |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich hätte da mal eine kleine bescheidene Frage.
Und zwar würde ich gerne wissen, ob es eine Alternative zum BMax OpenGL treiber gibt? Vielleicht irgendein Modul das um einiges schneller ist? Ich such mich dumm und dämlich, aber finde leider nichts =/ Hoffe ihr könnt mir da weiterhelfen^^ |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich hatte mit dem OGl-Treiber als solches noch keine Performanceprobleme. Die Implementierung von Max2D ist recht grottig, aber der Treiber selbst ist doch okay. | ||
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 |
OldSkool90 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hmm dann muss es mein sourcecode sein, der so langsam is...ich versuche immernoch meine schatten"berechnung" voranzutreiben, aber bei 50 schatten und schattenquellen sinken die fps unter 30...bei einer auflösung von 1680x1050
und bei 200 hängt sich das programm auf. |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich wiederhole mich mal:
Es liegt an der "DrawPoly"-Funktion. Die ist ziemlich lahm und kaum optimierbar. Wenn man einige Aufrufe davon in deinem Code auskommentiert, wird dieser spürbar schneller. mfG mpmxyz leichtes Offtopic: Ich finde die Implementierung von GLMax2D bis auf die Tatsache mit der glBegin/glEnd- und der Texturenverschwendung ganz Ok. |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
ja, aber diese kleinigkeiten sind es die max total ausbremsen, was sehr schade ist. | ||
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 |
OldSkool90 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
hä? achja kannst du ja garnicht wissen. ich habe drawpoly durch gl_quads ersetzt...quad_strips wären natürlich schneller aber die versteh ich irgendwie nich ganz^^
und ich frage jetz immer ab an welcher position sich das licht relativ zum objekt befindet und lasse nur relevante quads zeichnen. trotzdem kaum schneller o.O |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ohne Code... | ||
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 |
OldSkool90 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
ja ich weiss xD moment...is aber alles ziemlich wirr ![]() EDIT:sry das war der alte code^^ Code: [AUSKLAPPEN] SuperStrict
Global gx:Int,gy:Int,a:Int Global LineToggle:Int = 0 gx = 1024 gy = 768 Global WallList:TList = CreateList() Type LightSource Field x1:Int Field x2:Int Field y1:Int Field y2:Int Field xSrc:Float Field ySrc:Float Field xDir1:Float Field yDir1:Float Field xDir2:Float Field yDir2:Float Field VertexLO1:Int Field VertexRO1:Int Field VertexRU1:Int Field VertexLU1:Int Field VertexLO2:Int Field VertexRO2:Int Field VertexRU2:Int Field VertexLU2:Int Method DrawLightSource() DrawOval x1,y1,(x2-x1),(y2-y1) EndMethod Method DrawLightDirection() For Local Entity:Wall = EachIn WallList xDir1 = Entity.x1 yDir1 = Entity.y1 xDir2 = Entity.x2 yDir2 = Entity.y2 If LineToggle = 1 If (xSrc >= xDir1 And ySrc <= yDir1) Or (xSrc <= xDir1 And ySrc >= yDir1) DrawLine xSrc,ySrc,(xDir1+(xDir1-xSrc)*500),(yDir1+(yDir1-ySrc)*500) EndIf If (xSrc <= xDir2 And ySrc <= yDir1) Or (xSrc >= xDir2 And ySrc >= yDir1) DrawLine xSrc,ySrc,(xDir2+(xDir2-xSrc)*500),(yDir1+(yDir1-ySrc)*500) EndIf If (xSrc >= xDir2 And ySrc <= yDir2) Or (xSrc <= xDir2 And ySrc >= yDir2) DrawLine xSrc,ySrc,(xDir2+(xDir2-xSrc)*500),(yDir2+(yDir2-ySrc)*500) EndIf If (xSrc <= xDir1 And ySrc <= yDir2) Or (xSrc >= xDir1 And ySrc >= yDir2) DrawLine xSrc,ySrc,(xDir1+(xDir1-xSrc)*500),(yDir2+(yDir2-ySrc)*500) EndIf EndIf If LineToggle = 0 SetBlend (ALPHABLEND) SetAlpha 0.5 glColor3f(0.35,0.35,0.35) glBegin (GL_QUADS) If (xSrc >= xDir2 And ySrc <= yDir1) glVertex2f xDir1,yDir1 glVertex2f xDir1+(xDir1-xSrc)*500,yDir1+(yDir1-ySrc)*500 glVertex2f xDir1+(xDir1-xSrc)*500,yDir2+(yDir2-ySrc)*500 glVertex2f xDir1,yDir2 glVertex2f xDir1,yDir2 glVertex2f xDir1+(xDir1-xSrc)*500,yDir2+(yDir2-ySrc)*500 glVertex2f xDir2+(xDir2-xSrc)*500,yDir2+(yDir2-ySrc)*500 glVertex2f xDir2,yDir2 EndIf If (xSrc <= xDir1 And ySrc <= yDir1) glVertex2f xDir2,yDir1 glVertex2f xDir2+(xDir2-xSrc)*500,yDir1+(yDir1-ySrc)*500 glVertex2f xDir2+(xDir2-xSrc)*500,yDir2+(yDir2-ySrc)*500 glVertex2f xDir2,yDir2 glVertex2f xDir2,yDir2 glVertex2f xDir2+(xDir2-xSrc)*500,yDir2+(yDir2-ySrc)*500 glVertex2f xDir1+(xDir1-xSrc)*500,yDir2+(yDir2-ySrc)*500 glVertex2f xDir1,yDir2 EndIf If (xSrc <= xDir1 And ySrc >= yDir2) glVertex2f xDir1,yDir1 glVertex2f xDir1+(xDir1-xSrc)*500,yDir1+(yDir1-ySrc)*500 glVertex2f xDir2+(xDir2-xSrc)*500,yDir1+(yDir1-ySrc)*500 glVertex2f xDir2,yDir1 glVertex2f xDir2,yDir2 glVertex2f xDir2+(xDir2-xSrc)*500,yDir2+(yDir2-ySrc)*500 glVertex2f xDir2+(xDir2-xSrc)*500,yDir1+(yDir1-ySrc)*500 glVertex2f xDir2,yDir1 EndIf If (xSrc >= xDir2 And ySrc >= yDir2) glVertex2f xDir1,yDir1 glVertex2f xDir1+(xDir1-xSrc)*500,yDir1+(yDir1-ySrc)*500 glVertex2f xDir2+(xDir2-xSrc)*500,yDir1+(yDir1-ySrc)*500 glVertex2f xDir2,yDir1 glVertex2f xDir1,yDir2 glVertex2f xDir1+(xDir1-xSrc)*500,yDir2+(yDir2-ySrc)*500 glVertex2f xDir1+(xDir1-xSrc)*500,yDir1+(yDir1-ySrc)*500 glVertex2f xDir1,yDir1 EndIf If (xSrc >= xDir1 And xSrc <= xDir2 And ySrc <= yDir1) glVertex2f xDir1,yDir1 glVertex2f xDir1+(xDir1-xSrc)*500,yDir1+(yDir1-ySrc)*500 glVertex2f xDir2+(xDir2-xSrc)*500,yDir1+(yDir1-ySrc)*500 glVertex2f xDir2,yDir1 EndIf If (xSrc >= xDir1 And xSrc <= xDir2 And ySrc >= yDir2) glVertex2f xDir1,yDir2 glVertex2f xDir1+(xDir1-xSrc)*500,yDir2+(yDir2-ySrc)*500 glVertex2f xDir2+(xDir2-xSrc)*500,yDir2+(yDir2-ySrc)*500 glVertex2f xDir2,yDir2 EndIf If (xSrc <= xDir1 And ySrc <= yDir2 And ySrc >= yDir1) glVertex2f xDir1,yDir1 glVertex2f xDir1+(xDir1-xSrc)*500,yDir1+(yDir1-ySrc)*500 glVertex2f xDir1+(xDir1-xSrc)*500,yDir2+(yDir2-ySrc)*500 glVertex2f xDir1,yDir2 EndIf If (xSrc >= xDir2 And ySrc <= yDir2 And ySrc >= yDir1) glVertex2f xDir2,yDir1 glVertex2f xDir2+(xDir2-xSrc)*500,yDir1+(yDir1-ySrc)*500 glVertex2f xDir2+(xDir2-xSrc)*500,yDir2+(yDir2-ySrc)*500 glVertex2f xDir2,yDir2 EndIf SetAlpha 1 glEnd() EndIf SetColor 255,255,255 Next EndMethod EndType Type Wall Field x1:Int Field x2:Int Field x3:Int Field x4:Int Field y1:Int Field y2:Int Field y3:Int Field y4:Int Method DrawWall() DrawRect x1,y1,(x2-x1),(y2-y1) EndMethod EndType Local Light:LightSource = New LightSource For a = 0 To 25 Local Entity:Wall = New Wall Entity.x1 = Rnd(gx) Entity.x2 = Entity.x1+gx/10 Entity.y1 = Rnd(gy) Entity.y2 = Entity.y1+gy/10 ListAddLast WallList, Entity Next SetGraphicsDriver GLMax2DDriver() Graphics gx,gy,32,60 SetClsColor 155,155,155 HideMouse() While Not KeyHit(key_escape) Cls If KeyHit(key_q) LineToggle = 1 - LineToggle EndIf Light.x1 = MouseX()-10 Light.x2 = Light.x1 + 20 Light.y1 = MouseY()-10 Light.y2 = Light.y1 + 20 Light.xSrc = MouseX() Light.ySrc = MouseY() Light.DrawLightSource() For Local Entity:Wall = EachIn WallList Light.DrawLightDirection() Next For Local Entity:Wall = EachIn WallList Entity.DrawWall() Next Flip Wend End is nur unwesentlich schneller als vorher =/ |
||
![]() |
mpmxyz |
![]() Antworten mit Zitat ![]() |
---|---|---|
Was hast du geändert?
Du nutzt jetzt DirectX... So viel zur Optimierung... mfG mpmxyz Edit: Das hat sich jetzt erübrigt. |
||
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Code nutzt weiter DrawPoly. Nebenbei liegt dein Fehler ein klein wenig woanders ![]() Du rufst das Einzeichnen so auf: Code: [AUSKLAPPEN] For Local Entity:Wall = EachIn WallList
Light.DrawLightDirection() Next Fällt Dir da was auf? Noch dazu rufst du ja schon in deiner Methode alle Einträge in WallList auf, es ist also unnötig ausserhalb durchzuiterieren. entferne die For next und schwupp rennt die Sauce. Selbst bei 1000 Elementen flutscht es noch - du hattest halt nur jedes Polygon xmal eingezeichnet. |
||
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 |
![]() |
HackerBoyZ |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein simples
BlitzMax: [AUSKLAPPEN] Global fpsTimer:TTimer = CreateTimer( 60 ) bewirkt bei mir schon wunder ![]() |
||
OldSkool90 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
BladeRunner hat Folgendes geschrieben: Der Code nutzt weiter DrawPoly. Nebenbei liegt dein Fehler ein klein wenig woanders
![]() Du rufst das Einzeichnen so auf: Code: [AUSKLAPPEN] For Local Entity:Wall = EachIn WallList
Light.DrawLightDirection() Next Fällt Dir da was auf? Noch dazu rufst du ja schon in deiner Methode alle Einträge in WallList auf, es ist also unnötig ausserhalb durchzuiterieren. entferne die For next und schwupp rennt die Sauce. Selbst bei 1000 Elementen flutscht es noch - du hattest halt nur jedes Polygon xmal eingezeichnet. hmm hatte das tatsächlich nicht bemerkt...da hab ich dem rechner doch unsinnigerweise mehr arbeit aufgezwungen o.O aber wieso drawpoly? ich benutz doch quads? drawpoly kann aber nur mit 3 koordinaten umgehen. aber naja hab grad mal die unsinnige for...next schleife entfernt und siehe da: jetz sinken die fps erst bei 16850x1050 und 1000 auf ca 40 Aber du drückst das so aus, als würde mit Light.DrawLightDirection noch etwas nicht stimmen o.O |
||
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
na, das Äußere der Schleife hat rein gar nichts mit dem Inneren der Schleife zu tun!
Du rufst eine Schleife, die alle Wall.Entitys durchläuft: BlitzMax: [AUSKLAPPEN] ... und in der Aktion innerhalb dieser Schleife kommt dann dieser Wert Entity:Wall gar nicht vor. Hier wird nur von ... BlitzMax: [AUSKLAPPEN] ... ...gesprochen. Warum dann alle Walls durchlaufen lassen? Die Aktion Light.DrawLightDirection() wird so unnötig oft aufgerufen. Zumal innerhalb der Light.DrawLightDirection() sowieso nochmals alle Walls durchlaufen: BlitzMax: [AUSKLAPPEN] Method DrawLightDirection() Die äußere Schleife ist also Quatsch. Statt... BlitzMax: [AUSKLAPPEN] ... ..würde auch... BlitzMax: [AUSKLAPPEN] ... ...genügen, und hätte den gleichen Effekt. Oder wolltest Du hier schon mal eine Scheife für mehrere Lichquellen schaffen? BlitzMax: [AUSKLAPPEN] ... |
||
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Als ich auf deinen Code antwortete waren da noch die Drawpolys, oldskool. Du hast deinen Beitrag wohl noch bearbeitet. | ||
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 |
OldSkool90 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@BladeRunner:
jop kurz darauf, als ich merkte, dass ich den code aus der falschen datei kopiert hab^^ naja egal jetzt läuft es ja schnell @Midimaster: nene...das war reine gewöhnungssache aus b3d xD da hab ich das ganze immer erst kurz vor ende der hauptschleife durchlaufen lassen und hab durch die gewohnheit nichtmal bemerkt, dass ich das bereits in einer method getan hab...klar, dass das viel performance frisst...statt 10 schatten errechnet er dann 100 (denke ich) xD was blödsinn is *schäm* |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group