Implement glFrustum() for OpenGL ES 1.1. 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>
diff --git a/src/OpenGL/libGL/libGL.cpp b/src/OpenGL/libGL/libGL.cpp index 1cb1e55..87ccee6 100644 --- a/src/OpenGL/libGL/libGL.cpp +++ b/src/OpenGL/libGL/libGL.cpp
@@ -6239,7 +6239,7 @@ void APIENTRY glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble zNear, GLdouble zFar) { - TRACE("(*)"); + 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); gl::Context *context = gl::getContext();
diff --git a/src/OpenGL/libGLES_CM/Context.cpp b/src/OpenGL/libGLES_CM/Context.cpp index fbbe989..152fd3e 100644 --- a/src/OpenGL/libGLES_CM/Context.cpp +++ b/src/OpenGL/libGLES_CM/Context.cpp
@@ -2646,6 +2646,11 @@ currentMatrixStack().multiply(m); } +void Context::frustum(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) +{ + currentMatrixStack().frustum(left, right, bottom, top, zNear, zFar); +} + void Context::ortho(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) { currentMatrixStack().ortho(left, right, bottom, top, zNear, zFar);
diff --git a/src/OpenGL/libGLES_CM/Context.h b/src/OpenGL/libGLES_CM/Context.h index 101b2f9..614330b 100644 --- a/src/OpenGL/libGLES_CM/Context.h +++ b/src/OpenGL/libGLES_CM/Context.h
@@ -445,6 +445,7 @@ void translate(GLfloat x, GLfloat y, GLfloat z); void scale(GLfloat x, GLfloat y, GLfloat z); void multiply(const GLfloat *m); + void frustum(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); void ortho(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar); private:
diff --git a/src/OpenGL/libGLES_CM/MatrixStack.cpp b/src/OpenGL/libGLES_CM/MatrixStack.cpp index c91e152..8d6c3b4 100644 --- a/src/OpenGL/libGLES_CM/MatrixStack.cpp +++ b/src/OpenGL/libGLES_CM/MatrixStack.cpp
@@ -113,8 +113,8 @@ float A = (r + l) / (r - l); float B = (t + b) / (t - b); - float C = -(f + n) / (r - n); - float D = -2 * r * n / (f - n); + float C = -(f + n) / (f - n); + float D = -2 * f * n / (f - n); Matrix frustum(2 * n / (r - l), 0, A, 0, 0, 2 * n / (t - b), B, 0,
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.cpp b/src/OpenGL/libGLES_CM/libGLES_CM.cpp index 2c2ac60..ccf5e1d 100644 --- a/src/OpenGL/libGLES_CM/libGLES_CM.cpp +++ b/src/OpenGL/libGLES_CM/libGLES_CM.cpp
@@ -1868,7 +1868,14 @@ void GL_APIENTRY glFrustumf(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar) { - UNIMPLEMENTED(); + 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); + + es1::Context *context = es1::getContext(); + + if(context) + { + context->frustum(left, right, bottom, top, zNear, zFar); + } } void GL_APIENTRY glFrustumx(GLfixed left, GLfixed right, GLfixed bottom, GLfixed top, GLfixed zNear, GLfixed zFar) @@ -2874,7 +2881,7 @@ { TRACE("(GLenum type = 0x%X, GLsizei stride = %d, const GLvoid *pointer = 0x%0.8p)", type, stride, pointer); -glVertexAttribPointer(sw::Normal, 3, type, false, stride, pointer); + glVertexAttribPointer(sw::Normal, 3, type, false, stride, pointer); } void GL_APIENTRY glOrthof(GLfloat left, GLfloat right, GLfloat bottom, GLfloat top, GLfloat zNear, GLfloat zFar)
diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp index 6957b05..1104525 100644 --- a/src/OpenGL/libGLESv2/Context.cpp +++ b/src/OpenGL/libGLESv2/Context.cpp
@@ -1553,19 +1553,19 @@ UNIMPLEMENTED(); *params = GL_BACK; break; - 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 + 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_BUFFER14: case GL_DRAW_BUFFER15: UNIMPLEMENTED(); @@ -1887,19 +1887,19 @@ case GL_TEXTURE_BINDING_3D_OES: case GL_COPY_READ_BUFFER_BINDING: case GL_COPY_WRITE_BUFFER_BINDING: - 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: + 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_BUFFER13: case GL_DRAW_BUFFER14: case GL_DRAW_BUFFER15: