constructor TKar_GLSlangShader.Create(FragmentShader, VertexShader:TStrings);
var
ShaderText : pchar;
res : GLInt;
VertexShaderObject : GLHandleARB;
FragmentShaderObject : GLHandleARB;
function GetInfo(shader:GLHandleARB):string;
var
blen,slen : GLInt;
InfoLog : PGLCharARB;
begin
//Überprüft ob eine InfoLog vorliegt
//Check if a infolog exist
glGetObjectParameterivARB(shader, GL_OBJECT_INFO_LOG_LENGTH_ARB , @blen);
//Wenn Informationen bereit liegen wird ein passender Speicher reserviert und die Informationen geladen
//if a information exist then reserve enough memory and load the information
if blen > 0 then
begin
GetMem(InfoLog, blen);
//Wenn die Informationen abgeholt wurden, werden diese aus dem Log entfernt
//If the informations read then the log will be clear
glGetInfoLogARB(shader, blen, @slen, InfoLog);
result:=string(infolog);
Dispose(InfoLog);
end;
end;
begin
//Erstellt leere Shader- und Program-objekte
VertexShaderObject := glCreateShaderObjectARB(GL_VERTEX_SHADER_ARB);
FragmentShaderObject := glCreateShaderObjectARB(GL_FRAGMENT_SHADER_ARB);
//Lädt die Vertex- und Fragment-shader
ShaderText:=pchar(VertexShader.Text);
glShaderSourceARB(VertexShaderObject, 1, @ShaderText, nil);
ShaderText:=pchar(FragmentShader.Text);
glShaderSourceARB(FragmentShaderObject, 1, @ShaderText, nil);
//Compiliert die Shaderobjekte und überprüft auf Probleme
glCompileShaderARB(VertexShaderObject);
{$IFDEF KARLOGGER}
DebugMsg(GetInfo(VertexShaderObject));
{$ELSE}
WriteLn(GetInfo(VertexShaderObject));
{$ENDIF}
//Compiliert die Shaderobjekte und überprüft auf Probleme
glCompileShaderARB(FragmentShaderObject);
{$IFDEF KARLOGGER}
DebugMsg(GetInfo(FragmentShaderObject));
{$ELSE}
WriteLn(GetInfo(FragmentShaderObject));
{$ENDIF}
FShader:=glCreateProgramObjectARB;
//Fügt Vertex- und Fragment-Shader zu Shader zusammen
glAttachObjectARB(FShader, VertexShaderObject);
glAttachObjectARB(FShader, FragmentShaderObject);
//Löscht den VS und FS
glDeleteObjectARB(VertexShaderObject);
glDeleteObjectARB(FragmentShaderObject);
writeln(FShader);
writeln(cardinal(@gllinkprogramARB));
//Linkt die an Shader gebundenen Objekte zu einem Program
glLinkProgramARB(FShader);
writeln('geht');
end;