aboutsummaryrefslogtreecommitdiffhomepage
path: root/gpu/src/GrGLIRect.h
diff options
context:
space:
mode:
authorGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-07-29 13:39:53 +0000
committerGravatar bsalomon@google.com <bsalomon@google.com@2bbb7eff-a529-9590-31e7-b0007b416f81>2011-07-29 13:39:53 +0000
commite14490adad033991401714252458f7ed9c993ba2 (patch)
tree66c45243e0adb360af6bbc5c82d6b2b02facf86b /gpu/src/GrGLIRect.h
parenta7ed3cc6371e50a5beb3750c475fe23665dafa7d (diff)
Move GL headers out of public include dir
Review URL: http://codereview.appspot.com/4837041/ git-svn-id: http://skia.googlecode.com/svn/trunk@1992 2bbb7eff-a529-9590-31e7-b0007b416f81
Diffstat (limited to 'gpu/src/GrGLIRect.h')
-rw-r--r--gpu/src/GrGLIRect.h74
1 files changed, 74 insertions, 0 deletions
diff --git a/gpu/src/GrGLIRect.h b/gpu/src/GrGLIRect.h
new file mode 100644
index 0000000000..5e3dfa6d53
--- /dev/null
+++ b/gpu/src/GrGLIRect.h
@@ -0,0 +1,74 @@
+
+/*
+ * Copyright 2011 Google Inc.
+ *
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+
+
+#ifndef GrGLIRect_DEFINED
+#define GrGLIRect_DEFINED
+
+#include "GrGLInterface.h"
+
+/**
+ * Helper struct for dealing with the fact that Ganesh and GL use different
+ * window coordinate systems (top-down vs bottom-up)
+ */
+struct GrGLIRect {
+ GrGLint fLeft;
+ GrGLint fBottom;
+ GrGLsizei fWidth;
+ GrGLsizei fHeight;
+
+ void pushToGLViewport() const {
+ GR_GL(Viewport(fLeft, fBottom, fWidth, fHeight));
+ }
+
+ void pushToGLScissor() const {
+ GR_GL(Scissor(fLeft, fBottom, fWidth, fHeight));
+ }
+
+ void setFromGLViewport() {
+ GR_STATIC_ASSERT(sizeof(GrGLIRect) == 4*sizeof(GrGLint));
+ GR_GL_GetIntegerv(GR_GL_VIEWPORT, (GrGLint*) this);
+ }
+
+ // sometimes we have a GrIRect from the client that we
+ // want to simultaneously make relative to GL's viewport
+ // and convert from top-down to bottom-up.
+ void setRelativeTo(const GrGLIRect& glRect,
+ int leftOffset,
+ int topOffset,
+ int width,
+ int height) {
+ fLeft = glRect.fLeft + leftOffset;
+ fWidth = width;
+ fBottom = glRect.fBottom + (glRect.fHeight - topOffset - height);
+ fHeight = height;
+
+ GrAssert(fLeft >= 0);
+ GrAssert(fWidth >= 0);
+ GrAssert(fBottom >= 0);
+ GrAssert(fHeight >= 0);
+ }
+
+ bool contains(const GrGLIRect& glRect) const {
+ return fLeft <= glRect.fLeft &&
+ fBottom <= glRect.fBottom &&
+ fLeft + fWidth >= glRect.fLeft + glRect.fWidth &&
+ fBottom + fHeight >= glRect.fBottom + glRect.fHeight;
+ }
+
+ void invalidate() {fLeft = fWidth = fBottom = fHeight = -1;}
+
+ bool operator ==(const GrGLIRect& glRect) const {
+ return 0 == memcmp(this, &glRect, sizeof(GrGLIRect));
+ }
+
+ bool operator !=(const GrGLIRect& glRect) const {return !(*this == glRect);}
+};
+
+#endif