Registriert: Mo Mai 29, 2006 21:13 Beiträge: 142 Wohnort: Ballenstedt/Sachsen-Anhalt
Nachdem ich das Post hier gelesen hab, hab ich mich auch an einer Worms-Map versucht. Allerdings habe ich dabe Probleme mit der Textur. Wenn ich sie Rendern will, sehe ich nur weiß und der Rendervorgang dauert pro Frame ca 1,5 sec. Mein Render-Code:
Code:
glPreDraw;
glDisable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);
Enter2dMode(640,480);
Level.Bind;
glBegin(GL_QUADS);
glVertex2d(0,0);
glVertex2d(640,0);
glVertex2d(640,480);
glVertex2d(0,480);//<-- hier tritt lange Wartezeit auf
glEnd;
Exit2dMode;
glAfterDraw(DC);
Level ist ein TglBitmap2d, aktuelle glBitmap.
Die Funtionen sind aus meiner Sammlung
glPreDraw - Clearen der Szene, Modelviewmatrix
Enter2dMode - Ortho-Modus mit den Maßen an, in Modelview wechseln
Exit2dMode - das ganze zurück
glAfterDraw - SwapBuffers
An den Funktionen kann es nicht liegen, da sie in einem anderen Projekt funktionieren.
Die benutzte Textur kann ich noch hochladen, falls es etwas hilft.
EDIT: ich seh schon, die Texturkoordinaten fehlen. aber die Geschwindigkeit ist doch komisch.
Achte drauf dass die Formate der Texturen POT sind, also Potenzen von 2. Wenn das nicht der Fall ist, springt je nach Treiber die Emulation für GL_ARB_non_power_of_two an und der Rendervorgang wird tierisch langsam. Alternativ kannst du natürlich auch GL_TEXTURE_RECTANGLE_ARB als Texturziel verwenden, das ist allerdings mit Einschränkungen verbunden, wie dem Fehlen von Mipmaps und dass du Texturkoordinaten statt im Bereich 0..1 im Bereich 0..Texturgröße angeben musst.
Ganz abgesehen davon scheinst du in deinem Rendercode gar keine Texturkoordinaten anzugeben. Das erklärt, warum du trotz Treiberemulation keine Textur siehst.
Registriert: Mo Mai 29, 2006 21:13 Beiträge: 142 Wohnort: Ballenstedt/Sachsen-Anhalt
Also, die war tatsächlich nicht POT. (wie bin ich drauf gekommen, dass 640*480 passen könnte? )
Jetzt hab ich auf 512*512 gebracht, allerdings ist das schon nicht gut, wegen dem Seitenverhältnis. Naja, muss ich Skalieren. Danke jedenfalls für deine Hilfe, da hab ich echt nicht aufgepasst.
Du kannst dir natürlich nochmal Rectangle-Texturen anschauen, mit denen du ebenfalls beliebige Kantenlängen benutzen kannst. Die sind für den Ortho-Modus normalerweise ganz brauchbar, da man ja dann meistens sowieso keine Mipmaps braucht.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Die glBitmap überprüft ob die Extensions unterstützt werden. Allerdings gibt es auf ATI Grafikkarten bei non Power of Two Texturen und MipMaps den Effekt, dass zwar alles funktioniert aber tierisch langsam ist. Emulation halt. Ohne MipMaps funktionieren sie allerdings. Ich würde aber dennoch vorschlagen, dass du entweder Power Of Two Texturen oder Texture Rectangles benutzt. Für Rectangles genügt es, wenn du vor GenTexture die Eigenschaft Target auf den entsprechenden Wert einstellst. Der Rest passiert intern. Und die anderen Koordinaten nicht vergessen.
Registriert: Mo Mai 29, 2006 21:13 Beiträge: 142 Wohnort: Ballenstedt/Sachsen-Anhalt
Welchen Wert nimmt man da am besten? GL_TEXTURE_RECTANGLE_ARB, GL_TEXTURE_RECTANGLE_EXT?
Ich denke mal der GL_TEXTURE_RECTANGLE_NV wird NVidia-spezifisch sein, also nicht so gut.
Die EXT-Extension ist glaube ich nicht so weit verbreitet, zumindest auf meiner FX 5700 ist sie nicht unterstützt, daher sollte die ARB-Extension die erste Wahl sein.
Im Grunde ist es aber egal, denn das ARB hat die NV-Extension 1:1 übernommen, inklusive der Konstanten. Der Treiber weiß also nicht einmal welche der beiden Extensions du ansprichst.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Die drei Extensions sind zu 100% identisch. Zu mindest was die Konstanten angeht. Also ist es vollkommen egal welche Extension du benutzt.
Der einzige Unterschied besteht bei der Unterstützung von glSlang. Da hat die ARB Variante die Nase vor. Bzw existieren bei der EXT Variante kleinere Schwächen. Aber das sollte für dich noicht von interesse sein. Und Fixed Function funktioniert alles gleich.
PS: ATI Grafikkarten unterstützen im übrigen NUR die EXT Variante.
Man kann auch die nächst größere 2er Potenz nehmen und den Rand dann frei lassen. Mipmapping hat man dann natürlich auch nicht, aber damit zumindest keine Probleme im Shader.
Aporos emulation:
Warum kann nicht mal die X1900 XT NPOT, das ist Tierrisch nervig, und auch ein bischen unverständlich, da die eigentlich genug Zeit hatten um das bei ihrer neusten Karte reinzuschmeissen.
_________________ Shareholder und Leitender Entwickler bei Pipedream-Games.
Zitat: Siehst du diesen Park da unten? Jeden Tag lernen sich darin Menschen kennen und verlassen einander. Und du hast dein ganzes Leben Zeit darin zu gehen.
Registriert: Do Dez 05, 2002 10:35 Beiträge: 4234 Wohnort: Dortmund
Keine Ahnung warum das nicht geht. Aber deaktiviere mal MipMapping, dann sollte es gehen. Wobei man anstelle von MipMapping sowieso eher zu anisotropischen Filterung greifen sollte. Und dann kommt der Effekt der MipMaps eh nicht zum Tragen. Außderm ist anisotropische Filterung viel schöner. Vielleicht sieht ATI MipMaps auch als nicht wichtig genug an.
Registriert: Sa Nov 13, 2004 11:00 Beiträge: 229 Wohnort: Steinhude
iirc unterstützt ne X1900 NPOT texturen, gibt die nur lediglich nicht als erweiterung mit an, da sie in OGL 2.0 pflicht sind (nvidia karten unterstützen sie hingegen nur, wenn sie auch als erweiterung ausgeschrieben sind...)
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.