* added small example code snippets
authorBergmann89 <bergmann89@muo-game.de>
Fri, 26 Sep 2014 16:52:37 +0000 (18:52 +0200)
committerBergmann89 <bergmann89@muo-game.de>
Thu, 2 Oct 2014 15:01:44 +0000 (17:01 +0200)
uglcArrayBuffer.pas
uglcCamera.pas
uglcFrameBufferObject.pas
uglcShader.pas

index e7acaa2..8a65b62 100644 (file)
@@ -2,7 +2,80 @@ unit uglcArrayBuffer;
 
 { Package:      OpenGLCore
   Prefix:       glc - OpenGL Core
-  Beschreibung: diese Unit enthält eine Klassen-Kapselung für OpenGL Array Buffer }
+  Beschreibung: diese Unit enthält eine Klassen-Kapselung für OpenGL Array Buffer
+  Beispiel:
+    type
+      TVertex = packed record
+        pos: TgluVector3f; // vertex position
+        tex: TgluVector2f; // texture coordinates
+        nor: TgluVector3f; // normal
+      end;
+      PVertex = ^TVertex;
+
+    var
+      vBuffer: TglcArrayBuffer;
+      iBuffer: TglcArrayBuffer;
+      p: Pointer;
+
+    vBuffer := TglcArrayBuffer.Create(TglcBufferTarget.btArrayBuffer);
+    iBuffer := TglcArrayBuffer.Create(TglcBufferTarget.btElementArrayBuffer);
+    try
+      // write vertex data to vertex buffer
+      vBuffer.Bind;
+      vBuffer.BufferData(4, SizeOf(TresMeshVertex), TglcBufferUsage.buStaticDraw, nil);
+      p := vBuffer.MapBuffer(TglcBufferAccess.baWriteOnly);
+      try
+        PVertex(p).pos := gluVertex3f(0.0, 0.0, 0.0);
+        PVertex(p).tex := gluVertex2f(0.0, 0.5);
+        PVertex(p).nor := gluVertex3f(0.0, 1.0, 0.0);
+        inc(p, SizeOf(TVertex));
+        // ... 
+      finally
+        vBuffer.UnmapBuffer;
+        vBuffer.Unbind;
+      end;
+
+      // write indices to index buffer 
+      iBuffer.Bind;
+      iBuffer.BufferData(4, SizeOf(GLuint), TglcBufferUsage.buStaticDraw, nil);
+      p := iBuffer.MapBuffer(TglcBufferAccess.baWriteOnly);
+      try
+        PGLuint(p) := 0;
+        //  ...
+      finally
+        iBuffer.UnmapBuffer;
+        iBuffer.Unbind;
+      end;
+
+      // use array buffers to draw primitive
+      vBuffer.Bind;
+      iBuffer.Bind;
+
+      glEnableClientState(GL_VERTEX_ARRAY);
+      glVertexPointer(3, GL_FLOAT, 8, Pointer(0));
+
+      glEnableClientState(GL_TEXTURE_COORD_ARRAY);
+      glTexCoordPointer(2, GL_FLOAT, 8, Pointer(3));
+
+      glEnableClientState(GL_NORMAL_ARRAY);
+      glNormalPointer(GL_FLOAT, 8, Pointer(5));
+
+      glEnableClientState(GL_INDEX_ARRAY);
+      glIndexPointer(GL_INT, 0, nil);
+
+      glDrawElements(GL_QUADS, iBuffer.DataCount, GL_UNSIGNED_INT, nil);
+
+      glDisableClientState(GL_INDEX_ARRAY);
+      glDisableClientState(GL_VERTEX_ARRAY);
+      glDisableClientState(GL_TEXTURE_COORD_ARRAY);
+      glDisableClientState(GL_NORMAL_ARRAY);
+
+      fIndexBuffer.Unbind;
+      fVertexBuffer.Unbind;
+    finally
+      FreeAndNil(vBuffer);
+      FreeAndNil(iBuffer);
+    end; }
 
 {$mode objfpc}{$H+}
 
