1d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr/* 2d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr * Copyright 2014 Google Inc. 3d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr * 4d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr * Use of this source code is governed by a BSD-style license that can be 5d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr * found in the LICENSE file. 6d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr */ 7d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 8d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr#include "SkTypes.h" 9d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr#if SK_SUPPORT_GPU 10d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr#include "GrContextFactory.h" 11d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr#endif 12d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr#include "SkImage.h" 13d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr#include "SkSurface.h" 14d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 15d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr#include "Test.h" 16d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 17b88813683cb1242ee5d0b6d8f5deb50b39e81e7freedstatic void check_isopaque(skiatest::Reporter* reporter, SkSurface* surface, bool expectedOpaque) { 18b88813683cb1242ee5d0b6d8f5deb50b39e81e7freed SkAutoTUnref<SkImage> image(surface->newImageSnapshot()); 19b88813683cb1242ee5d0b6d8f5deb50b39e81e7freed REPORTER_ASSERT(reporter, image->isOpaque() == expectedOpaque); 20b88813683cb1242ee5d0b6d8f5deb50b39e81e7freed} 21b88813683cb1242ee5d0b6d8f5deb50b39e81e7freed 22d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixrDEF_TEST(ImageIsOpaqueTest, reporter) { 23d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr SkImageInfo infoTransparent = SkImageInfo::MakeN32Premul(5, 5); 24d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr SkAutoTUnref<SkSurface> surfaceTransparent(SkSurface::NewRaster(infoTransparent)); 25b88813683cb1242ee5d0b6d8f5deb50b39e81e7freed check_isopaque(reporter, surfaceTransparent, false); 26d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 27d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr SkImageInfo infoOpaque = SkImageInfo::MakeN32(5, 5, kOpaque_SkAlphaType); 28d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr SkAutoTUnref<SkSurface> surfaceOpaque(SkSurface::NewRaster(infoOpaque)); 29b88813683cb1242ee5d0b6d8f5deb50b39e81e7freed check_isopaque(reporter, surfaceOpaque, true); 30d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr} 31d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 32d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr#if SK_SUPPORT_GPU 33d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 34d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixrDEF_GPUTEST(ImageIsOpaqueTest_GPU, reporter, factory) { 35d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr for (int i = 0; i < GrContextFactory::kGLContextTypeCnt; ++i) { 36d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr GrContextFactory::GLContextType glCtxType = (GrContextFactory::GLContextType) i; 37d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 38d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr if (!GrContextFactory::IsRenderingGLContext(glCtxType)) { 39d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr continue; 40d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr } 41d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 42d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr GrContext* context = factory->get(glCtxType); 43d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 44d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr if (NULL == context) { 45d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr continue; 46d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr } 47d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 48d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr SkImageInfo infoTransparent = SkImageInfo::MakeN32Premul(5, 5); 49d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr SkAutoTUnref<SkSurface> surfaceTransparent(SkSurface::NewRenderTarget(context, infoTransparent)); 50b88813683cb1242ee5d0b6d8f5deb50b39e81e7freed check_isopaque(reporter, surfaceTransparent, false); 51d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 52d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr SkImageInfo infoOpaque = SkImageInfo::MakeN32(5, 5, kOpaque_SkAlphaType); 53d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr SkAutoTUnref<SkSurface> surfaceOpaque(SkSurface::NewRenderTarget(context, infoOpaque)); 54b88813683cb1242ee5d0b6d8f5deb50b39e81e7freed#if 0 55b88813683cb1242ee5d0b6d8f5deb50b39e81e7freed // this is failing right now : TODO fix me 56b88813683cb1242ee5d0b6d8f5deb50b39e81e7freed check_isopaque(reporter, surfaceOpaque, true); 57b88813683cb1242ee5d0b6d8f5deb50b39e81e7freed#endif 58d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr } 59d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr} 60d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr 61d2a3522503ca0c39829f1bb41f01201d1affdaf6piotaixr#endif 62