aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--include/gpu/GrRenderTarget.h2
-rw-r--r--include/gpu/GrSurface.h19
-rw-r--r--include/gpu/GrTexture.h2
-rw-r--r--include/gpu/GrTypes.h12
-rw-r--r--src/effects/SkDisplacementMapEffect.cpp2
-rw-r--r--src/effects/SkLightingImageFilter.cpp2
-rw-r--r--src/effects/SkMatrixConvolutionImageFilter.cpp2
-rw-r--r--src/gpu/effects/GrTextureDomainEffect.cpp2
-rw-r--r--src/gpu/gl/GrGLEffectMatrix.cpp8
-rw-r--r--src/gpu/gl/GrGLRenderTarget.cpp4
-rw-r--r--src/gpu/gl/GrGLTexture.cpp2
-rw-r--r--src/gpu/gl/GrGLTexture.h2
-rw-r--r--src/gpu/gl/GrGpuGL.cpp12
13 files changed, 39 insertions, 32 deletions
diff --git a/include/gpu/GrRenderTarget.h b/include/gpu/GrRenderTarget.h
index 4e77466b9a..19a37a5d8b 100644
--- a/include/gpu/GrRenderTarget.h
+++ b/include/gpu/GrRenderTarget.h
@@ -142,7 +142,7 @@ protected:
bool isWrapped,
GrTexture* texture,
const GrTextureDesc& desc,
- Origin origin)
+ GrSurfaceOrigin origin)
: INHERITED(gpu, isWrapped, desc, origin)
, fStencilBuffer(NULL)
, fTexture(texture) {
diff --git a/include/gpu/GrSurface.h b/include/gpu/GrSurface.h
index 4ef0acb82e..8ccbc9833b 100644
--- a/include/gpu/GrSurface.h
+++ b/include/gpu/GrSurface.h
@@ -33,19 +33,8 @@ public:
*/
int height() const { return fDesc.fHeight; }
- /**
- * Some surfaces will be stored such that the upper and left edges of the content meet at the
- * the origin (in texture coord space) and for other surfaces the lower and left edges meet at
- * the origin. Render-targets are always consistent with the convention of the underlying
- * backend API to make it easier to mix native backend rendering with Skia rendering. Wrapped
- * backend surfaces always use the backend's convention as well.
- */
- enum Origin {
- kTopLeft_Origin,
- kBottomLeft_Origin,
- };
- Origin origin() const {
- GrAssert(kTopLeft_Origin == fOrigin || kBottomLeft_Origin == fOrigin);
+ GrSurfaceOrigin origin() const {
+ GrAssert(kTopLeft_SurfaceOrigin == fOrigin || kBottomLeft_SurfaceOrigin == fOrigin);
return fOrigin;
}
@@ -115,7 +104,7 @@ public:
uint32_t pixelOpsFlags = 0) = 0;
protected:
- GrSurface(GrGpu* gpu, bool isWrapped, const GrTextureDesc& desc, Origin origin)
+ GrSurface(GrGpu* gpu, bool isWrapped, const GrTextureDesc& desc, GrSurfaceOrigin origin)
: INHERITED(gpu, isWrapped)
, fDesc(desc)
, fOrigin(origin) {
@@ -124,7 +113,7 @@ protected:
GrTextureDesc fDesc;
private:
- Origin fOrigin;
+ GrSurfaceOrigin fOrigin;
typedef GrResource INHERITED;
};
diff --git a/include/gpu/GrTexture.h b/include/gpu/GrTexture.h
index 657e6e5078..94d578894b 100644
--- a/include/gpu/GrTexture.h
+++ b/include/gpu/GrTexture.h
@@ -140,7 +140,7 @@ protected:
// base class cons sets to NULL
// subclass cons can create and set
- GrTexture(GrGpu* gpu, bool isWrapped, const GrTextureDesc& desc, Origin origin)
+ GrTexture(GrGpu* gpu, bool isWrapped, const GrTextureDesc& desc, GrSurfaceOrigin origin)
: INHERITED(gpu, isWrapped, desc, origin)
, fRenderTarget(NULL) {
diff --git a/include/gpu/GrTypes.h b/include/gpu/GrTypes.h
index d7241b499c..055750dd11 100644
--- a/include/gpu/GrTypes.h
+++ b/include/gpu/GrTypes.h
@@ -425,6 +425,17 @@ enum {
kGrColorTableSize = 256 * 4 //sizeof(GrColor)
};
+/**
+ * Some textures will be stored such that the upper and left edges of the content meet at the
+ * the origin (in texture coord space) and for other textures the lower and left edges meet at
+ * the origin. Render-targets are always consistent with the convention of the underlying
+ * backend API to make it easier to mix native backend rendering with Skia rendering.
+ */
+
+enum GrSurfaceOrigin {
+ kBottomLeft_GrSurfaceOrigin,
+ kTopLeft_GrSurfaceOrigin,
+};
/**
* Describes a texture to be created.
@@ -596,6 +607,7 @@ GR_MAKE_BITFIELD_OPS(GrBackendTextureFlags)
struct GrBackendTextureDesc {
GrBackendTextureDesc() { memset(this, 0, sizeof(*this)); }
GrBackendTextureFlags fFlags;
+ GrSurfaceOrigin fOrigin;
int fWidth; //<! width in pixels
int fHeight; //<! height in pixels
GrPixelConfig fConfig; //<! color format
diff --git a/src/effects/SkDisplacementMapEffect.cpp b/src/effects/SkDisplacementMapEffect.cpp
index 0fef7c60c4..aeb47dc5c3 100644
--- a/src/effects/SkDisplacementMapEffect.cpp
+++ b/src/effects/SkDisplacementMapEffect.cpp
@@ -516,7 +516,7 @@ void GrGLDisplacementMapEffect::setData(const GrGLUniformManager& uman, const Gr
colorTex);
uman.set2f(fScaleUni, SkScalarToFloat(displacementMap.scale()),
- colorTex->origin() == GrSurface::kTopLeft_Origin ?
+ colorTex->origin() == kTopLeft_GrSurfaceOrigin ?
SkScalarToFloat(displacementMap.scale()) :
SkScalarToFloat(-displacementMap.scale()));
}
diff --git a/src/effects/SkLightingImageFilter.cpp b/src/effects/SkLightingImageFilter.cpp
index dd892f91d9..498c8e0d17 100644
--- a/src/effects/SkLightingImageFilter.cpp
+++ b/src/effects/SkLightingImageFilter.cpp
@@ -1218,7 +1218,7 @@ GrGLEffect::EffectKey GrGLLightingEffect::GenKey(const GrEffectStage& s,
void GrGLLightingEffect::setData(const GrGLUniformManager& uman, const GrEffectStage& stage) {
const GrLightingEffect& effect = GetEffectFromStage<GrLightingEffect>(stage);
GrTexture* texture = effect.texture(0);
- float ySign = texture->origin() == GrSurface::kTopLeft_Origin ? -1.0f : 1.0f;
+ float ySign = texture->origin() == kTopLeft_GrSurfaceOrigin ? -1.0f : 1.0f;
uman.set2f(fImageIncrementUni, 1.0f / texture->width(), ySign / texture->height());
uman.set1f(fSurfaceScaleUni, effect.surfaceScale());
fLight->setData(uman, effect.light());
diff --git a/src/effects/SkMatrixConvolutionImageFilter.cpp b/src/effects/SkMatrixConvolutionImageFilter.cpp
index 0c2a24e04d..5a97ec4fae 100644
--- a/src/effects/SkMatrixConvolutionImageFilter.cpp
+++ b/src/effects/SkMatrixConvolutionImageFilter.cpp
@@ -473,7 +473,7 @@ void GrGLMatrixConvolutionEffect::setData(const GrGLUniformManager& uman,
GrAssert(effect.kernelSize() == fKernelSize);
GrAssert(effect.tileMode() == fTileMode);
float imageIncrement[2];
- float ySign = texture.origin() == GrSurface::kTopLeft_Origin ? 1.0f : -1.0f;
+ float ySign = texture.origin() == kTopLeft_GrSurfaceOrigin ? 1.0f : -1.0f;
imageIncrement[0] = 1.0f / texture.width();
imageIncrement[1] = ySign / texture.height();
uman.set2fv(fImageIncrementUni, 0, 1, imageIncrement);
diff --git a/src/gpu/effects/GrTextureDomainEffect.cpp b/src/gpu/effects/GrTextureDomainEffect.cpp
index bfd62c2528..833c19803b 100644
--- a/src/gpu/effects/GrTextureDomainEffect.cpp
+++ b/src/gpu/effects/GrTextureDomainEffect.cpp
@@ -90,7 +90,7 @@ void GrGLTextureDomainEffect::setData(const GrGLUniformManager& uman, const GrEf
SkScalarToFloat(domain.bottom())
};
// vertical flip if necessary
- if (GrSurface::kBottomLeft_Origin == effect.texture(0)->origin()) {
+ if (kBottomLeft_GrSurfaceOrigin == effect.texture(0)->origin()) {
values[1] = 1.0f - values[1];
values[3] = 1.0f - values[3];
// The top and bottom were just flipped, so correct the ordering
diff --git a/src/gpu/gl/GrGLEffectMatrix.cpp b/src/gpu/gl/GrGLEffectMatrix.cpp
index 6dcb6e6096..5fdde2c394 100644
--- a/src/gpu/gl/GrGLEffectMatrix.cpp
+++ b/src/gpu/gl/GrGLEffectMatrix.cpp
@@ -19,7 +19,7 @@ GrGLEffect::EffectKey GrGLEffectMatrix::GenKey(const SkMatrix& effectMatrix,
SkMatrix::kPerspective_Mask;
int combinedTypes = type0 | type1;
- bool reverseY = (NULL != texture) && GrSurface::kBottomLeft_Origin == texture->origin();
+ bool reverseY = (NULL != texture) && kBottomLeft_GrSurfaceOrigin == texture->origin();
if (SkMatrix::kPerspective_Mask & combinedTypes) {
return kGeneral_Key;
@@ -173,11 +173,11 @@ void GrGLEffectMatrix::setData(const GrGLUniformManager& uniformManager,
case kVoid_GrSLType:
GrAssert(matrix.isIdentity());
GrAssert(coordChangeMatrix.isIdentity());
- GrAssert(NULL == texture || GrSurface::kTopLeft_Origin == texture->origin());
+ GrAssert(NULL == texture || kTopLeft_GrSurfaceOrigin == texture->origin());
return;
case kVec2f_GrSLType: {
GrAssert(SkMatrix::kTranslate_Mask == (matrix.getType() | coordChangeMatrix.getType()));
- GrAssert(NULL == texture || GrSurface::kTopLeft_Origin == texture->origin());
+ GrAssert(NULL == texture || kTopLeft_GrSurfaceOrigin == texture->origin());
SkScalar tx = matrix[SkMatrix::kMTransX] + coordChangeMatrix[SkMatrix::kMTransX];
SkScalar ty = matrix[SkMatrix::kMTransY] + coordChangeMatrix[SkMatrix::kMTransY];
if (fPrevMatrix.get(SkMatrix::kMTransX) != tx ||
@@ -191,7 +191,7 @@ void GrGLEffectMatrix::setData(const GrGLUniformManager& uniformManager,
case kMat33f_GrSLType: {
SkMatrix combined;
combined.setConcat(matrix, coordChangeMatrix);
- if (NULL != texture && GrSurface::kBottomLeft_Origin == texture->origin()) {
+ if (NULL != texture && kBottomLeft_GrSurfaceOrigin == texture->origin()) {
// combined.postScale(1,-1);
// combined.postTranslate(0,1);
combined.set(SkMatrix::kMSkewY,
diff --git a/src/gpu/gl/GrGLRenderTarget.cpp b/src/gpu/gl/GrGLRenderTarget.cpp
index c68283e648..47128e7064 100644
--- a/src/gpu/gl/GrGLRenderTarget.cpp
+++ b/src/gpu/gl/GrGLRenderTarget.cpp
@@ -51,7 +51,7 @@ GrGLRenderTarget::GrGLRenderTarget(GrGpuGL* gpu,
viewport.fWidth, viewport.fHeight,
desc.fConfig, desc.fSampleCnt),
texture->origin()) {
- GrAssert(kBottomLeft_Origin == texture->origin());
+ GrAssert(kBottomLeft_GrSurfaceOrigin == texture->origin());
GrAssert(NULL != texID);
GrAssert(NULL != texture);
// FBO 0 can't also be a texture, right?
@@ -74,7 +74,7 @@ GrGLRenderTarget::GrGLRenderTarget(GrGpuGL* gpu,
MakeDesc(kNone_GrTextureFlags,
viewport.fWidth, viewport.fHeight,
desc.fConfig, desc.fSampleCnt),
- kBottomLeft_Origin) {
+ kBottomLeft_GrSurfaceOrigin) {
this->init(desc, viewport, NULL);
}
diff --git a/src/gpu/gl/GrGLTexture.cpp b/src/gpu/gl/GrGLTexture.cpp
index 5c588e7f0d..3ec555a924 100644
--- a/src/gpu/gl/GrGLTexture.cpp
+++ b/src/gpu/gl/GrGLTexture.cpp
@@ -28,7 +28,7 @@ void GrGLTexture::init(GrGpuGL* gpu,
textureDesc.fIsWrapped));
if (NULL != rtDesc) {
- GrAssert(kBottomLeft_Origin == textureDesc.fOrigin);
+ GrAssert(kBottomLeft_GrSurfaceOrigin == textureDesc.fSurfaceOrigin);
GrGLIRect vp;
vp.fLeft = 0;
vp.fWidth = textureDesc.fWidth;
diff --git a/src/gpu/gl/GrGLTexture.h b/src/gpu/gl/GrGLTexture.h
index 527bab0e84..231482134b 100644
--- a/src/gpu/gl/GrGLTexture.h
+++ b/src/gpu/gl/GrGLTexture.h
@@ -59,7 +59,7 @@ public:
struct Desc : public GrTextureDesc {
GrGLuint fTextureID;
bool fIsWrapped;
- Origin fOrigin;
+ GrSurfaceOrigin fOrigin;
};
// creates a texture that is also an RT
diff --git a/src/gpu/gl/GrGpuGL.cpp b/src/gpu/gl/GrGpuGL.cpp
index 670f6acfa4..a1a5bee5f2 100644
--- a/src/gpu/gl/GrGpuGL.cpp
+++ b/src/gpu/gl/GrGpuGL.cpp
@@ -485,6 +485,12 @@ GrTexture* GrGpuGL::onWrapBackendTexture(const GrBackendTextureDesc& desc) {
return NULL;
}
+ // FIXME: add support for TopLeft RT's by flipping all draws.
+ if (desc.fFlags & kRenderTarget_GrBackendTextureFlag &&
+ kBottomLeft_GrSurfaceOrigin != desc.fOrigin) {
+ return NULL;
+ }
+
int maxSize = this->getCaps().maxTextureSize();
if (desc.fWidth > maxSize || desc.fHeight > maxSize) {
return NULL;
@@ -499,7 +505,7 @@ GrTexture* GrGpuGL::onWrapBackendTexture(const GrBackendTextureDesc& desc) {
glTexDesc.fSampleCnt = desc.fSampleCnt;
glTexDesc.fTextureID = static_cast<GrGLuint>(desc.fTextureHandle);
glTexDesc.fIsWrapped = true;
- glTexDesc.fOrigin = GrSurface::kBottomLeft_Origin;
+ glTexDesc.fOrigin = desc.fOrigin;
GrGLTexture* texture = NULL;
if (desc.fFlags & kRenderTarget_GrBackendTextureFlag) {
@@ -675,7 +681,7 @@ bool GrGpuGL::uploadTexData(const GrGLTexture::Desc& desc,
bool swFlipY = false;
bool glFlipY = false;
if (NULL != data) {
- if (GrSurface::kBottomLeft_Origin == desc.fOrigin) {
+ if (kBottomLeft_GrSurfaceOrigin == desc.fOrigin) {
if (this->glCaps().unpackFlipYSupport()) {
glFlipY = true;
} else {
@@ -957,7 +963,7 @@ GrTexture* GrGpuGL::onCreateTexture(const GrTextureDesc& desc,
// We keep GrRenderTargets in GL's normal orientation so that they
// can be drawn to by the outside world without the client having
// to render upside down.
- glTexDesc.fOrigin = renderTarget ? GrSurface::kBottomLeft_Origin : GrSurface::kTopLeft_Origin;
+ glTexDesc.fOrigin = renderTarget ? kBottomLeft_GrSurfaceOrigin : kTopLeft_GrSurfaceOrigin;
glRTDesc.fSampleCnt = desc.fSampleCnt;
if (GrGLCaps::kNone_MSFBOType == this->glCaps().msFBOType() &&