OSDN Git Service

Implement glFrustum() for OpenGL ES 1.1.
authorNicolas Capens <capn@google.com>
Thu, 12 Mar 2015 01:49:44 +0000 (21:49 -0400)
committerNicolas Capens <capn@google.com>
Thu, 12 Mar 2015 16:52:50 +0000 (16:52 +0000)
Change-Id: Iedf1f5d64a3346a0b4cf081cfcd383c8dc67b775
Reviewed-on: https://swiftshader-review.googlesource.com/2590
Reviewed-by: Maxime Grégoire <mgregoire@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
src/OpenGL/libGL/libGL.cpp
src/OpenGL/libGLES_CM/Context.cpp
src/OpenGL/libGLES_CM/Context.h
src/OpenGL/libGLES_CM/MatrixStack.cpp
src/OpenGL/libGLES_CM/libGLES_CM.cpp
src/OpenGL/libGLESv2/Context.cpp

index 1cb1e55..87ccee6 100644 (file)
@@ -6239,7 +6239,7 @@ void APIENTRY glFogiv(GLenum pname, const GLint *params)
 \r
 void APIENTRY glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar)\r
 {\r
-       TRACE("(*)");\r
+       TRACE("(GLdouble left = %f, GLdouble right = %f, GLdouble bottom = %f, GLdouble top = %f, GLdouble zNear = %f, GLdouble zFar = %f)", left, right, bottom, top, zNear, zFar);\r
 \r
        gl::Context *context = gl::getContext();\r
 \r
index fbbe989..152fd3e 100644 (file)
@@ -2646,6 +2646,11 @@ void Context::multiply(const GLfloat *m)
     currentMatrixStack().multiply(m);\r
 }\r
 \r
+void Context::frustum(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)\r
+{\r
+       currentMatrixStack().frustum(left, right, bottom, top, zNear, zFar);\r
+}\r
+\r
 void Context::ortho(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)\r
 {\r
        currentMatrixStack().ortho(left, right, bottom, top, zNear, zFar);\r
index 101b2f9..614330b 100644 (file)
@@ -445,6 +445,7 @@ public:
     void translate(GLfloat x, GLfloat y, GLfloat z);\r
        void scale(GLfloat x, GLfloat y, GLfloat z);\r
     void multiply(const GLfloat *m);\r
+       void frustum(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);\r
     void ortho(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar);\r
 \r
 private:\r
index c91e152..8d6c3b4 100644 (file)
@@ -113,8 +113,8 @@ namespace sw
 \r
                float A = (r + l) / (r - l);\r
                float B = (t + b) / (t - b);\r
-               float C = -(f + n) / (r - n);\r
-               float D = -2 * r * n / (f - n);\r
+               float C = -(f + n) / (f - n);\r
+               float D = -2 * f * n / (f - n);\r
 \r
                Matrix frustum(2 * n / (r - l), 0,               A,  0,\r
                               0,               2 * n / (t - b), B,  0,\r
index 2c2ac60..ccf5e1d 100644 (file)
@@ -1868,7 +1868,14 @@ void GL_APIENTRY glFrontFace(GLenum mode)
 \r
 void GL_APIENTRY glFrustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)\r
 {\r
-       UNIMPLEMENTED();\r
+       TRACE("(GLfloat left = %f, GLfloat right = %f, GLfloat bottom = %f, GLfloat top = %f, GLfloat zNear = %f, GLfloat zFar = %f)", left, right, bottom, top, zNear, zFar);\r
+\r
+       es1::Context *context = es1::getContext();\r
+\r
+       if(context)\r
+       {\r
+               context->frustum(left, right, bottom, top, zNear, zFar);\r
+       }\r
 }\r
 \r
 void GL_APIENTRY glFrustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar)\r
