Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Do Jul 17, 2025 15:41

Foren-Übersicht » Programmierung » OpenGL
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Veriablen auf grapfikspeicher???
BeitragVerfasst: Mo Aug 23, 2004 17:38 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Tach, ich weiß ncht, wie sinnvoll meine Frage ist, aber bevor ich lange grübel:

Gibt es eine Möglichkeit, single variablen oder am besten ganze records und noch besser als array auf dem Grafikspeicher abzulegen?

Es handelt sich bei mir um statische modelle, die daten müssten sich also nicht neu belegen lassen.

Ich weiß ja dass es vertex buffer objects VBO und RBA oder so gibt, aber da handelt es sich doch um festgelegt formate(?), ich könnte also bei VBO zb [S,T,X,Y,Z] keine Farbwerte angeben.

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 23, 2004 17:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Zusammen mit VBOs kann man alle gl*Pointer-Funktionen nutzen, also auch glColorPointer, glNormalpointer, etc.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Aug 23, 2004 20:57 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Na gut! also VBOs...

Dann versuch ich mal aus deinem Tut darüber schlau zu werden.

Kennst du da vielleicht noch genauere Artikel oder so zu?

Annsonsten melde ich mich denn mit problemen demnächst :-)
(und schau erstmahl, dass ich meine Musterung morgen überlebe)

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 24, 2004 12:39 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
OK: Der Quelltext von deinem Programm "GR_ARB_Vertex_Buffer_Object" hiflt mir denke ich schon fast ausreichent weiter.

Hätte erstmahl nur eine Frage:

In deinem Programm wird oben das vormat für den Pointer deklariert:

Code:
  1.   // -> GL_T2F_V3F
  2.   TVertex = record
  3.     S,T,X,Y,Z : TGLFloat;
  4.   end;


Bei mir entspreche GL_T2F_V3F ja dann wohl GL_T2F_C3F_V3F aus der unit "dglOpenGL"!
Aber wie sieht da das Vormat aus?

Code:
  1.   TVertex = record
  2.     S,T,R,G,B,X,Y,Z : TGLFloat;
  3.   end;


???

Und wo bakähme mann diese Info her (Wenn mann nu gerade kein Forum hätte)

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 24, 2004 12:46 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
GL Man Pages zu glInterleavedArrays, allerdings muss man nicht unbedingt glInterleavedArrays nutzen, sondern kann wie gesagt auch gl*Pointer nutzen. So mache ich das inzwischen auch, und hat den Vorteil dass man nicht an die vorgegebenen Formate gebunden ist.

Und zum Format gibts auch nicht viel zu sagen, steht ja alles in der Konstante drin :

GL_T2F_C3F_V3F

T2F = 2 Single-Texturkoordinaten (S,T)
C3F = 3 Single-Farbwerte (R,G,B)
V3F = 3 Single Vertexkoordinaten (X,Y,Z)

Aber wie gesagt ist man mit gl*Pointer besser dran, da man dann nicht auf die vorgegebenen Formate angwiesen ist.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Aug 24, 2004 22:12 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Ich hätte mir das Tutorial besser durchlesen sollen!!

Naja bleiben "ein par" Frageb:

1.
Kann ich den VPointer oder den VBOpointer auch direckt auf einen Datensatz in der Array richten??
Anstatt in mit
Code:
  1. inc(Integer(VBOPointer), SizeOf(TVertex));

jedesmahl zu erhöhen?
Also könnte ich auch:
Code:
  1. VPointer:=integer(glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB))++n*SizeOf(TVertex);

oder so schreiben um auf einen bestimmten Vertex zu kommen?

2.
Und wenn ich dass kann, könnte ich dann auch (Wenn ich das Richtige VBO vorher binde und es nach dem belegen ge unmapt habe):
Code:
  1. VPointer:=integer(glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_readE_ONLY_ARB))+n*SizeOf(TVertex);

und dann zb:
Code:
  1. GLvertex3f(VPointer^.X,VPointer^.Y,VPointer^.Z);

schreiben???

3.
Hatt das benutzten vorgefertigter renderproceduren zb:
Code:
  1. glInterleavedArrays(GL_T2F_V3F, SizeOf(TVertex), nil);
  2. glDrawArrays(GL_QUADS, 0, VBOSize);

eine grossen vorteil?
bzw funktionieren die im prinzip genau wie die "anfänger Variante":
Code:
  1. Glbegin(Gl_triangles);
  2.   glvertex3f(bla,blub,usw)
  3.   .......


4.
Was bedeutet: (Zitat)
Allerdings erstmal ne kleine Warnung vorweg : Pointer sind ein recht komplexes Thema,und ihre Nutzung erfordert einige Kenntnisse.Wer weder weis wie man damit umgeht,noch wie man sie einsetzt,sollte sich da zuerstmal schlau machen.Denn mit Pointer kann man ganz böse Sachen machen wenn man sie nicht richtig nuzten kann!

