Backout 4987ffd173a4 (bug 687267) for bustage
This commit is contained in:
@@ -18,32 +18,12 @@
|
||||
# include "mozilla/X11Util.h"
|
||||
#endif
|
||||
|
||||
#ifdef MOZ_WIDGET_ANDROID
|
||||
#include "nsSurfaceTexture.h"
|
||||
#endif
|
||||
|
||||
using namespace mozilla::gfx;
|
||||
using namespace mozilla::gl;
|
||||
|
||||
namespace mozilla {
|
||||
namespace layers {
|
||||
|
||||
static void
|
||||
MakeTextureIfNeeded(GLContext* gl, GLuint& aTexture)
|
||||
{
|
||||
if (aTexture != 0)
|
||||
return;
|
||||
|
||||
gl->fGenTextures(1, &aTexture);
|
||||
|
||||
gl->fBindTexture(LOCAL_GL_TEXTURE_2D, aTexture);
|
||||
|
||||
gl->fTexParameteri(LOCAL_GL_TEXTURE_2D, LOCAL_GL_TEXTURE_MIN_FILTER, LOCAL_GL_LINEAR);
|
||||
gl->fTexParameteri(LOCAL_GL_TEXTURE_2D, LOCAL_GL_TEXTURE_MAG_FILTER, LOCAL_GL_LINEAR);
|
||||
gl->fTexParameteri(LOCAL_GL_TEXTURE_2D, LOCAL_GL_TEXTURE_WRAP_S, LOCAL_GL_CLAMP_TO_EDGE);
|
||||
gl->fTexParameteri(LOCAL_GL_TEXTURE_2D, LOCAL_GL_TEXTURE_WRAP_T, LOCAL_GL_CLAMP_TO_EDGE);
|
||||
}
|
||||
|
||||
/**
|
||||
* This is an event used to unref a GLContext on the main thread and
|
||||
* optionally delete a texture associated with that context.
|
||||
@@ -696,9 +676,6 @@ ImageLayerOGL::LoadAsTexture(GLuint aTextureUnit, gfxIntSize* aSize)
|
||||
ShadowImageLayerOGL::ShadowImageLayerOGL(LayerManagerOGL* aManager)
|
||||
: ShadowImageLayer(aManager, nsnull)
|
||||
, LayerOGL(aManager)
|
||||
, mSharedHandle(0)
|
||||
, mInverted(false)
|
||||
, mTexture(0)
|
||||
{
|
||||
mImplData = static_cast<LayerOGL*>(this);
|
||||
}
|
||||
@@ -710,23 +687,15 @@ bool
|
||||
ShadowImageLayerOGL::Init(const SharedImage& aFront)
|
||||
{
|
||||
if (aFront.type() == SharedImage::TSurfaceDescriptor) {
|
||||
SurfaceDescriptor surface = aFront.get_SurfaceDescriptor();
|
||||
if (surface.type() == SurfaceDescriptor::TSharedTextureDescriptor) {
|
||||
SharedTextureDescriptor texture = surface.get_SharedTextureDescriptor();
|
||||
mSize = texture.size();
|
||||
mSharedHandle = texture.handle();
|
||||
mShareType = texture.shareType();
|
||||
mInverted = texture.inverted();
|
||||
} else {
|
||||
AutoOpenSurface autoSurf(OPEN_READ_ONLY, surface);
|
||||
mSize = autoSurf.Size();
|
||||
mTexImage = gl()->CreateTextureImage(nsIntSize(mSize.width, mSize.height),
|
||||
autoSurf.ContentType(),
|
||||
LOCAL_GL_CLAMP_TO_EDGE,
|
||||
mForceSingleTile
|
||||
? TextureImage::ForceSingleTile
|
||||
: TextureImage::NoFlags);
|
||||
}
|
||||
AutoOpenSurface autoSurf(OPEN_READ_ONLY, aFront.get_SurfaceDescriptor());
|
||||
mSize = autoSurf.Size();
|
||||
mTexImage = gl()->CreateTextureImage(nsIntSize(mSize.width, mSize.height),
|
||||
autoSurf.ContentType(),
|
||||
LOCAL_GL_CLAMP_TO_EDGE,
|
||||
mForceSingleTile
|
||||
? TextureImage::ForceSingleTile
|
||||
: TextureImage::NoFlags);
|
||||
return true;
|
||||
} else {
|
||||
YUVImage yuv = aFront.get_YUVImage();
|
||||
|
||||
@@ -770,31 +739,15 @@ ShadowImageLayerOGL::Swap(const SharedImage& aNewFront,
|
||||
mImageVersion = 0;
|
||||
}
|
||||
} else if (aNewFront.type() == SharedImage::TSurfaceDescriptor) {
|
||||
SurfaceDescriptor surface = aNewFront.get_SurfaceDescriptor();
|
||||
|
||||
if (surface.type() == SurfaceDescriptor::TSharedTextureDescriptor) {
|
||||
SharedTextureDescriptor texture = surface.get_SharedTextureDescriptor();
|
||||
|
||||
SharedTextureHandle newHandle = texture.handle();
|
||||
mSize = texture.size();
|
||||
mInverted = texture.inverted();
|
||||
|
||||
if (mSharedHandle && newHandle != mSharedHandle)
|
||||
gl()->ReleaseSharedHandle(mShareType, mSharedHandle);
|
||||
|
||||
mSharedHandle = newHandle;
|
||||
mShareType = texture.shareType();
|
||||
} else {
|
||||
AutoOpenSurface surf(OPEN_READ_ONLY, surface);
|
||||
gfxIntSize size = surf.Size();
|
||||
if (mSize != size || !mTexImage ||
|
||||
mTexImage->GetContentType() != surf.ContentType()) {
|
||||
Init(aNewFront);
|
||||
}
|
||||
// XXX this is always just ridiculously slow
|
||||
nsIntRegion updateRegion(nsIntRect(0, 0, size.width, size.height));
|
||||
mTexImage->DirectUpdate(surf.Get(), updateRegion);
|
||||
AutoOpenSurface surf(OPEN_READ_ONLY, aNewFront.get_SurfaceDescriptor());
|
||||
gfxIntSize size = surf.Size();
|
||||
if (mSize != size || !mTexImage ||
|
||||
mTexImage->GetContentType() != surf.ContentType()) {
|
||||
Init(aNewFront);
|
||||
}
|
||||
// XXX this is always just ridiculously slow
|
||||
nsIntRegion updateRegion(nsIntRect(0, 0, size.width, size.height));
|
||||
mTexImage->DirectUpdate(surf.Get(), updateRegion);
|
||||
} else {
|
||||
const YUVImage& yuv = aNewFront.get_YUVImage();
|
||||
UploadSharedYUVToTexture(yuv);
|
||||
@@ -927,39 +880,7 @@ ShadowImageLayerOGL::RenderLayer(int aPreviousFrameBuffer,
|
||||
mTexImage->GetTileRect().Size());
|
||||
} while (mTexImage->NextTile());
|
||||
}
|
||||
} else if (mSharedHandle) {
|
||||
GLContext::SharedHandleDetails handleDetails;
|
||||
if (!gl()->GetSharedHandleDetails(mShareType, mSharedHandle, handleDetails)) {
|
||||
NS_ERROR("Failed to get shared handle details");
|
||||
return;
|
||||
}
|
||||
|
||||
ShaderProgramOGL* program = mOGLManager->GetProgram(handleDetails.mProgramType, GetMaskLayer());
|
||||
|
||||
program->Activate();
|
||||
program->SetLayerTransform(GetEffectiveTransform());
|
||||
program->SetLayerOpacity(GetEffectiveOpacity());
|
||||
program->SetRenderOffset(aOffset);
|
||||
program->SetTextureUnit(0);
|
||||
program->SetTextureTransform(handleDetails.mTextureTransform);
|
||||
program->LoadMask(GetMaskLayer());
|
||||
|
||||
MakeTextureIfNeeded(gl(), mTexture);
|
||||
gl()->fActiveTexture(LOCAL_GL_TEXTURE0);
|
||||
gl()->fBindTexture(handleDetails.mTarget, mTexture);
|
||||
|
||||
if (!gl()->AttachSharedHandle(mShareType, mSharedHandle)) {
|
||||
NS_ERROR("Failed to bind shared texture handle");
|
||||
return;
|
||||
}
|
||||
|
||||
gl()->fBlendFuncSeparate(LOCAL_GL_ONE, LOCAL_GL_ONE_MINUS_SRC_ALPHA,
|
||||
LOCAL_GL_ONE, LOCAL_GL_ONE);
|
||||
gl()->ApplyFilterToBoundTexture(mFilter);
|
||||
program->SetLayerQuadRect(nsIntRect(nsIntPoint(0, 0), mSize));
|
||||
mOGLManager->BindAndDrawQuad(program, mInverted);
|
||||
gl()->fBindTexture(handleDetails.mTarget, 0);
|
||||
gl()->DetachSharedHandle(mShareType, mSharedHandle);
|
||||
} else {
|
||||
gl()->fActiveTexture(LOCAL_GL_TEXTURE0);
|
||||
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, mYUVTexture[0].GetTextureID());
|
||||
@@ -1011,11 +932,6 @@ ShadowImageLayerOGL::LoadAsTexture(GLuint aTextureUnit, gfxIntSize* aSize)
|
||||
void
|
||||
ShadowImageLayerOGL::CleanupResources()
|
||||
{
|
||||
if (mSharedHandle) {
|
||||
gl()->ReleaseSharedHandle(mShareType, mSharedHandle);
|
||||
mSharedHandle = NULL;
|
||||
}
|
||||
|
||||
mYUVTexture[0].Release();
|
||||
mYUVTexture[1].Release();
|
||||
mYUVTexture[2].Release();
|
||||
|
||||
Reference in New Issue
Block a user