{ 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+}
fProgramObj: GLHandle;
fOnLog: TglcShaderLogEvent;
fFilename: String;
- fGeometryInputType: GLint;
- fGeometryOutputType: GLint;
- fGeometryVerticesOut: GLint;
function GetUniformLocation(const aName: String; out aPos: glInt): Boolean;
function GetInfoLog(Obj: GLHandle): String;
property Compiled: Boolean read GetCompiled;
property Linked: Boolean read GetLinked;
property OnLog: TglcShaderLogEvent read fOnLog write fOnLog;
- property GeometryInputType: GLint read fGeometryInputType write fGeometryInputType;
- property GeometryOutputType: GLint read fGeometryOutputType write fGeometryOutputType;
- property GeometryVerticesOut: GLint read fGeometryVerticesOut write fGeometryVerticesOut;
procedure Compile;
procedure Enable;
procedure SaveToFile(const aFilename: String);
procedure SaveToStream(const aStream: TStream);
- constructor Create(aLogEvent: TglcShaderLogEvent = nil);
+ constructor Create(const aLogEvent: TglcShaderLogEvent = nil);
destructor Destroy; override;
end;
//@LogEvent: Event zum loggen von Fehlern und Ereignissen;
//@raise: EglcShader wenn OpenGL nicht initialisiert werden konnte;
//@raise:
-constructor TglcShaderProgram.Create(aLogEvent: TglcShaderLogEvent);
+constructor TglcShaderProgram.Create(const aLogEvent: TglcShaderLogEvent);
begin
inherited Create;
fOnLog := aLogEvent;