DEADSOFTWARE

nogl: use native glOrthof when possible
[d2df-sdl.git] / src / nogl / noGLES1.inc
index a4c6589293b5299caae67450658a663e3330134c..15765bf36253d22e81842b4e8c830ca7beb34049 100644 (file)
@@ -28,6 +28,9 @@ implementation
   var
     cmds: TCmds;
 
+  var
+    extList: string = '';
+
   var
     es_glVertexPointer: procedure (size: GLint; _type: GLenum; stride: GLsizei; pointer: PGLvoid); cdecl;
     es_glColorPointer: procedure (size: GLint; _type: GLenum; stride: GLsizei; pointer: PGLvoid); cdecl;
@@ -35,14 +38,15 @@ implementation
     es_glEnableClientState: procedure (arr: GLenum); cdecl;
     es_glDisableClientState: procedure (arr: GLenum); cdecl;
     es_glDrawArrays: procedure (mode: GLenum; first: GLint; count: GLsizei); cdecl;
-    es_glActiveTexture: procedure(texture: GLenum); cdecl;
-    es_glClientActiveTexture: procedure(texture: GLenum); cdecl;
+//    es_glActiveTexture: procedure(texture: GLenum); cdecl;
+//    es_glClientActiveTexture: procedure(texture: GLenum); cdecl;
     es_glColor4f: procedure(red, green, blue, alpha: GLfloat); cdecl;
 
     es_glEnable: procedure (cap: GLenum); cdecl;
     es_glDisable: procedure (cap: GLenum); cdecl;
     es_glIsEnabled: function (cap: GLenum): GLBoolean; cdecl;
     es_glGetString: function (name: GLenum): PChar; cdecl;
+    es_glGetError: function (): GLenum; cdecl;
     es_glClearColor: procedure (red, green, blue, alpha: GLclampf); cdecl;
     es_glClear: procedure (mask: GLbitfield); cdecl;
     es_glAlphaFunc: procedure (func: GLenum; ref: GLclampf); cdecl;
@@ -53,6 +57,8 @@ implementation
     es_glFlush: procedure; cdecl;
     es_glFinish: procedure; cdecl;
 
+    es_glMultMatrixf: procedure (m: PGLfloat); cdecl;
+    es_glOrthof: procedure (left, right, bottom, top, near, far: GLfloat); cdecl;
     es_glLoadIdentity: procedure; cdecl;
     es_glMatrixMode: procedure (mode: GLenum); cdecl;
     es_glLoadMatrixf: procedure (m: PGLfloat); cdecl;
@@ -80,6 +86,18 @@ implementation
     es_glTexSubImage2D: procedure (target: GLenum; level: GLint; xoffset, yoffset: GLint; width, height: GLsizei; format, _type: GLenum; pixels: PGLvoid); cdecl;
     es_glDeleteTextures: procedure (n: GLsizei; textures: PGLuint); cdecl;
 
+    es_glGenFramebuffers: procedure (n: GLsizei; framebuffers: PGLuint); cdecl;
+    es_glBindFramebuffer: procedure (target: GLenum; framebuffer: GLuint); cdecl;
+    es_glFramebufferTexture2D: procedure (target, attachment, textarget: GLenum; texture: GLuint; level: GLint); cdecl;
+    es_glFramebufferRenderbuffer: procedure (target, attachment, rbotarget: GLenum; rbo: GLuint); cdecl;
+    es_glCheckFramebufferStatus: function (framebuffer: GLuint): GLenum; cdecl;
+    es_glDeleteFramebuffers: procedure (n: GLsizei; const framebuffers: PGLuint); cdecl;
+
+    es_glGenRenderbuffers: procedure (n: GLsizei; framebuffers: PGLuint); cdecl;
+    es_glBindRenderbuffer: procedure (target: GLenum; renderbuffer: GLuint); cdecl;
+    es_glRenderbufferStorage: procedure (target, internalformat: GLenum; w, h: GLsizei); cdecl;
+    es_glDeleteRenderbuffers: procedure (n: GLsizei; const renderbuffers: PGLuint); cdecl;
+
   procedure glEnable(cap: GLenum);
   begin
     es_glEnable(cap);
@@ -100,6 +118,11 @@ implementation
     result := es_glGetString(name);
   end;
 
+  function glGetError: GLenum;
+  begin
+    result := es_glGetError
+  end;
+
   procedure glClearColor(red, green, blue, alpha: GLclampf);
   begin
     es_glClearColor(red, green, blue, alpha);
@@ -152,7 +175,7 @@ implementation
   procedure glBegin(mode: GLenum);
   begin
     assert(cmds.mode = GL_INVALID_ENUM);
