Implements support for FRONT_AND_BACK culling.
TRAC #11331
Author: Shannon Woods
Signed-off-by: Andrew Lewycky
Signed-off-by: Daniel Koch
git-svn-id: https://angleproject.googlecode.com/svn/trunk@57 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index df21d7c..c2b0614 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -1458,9 +1458,12 @@
applyShaders();
applyTextures();
- device->BeginScene();
- device->DrawPrimitive(primitiveType, first, primitiveCount);
- device->EndScene();
+ if (!cullSkipsDraw(mode))
+ {
+ device->BeginScene();
+ device->DrawPrimitive(primitiveType, first, primitiveCount);
+ device->EndScene();
+ }
}
void Context::drawElements(GLenum mode, GLsizei count, GLenum type, const void* indices)
@@ -1498,9 +1501,12 @@
applyShaders();
applyTextures();
- device->BeginScene();
- device->DrawIndexedPrimitive(primitiveType, 0, 0, count, startIndex, primitiveCount);
- device->EndScene();
+ if (!cullSkipsDraw(mode))
+ {
+ device->BeginScene();
+ device->DrawIndexedPrimitive(primitiveType, 0, 0, count, startIndex, primitiveCount);
+ device->EndScene();
+ }
}
void Context::finish()
@@ -1771,6 +1777,20 @@
return t;
}
+
+bool Context::cullSkipsDraw(GLenum primitiveType)
+{
+ if (cullFace && cullMode == GL_FRONT_AND_BACK &&
+ (primitiveType == GL_TRIANGLES || primitiveType == GL_TRIANGLE_FAN || primitiveType == GL_TRIANGLE_STRIP))
+ {
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
}
extern "C"