Bug 776957 - Use OpenDescriptorForDirectTexturing when available in CanvasLayerOGL to avoid useless texture upload. r=cjones

This commit is contained in:
Nicolas Silva 2012-08-09 10:32:48 -04:00
parent c66bd876ed
commit bad716eec5

View File

@ -365,7 +365,23 @@ ShadowCanvasLayerOGL::Swap(const CanvasSurface& aNewFront,
return;
}
if (IsValidSharedTexDescriptor(aNewFront)) {
if (nsRefPtr<TextureImage> texImage =
ShadowLayerManager::OpenDescriptorForDirectTexturing(
gl(), aNewFront.get_SurfaceDescriptor(), LOCAL_GL_CLAMP_TO_EDGE)) {
if (mTexImage &&
(mTexImage->GetSize() != texImage->GetSize() ||
mTexImage->GetContentType() != texImage->GetContentType())) {
mTexImage = nullptr;
DestroyFrontBuffer();
}
mTexImage = texImage;
*aNewBack = IsSurfaceDescriptorValid(mFrontBufferDescriptor) ?
CanvasSurface(mFrontBufferDescriptor) : CanvasSurface(null_t());
mFrontBufferDescriptor = aNewFront;
mNeedsYFlip = needYFlip;
} else if (IsValidSharedTexDescriptor(aNewFront)) {
MakeTextureIfNeeded(gl(), mTexture);
if (!IsValidSharedTexDescriptor(mFrontBufferDescriptor)) {
mFrontBufferDescriptor = SharedTextureDescriptor(TextureImage::ThreadShared, 0, nsIntSize(0, 0), false);