Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 26.01.2010, 15:55 Titel: FreeBASIC vs VisualBASIC.net |
|
|
Ich hab mich schon länger mal gefragt, welches von beiden schneller ist (insbesondere für Spiele), denn OOP find ich sehr vorteilhaft für Spieleprogrammierung.
Aber bevor ich in VB.net ein Spiel schreibe, wollte ich einmal fragen, ob das überhaupt möglich ist (von der Geschwindigkeit her).
Denn ich wollte das Spiel dann schon in OpenGL machen und es hat wahrscheinlich große Arrays usw.
Kann mir das jemand sagen? |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 27.01.2010, 16:33 Titel: |
|
|
<ot level="leicht">
Arrays + OpenGL?
Schonmal was von VBOs oder zumindest VAs gehört?
</ot>
Und warum nicht? VB.Net wird teilweise per JIT-Compiler in Maschinencode übersetzt; Derartige Perfomanceprobleme gibt es einfach nicht. Du wirst nur ein ganz anderes Problem haben: Keine Beispiele in VB.Net. Außerdem ist es ja bei .Net (also zumindest bei C#, womit ich ja auch an einem Projekt arbeite) eine Freude C-Funktionen zu importieren... |
|
Nach oben |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 27.01.2010, 19:33 Titel: |
|
|
Davon habe ich gehört
Mit den Arrays meine ich Partikelarrays und keine Vertexarrays |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 28.01.2010, 10:09 Titel: |
|
|
Partikel im Array: abcdefgh
Die Lifetime von d läuft ab. Du entfernst das Elemtent indem du efgh irgendwohin kopierst und defgh deallokiert. Dann kopierst du efgh zurück (memmove() ).
Listen, wenn du mit VB.Net arbeitest wird es da ja wohl sowas wie STL-Vectoren und Listen geben.
(Nur so am Rande) |
|
Nach oben |
|
 |
darkinsanity aka sts

Anmeldungsdatum: 01.11.2006 Beiträge: 456
|
|
Nach oben |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 28.01.2010, 20:36 Titel: |
|
|
Das mit den VBOs hört sich sehr schnell an.
Aber es gibt keine Funktion namens glGenBuffers, glBindBufferARB, ...
Ist das ein OpenGL-Plugin?!
Wenn ja, wie benutze ich das mit FreeBASIC?
Edit: Habs gefunden (Ist in glext.bi)
Hab auch die deklaration gefunden...
Aber es kommt immernoch der Fehler, das er die Variable glGenBuffers nicht finden kann...
Edit 2: Ok nach längerem suchen in bi habe ich gesehen das man eine Variable definieren muss, damit er die Funktionen deklariert.
Jetzt sagt mir der Compiler folgendes: Code: | OpenGLParticle.o:fake:(.text+0x155): undefined reference to `glGenBuffers@8'
OpenGLParticle.o:fake:(.text+0x160): undefined reference to `glDeleteBuffers@8' |
|
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 28.01.2010, 22:24 Titel: |
|
|
Dir fehlt ganz klar GLEW. Unter allen anderen Betriebssystemen, die OpenGL unterstützten benötigst du das nicht. |
|
Nach oben |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 29.01.2010, 00:21 Titel: |
|
|
Nein... ich habe glew im system32 ordner.
Edit:
Nochmal was zu den linked lists
Wie liest du bei einer linked list die 10000 partikel enthält das partikel 5000 aus? dann musst du ja alle partikel < 5000 durchschleifen um an dieses eine ranzukommen |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 29.01.2010, 15:18 Titel: |
|
|
Wie du ganz richtig erkannt hast, ist bei Listen der Aufwand um das Element n auszulesen O(n) und nicht - wie bei Vektoren oder Arrays - O(1) ist.
Aber bei _durchdachten_ Partikelsystem besteht normalreweise überhaupt kein Grund, warum man plötzlich an ein Partikel n dran möchte. Normalerweise iteriert man durch die Liste.
Und noch ganz kurz btw.: Bei double-linked-lists gibt es eigentlich keine richtigen Indizen, weil die Liste weder Anfang noch Ende hat. |
|
Nach oben |
|
 |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 29.01.2010, 17:22 Titel: |
|
|
Warum soll eine double-linked-list kein Ende haben? Laut Definition in der englischen Wikipedia ist eine double-linked-list eine ganz normale linked-list bei der jedes Element zusätzlich den Zeiger auf das vorherige Element enthält, um sich auch rückwärts bewegen zu können. Also ist der Start das Element dessen Zurück-Zeiger 0 ist und das Ende das Element dessen Vorwärts-Zeiger 0 ist. |
|
Nach oben |
|
 |
The_Muh aka Mark Aroni

Anmeldungsdatum: 11.09.2006 Beiträge: 718
|
Verfasst am: 29.01.2010, 18:00 Titel: |
|
|
Man kann nartürlich den prev_ptr von element1 auf das letzte element der liste mappen und den next_ptr vom letzten element auf element 1 legen... aber wer sowas macht, sollte vorher gründlich nachdenken was er da tut... _________________ // nicht mehr aktiv // |
|
Nach oben |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 29.01.2010, 19:25 Titel: |
|
|
Das beantwort aber nicht meine Frage, warum glext nicht funktioniert... |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 29.01.2010, 20:22 Titel: |
|
|
Weil du vll. glew einbinden solltest? Und nicht nur die Binary im %path% rumgammeln muss.
Zuletzt bearbeitet von 28398 am 02.02.2010, 13:20, insgesamt einmal bearbeitet |
|
Nach oben |
|
 |
Stueber
Anmeldungsdatum: 07.07.2008 Beiträge: 202
|
Verfasst am: 29.01.2010, 20:25 Titel: |
|
|
Naja, sieht nach einem Link-Fehler aus. Da schaut man zuerst mal ob sich die .a Datei in FBORDNER/lib befindet. Wenn ja und der Fehler trotzdem bleibt am besten mal ganz oben im Quelltext #inclib "name_der_lib" benutzen. Wie die .a Datei heist musst du selber rausfinden... |
|
Nach oben |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 29.01.2010, 21:36 Titel: |
|
|
Der .a datei enthält die funktionen "glGenBuffers" und so weiter nicht...
Ich denke mir mal die ist unvollständig |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
|
Nach oben |
|
 |
darkinsanity aka sts

Anmeldungsdatum: 01.11.2006 Beiträge: 456
|
Verfasst am: 02.02.2010, 11:19 Titel: |
|
|
So, zu dem Problem sag ich mal wieder was. Das Problem ist, das die Erweiterung für VBOs zwar schon seit OpenGL 1.5 im Core ist, aber Windows nur ein OpenGL 1.1 Interface zur Verfügung stellt. Trotzdem geht es, wenn man es über die Erweiterung macht:
Zuerst brauchst du am Anfang deines Codes natürlich folgendes: Code: | #include once "GL/glext.bi" |
Dann brauchst du noch das hier:
Code: |
dim shared glGenBuffers as PFNGLGENBUFFERSPROC
dim shared glDeleteBuffers as PFNGLDELETEBUFFERSPROC
dim shared glBindBuffer as PFNGLBINDBUFFERPROC
dim shared glBufferData as PFNGLBUFFERDATAPROC
dim shared glMapBuffer as PFNGLMAPBUFFERPROC
dim shared glUnmapBuffer as PFNGLUNMAPBUFFERPROC
|
Nachdem du OpenGL dann initialisiert hast, führst du das aus:
Code: |
glGenBuffers = cast(PFNGLGENBUFFERSPROC, ScreenGLProc("glGenBuffers"))
glDeleteBuffers = cast(PFNGLDELETEBUFFERSPROC, ScreenGLProc("glDeleteBuffers"))
glBindBuffer = cast(PFNGLBINDBUFFERPROC, ScreenGLProc("glBindBuffer"))
glBufferData = cast(PFNGLBUFFERDATAPROC, ScreenGLProc("glBufferData"))
glMapBuffer = cast(PFNGLMAPBUFFERPROC, ScreenGLProc("glMapBuffer"))
glUnmapBuffer = cast(PFNGLUNMAPBUFFERPROC, ScreenGLProc("glUnmapBuffer"))
|
Danach funktioniert das ganze VBO Zeug, allerdings musst du überall das "ARB" weglassen.
Wie das ganze mit GLEW funktioniert, hab ich keine Ahnung, da ich mich damit bisher noch nicht beschäftigt habe. Werde ich aber noch tun. _________________ Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak |
|
Nach oben |
|
 |
28398
Anmeldungsdatum: 25.04.2008 Beiträge: 1917
|
Verfasst am: 02.02.2010, 13:18 Titel: |
|
|
@darkinsanity:
Wenn man das so macht, ist das mehr als .... zeitaufwändig, unsicher und stupide. Ohne GLew kann man unter Windows effektiv nicht arbeiten. Ok, da gibts noch GLee, aber GLew ist der dé-facto Standard.
Btw.: Wenn ich wo bei mir drunter schreiber "das klingt unlogisch", dann meine ich nicht den Inhalt meines Postings, sondern die Formulierung. Fände ich selbst den Inhalt logisch würde ich es schließlich nicht posten.
/EDIT:
Ok, ich poste jetzt mal ein Beispiel, sonst bin ich nur wieder der Arrogante Sack, der die Leute dazu bringen will, es selber zu lernen
Code: | #include "gl/gl.bi"
#include "gl/glu.bi"
#include "gl/glut.bi"
#include "gl/glew.bi"
// Hier Renderkontext erstellen (Screen, SDL, whatever)
err as GLenum
err = glewInit();
if GLEW_OK <> err then
print "OMG!! Fehler!!!!" & *glewGetErrorString(err)
endif
if GL_FALSE == GLEW_VERSION_2_0 then
print "Dieses Programm braucht mindestens openGL version 2.0!"
endif |
|
|
Nach oben |
|
 |
Nitroxis
Anmeldungsdatum: 27.02.2008 Beiträge: 300 Wohnort: Irgendwo...
|
Verfasst am: 03.02.2010, 08:57 Titel: |
|
|
@28398: Und in deinem Beispiel läuft GLEW dann?
Also ich meine ganz normal (ohne irgendwelche funktionspointer, ...) |
|
Nach oben |
|
 |
darkinsanity aka sts

Anmeldungsdatum: 01.11.2006 Beiträge: 456
|
Verfasst am: 03.02.2010, 11:06 Titel: |
|
|
Was ist daran bitteschön stupide? Ein Blick in den source von glew offenbart, das es dort ganz genauso gemacht wird. Nur wird eben dem Nutzer etwas mehr Komfort geboten, da man es nicht mehr selbst machen muss, und der Code wird dort Größtenteils aus den Spezifikationen der OpenGL Registry generiert. Gerade für kleinere Projekte halte ich es aber für sinnvoll, nicht gleich auf so etwas wie glew zurückzugreifen. Zumal alleine der glew.h header über en halbes MB groß ist.
Aber für OpenGL-Einsteiger und Programme mit vielen Extensions ist glew definitiv sinnvoll, da geb ich dir Recht.
Btw Wo hast du denn die FB-header dafür her? Mein selbst übersetzter zickt im Moment nur rum...
@Nitroxis: glew initialisiert dir unter Windows die ganzen Funktionspointer, das heißt, du musst nur glew initialisieren (aber erst nachdem OpenGL initialisiert ist) und kannst dann alle Funktionen der Extensions, die glew unterstützt, nutzen. Du kannst also glGenBuffers usw. einfach aufrufen. _________________ Traue keinem Computer, den du nicht aus dem Fenster werfen kannst -- Steve Wozniak |
|
Nach oben |
|
 |
|