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

Aktuelle Zeit: Fr Apr 19, 2024 20:40

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



Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Problem mit neuem Opengl-Header-File
BeitragVerfasst: Mi Nov 19, 2014 14:35 
Offline
DGL Member

Registriert: Fr Feb 29, 2008 11:57
Beiträge: 16
Hallo !
Erst mal vielen Dank für das überarbeitete OpenGL-Header File !
Nun habe ich zwei Fragen:
Frage 1:
Ich verwendete bisher das OpenGL12-header File von ML.
Nun will ich in die Verwendung von VBOs einsteigen.
Bei meinen ersten Gehversuchen bin ich auf die Funktion glGenBuffers gestoßen,
die im Header-File ja auch zu finden ist.
Ich mach folgendes:
Code:
  1. InitOpenGL;
  2. fhRC:= CreateRenderingContext ( ..... ); //  scheint zu funktionieren, ich kann den RC normal verwenden)
  3. ReadExtensions;
  4.  


Dabei wird bei mir aber in ReadOpenGLCore die Funktion glGenBuffers nicht gefunden und der Funktionszeiger bleibt nil.
Hat jemand eine Ahnung, was da falsch laufen könnte ?

Frage 2:
glGenBuffers scheint ja "deprecated" zu sein ??
Was kann man denn alternativ dazu verwenden?
weiß jemand evtl. ein Tutorial dazu ?

Danke für jede Hilfestellung !
Andreas


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Nov 20, 2014 15:42 
Offline
DGL Member

Registriert: Fr Feb 29, 2008 11:57
Beiträge: 16
Hab die Lösung doch noch selber gefunden.
man muss nach
glCreateRenderingContext (...) diesen noch mit
wglMakeCurrent (...)
aktivieren, danach lassen sich alle Funktionszeiger holen.

€: Themen zusammen gefügt. Bitte das nächste mal darauf achten, nich mehrere Themen zu ein und dem selben Problem zu erstellen ;)
Bergmann89

€²: Hab den trennstrich weggemacht. Der ließ das aussehen wie ne Signatur :-O -- Horazont


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Do Nov 20, 2014 16:35 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Nun will ich in die Verwendung von VBOs einsteigen.

Wen ich dich richtig verstehe, willst du mit OpenGL 3.3 einsteigen ?

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Nov 21, 2014 08:15 
Offline
DGL Member

Registriert: Fr Feb 29, 2008 11:57
Beiträge: 16
Ja, es scheint so, dass VBO´s ab der Version 3.2 zu den Core Funktionen gehören.
Mittlerweile hab ich es geschafft, die Funktionszeiger aller GL-Befehle zu erhalten.
Code:
  1.  
  2. InitOpenGL
  3. glCreateRenderingContext  (...)
  4. wglMakeCurrent (..)  // ohne das geht's nicht
  5. ReadExtensions;
  6.  


Nun bleibt meine 2. Frage:
Um VBO´s zu erstellen braucht man doch glGenBuffers, oder ?
Ich hab irgendwo gelesen, dass dieser Befehl "depricated" sein soll.
Ist das wirklich war? Wenn ja, was ist die Alternative ?
Gruß Andreas


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Nov 21, 2014 08:47 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
Unter modernem OpenGL (oder WebGL oder OpenGL ES) nutzt man stattdessen glCreateBuffers :
Code:
  1.     this.vertices = gl.createBuffer();
  2.     gl.bindBuffer(gl.ARRAY_BUFFER, this.vertices);
  3.     gl.bufferData(gl.ARRAY_BUFFER, new Float32Array(vertexArray), gl.STATIC_DRAW);

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Nov 21, 2014 09:02 
Offline
DGL Member

Registriert: Fr Feb 29, 2008 11:57
Beiträge: 16
Ok, werd´ ich so machen...
Danke!


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Nov 21, 2014 09:50 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Irgendwie ist java und Pascal durcheinander geraten. Da gibt es rechte Unterschiede mit den Buffern.

_________________
OpenGL


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Nov 21, 2014 09:54 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Sep 23, 2002 19:27
Beiträge: 5812
Programmiersprache: C++
mathias hat geschrieben:
Irgendwie ist java und Pascal durcheinander geraten. Da gibt es rechte Unterschiede mit den Buffern.


Mathias hat recht, für Delphi (also normales OpenGL) ist glGenBuffers weiterhin aktuell und lt. Specs auch mit GL 4.x noch im Core.

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


Nach oben
 Profil  
Mit Zitat antworten  
BeitragVerfasst: Fr Nov 21, 2014 17:23 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Mai 31, 2002 19:41
Beiträge: 1278
Wohnort: Bäretswil (Schweiz)
Programmiersprache: Pascal
Zitat:
Um VBO´s zu erstellen braucht man doch glGenBuffers, oder ?
Ja den braucht es.

Hier ein kleiner Code, in dem man gut sieht, wie die VAOs/VBOs erzeugt werden. (Läuft nur unter Windows)

