Corrects scissor & viewport initialization.

TRAC #11134
Takes viewport/scissor dimensions from surface at first makeCurrent, rather
than from display at context construction.

Author:    Shannon Woods
Signed-off-by: Nicolas Capens
Signed-off-by: Daniel Koch

git-svn-id: https://angleproject.googlecode.com/svn/trunk@58 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/include/Context.h b/src/include/Context.h
index 7f51c9f..c09256e 100644
--- a/src/include/Context.h
+++ b/src/include/Context.h
@@ -323,6 +323,8 @@
     bool mInvalidOperation;
     bool mOutOfMemory;
     bool mInvalidFramebufferOperation;
+
+    bool mHasBeenCurrent;
 };
 }
 
diff --git a/src/include/Surface.h b/src/include/Surface.h
index a28e2ab..7ee05f0 100644
--- a/src/include/Surface.h
+++ b/src/include/Surface.h
@@ -29,8 +29,8 @@
     HWND getWindowHandle();
     void swap();
 
-    EGLint getWidth() const;
-    EGLint getHeight() const;
+    virtual EGLint getWidth() const;
+    virtual EGLint getHeight() const;
 
     virtual IDirect3DSurface9 *getRenderTarget();
     virtual IDirect3DSurface9 *getDepthStencil();
diff --git a/src/libGLESv2/Context.cpp b/src/libGLESv2/Context.cpp
index c2b0614..a717fc5 100644
--- a/src/libGLESv2/Context.cpp
+++ b/src/libGLESv2/Context.cpp
@@ -142,6 +142,8 @@
     mInvalidOperation = false;
     mOutOfMemory = false;
     mInvalidFramebufferOperation = false;
+
+    mHasBeenCurrent = false;
 }
 
 Context::~Context()
@@ -222,6 +224,21 @@
     framebufferZero->setDepthbuffer(GL_RENDERBUFFER, 0);
     framebufferZero->setStencilbuffer(GL_RENDERBUFFER, 0);
 
+    if(!mHasBeenCurrent)
+    {
+        viewportX = 0;
+        viewportY = 0;
+        viewportWidth = surface->getWidth();
+        viewportHeight = surface->getHeight();
+
+        scissorX = 0;
+        scissorY = 0;
+        scissorWidth = surface->getWidth();
+        scissorHeight = surface->getHeight();
+
+        mHasBeenCurrent = true;
+    }
+
     defaultRenderTarget->Release();
 
     if (depthStencil)