Meinst du damit, wenn ich zb meinen pointer versähentlich auf ne falsche schtelle richte und dann den GrafikTreiber überschreibe oder so?
Also im prinzip ähnlich als wenn mann bei ner array die stelle a[100]:=blubblab beschreibt, obwohl es nur bis a[1..50] geht?
Oder noch schlimmer.

5.
was bedeutet:
Code:
  1. glUnMapBufferARB


(ich hoffe ich nerve nicht alzusehr,
Ach ja T3 und ab ins studium :-)

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 25, 2004 22:12 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
geo hat geschrieben:
1.
Kann ich den VPointer oder den VBOpointer auch direckt auf einen Datensatz in der Array richten??
Anstatt in mit
Code:
  1. inc(Integer(VBOPointer), SizeOf(TVertex));

jedesmahl zu erhöhen?
Also könnte ich auch:
Code:
  1. VPointer:=integer(glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_WRITE_ONLY_ARB))++n*SizeOf(TVertex);

oder so schreiben um auf einen bestimmten Vertex zu kommen?

Das mit dem Erhöhen mach ich ja nur weil ich nacheinander alle Vertices erstelle, aber du kannst da springen wie du willst. Musst halt drauf achten dass du nicht im Nirvana landest, bzw. Delphi deine blinden Typecasts auch zulässt.

geo hat geschrieben:
2.
Und wenn ich dass kann, könnte ich dann auch (Wenn ich das Richtige VBO vorher binde und es nach dem belegen ge unmapt habe):
Code:
  1. VPointer:=integer(glMapBufferARB(GL_ARRAY_BUFFER_ARB, GL_readE_ONLY_ARB))+n*SizeOf(TVertex);

und dann zb:
Code:
  1. GLvertex3f(VPointer^.X,VPointer^.Y,VPointer^.Z);

schreiben???

Ja, aber das sollte man lassen. Das erfordert ja immer das ummappen in den Adressraum des Clients (also CPU), und dürfte wenig performant sein.

geo hat geschrieben:
3.
Hatt das benutzten vorgefertigter renderproceduren zb:
Code:
  1. glInterleavedArrays(GL_T2F_V3F, SizeOf(TVertex), nil);
  2. glDrawArrays(GL_QUADS, 0, VBOSize);

eine grossen vorteil?
bzw funktionieren die im prinzip genau wie die "anfänger Variante":
Code:
  1. Glbegin(Gl_triangles);
  2.   glvertex3f(bla,blub,usw)
  3.   .......

Ja, letzteres ist ja Immediate, und da wird doch alles immer erst über den Bus zur GPU gesendet, was bremst. Ein VBO (steht doch im Tut) liegt komplett im VRAM, und die Bandbreite zwischen GPU un VRAM ist um ein Vielfaches höher als vom RAM über den Bus auf die GPU.

geo hat geschrieben:
4.
Was bedeutet: (Zitat)
Allerdings erstmal ne kleine Warnung vorweg : Pointer sind ein recht komplexes Thema,und ihre Nutzung erfordert einige Kenntnisse.Wer weder weis wie man damit umgeht,noch wie man sie einsetzt,sollte sich da zuerstmal schlau machen.Denn mit Pointer kann man ganz böse Sachen machen wenn man sie nicht richtig nuzten kann!

Meinst du damit, wenn ich zb meinen pointer versähentlich auf ne falsche schtelle richte und dann den GrafikTreiber überschreibe oder so?
Also im prinzip ähnlich als wenn mann bei ner array die stelle a[100]:=blubblab beschreibt, obwohl es nur bis a[1..50] geht?
Oder noch schlimmer.

Nein, der Grafikkartentreiber läuft ja nicht auf der Grafikkarte. im VRAM liegen nur Nutzerdaten, aber wenn du da irgendwo hin schreibst wo du nicht sollst, dann ist die Wahrscheinlichkeit groß dass du ne Zugriffsverletzung vom Grafikkartentreiber bekommst.

geo hat geschrieben:
5.
was bedeutet:
Code:
  1. glUnMapBufferARB

Wenn du dir von der GL nen Zeiger auf ein VBO geben lässt, musst du es zuerst "unmapen" damit du es rendern kannst.

_________________
www.SaschaWillems.de | GitHub | Twitter | GPU Datenbanken (Vulkan, GL, GLES)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Aug 25, 2004 22:25 
Offline
DGL Member
Benutzeravatar

Registriert: Di Dez 02, 2003 12:47
Beiträge: 300
Wohnort: Marburg
Danke, werd mich damit in den nächsten 1-2 wochen mal abmühen und denn berichten obs klappt!!!

_________________
Nothing, oh sweet nothing,
today we are doing nothing at all...
http://www.geo-progs.de


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 8 Beiträge ] 
Foren-Übersicht » Programmierung » OpenGL


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 8 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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]