Better fix for changing the viewport in sample app.
authorScroggo <Scroggo@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 16 Jun 2011 15:31:26 +0000 (15:31 +0000)
committerScroggo <Scroggo@2bbb7eff-a529-9590-31e7-b0007b416f81>
Thu, 16 Jun 2011 15:31:26 +0000 (15:31 +0000)
Create a platform description and base the size on the SkWindow
in order to create a RenderTarget, which results in changing the
viewport.  This allows us to use only GR calls.

In the Android sample app, fix the problem where nothing is drawn
in the first frame, and default to drawing in GL.

Reviewed at http://codereview.appspot.com/4642043/

git-svn-id: http://skia.googlecode.com/svn/trunk@1615 2bbb7eff-a529-9590-31e7-b0007b416f81

android_sample/SampleApp/Android.mk
android_sample/SampleApp/jni/sample-jni.cpp
samplecode/SampleApp.cpp

index f2fd860684a83c47bc661b4701adbf0ba122b2d0..60542352838c4bda2691d70cd3b48c71dd8362e7 100644 (file)
@@ -52,6 +52,8 @@ LOCAL_SHARED_LIBRARIES := \
 LOCAL_STATIC_LIBRARIES := \
     libskiagpu
 
+LOCAL_CFLAGS += -DDEFAULT_TO_GPU
+
 LOCAL_PRELINK_MODULE := false
 
 LOCAL_MODULE := libskia-sample
index be4e4d4a685b40f49b2a10cf17cc1853325af6a0..e9772dd67bc8326d4f6a99efb2c57b88a3848081 100644 (file)
@@ -16,6 +16,7 @@
  */
 
 #include "GrContext.h"
+#include "GrGLInterface.h"
 #include "SampleApp.h"
 #include "SkApplication.h"
 #include "SkCanvas.h"
@@ -259,7 +260,23 @@ JNIEXPORT void JNICALL Java_com_skia_sampleapp_SampleApp_draw(
             }
             context->unref();
         }
-        GrRenderTarget* renderTarget = context->createRenderTargetFrom3DApiState();
+
+        GrRenderTarget* renderTarget;
+
+        GrPlatformSurfaceDesc desc;
+        desc.reset();
+        desc.fSurfaceType = kRenderTarget_GrPlatformSurfaceType;
+        desc.fWidth = bitmap.width();
+        desc.fHeight = bitmap.height();
+        desc.fConfig = kRGBA_8888_GrPixelConfig;
+        desc.fStencilBits = 8;
+        GrGLint buffer;
+        GR_GL_GetIntegerv(GR_GL_FRAMEBUFFER_BINDING, &buffer);
+        desc.fPlatformRenderTarget = buffer;
+
+        renderTarget = static_cast<GrRenderTarget*>(
+                context->createPlatformSurface(desc));
+
         SkGpuCanvas* gpuCanvas = new SkGpuCanvas(context, renderTarget);
 
         SkDevice* device = gpuCanvas->createDevice(SkBitmap::kARGB_8888_Config,
index 8d5e13d97f2a14d347a1b55242642c2bce348170..455559c745bc92e0cfe9823a21ad60ca8a0e4d9b 100644 (file)
@@ -15,9 +15,7 @@
 #include "GrContext.h"
 #include "SkTypeface.h"
 
-#ifdef ANDROID
-    #include "gl2.h"
-#endif
+#include "GrGLInterface.h"
 
 #define TEST_GPIPEx
 
@@ -684,7 +682,20 @@ SkCanvas* SampleWindow::beforeChildren(SkCanvas* canvas) {
                 const SkBitmap& bitmap = device->accessBitmap(true);
 
                 GrRenderTarget* renderTarget;
-                renderTarget = fGrContext->createRenderTargetFrom3DApiState();
+
+                GrPlatformSurfaceDesc desc;
+                desc.reset();
+                desc.fSurfaceType = kRenderTarget_GrPlatformSurfaceType;
+                desc.fWidth = bitmap.width();
+                desc.fHeight = bitmap.height();
+                desc.fConfig = kRGBA_8888_GrPixelConfig;
+                desc.fStencilBits = 8;
+                GrGLint buffer;
+                GR_GL_GetIntegerv(GR_GL_FRAMEBUFFER_BINDING, &buffer);
+                desc.fPlatformRenderTarget = buffer;
+
+                renderTarget = static_cast<GrRenderTarget*>(
+                        fGrContext->createPlatformSurface(desc));
                 fGpuCanvas = new SkGpuCanvas(fGrContext, renderTarget);
                 renderTarget->unref();
 
@@ -1323,12 +1334,8 @@ void SampleWindow::onSizeChange() {
     fZoomCenterX = SkScalarHalf(this->width());
     fZoomCenterY = SkScalarHalf(this->height());
 
-#if defined(SK_BUILD_FOR_UNIX) || defined(ANDROID)
-    if (fGrContext) {
-        glViewport(0, 0, SkScalarRound(this->width()),
-                SkScalarRound(this->height()));
-        fGrContext->resetContext();
-    }
+#ifdef ANDROID
+    postInvalDelay(this->getSinkID());
 #endif
     this->updateTitle();    // to refresh our config
 }