@@ -2874,7 +2881,7 @@ void GL_APIENTRY glNormalPointer(GLenum type, GLsizei stride, const GLvoid *poin
 {\r
        TRACE("(GLenum type = 0x%X, GLsizei stride = %d, const GLvoid *pointer = 0x%0.8p)", type, stride, pointer);\r
 \r
-glVertexAttribPointer(sw::Normal, 3, type, false, stride, pointer);\r
+       glVertexAttribPointer(sw::Normal, 3, type, false, stride, pointer);\r
 }\r
 \r
 void GL_APIENTRY glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)\r
index 6957b05..1104525 100644 (file)
@@ -1553,19 +1553,19 @@ bool Context::getIntegerv(GLenum pname, GLint *params)
                UNIMPLEMENTED();\r
                *params = GL_BACK;\r
                break;\r
-       case GL_DRAW_BUFFER1: // symbolic constant, initial value is GL_NONE
-       case GL_DRAW_BUFFER2:
-       case GL_DRAW_BUFFER3:
-       case GL_DRAW_BUFFER4:
-       case GL_DRAW_BUFFER5:
-       case GL_DRAW_BUFFER6:
-       case GL_DRAW_BUFFER7:
-       case GL_DRAW_BUFFER8:
-       case GL_DRAW_BUFFER9:
-       case GL_DRAW_BUFFER10:
-       case GL_DRAW_BUFFER11:
-       case GL_DRAW_BUFFER12:
-       case GL_DRAW_BUFFER13:
+       case GL_DRAW_BUFFER1: // symbolic constant, initial value is GL_NONE\r
+       case GL_DRAW_BUFFER2:\r
+       case GL_DRAW_BUFFER3:\r
+       case GL_DRAW_BUFFER4:\r
+       case GL_DRAW_BUFFER5:\r
+       case GL_DRAW_BUFFER6:\r
+       case GL_DRAW_BUFFER7:\r
+       case GL_DRAW_BUFFER8:\r
+       case GL_DRAW_BUFFER9:\r
+       case GL_DRAW_BUFFER10:\r
+       case GL_DRAW_BUFFER11:\r
+       case GL_DRAW_BUFFER12:\r
+       case GL_DRAW_BUFFER13:\r
        case GL_DRAW_BUFFER14:\r
        case GL_DRAW_BUFFER15:\r
                UNIMPLEMENTED();\r
@@ -1887,19 +1887,19 @@ bool Context::getQueryParameterInfo(GLenum pname, GLenum *type, unsigned int *nu
       case GL_TEXTURE_BINDING_3D_OES:\r
       case GL_COPY_READ_BUFFER_BINDING:\r
       case GL_COPY_WRITE_BUFFER_BINDING:\r
-      case GL_DRAW_BUFFER0:
-      case GL_DRAW_BUFFER1:
-      case GL_DRAW_BUFFER2:
-      case GL_DRAW_BUFFER3:
-      case GL_DRAW_BUFFER4:
-      case GL_DRAW_BUFFER5:
-      case GL_DRAW_BUFFER6:
-      case GL_DRAW_BUFFER7:
-      case GL_DRAW_BUFFER8:
-      case GL_DRAW_BUFFER9:
-      case GL_DRAW_BUFFER10:
-      case GL_DRAW_BUFFER11:
-      case GL_DRAW_BUFFER12:
+      case GL_DRAW_BUFFER0:\r
+      case GL_DRAW_BUFFER1:\r
+      case GL_DRAW_BUFFER2:\r
+      case GL_DRAW_BUFFER3:\r
+      case GL_DRAW_BUFFER4:\r
+      case GL_DRAW_BUFFER5:\r
+      case GL_DRAW_BUFFER6:\r
+      case GL_DRAW_BUFFER7:\r
+      case GL_DRAW_BUFFER8:\r
+      case GL_DRAW_BUFFER9:\r
+      case GL_DRAW_BUFFER10:\r
+      case GL_DRAW_BUFFER11:\r
+      case GL_DRAW_BUFFER12:\r
       case GL_DRAW_BUFFER13:\r
       case GL_DRAW_BUFFER14:\r
       case GL_DRAW_BUFFER15:\r