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