X-Git-Url: https://git.delphigl.com/?p=LazOpenGLCore.git;a=blobdiff_plain;f=uglcShader.pas;fp=uglcShader.pas;h=07086431c3f646c277e6f425b5e7fa72c74cb4f4;hp=750e8bc467caab594bfe1b5826b048a092b22b10;hb=38723f45320eea73e5fef416fc989bcfb9adf21d;hpb=eb7858e40852c3a1a61cead35c20f432d062184c diff --git a/uglcShader.pas b/uglcShader.pas index 750e8bc..0708643 100644 --- a/uglcShader.pas +++ b/uglcShader.pas @@ -57,7 +57,7 @@ unit uglcShader; interface uses - Classes, SysUtils, fgl, dglOpenGL, uglcTypes, ugluMatrix, uglcContext; + Classes, SysUtils, fgl, {$IFNDEF OPENGL_ES}dglOpenGl{$ELSE}dglOpenGLES{$ENDIF}, uglcTypes, ugluMatrix; type //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -67,19 +67,19 @@ type TglcShaderObject = class(TObject) private fAtachedTo: TglcShaderProgram; - fShaderObj: GLHandle; + fShaderObj: GLuint; fShaderType: TglcShaderType; fCode: String; fOnLog: TglcShaderLogEvent; fAttachedTo: TglcShaderProgram; - function GetInfoLog(aObj: GLHandle): String; + function GetInfoLog(aObj: GLuint): String; function GetCompiled: Boolean; procedure Log(const aMsg: String); procedure CreateShaderObj; procedure AttachTo(const aProgram: TglcShaderProgram); public - property ShaderObj : GLHandle read fShaderObj; + property ShaderObj: GLuint read fShaderObj; property ShaderType: TglcShaderType read fShaderType; property Compiled: Boolean read GetCompiled; property AtachedTo: TglcShaderProgram read fAtachedTo; @@ -96,12 +96,12 @@ type //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// TglcShaderProgram = class(TglcShaderObjectList) private - fProgramObj: GLHandle; + fProgramObj: GLuint; fOnLog: TglcShaderLogEvent; fFilename: String; function GetUniformLocation(const aName: String; out aPos: glInt): Boolean; - function GetInfoLog(Obj: GLHandle): String; + function GetInfoLog(Obj: GLuint): String; function GetCompiled: Boolean; function GetLinked: Boolean; @@ -109,7 +109,7 @@ type procedure Log(const msg: String); procedure AttachShaderObj(const aShaderObj: TglcShaderObject); public - property ProgramObj: glHandle read fProgramObj; + property ProgramObj: GLuint read fProgramObj; property Filename: String read fFilename; property Compiled: Boolean read GetCompiled; property Linked: Boolean read GetLinked; @@ -172,7 +172,7 @@ const //ließt das Log eines OpenGL-Objekts aus //@Obj: Handle des Objekts, dessen Log ausgelesen werden soll; //@result: Log des Objekts; -function TglcShaderObject.GetInfoLog(aObj: GLHandle): String; +function TglcShaderObject.GetInfoLog(aObj: GLuint): String; var Msg: PChar; bLen: GLint; @@ -293,7 +293,7 @@ end; //ließt das Log eines OpenGL-Objekts aus //@Obj: Handle des Objekts, dessen Log ausgelesen werden soll; //@result: Log des Objekts; -function TglcShaderProgram.GetInfoLog(Obj: GLHandle): String; +function TglcShaderProgram.GetInfoLog(Obj: GLuint): String; var Msg: PChar; bLen: GLint; @@ -336,12 +336,6 @@ end; procedure TglcShaderProgram.CreateProgramObj; begin if (fProgramObj = 0) then begin - if GL_LibHandle = nil then - raise EglcShader.Create('TglShaderProgram.Create - OpenGL not initialized'); - - if not TglcContext.IsAnyContextActive then - raise EglcShader.Create('TglShaderProgram.Create - no valid render context'); - fProgramObj := glCreateProgram(); Log('shader program created: #'+IntToHex(fProgramObj, 4)); end; @@ -815,12 +809,14 @@ procedure TglcShaderProgram.LoadFromStream(const aStream: TStream); result := TglcShaderType.stVertex else if (aStr = 'GL_FRAGMENT_SHADER') then result := TglcShaderType.stFragment +{$IFNDEF OPENGL_ES} else if (aStr = 'GL_GEOMETRY_SHADER') then result := TglcShaderType.stGeometry else if (aStr = 'GL_TESS_CONTROL_SHADER') then result := TglcShaderType.stTessControl else if (aStr = 'GL_TESS_EVALUATION_SHADER') then result := TglcShaderType.stTessEvaluation +{$ENDIF} else raise Exception.Create('invalid shader type: ' + aStr); end; @@ -924,9 +920,11 @@ var case aShaderType of TglcShaderType.stVertex: result := 'GL_VERTEX_SHADER'; TglcShaderType.stFragment: result := 'GL_FRAGMENT_SHADER'; +{$IFNDEF OPENGL_ES} TglcShaderType.stGeometry: result := 'GL_GEOMETRY_SHADER'; TglcShaderType.stTessControl: result := 'GL_TESS_CONTROL_SHADER'; TglcShaderType.stTessEvaluation: result := 'GL_TESS_EVALUATION_SHADER'; +{$ENDIF} else result := 'UNKNOWN'; end; @@ -972,4 +970,4 @@ begin end; end. - \ No newline at end of file +