Use a struct for client GL texture handles
Review URL: https://codereview.chromium.org/1429863009
diff --git a/gm/imagefromyuvtextures.cpp b/gm/imagefromyuvtextures.cpp
index 8c8ab24..28d2cf8 100644
--- a/gm/imagefromyuvtextures.cpp
+++ b/gm/imagefromyuvtextures.cpp
@@ -93,7 +93,7 @@
fRGBImage.reset(SkImage::NewRasterCopy(rgbBmp.info(), rgbColors, rgbBmp.rowBytes()));
}
- void createYUVTextures(GrContext* context, GrBackendObject yuvIDs[3]) {
+ void createYUVTextures(GrContext* context, GrBackendObject yuvHandles[3]) {
const GrGpu* gpu = context->getGpu();
if (!gpu) {
return;
@@ -101,15 +101,15 @@
for (int i = 0; i < 3; ++i) {
SkASSERT(fYUVBmps[i].width() == SkToInt(fYUVBmps[i].rowBytes()));
- yuvIDs[i] = gpu->createTestingOnlyBackendTexture(fYUVBmps[i].getPixels(),
- fYUVBmps[i].width(),
- fYUVBmps[i].height(),
- kAlpha_8_GrPixelConfig);
+ yuvHandles[i] = gpu->createTestingOnlyBackendTexture(fYUVBmps[i].getPixels(),
+ fYUVBmps[i].width(),
+ fYUVBmps[i].height(),
+ kAlpha_8_GrPixelConfig);
}
context->resetContext();
}
- void deleteYUVTextures(GrContext* context, const GrBackendObject yuvIDs[3]) {
+ void deleteYUVTextures(GrContext* context, const GrBackendObject yuvHandles[3]) {
const GrGpu* gpu = context->getGpu();
if (!gpu) {
@@ -117,7 +117,7 @@
}
for (int i = 0; i < 3; ++i) {
- gpu->deleteTestingOnlyBackendTexture(yuvIDs[i]);
+ gpu->deleteTestingOnlyBackendTexture(yuvHandles[i]);
}
context->resetContext();
@@ -131,8 +131,8 @@
return;
}
- GrBackendObject yuvIDs[3];
- this->createYUVTextures(context, yuvIDs);
+ GrBackendObject yuvHandles[3];
+ this->createYUVTextures(context, yuvHandles);
static const SkScalar kPad = 10.f;
@@ -146,10 +146,10 @@
for (int space = kJPEG_SkYUVColorSpace; space <= kLastEnum_SkYUVColorSpace; ++space) {
images.push_back(SkImage::NewFromYUVTexturesCopy(context,
static_cast<SkYUVColorSpace>(space),
- yuvIDs, sizes,
+ yuvHandles, sizes,
kTopLeft_GrSurfaceOrigin));
}
- this->deleteYUVTextures(context, yuvIDs);
+ this->deleteYUVTextures(context, yuvHandles);
for (int i = 0; i < images.count(); ++ i) {
SkScalar y = (i + 1) * kPad + i * fYUVBmps[0].height();
SkScalar x = kPad;
diff --git a/gyp/skia_for_android_framework_defines.gypi b/gyp/skia_for_android_framework_defines.gypi
index 70b3f29..773c530 100644
--- a/gyp/skia_for_android_framework_defines.gypi
+++ b/gyp/skia_for_android_framework_defines.gypi
@@ -18,6 +18,7 @@
'SK_SUPPORT_LEGACY_CLIPTOLAYERFLAG',
'SK_IGNORE_LINEONLY_AA_CONVEX_PATH_OPTS',
'SK_SUPPORT_LEGACY_GRADIENT_DITHERING',
+ 'SK_IGNORE_GL_TEXTURE_TARGET',
],
},
}
diff --git a/gyp/skia_for_chromium_defines.gypi b/gyp/skia_for_chromium_defines.gypi
index a148a83..e604866 100644
--- a/gyp/skia_for_chromium_defines.gypi
+++ b/gyp/skia_for_chromium_defines.gypi
@@ -14,6 +14,7 @@
#
'skia_for_chromium_defines': [
'SK_IGNORE_LINEONLY_AA_CONVEX_PATH_OPTS',
+ 'SK_IGNORE_GL_TEXTURE_TARGET',
],
},
}
diff --git a/include/gpu/gl/GrGLTypes.h b/include/gpu/gl/GrGLTypes.h
index e2eadb3..04154f3 100644
--- a/include/gpu/gl/GrGLTypes.h
+++ b/include/gpu/gl/GrGLTypes.h
@@ -58,4 +58,17 @@
typedef signed long int GrGLsizeiptr;
#endif
+///////////////////////////////////////////////////////////////////////////////
+/**
+ * Types for interacting with GL resources created externally to Skia. GrBackendObjects for GL
+ * textures are really const GrGLTexture*
+ */
+
+struct GrGLTextureInfo {
+ GrGLenum fTarget;
+ GrGLuint fID;
+};
+
+GR_STATIC_ASSERT(sizeof(GrBackendObject) >= sizeof(const GrGLTextureInfo*));
+
#endif
diff --git a/src/gpu/gl/GrGLGpu.cpp b/src/gpu/gl/GrGLGpu.cpp
index fc9675f..c9009b8 100644
--- a/src/gpu/gl/GrGLGpu.cpp
+++ b/src/gpu/gl/GrGLGpu.cpp
@@ -413,10 +413,16 @@
if (!this->configToGLFormats(desc.fConfig, false, nullptr, nullptr, nullptr)) {
return nullptr;
}
-
- if (0 == desc.fTextureHandle) {
+#ifdef SK_IGNORE_GL_TEXTURE_TARGET
+ if (!desc.fTextureHandle) {
return nullptr;
}
+#else
+ const GrGLTextureInfo* info = reinterpret_cast<const GrGLTextureInfo*>(desc.fTextureHandle);
+ if (!info || !info->fID) {
+ return nullptr;
+ }
+#endif
int maxSize = this->caps()->maxTextureSize();
if (desc.fWidth > maxSize || desc.fHeight > maxSize) {
@@ -426,9 +432,13 @@
GrGLTexture::IDDesc idDesc;
GrSurfaceDesc surfDesc;
- idDesc.fTextureID = static_cast<GrGLuint>(desc.fTextureHandle);
+#ifdef SK_IGNORE_GL_TEXTURE_TARGET
+ idDesc.fInfo.fID = static_cast<GrGLuint>(desc.fTextureHandle);
// We only support GL_TEXTURE_2D at the moment.
- idDesc.fTarget = GR_GL_TEXTURE_2D;
+ idDesc.fInfo.fTarget = GR_GL_TEXTURE_2D;
+#else
+ idDesc.fInfo = *info;
+#endif
switch (ownership) {
case kAdopt_GrWrapOwnership:
@@ -460,7 +470,7 @@
if (renderTarget) {
GrGLRenderTarget::IDDesc rtIDDesc;
if (!this->createRenderTargetObjects(surfDesc, GrGpuResource::kUncached_LifeCycle,
- idDesc.fTextureID, idDesc.fTarget, &rtIDDesc)) {
+ idDesc.fInfo, &rtIDDesc)) {
return nullptr;
}
texture = new GrGLTextureRenderTarget(this, surfDesc, idDesc, rtIDDesc);
@@ -893,8 +903,7 @@
bool GrGLGpu::createRenderTargetObjects(const GrSurfaceDesc& desc,
GrGpuResource::LifeCycle lifeCycle,
- GrGLuint texID,
- GrGLenum textureTarget,
+ const GrGLTextureInfo& texInfo,
GrGLRenderTarget::IDDesc* idDesc) {
idDesc->fMSColorRenderbufferID = 0;
idDesc->fRTFBOID = 0;
@@ -971,13 +980,13 @@
if (this->glCaps().usesImplicitMSAAResolve() && desc.fSampleCnt > 0) {
GL_CALL(FramebufferTexture2DMultisample(GR_GL_FRAMEBUFFER,
GR_GL_COLOR_ATTACHMENT0,
- textureTarget,
- texID, 0, desc.fSampleCnt));
+ texInfo.fTarget,
+ texInfo.fID, 0, desc.fSampleCnt));
} else {
GL_CALL(FramebufferTexture2D(GR_GL_FRAMEBUFFER,
GR_GL_COLOR_ATTACHMENT0,
- textureTarget,
- texID, 0));
+ texInfo.fTarget,
+ texInfo.fID, 0));
}
if ((desc.fFlags & kCheckAllocation_GrSurfaceFlag) ||
!this->glCaps().isConfigVerifiedColorAttachment(desc.fConfig)) {
@@ -1027,21 +1036,21 @@
bool renderTarget = SkToBool(desc.fFlags & kRenderTarget_GrSurfaceFlag);
GrGLTexture::IDDesc idDesc;
- GL_CALL(GenTextures(1, &idDesc.fTextureID));
+ GL_CALL(GenTextures(1, &idDesc.fInfo.fID));
idDesc.fLifeCycle = lifeCycle;
// We only support GL_TEXTURE_2D at the moment.
- idDesc.fTarget = GR_GL_TEXTURE_2D;
+ idDesc.fInfo.fTarget = GR_GL_TEXTURE_2D;
- if (!idDesc.fTextureID) {
+ if (!idDesc.fInfo.fID) {
return return_null_texture();
}
this->setScratchTextureUnit();
- GL_CALL(BindTexture(idDesc.fTarget, idDesc.fTextureID));
+ GL_CALL(BindTexture(idDesc.fInfo.fTarget, idDesc.fInfo.fID));
if (renderTarget && this->glCaps().textureUsageSupport()) {
// provides a hint about how this texture will be used
- GL_CALL(TexParameteri(idDesc.fTarget,
+ GL_CALL(TexParameteri(idDesc.fInfo.fTarget,
GR_GL_TEXTURE_USAGE,
GR_GL_FRAMEBUFFER_ATTACHMENT));
}
@@ -1056,34 +1065,33 @@
initialTexParams.fMagFilter = GR_GL_NEAREST;
initialTexParams.fWrapS = GR_GL_CLAMP_TO_EDGE;
initialTexParams.fWrapT = GR_GL_CLAMP_TO_EDGE;
- GL_CALL(TexParameteri(idDesc.fTarget,
+ GL_CALL(TexParameteri(idDesc.fInfo.fTarget,
GR_GL_TEXTURE_MAG_FILTER,
initialTexParams.fMagFilter));
- GL_CALL(TexParameteri(idDesc.fTarget,
+ GL_CALL(TexParameteri(idDesc.fInfo.fTarget,
GR_GL_TEXTURE_MIN_FILTER,
initialTexParams.fMinFilter));
- GL_CALL(TexParameteri(idDesc.fTarget,
+ GL_CALL(TexParameteri(idDesc.fInfo.fTarget,
GR_GL_TEXTURE_WRAP_S,
initialTexParams.fWrapS));
- GL_CALL(TexParameteri(idDesc.fTarget,
+ GL_CALL(TexParameteri(idDesc.fInfo.fTarget,
GR_GL_TEXTURE_WRAP_T,
initialTexParams.fWrapT));
- if (!this->uploadTexData(desc, idDesc.fTarget, true, 0, 0,
+ if (!this->uploadTexData(desc, idDesc.fInfo.fTarget, true, 0, 0,
desc.fWidth, desc.fHeight,
desc.fConfig, srcData, rowBytes)) {
- GL_CALL(DeleteTextures(1, &idDesc.fTextureID));
+ GL_CALL(DeleteTextures(1, &idDesc.fInfo.fID));
return return_null_texture();
}
GrGLTexture* tex;
if (renderTarget) {
// unbind the texture from the texture unit before binding it to the frame buffer
- GL_CALL(BindTexture(idDesc.fTarget, 0));
+ GL_CALL(BindTexture(idDesc.fInfo.fTarget, 0));
GrGLRenderTarget::IDDesc rtIDDesc;
- if (!this->createRenderTargetObjects(desc, lifeCycle, idDesc.fTextureID, idDesc.fTarget,
- &rtIDDesc)) {
- GL_CALL(DeleteTextures(1, &idDesc.fTextureID));
+ if (!this->createRenderTargetObjects(desc, lifeCycle, idDesc.fInfo, &rtIDDesc)) {
+ GL_CALL(DeleteTextures(1, &idDesc.fInfo.fID));
return return_null_texture();
}
tex = new GrGLTextureRenderTarget(this, desc, idDesc, rtIDDesc);
@@ -1107,17 +1115,17 @@
}
GrGLTexture::IDDesc idDesc;
- GL_CALL(GenTextures(1, &idDesc.fTextureID));
+ GL_CALL(GenTextures(1, &idDesc.fInfo.fID));
idDesc.fLifeCycle = lifeCycle;
// We only support GL_TEXTURE_2D at the moment.
- idDesc.fTarget = GR_GL_TEXTURE_2D;
+ idDesc.fInfo.fTarget = GR_GL_TEXTURE_2D;
- if (!idDesc.fTextureID) {
+ if (!idDesc.fInfo.fID) {
return return_null_texture();
}
this->setScratchTextureUnit();
- GL_CALL(BindTexture(idDesc.fTarget, idDesc.fTextureID));
+ GL_CALL(BindTexture(idDesc.fInfo.fTarget, idDesc.fInfo.fID));
// Some drivers like to know filter/wrap before seeing glTexImage2D. Some
// drivers have a bug where an FBO won't be complete if it includes a
@@ -1129,21 +1137,21 @@
initialTexParams.fMagFilter = GR_GL_NEAREST;
initialTexParams.fWrapS = GR_GL_CLAMP_TO_EDGE;
initialTexParams.fWrapT = GR_GL_CLAMP_TO_EDGE;
- GL_CALL(TexParameteri(idDesc.fTarget,
+ GL_CALL(TexParameteri(idDesc.fInfo.fTarget,
GR_GL_TEXTURE_MAG_FILTER,
initialTexParams.fMagFilter));
- GL_CALL(TexParameteri(idDesc.fTarget,
+ GL_CALL(TexParameteri(idDesc.fInfo.fTarget,
GR_GL_TEXTURE_MIN_FILTER,
initialTexParams.fMinFilter));
- GL_CALL(TexParameteri(idDesc.fTarget,
+ GL_CALL(TexParameteri(idDesc.fInfo.fTarget,
GR_GL_TEXTURE_WRAP_S,
initialTexParams.fWrapS));
- GL_CALL(TexParameteri(idDesc.fTarget,
+ GL_CALL(TexParameteri(idDesc.fInfo.fTarget,
GR_GL_TEXTURE_WRAP_T,
initialTexParams.fWrapT));
- if (!this->uploadCompressedTexData(desc, idDesc.fTarget, srcData)) {
- GL_CALL(DeleteTextures(1, &idDesc.fTextureID));
+ if (!this->uploadCompressedTexData(desc, idDesc.fInfo.fTarget, srcData)) {
+ GL_CALL(DeleteTextures(1, &idDesc.fInfo.fID));
return return_null_texture();
}
@@ -3220,16 +3228,17 @@
}
GrBackendObject GrGLGpu::createTestingOnlyBackendTexture(void* pixels, int w, int h,
- GrPixelConfig config) const {
- GrGLuint texID;
- GL_CALL(GenTextures(1, &texID));
+ GrPixelConfig config) const {
+ GrGLTextureInfo* info = new GrGLTextureInfo;
+ info->fTarget = GR_GL_TEXTURE_2D;
+ GL_CALL(GenTextures(1, &info->fID));
GL_CALL(ActiveTexture(GR_GL_TEXTURE0));
GL_CALL(PixelStorei(GR_GL_UNPACK_ALIGNMENT, 1));
- GL_CALL(BindTexture(GR_GL_TEXTURE_2D, texID));
- GL_CALL(TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_MAG_FILTER, GR_GL_NEAREST));
- GL_CALL(TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_MIN_FILTER, GR_GL_NEAREST));
- GL_CALL(TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_WRAP_S, GR_GL_CLAMP_TO_EDGE));
- GL_CALL(TexParameteri(GR_GL_TEXTURE_2D, GR_GL_TEXTURE_WRAP_T, GR_GL_CLAMP_TO_EDGE));
+ GL_CALL(BindTexture(info->fTarget, info->fID));
+ GL_CALL(TexParameteri(info->fTarget, GR_GL_TEXTURE_MAG_FILTER, GR_GL_NEAREST));
+ GL_CALL(TexParameteri(info->fTarget, GR_GL_TEXTURE_MIN_FILTER, GR_GL_NEAREST));
+ GL_CALL(TexParameteri(info->fTarget, GR_GL_TEXTURE_WRAP_S, GR_GL_CLAMP_TO_EDGE));
+ GL_CALL(TexParameteri(info->fTarget, GR_GL_TEXTURE_WRAP_T, GR_GL_CLAMP_TO_EDGE));
GrGLenum internalFormat = 0x0; // suppress warning
GrGLenum externalFormat = 0x0; // suppress warning
@@ -3237,14 +3246,24 @@
this->configToGLFormats(config, false, &internalFormat, &externalFormat, &externalType);
- GL_CALL(TexImage2D(GR_GL_TEXTURE_2D, 0, internalFormat, w, h, 0, externalFormat,
+ GL_CALL(TexImage2D(info->fTarget, 0, internalFormat, w, h, 0, externalFormat,
externalType, pixels));
- return texID;
+#ifdef SK_IGNORE_GL_TEXTURE_TARGET
+ GrGLuint id = info->fID;
+ delete info;
+ return id;
+#else
+ return reinterpret_cast<GrBackendObject>(info);
+#endif
}
bool GrGLGpu::isTestingOnlyBackendTexture(GrBackendObject id) const {
+#ifdef SK_IGNORE_GL_TEXTURE_TARGET
GrGLuint texID = (GrGLuint)id;
+#else
+ GrGLuint texID = reinterpret_cast<const GrGLTextureInfo*>(id)->fID;
+#endif
GrGLboolean result;
GL_CALL_RET(result, IsTexture(texID));
@@ -3253,8 +3272,18 @@
}
void GrGLGpu::deleteTestingOnlyBackendTexture(GrBackendObject id) const {
+#ifdef SK_IGNORE_GL_TEXTURE_TARGET
GrGLuint texID = (GrGLuint)id;
+#else
+ const GrGLTextureInfo* info = reinterpret_cast<const GrGLTextureInfo*>(id);
+ GrGLuint texID = info->fID;
+#endif
+
GL_CALL(DeleteTextures(1, &texID));
+
+#ifndef SK_IGNORE_GL_TEXTURE_TARGET
+ delete info;
+#endif
}
///////////////////////////////////////////////////////////////////////////////
diff --git a/src/gpu/gl/GrGLGpu.h b/src/gpu/gl/GrGLGpu.h
index 8dbf593..cb90dc1 100644
--- a/src/gpu/gl/GrGLGpu.h
+++ b/src/gpu/gl/GrGLGpu.h
@@ -304,8 +304,7 @@
int width = -1, int height = -1);
bool createRenderTargetObjects(const GrSurfaceDesc&, GrGpuResource::LifeCycle lifeCycle,
- GrGLenum textureTarget, GrGLuint texID,
- GrGLRenderTarget::IDDesc*);
+ const GrGLTextureInfo& texInfo, GrGLRenderTarget::IDDesc*);
enum TempFBOTarget {
kSrc_TempFBOTarget,
diff --git a/src/gpu/gl/GrGLTexture.cpp b/src/gpu/gl/GrGLTexture.cpp
index 29f7423..39a8d92 100644
--- a/src/gpu/gl/GrGLTexture.cpp
+++ b/src/gpu/gl/GrGLTexture.cpp
@@ -27,31 +27,35 @@
}
void GrGLTexture::init(const GrSurfaceDesc& desc, const IDDesc& idDesc) {
- SkASSERT(0 != idDesc.fTextureID);
+ SkASSERT(0 != idDesc.fInfo.fID);
fTexParams.invalidate();
fTexParamsTimestamp = GrGpu::kExpiredTimestamp;
- fTarget = idDesc.fTarget;
- fTextureID = idDesc.fTextureID;
+ fInfo = idDesc.fInfo;
fTextureIDLifecycle = idDesc.fLifeCycle;
}
void GrGLTexture::onRelease() {
- if (fTextureID) {
+ if (fInfo.fID) {
if (GrGpuResource::kBorrowed_LifeCycle != fTextureIDLifecycle) {
- GL_CALL(DeleteTextures(1, &fTextureID));
+ GL_CALL(DeleteTextures(1, &fInfo.fID));
}
- fTextureID = 0;
+ fInfo.fID = 0;
}
INHERITED::onRelease();
}
void GrGLTexture::onAbandon() {
- fTextureID = 0;
+ fInfo.fTarget = 0;
+ fInfo.fID = 0;
INHERITED::onAbandon();
}
GrBackendObject GrGLTexture::getTextureHandle() const {
+#ifdef SK_IGNORE_GL_TEXTURE_TARGET
return static_cast<GrBackendObject>(this->textureID());
+#else
+ return reinterpret_cast<GrBackendObject>(&fInfo);
+#endif
}
void GrGLTexture::setMemoryBacking(SkTraceMemoryDump* traceMemoryDump,
diff --git a/src/gpu/gl/GrGLTexture.h b/src/gpu/gl/GrGLTexture.h
index 40a68eb..8366a8d 100644
--- a/src/gpu/gl/GrGLTexture.h
+++ b/src/gpu/gl/GrGLTexture.h
@@ -28,8 +28,7 @@
};
struct IDDesc {
- GrGLenum fTarget;
- GrGLuint fTextureID;
+ GrGLTextureInfo fInfo;
GrGpuResource::LifeCycle fLifeCycle;
};
@@ -51,9 +50,9 @@
fTexParamsTimestamp = timestamp;
}
- GrGLuint textureID() const { return fTextureID; }
+ GrGLuint textureID() const { return fInfo.fID; }
- GrGLenum target() const { return fTarget; }
+ GrGLenum target() const { return fInfo.fTarget; }
protected:
// The public constructor registers this object with the cache. However, only the most derived
@@ -72,8 +71,9 @@
private:
TexParams fTexParams;
GrGpu::ResetTimestamp fTexParamsTimestamp;
- GrGLenum fTarget;
- GrGLuint fTextureID;
+ // Holds the texture target and ID. A pointer to this may be shared to external clients for
+ // direct interaction with the GL object.
+ GrGLTextureInfo fInfo;
// We track this separately from GrGpuResource because this may be both a texture and a render
// target, and the texture may be wrapped while the render target is not.
diff --git a/tests/GrPorterDuffTest.cpp b/tests/GrPorterDuffTest.cpp
index a61ab548..d984f92 100644
--- a/tests/GrPorterDuffTest.cpp
+++ b/tests/GrPorterDuffTest.cpp
@@ -1164,10 +1164,12 @@
return;
}
+ GrBackendObject backendTex =
+ ctx->getGpu()->createTestingOnlyBackendTexture(nullptr, 100, 100, kRGBA_8888_GrPixelConfig);
GrBackendTextureDesc fakeDesc;
fakeDesc.fConfig = kRGBA_8888_GrPixelConfig;
fakeDesc.fWidth = fakeDesc.fHeight = 100;
- fakeDesc.fTextureHandle = 1;
+ fakeDesc.fTextureHandle = backendTex;
SkAutoTUnref<GrTexture> fakeTexture(ctx->textureProvider()->wrapBackendTexture(fakeDesc,
kBorrow_GrWrapOwnership));
GrXferProcessor::DstTexture fakeDstTexture;
@@ -1213,6 +1215,7 @@
}
}
}
+ ctx->getGpu()->deleteTestingOnlyBackendTexture(backendTex);
}
#endif
diff --git a/tests/GrSurfaceTest.cpp b/tests/GrSurfaceTest.cpp
index 24ffc7c..bc24d1c 100644
--- a/tests/GrSurfaceTest.cpp
+++ b/tests/GrSurfaceTest.cpp
@@ -11,6 +11,7 @@
#include "GrContext.h"
#include "GrContextFactory.h"
+#include "GrGpu.h"
#include "GrRenderTarget.h"
#include "GrTexture.h"
#include "GrSurfacePriv.h"
@@ -44,13 +45,16 @@
REPORTER_ASSERT(reporter, tex1 == tex1->asTexture());
REPORTER_ASSERT(reporter, static_cast<GrSurface*>(tex1) == tex1->asTexture());
+ GrBackendObject backendTex = context->getGpu()->createTestingOnlyBackendTexture(
+ nullptr, 256, 256, kSkia8888_GrPixelConfig);
+
GrBackendTextureDesc backendDesc;
backendDesc.fConfig = kSkia8888_GrPixelConfig;
backendDesc.fFlags = kRenderTarget_GrBackendTextureFlag;
backendDesc.fWidth = 256;
backendDesc.fHeight = 256;
backendDesc.fSampleCnt = 0;
- backendDesc.fTextureHandle = 5;
+ backendDesc.fTextureHandle = backendTex;
GrSurface* texRT2 = context->textureProvider()->wrapBackendTexture(
backendDesc, kBorrow_GrWrapOwnership);
REPORTER_ASSERT(reporter, texRT2 == texRT2->asRenderTarget());
@@ -60,11 +64,12 @@
REPORTER_ASSERT(reporter, texRT2->asRenderTarget() ==
static_cast<GrSurface*>(texRT2->asTexture()));
REPORTER_ASSERT(reporter, static_cast<GrSurface*>(texRT2->asRenderTarget()) ==
- static_cast<GrSurface*>(texRT2->asTexture()));
+ static_cast<GrSurface*>(texRT2->asTexture()));
texRT1->unref();
texRT2->unref();
tex1->unref();
+ context->getGpu()->deleteTestingOnlyBackendTexture(backendTex);
}
}
diff --git a/tests/ResourceCacheTest.cpp b/tests/ResourceCacheTest.cpp
index 83e4535..c33af9f 100644
--- a/tests/ResourceCacheTest.cpp
+++ b/tests/ResourceCacheTest.cpp
@@ -183,12 +183,12 @@
return;
}
- GrBackendObject texIDs[2];
+ GrBackendObject texHandles[2];
static const int kW = 100;
static const int kH = 100;
- texIDs[0] = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH, kRGBA_8888_GrPixelConfig);
- texIDs[1] = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH, kRGBA_8888_GrPixelConfig);
+ texHandles[0] = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH, kRGBA_8888_GrPixelConfig);
+ texHandles[1] = gpu->createTestingOnlyBackendTexture(nullptr, kW, kH, kRGBA_8888_GrPixelConfig);
context->resetContext();
@@ -197,11 +197,11 @@
desc.fWidth = kW;
desc.fHeight = kH;
- desc.fTextureHandle = texIDs[0];
+ desc.fTextureHandle = texHandles[0];
SkAutoTUnref<GrTexture> borrowed(context->textureProvider()->wrapBackendTexture(
desc, kBorrow_GrWrapOwnership));
- desc.fTextureHandle = texIDs[1];
+ desc.fTextureHandle = texHandles[1];
SkAutoTUnref<GrTexture> adopted(context->textureProvider()->wrapBackendTexture(
desc, kAdopt_GrWrapOwnership));
@@ -215,13 +215,13 @@
context->flush();
- bool borrowedIsAlive = gpu->isTestingOnlyBackendTexture(texIDs[0]);
- bool adoptedIsAlive = gpu->isTestingOnlyBackendTexture(texIDs[1]);
+ bool borrowedIsAlive = gpu->isTestingOnlyBackendTexture(texHandles[0]);
+ bool adoptedIsAlive = gpu->isTestingOnlyBackendTexture(texHandles[1]);
REPORTER_ASSERT(reporter, borrowedIsAlive);
REPORTER_ASSERT(reporter, !adoptedIsAlive);
- gpu->deleteTestingOnlyBackendTexture(texIDs[0]);
+ gpu->deleteTestingOnlyBackendTexture(texHandles[0]);
context->resetContext();
}
diff --git a/tests/SurfaceTest.cpp b/tests/SurfaceTest.cpp
index 4efe985..a3b7981 100644
--- a/tests/SurfaceTest.cpp
+++ b/tests/SurfaceTest.cpp
@@ -118,8 +118,8 @@
static const uint32_t kOrigColor = 0xFFAABBCC;
SkAutoTArray<uint32_t> pixels(kW * kH);
sk_memset32(pixels.get(), kOrigColor, kW * kH);
- GrBackendObject texID = gpu->createTestingOnlyBackendTexture(pixels.get(), kW, kH,
- kRGBA_8888_GrPixelConfig);
+ GrBackendObject texHandle = gpu->createTestingOnlyBackendTexture(pixels.get(), kW, kH,
+ kRGBA_8888_GrPixelConfig);
GrBackendTextureDesc wrappedDesc;
wrappedDesc.fConfig = kRGBA_8888_GrPixelConfig;
@@ -128,7 +128,7 @@
wrappedDesc.fOrigin = kBottomLeft_GrSurfaceOrigin;
wrappedDesc.fSampleCnt = 0;
wrappedDesc.fFlags = kRenderTarget_GrBackendTextureFlag;
- wrappedDesc.fTextureHandle = texID;
+ wrappedDesc.fTextureHandle = texHandle;
SkAutoTUnref<SkSurface> surface(SkSurface::NewWrappedRenderTarget(ctx, wrappedDesc, nullptr));
REPORTER_ASSERT(reporter, surface);