DEADSOFTWARE

nogl: fix glOrtho
authorDeaDDooMER <deaddoomer@deadsoftware.ru>
Mon, 13 Feb 2023 19:01:13 +0000 (22:01 +0300)
committerDeaDDooMER <deaddoomer@deadsoftware.ru>
Fri, 9 Jun 2023 09:12:49 +0000 (12:12 +0300)
src/nogl/noGL.pas
src/nogl/noGLES1.inc
src/nogl/noGLSTUB.inc

index 90735c340c1af3096ac4b542ef852320b8d434af..fe9601c2331645ec04916c60f03edd3ce1c1f784 100644 (file)
@@ -174,7 +174,7 @@ interface
 
   procedure glReadPixels(x, y: GLint; width, height: GLsizei; format, atype: GLenum; pixels: Pointer);
 
-  procedure glOrtho (left, right, bottom, top, near, far: GLfloat);
+  procedure glOrtho (left, right, bottom, top, near, far: GLdouble);
   procedure glLoadIdentity;
   procedure glScissor(x, y: GLint; width, height: GLsizei);
   procedure glViewport(x, y: GLint; width, height: GLsizei);
index 2bfec5316ee7b0296f1c2767ea303463b98d4230..6bc0acb937a361685297bca2597817b86851d243 100644 (file)
@@ -57,7 +57,8 @@ implementation
     es_glFlush: procedure; cdecl;
     es_glFinish: procedure; cdecl;
 
-    es_glOrthof: procedure (left, right, bottom, top, near, far: GLfloat); 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;
@@ -297,9 +298,27 @@ implementation
 
 
 
-  procedure glOrtho (left, right, bottom, top, near, far: GLfloat);
+  procedure glOrtho (left, right, bottom, top, near, far: GLdouble);
+    var m: array [0..15] of GLfloat;
   begin
-    es_glOrthof(left, right, bottom, top, near, far);
+    {es_glOrthof(left, right, bottom, top, near, far);}
+    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;
 
   procedure glLoadIdentity;
@@ -514,7 +533,8 @@ implementation
     es_glFlush := SDL_GL_GetProcAddress('glFlush');
     es_glFinish := SDL_GL_GetProcAddress('glFinish');
 
-    es_glOrthof := SDL_GL_GetProcAddress('glOrthof');
+    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');
@@ -583,7 +603,8 @@ implementation
     es_glFlush := nil;
     es_glFinish := nil;
 
-    es_glOrthof := nil;
+    es_glMultMatrixf := nil;
+    //es_glOrthof := nil;
     es_glLoadIdentity := nil;
     es_glMatrixMode := nil;
     es_glLoadMatrixf := nil;
index 1056fa3edba9da32493342ae6ff53dd44eabe208..1dbd52428c9bc182e64e588f223830080103549d 100644 (file)
@@ -99,7 +99,7 @@ implementation
   begin
   end;
 
-  procedure glOrtho (left, right, bottom, top, near, far: GLfloat);
+  procedure glOrtho (left, right, bottom, top, near, far: GLdouble);
   begin
   end;