-    assert((mode = GL_POINTS) or (mode = GL_LINES) or (mode = GL_QUADS));
+    assert((mode = GL_POINTS) or (mode = GL_LINES) or (mode = GL_QUADS) or (mode = GL_LINE_LOOP));
     cmds.mode := mode;
     SetLength(cmds.v, 0);
     SetLength(cmds.c, 0);
@@ -160,7 +183,6 @@ implementation
   end;
 
   procedure glEnd;
-    var count: Integer;
   begin
     assert(cmds.mode <> GL_INVALID_ENUM);
     assert(Length(cmds.v) mod ValPerVertex = 0);
@@ -276,6 +298,34 @@ implementation
 
 
 
+  procedure glOrtho (left, right, bottom, top, near, far: GLdouble);
+    var m: array [0..15] of GLfloat;
+  begin
+    if assigned(es_glOrthof) then
+    begin
+      es_glOrthof(left, right, bottom, top, near, far);
+    end
+    else
+    begin
+      m[0] := 2 / (right - left);
+      m[1] := 0;
+      m[2] := 0;
+      m[3] := 0;
+      m[4] := 0;
+      m[5] := 2 / (top - bottom);
+      m[6] := 0;
+      m[7] := 0;
+      m[8] := 0;
+      m[9] := 0;
+      m[10] := -2 / (far - near);
+      m[11] := 0;
+      m[12] := -((right + left) / (right - left));
+      m[13] := -((top + bottom) / (top - bottom));
+      m[14] := -((far + near) / (far - near));
+      m[15] := 1;
+      es_glMultMatrixf(@m[0]);
+    end;
+  end;
 
   procedure glLoadIdentity;
   begin
@@ -406,6 +456,62 @@ implementation
 
 
 
+
+  procedure glGenFramebuffers(n: GLsizei; framebuffers: PGLuint);
+  begin
+    es_glGenFramebuffers(n, framebuffers);
+  end;
+
+  procedure glBindFramebuffer(target: GLenum; framebuffer: GLuint);
+  begin
+    es_glBindFramebuffer(target, framebuffer);
+  end;
+
+  procedure glFramebufferTexture2D(target, attachment, textarget: GLenum; texture: GLuint; level: GLint);
+  begin
+    es_glFramebufferTexture2D(target, attachment, textarget, texture, level);
+  end;
+
+  procedure glFramebufferRenderbuffer(target, attachment, rbotarget: GLenum; rbo: GLuint);
+  begin
+    es_glFramebufferRenderbuffer(target, attachment, rbotarget, rbo);
+  end;
+
+  function glCheckFramebufferStatus(framebuffer: GLuint): GLenum;
+  begin
+    result := es_glCheckFramebufferStatus(framebuffer);
+  end;
+
+  procedure glDeleteFramebuffers(n: GLsizei; const framebuffers: PGLuint);
+  begin
+    es_glDeleteFramebuffers(n, framebuffers);
+  end;
+
+  procedure glGenRenderbuffers(n: GLsizei; renderbuffers: PGLuint);
+  begin
+    es_glGenRenderbuffers(n, renderbuffers);
+  end;
+
+  procedure glBindRenderbuffer(target: GLenum; renderbuffer: GLuint);
+  begin
+    es_glBindRenderbuffer(target, renderbuffer);
+  end;
+
+  procedure glRenderbufferStorage(target, internalformat: GLenum; w, h: GLsizei);
+  begin
+    es_glRenderbufferStorage(target, internalformat, w, h);
+  end;
+
+  procedure glDeleteRenderbuffers(n: GLsizei; const renderbuffers: PGLuint);
+  begin
+    es_glDeleteRenderbuffers(n, renderbuffers);
+  end;
+
+
+
+
+
+
   procedure nogl_Init;
   begin
     es_glVertexPointer := SDL_GL_GetProcAddress('glVertexPointer');
@@ -414,14 +520,15 @@ implementation
     es_glEnableClientState := SDL_GL_GetProcAddress('glEnableClientState');
     es_glDisableClientState := SDL_GL_GetProcAddress('glDisableClientState');
     es_glDrawArrays := SDL_GL_GetProcAddress('glDrawArrays');
