| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2013 Google Inc. | 2 * Copyright 2013 Google Inc. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license that can be | 4 * Use of this source code is governed by a BSD-style license that can be |
| 5 * found in the LICENSE file. | 5 * found in the LICENSE file. |
| 6 */ | 6 */ |
| 7 | 7 |
| 8 #include <functional> | 8 #include <functional> |
| 9 #include "SkCanvas.h" | 9 #include "SkCanvas.h" |
| 10 #include "SkData.h" | 10 #include "SkData.h" |
| (...skipping 879 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 890 desc.fHeight = kHeight; | 890 desc.fHeight = kHeight; |
| 891 desc.fFlags = kRenderTarget_GrBackendTextureFlag; | 891 desc.fFlags = kRenderTarget_GrBackendTextureFlag; |
| 892 desc.fTextureHandle = textureObject; | 892 desc.fTextureHandle = textureObject; |
| 893 | 893 |
| 894 auto surface = SkSurface::MakeFromBackendTexture(context, desc, nullptr)
; | 894 auto surface = SkSurface::MakeFromBackendTexture(context, desc, nullptr)
; |
| 895 test_surface_clear(reporter, surface, grSurfaceGetter, 0xABABABAB); | 895 test_surface_clear(reporter, surface, grSurfaceGetter, 0xABABABAB); |
| 896 context->getGpu()->deleteTestingOnlyBackendTexture(textureObject); | 896 context->getGpu()->deleteTestingOnlyBackendTexture(textureObject); |
| 897 } | 897 } |
| 898 } | 898 } |
| 899 #endif | 899 #endif |
| 900 | |
| 901 #if SK_SUPPORT_GPU | |
| 902 DEF_GPUTEST_FOR_GL_RENDERING_CONTEXTS(SurfaceWrappedTextureAsRenderTarget, repor
ter, ctxInfo) { | |
| 903 GrGpu* gpu = ctxInfo.fGrContext->getGpu(); | |
| 904 if (!gpu) { | |
| 905 return; | |
| 906 } | |
| 907 // Validate that we can draw paths to a canvas of a surface created with | |
| 908 // SkSurface::MakeFromBackendTextureAsRenderTarget. The code intends to enfo
rce the use of | |
| 909 // stencil buffer. The original bug prevented the creation of stencil buffer
, causing an assert | |
| 910 // while drawing paths. | |
| 911 | |
| 912 static const int kW = 100; | |
| 913 static const int kH = 100; | |
| 914 static const uint32_t kOrigColor = SK_ColorRED; | |
| 915 const SkColor kShapeColor = SK_ColorGREEN; | |
| 916 | |
| 917 SkPath clipPath; | |
| 918 clipPath.quadTo(SkIntToScalar(kW), SkIntToScalar(0), SkIntToScalar(kW), SkIn
tToScalar(kH)); | |
| 919 clipPath.lineTo(SkIntToScalar(0), SkIntToScalar(kH)); | |
| 920 clipPath.lineTo(SkIntToScalar(0), SkIntToScalar(0)); | |
| 921 clipPath.close(); | |
| 922 SkPath path; | |
| 923 path.quadTo(SkIntToScalar(0), SkIntToScalar(kH), SkIntToScalar(kW), SkIntToS
calar(kH)); | |
| 924 path.lineTo(SkIntToScalar(kW), SkIntToScalar(0)); | |
| 925 path.lineTo(SkIntToScalar(0), SkIntToScalar(0)); | |
| 926 path.close(); | |
| 927 SkPaint paint; | |
| 928 paint.setAntiAlias(true); | |
| 929 paint.setColor(kShapeColor); | |
| 930 | |
| 931 SkImageInfo bitmapInfo = SkImageInfo::Make(kW, kH, kRGBA_8888_SkColorType, k
Premul_SkAlphaType); | |
| 932 for (int sampleCnt : {0, 4, 8}) { | |
| 933 SkBitmap bitmap; | |
| 934 bitmap.allocPixels(bitmapInfo); | |
| 935 bitmap.eraseColor(kOrigColor); | |
| 936 GrBackendObject texHandle = gpu->createTestingOnlyBackendTexture(bitmap.
getPixels(), kW, kH, | |
| 937 kRGBA_8
888_GrPixelConfig); | |
| 938 | |
| 939 GrBackendTextureDesc wrappedDesc; | |
| 940 wrappedDesc.fConfig = kRGBA_8888_GrPixelConfig; | |
| 941 wrappedDesc.fWidth = kW; | |
| 942 wrappedDesc.fHeight = kH; | |
| 943 wrappedDesc.fOrigin = kBottomLeft_GrSurfaceOrigin; | |
| 944 wrappedDesc.fFlags = kRenderTarget_GrBackendTextureFlag; | |
| 945 wrappedDesc.fTextureHandle = texHandle; | |
| 946 wrappedDesc.fSampleCnt = sampleCnt; | |
| 947 | |
| 948 sk_sp<SkSurface> surface( | |
| 949 SkSurface::MakeFromBackendTextureAsRenderTarget(ctxInfo.fGrContext,
wrappedDesc, | |
| 950 nullptr)); | |
| 951 if (!surface) { | |
| 952 continue; | |
| 953 } | |
| 954 | |
| 955 surface->getCanvas()->clipPath(clipPath, SkRegion::kIntersect_Op, true); | |
| 956 surface->getCanvas()->drawPath(path, paint); | |
| 957 SkAssertResult(surface->readPixels(bitmapInfo, bitmap.getPixels(), | |
| 958 bitmap.rowBytes(), 0, 0)); | |
| 959 // Ensure that the shape color ends up to the surface. | |
| 960 REPORTER_ASSERT(reporter, kShapeColor == bitmap.getColor(kW / 2, kH / 2)
); | |
| 961 SkColor backgroundColor = bitmap.getColor(kW - 1, 0); | |
| 962 if (!sampleCnt) { | |
| 963 // Ensure that the original texture color is preserved in pixels tha
t aren't rendered to | |
| 964 // via the surface. | |
| 965 REPORTER_ASSERT(reporter, kOrigColor == backgroundColor); | |
| 966 } | |
| 967 gpu->deleteTestingOnlyBackendTexture(texHandle); | |
| 968 } | |
| 969 } | |
| 970 #endif | |
| OLD | NEW |