1 /* 2 * Copyright 2013 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 #include "SkTypes.h" 9 10 #if SK_SUPPORT_GPU 11 12 #include "GrContext.h" 13 #include "GrContextFactory.h" 14 #include "GrRenderTarget.h" 15 #include "GrTexture.h" 16 #include "GrSurfacePriv.h" 17 #include "Test.h" 18 19 // Tests that GrSurface::asTexture(), GrSurface::asRenderTarget(), and static upcasting of texture 20 // and render targets to GrSurface all work as expected. 21 DEF_GPUTEST(GrSurface, reporter, factory) { 22 GrContext* context = factory->get(GrContextFactory::kNull_GLContextType); 23 if (context) { 24 GrSurfaceDesc desc; 25 desc.fConfig = kSkia8888_GrPixelConfig; 26 desc.fFlags = kRenderTarget_GrSurfaceFlag; 27 desc.fWidth = 256; 28 desc.fHeight = 256; 29 desc.fSampleCnt = 0; 30 GrSurface* texRT1 = context->textureProvider()->createTexture(desc, false, NULL, 0); 31 32 REPORTER_ASSERT(reporter, texRT1 == texRT1->asRenderTarget()); 33 REPORTER_ASSERT(reporter, texRT1 == texRT1->asTexture()); 34 REPORTER_ASSERT(reporter, static_cast<GrSurface*>(texRT1->asRenderTarget()) == 35 texRT1->asTexture()); 36 REPORTER_ASSERT(reporter, texRT1->asRenderTarget() == 37 static_cast<GrSurface*>(texRT1->asTexture())); 38 REPORTER_ASSERT(reporter, static_cast<GrSurface*>(texRT1->asRenderTarget()) == 39 static_cast<GrSurface*>(texRT1->asTexture())); 40 41 desc.fFlags = kNone_GrSurfaceFlags; 42 GrSurface* tex1 = context->textureProvider()->createTexture(desc, false, NULL, 0); 43 REPORTER_ASSERT(reporter, NULL == tex1->asRenderTarget()); 44 REPORTER_ASSERT(reporter, tex1 == tex1->asTexture()); 45 REPORTER_ASSERT(reporter, static_cast<GrSurface*>(tex1) == tex1->asTexture()); 46 47 GrBackendTextureDesc backendDesc; 48 backendDesc.fConfig = kSkia8888_GrPixelConfig; 49 backendDesc.fFlags = kRenderTarget_GrBackendTextureFlag; 50 backendDesc.fWidth = 256; 51 backendDesc.fHeight = 256; 52 backendDesc.fSampleCnt = 0; 53 backendDesc.fTextureHandle = 5; 54 GrSurface* texRT2 = context->textureProvider()->wrapBackendTexture(backendDesc); 55 REPORTER_ASSERT(reporter, texRT2 == texRT2->asRenderTarget()); 56 REPORTER_ASSERT(reporter, texRT2 == texRT2->asTexture()); 57 REPORTER_ASSERT(reporter, static_cast<GrSurface*>(texRT2->asRenderTarget()) == 58 texRT2->asTexture()); 59 REPORTER_ASSERT(reporter, texRT2->asRenderTarget() == 60 static_cast<GrSurface*>(texRT2->asTexture())); 61 REPORTER_ASSERT(reporter, static_cast<GrSurface*>(texRT2->asRenderTarget()) == 62 static_cast<GrSurface*>(texRT2->asTexture())); 63 64 texRT1->unref(); 65 texRT2->unref(); 66 tex1->unref(); 67 } 68 } 69 70 #endif 71