Code:
  1. unit Unit1;
  2.  
  3. {$mode objfpc}{$H+}
  4.  
  5. interface
  6.  
  7. uses
  8.   Forms,
  9.   dglOpenGL, Windows;
  10.  
  11. type
  12.   TForm1 = class(TForm)
  13.     procedure FormCreate(Sender: TObject);
  14.     procedure FormDestroy(Sender: TObject);
  15.     procedure FormPaint(Sender: TObject);
  16.     procedure FormResize(Sender: TObject);
  17.   private
  18.     DC: HDC;
  19.     RC: HGLRC;
  20.     procedure InitScene;
  21.     procedure RenderScene;
  22.   end;
  23.  
  24. var
  25.   Form1: TForm1;
  26.  
  27. implementation
  28.  
  29. {$R *.lfm}
  30.  
  31. type
  32.   TVertex3f = array[0..2] of GLfloat;
  33.   TFace = array[0..2] of TVertex3f;
  34.  
  35. const
  36.   Triangle: array[0..0] of TFace =
  37.     (((-0.4, 0.1, 0.0), (0.4, 0.1, 0.0), (0.0, 0.7, 0.0)));
  38.   Quad: array[0..1] of TFace =
  39.     (((-0.2, -0.6, 0.0), (-0.2, -0.1, 0.0), (0.2, -0.1, 0.0)),
  40.     ((-0.2, -0.6, 0.0), (0.2, -0.1, 0.0), (0.2, -0.6, 0.0)));
  41.  
  42. type
  43.   TVB = record
  44.     VAO,
  45.     VBO: GLuint;
  46.   end;
  47.  
  48. var
  49.   VBTriangle, VBQuad: TVB;
  50.  
  51. procedure TForm1.InitScene;
  52. begin
  53.   glGenVertexArrays(1, @VBTriangle.VAO);
  54.   glGenVertexArrays(1, @VBQuad.VAO);
  55.  
  56.   glGenBuffers(1, @VBTriangle.VBO);
  57.   glGenBuffers(1, @VBQuad.VBO);
  58.  
  59.   glClearColor(0.0, 0.5, 1.0, 1.0); //Hintergrundfarbe: Hier ein leichtes Blau
  60.  
  61.  
  62.   glBindVertexArray(VBTriangle.VAO);
  63.  
  64.   glBindBuffer(GL_ARRAY_BUFFER, VBTriangle.VBO);
  65.   glBufferData(GL_ARRAY_BUFFER, sizeof(Triangle), @Triangle, GL_STATIC_DRAW);
  66.   glEnableVertexAttribArray(0);
  67.   glVertexAttribPointer(0, 3, GL_FLOAT, False, 0, nil);
  68.  
  69.  
  70.   glBindVertexArray(VBQuad.VAO);
  71.  
  72.   glBindBuffer(GL_ARRAY_BUFFER, VBQuad.VBO);
  73.   glBufferData(GL_ARRAY_BUFFER, sizeof(Quad), @Quad, GL_STATIC_DRAW);
  74.   glEnableVertexAttribArray(0);
  75.   glVertexAttribPointer(0, 3, GL_FLOAT, False, 0, nil);
  76. end;
  77.  
  78. procedure TForm1.RenderScene;
  79. begin
  80.   glClear(GL_COLOR_BUFFER_BIT);
  81.  
  82.   // Zeichne Dreieck
  83.   glBindVertexArray(VBTriangle.VAO);
  84.   glDrawArrays(GL_TRIANGLES, 0, Length(Triangle) * 3);
  85.  
  86.   // Zeichne Quadrat
  87.   glBindVertexArray(VBQuad.VAO);
  88.   glDrawArrays(GL_TRIANGLES, 0, Length(Quad) * 3);
  89.  
  90.   SwapBuffers(DC);
  91. end;
  92.  
  93. procedure TForm1.FormCreate(Sender: TObject);
  94. begin
  95.   DC := GetDC(Handle);
  96.   RC := CreateRenderingContextVersion(DC, [opDoubleBuffered], 3, 3, True, 32, 24, 8, 0, 0, 0);
  97.   ActivateRenderingContext(DC, RC);
  98.  
  99.   InitScene;
  100. end;
  101.  
  102. procedure TForm1.FormDestroy(Sender: TObject);
  103. begin
  104.   glDeleteBuffers(1, @VBTriangle.VAO);
  105.   glDeleteBuffers(1, @VBQuad.VAO);
  106.  
  107.   glDeleteBuffers(1, @VBTriangle.VBO);
  108.   glDeleteBuffers(1, @VBQuad.VBO);
  109.  
  110.   DeactivateRenderingContext;
  111.   DestroyRenderingContext(RC);
  112.   ReleaseDC(Handle, DC);
  113. end;
  114.  
  115. procedure TForm1.FormPaint(Sender: TObject);
  116. begin
  117.   RenderScene;
  118. end;
  119.  
  120. procedure TForm1.FormResize(Sender: TObject);
  121. begin
  122.   glViewport(0, 0, ClientWidth, ClientHeight);
  123. end;
  124.  
  125. end.

_________________
OpenGL


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


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 90 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.126s | 17 Queries | GZIP : On ]