-    es_glActiveTexture := SDL_GL_GetProcAddress('glActiveTexture');
-    es_glClientActiveTexture := SDL_GL_GetProcAddress('glClientActiveTexture');
+//    es_glActiveTexture := SDL_GL_GetProcAddress('glActiveTexture');
+//    es_glClientActiveTexture := SDL_GL_GetProcAddress('glClientActiveTexture');
     es_glColor4f := SDL_GL_GetProcAddress('glColor4f');
 
     es_glEnable := SDL_GL_GetProcAddress('glEnable');
     es_glDisable := SDL_GL_GetProcAddress('glDisable');
     es_glIsEnabled := SDL_GL_GetProcAddress('glIsEnabled');
     es_glGetString := SDL_GL_GetProcAddress('glGetString');
+    es_glGetError := SDL_GL_GetProcAddress('glGetError');
     es_glClearColor := SDL_GL_GetProcAddress('glClearColor');
     es_glClear := SDL_GL_GetProcAddress('glClear');
     es_glAlphaFunc := SDL_GL_GetProcAddress('glAlphaFunc');
@@ -432,6 +539,8 @@ implementation
     es_glFlush := SDL_GL_GetProcAddress('glFlush');
     es_glFinish := SDL_GL_GetProcAddress('glFinish');
 
+    es_glMultMatrixf := SDL_GL_GetProcAddress('glMultMatrixf');
+    es_glOrthof := SDL_GL_GetProcAddress('glOrthof');
     es_glLoadIdentity := SDL_GL_GetProcAddress('glLoadIdentity');
     es_glMatrixMode := SDL_GL_GetProcAddress('glMatrixMode');
     es_glLoadMatrixf := SDL_GL_GetProcAddress('glLoadMatrixf');
@@ -459,6 +568,18 @@ implementation
     es_glTexSubImage2D := SDL_GL_GetProcAddress('glTexSubImage2D');
     es_glDeleteTextures := SDL_GL_GetProcAddress('glDeleteTextures');
 
+    es_glGenFramebuffers := SDL_GL_GetProcAddress('glGenFramebuffersOES');
+    es_glBindFramebuffer := SDL_GL_GetProcAddress('glBindFramebufferOES');
+    es_glFramebufferTexture2D := SDL_GL_GetProcAddress('glFramebufferTexture2DOES');;
+    es_glFramebufferRenderbuffer := SDL_GL_GetProcAddress('glFramebufferRenderbufferOES');
+    es_glCheckFramebufferStatus := SDL_GL_GetProcAddress('glCheckFramebufferStatusOES');
+    es_glDeleteFramebuffers := SDL_GL_GetProcAddress('glDeleteFramebuffersOES');
+
+    es_glGenRenderbuffers := SDL_GL_GetProcAddress('glGenRenderbuffersOES');
+    es_glBindRenderbuffer := SDL_GL_GetProcAddress('glBindRenderbufferOES');
+    es_glRenderbufferStorage := SDL_GL_GetProcAddress('glRenderbufferStorageOES');
+    es_glDeleteRenderbuffers := SDL_GL_GetProcAddress('glDeleteRenderbuffersOES');
+
     cmds.mode := GL_INVALID_ENUM
   end;
 
@@ -470,8 +591,8 @@ implementation
     es_glEnableClientState := nil;
     es_glDisableClientState := nil;
     es_glDrawArrays := nil;
-    es_glActiveTexture := nil;
-    es_glClientActiveTexture := nil;
+//    es_glActiveTexture := nil;
+//    es_glClientActiveTexture := nil;
     es_glColor4f := nil;
 
     es_glEnable := nil;
@@ -488,6 +609,8 @@ implementation
     es_glFlush := nil;
     es_glFinish := nil;
 
+    es_glMultMatrixf := nil;
+    es_glOrthof := nil;
     es_glLoadIdentity := nil;
     es_glMatrixMode := nil;
     es_glLoadMatrixf := nil;
@@ -514,6 +637,25 @@ implementation
     es_glTexImage2D := nil;
     es_glTexSubImage2D := nil;
     es_glDeleteTextures := nil;
+
+    es_glGenFramebuffers := nil;
+    es_glBindFramebuffer := nil;
+    es_glFramebufferTexture2D := nil;
+    es_glFramebufferRenderbuffer := nil;
+    es_glCheckFramebufferStatus := nil;
+    es_glDeleteFramebuffers := nil;
+
+    es_glGenRenderbuffers := nil;
+    es_glBindRenderbuffer := nil;
+    es_glRenderbufferStorage := nil;
+    es_glDeleteRenderbuffers := nil;
+  end;
+
+  function nogl_ExtensionSupported(ext: string): Boolean;
+  begin
+    if (extList = '') and Assigned(es_glGetString) then
+      extList := glGetString(GL_EXTENSIONS);
+    result := pos(ext, extList) <> 0;
   end;
 
 initialization