From d8817013cd1d01bdf006f5db2b5594b67159d190 Mon Sep 17 00:00:00 2001 From: Sergey Lipskiy Date: Fri, 3 Jul 2015 15:02:04 +0600 Subject: [PATCH] Fix geometry clipping problem for GL ES. NoN - no near clipping. GL ES does not support z-clipping disabling, so harmless hack used here. Harmlessness condition: z value is not used by pixel pipeline. gDP.otherMode.depthCompare == 0 && gDP.otherMode.depthUpdate == 0 - z not used for depth compare/update. Thus we can set vertex z to any value, which will ensure that z/w is in range [-1, 1], e.g. to zero. Fixed issue #588 --- src/OpenGL.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/OpenGL.cpp b/src/OpenGL.cpp index 63940215..370849b9 100644 --- a/src/OpenGL.cpp +++ b/src/OpenGL.cpp @@ -318,6 +318,15 @@ void OGLRender::addTriangle(int _v0, int _v1, int _v2) vtx.z = gDP.primDepth.z * vtx.w; } } + +#ifdef GLESX + if (GBI.isNoN() && gDP.otherMode.depthCompare == 0 && gDP.otherMode.depthUpdate == 0) { + for (u32 i = triangles.num - 3; i < triangles.num; ++i) { + SPVertex & vtx = triangles.vertices[triangles.elements[i]]; + vtx.z = 0.0f; + } + } +#endif } void OGLRender::_setBlendMode() const