DEADSOFTWARE

nogl: fix quads
[d2df-sdl.git] / src / nogl / noGLES1.inc
index 2bfec5316ee7b0296f1c2767ea303463b98d4230..6142e2e4ee6c148f254d365c166ed62be90f986e 100644 (file)
@@ -57,6 +57,7 @@ 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;
@@ -231,15 +232,16 @@ implementation
   begin
     i := Length(x);
     vpx := Length(v);
-    if (cmds.mode = GL_QUADS) and (i div vpx mod 4 = 3) then
+    if (cmds.mode = GL_QUADS) and (i div vpx mod 6 = 3) then
     begin
-      for j := 0 to vpx - 1 do
-        AddFloatRaw(x, x[i - 3*vpx + j]);
-      for j := 0 to vpx - 1 do
-        AddFloatRaw(x, x[i - 1*vpx + j]);
+      for j := 0 to vpx - 1 do AddFloatRaw(x, x[i - 1*vpx + j]);
+      for j := 0 to vpx - 1 do AddFloatRaw(x, v[j]);
+      for j := 0 to vpx - 1 do AddFloatRaw(x, x[i - 3*vpx + j]);
+    end
+    else
+    begin
+      for j := 0 to vpx - 1 do AddFloatRaw(x, v[j]);
     end;
-    for j := 0 to vpx - 1 do
-      AddFloatRaw(x, v[j]);
   end;
 
 (* ---------- end internals ---------- *)
@@ -297,9 +299,33 @@ 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);
+    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;
@@ -514,6 +540,7 @@ 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');
@@ -583,6 +610,7 @@ implementation
     es_glFlush := nil;
     es_glFinish := nil;
 
+    es_glMultMatrixf := nil;
     es_glOrthof := nil;
     es_glLoadIdentity := nil;
     es_glMatrixMode := nil;