index 93a3bf7..197f676 100644 (file)
@@ -2,7 +2,24 @@ unit uglcCamera;
 
 { Package:      OpenGLCore
   Prefix:       glc - OpenGL Core
-  Beschreibung: diese Unit enthält eine Klassen-Kapselung für OpenGL Frustum und Kamera }
+  Beschreibung: diese Unit enthält eine Klassen-Kapselung für OpenGL Frustum und Kamera
+  Beispiel:
+    var
+      camera: TglcCamera;
+
+    camera := TglcCamera.Create;
+    try
+      camera.Perspective(45, 0.01, 100, 800/600);   // define perspective view
+      camera.Move(gluVector(2, 3, -5));             // move 2 right, 3 up and 5 back
+      camera.Tilt(-25);                             // turn 25 degrees down
+      camera.Turn(-10);                             // turn 10 degrees left
+      camera.Activate;                              // activate camera
+
+      // do normal rendering
+
+    finally
+      FreeAndNil(camera);
+    end;  }
 
 {$mode objfpc}{$H+}
 
index 7fcc673..d468b9d 100644 (file)
@@ -2,7 +2,37 @@ unit uglcFrameBufferObject;
 
 { Package:      OpenGLCore
   Prefix:       glc - OpenGL Core
-  Beschreibung: diese Unit enthält eine Klassen-Kapselung der OpenGL FrameBufferObjekte }
+  Beschreibung: diese Unit enthält eine Klassen-Kapselung der OpenGL FrameBufferObjekte
+  Beispiel:
+    var
+      fbo: TglcFrameBufferObject;
+      tex: TglcTextureBuffer;
+      buf: TglcRenderBuffer;
+
+    fbo := TglcFrameBufferObject;
+    try
+      ffbo.SetSize(800, 600);
+
+      // creating texture buffer as color buffer
+      tex := TglcTextureBuffer.Create(TglcFormat.fmRGBA, TglcInternalFormat.ifRGBA16F);
+      fbo.AddBuffer(tex, TglcAttachment.atColor0, true);
+
+      // creating render buffer as depth buffer
+      buf := TglcRenderBuffer.Create(TglcInternalFormat.ifDepthComponent);
+      fbo.AddBuffer(buf, TglcAttachment.atDepth, true);
+
+      // render to frame buffer object
+      fbo.Bind;
+      // do normal rendering
+      fbo.Unbind;
+
+      // use texture buffer
+      tex.Bind;
+      // do normal rendering
+      tex.Unbind;
+    finally
+      FreeAndNil(fbo);
+    end; }
 
 {$mode objfpc}{$H+}
 
index 37f84c9..4235108 100644 (file)
@@ -2,7 +2,55 @@ unit uglcShader;
 
 { Package:      OpenGLCore
   Prefix:       glc - OpenGL Core
-  Beschreibung: diese Unit enthält eine Klassen-Kapselung der OpenGL Shader Objekte }
+  Beschreibung: diese Unit enthält eine Klassen-Kapselung der OpenGL Shader Objekte
+  Beispiel:
+    var
+      shader: TglcShaderProgram;
+
+    //write log message to console
+    //    @param aSender: object that send the message
+    //    @param aMsg:    message to write to console
+    procedure LogMessage(aSender: TObject; const aMsg: String);
+    begin
+      writeln(Format('[%p]: %s', [aSender, aMsg]);
+    end;
+
+    //load shader object from file and add it to 'shader'
+    //    @param aFilename: name of file to load shader code from
+    //    @param aType:     type of shader object to create
+    procedure LoadShaderObject(const aFilename: String; const aType: TglcShaderType);
+    var
+      sl: TStringList;
+      so: TglcShaderObject;
+    begin
+      sl := TStringList.Create;
+      try
+        sl.LoadFromFile(aFileName);
+        so := TglcShaderObject.Create(aType);
+        shader.add(so);
+      finally
+        FreeAndNil(sl, @LogMessage);
+      end;
+    end;
+
+    shader := TglcShaderProgram.Create(@LogMessage);
+    try
+      // load shader objects
+      LoadShaderObject('./test_shader.vert', TglcShaderType.stVertex);
+      LoadShaderObject('./test_shader.frag', TglcShaderType.stFragment);
+
+      // compile shader
+      shader.Compile;
+
+      // use shader
+      shader.Enable;
+      shader.Uniform1f('uTest', 0.1234);
+      // do normal rendering
+      shader.Disable;
+
+    finally
+      FreeAndNil(shader);
+    end; }
 
 {$mode objfpc}{$H+}