Bug 571832 - GL ThebesLayer rendering layout on X-System terribly slow. ImageLayer. r=vladimir.
This commit is contained in:
@@ -38,6 +38,7 @@
|
||||
|
||||
#include "ImageLayerOGL.h"
|
||||
#include "gfxImageSurface.h"
|
||||
#include "GLContextProvider.h"
|
||||
|
||||
using namespace mozilla::gl;
|
||||
|
||||
@@ -322,7 +323,11 @@ ImageLayerOGL::RenderLayer(int,
|
||||
gl()->fActiveTexture(LOCAL_GL_TEXTURE0);
|
||||
gl()->fBindTexture(LOCAL_GL_TEXTURE_2D, cairoImage->mTexture.GetTextureID());
|
||||
|
||||
ColorTextureLayerProgram *program = mOGLManager->GetBGRALayerProgram();
|
||||
ColorTextureLayerProgram *program;
|
||||
if (cairoImage->mASurfaceAsGLContext)
|
||||
program = mOGLManager->GetRGBALayerProgram();
|
||||
else
|
||||
program = mOGLManager->GetBGRALayerProgram();
|
||||
|
||||
program->Activate();
|
||||
program->SetLayerQuadRect(nsIntRect(0, 0,
|
||||
@@ -539,6 +544,21 @@ CairoImageOGL::SetData(const CairoImage::Data &aData)
|
||||
|
||||
mSize = aData.mSize;
|
||||
|
||||
gl->fActiveTexture(LOCAL_GL_TEXTURE0);
|
||||
gl->fBindTexture(LOCAL_GL_TEXTURE_2D, mTexture.GetTextureID());
|
||||
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);
|
||||
|
||||
if (!mASurfaceAsGLContext) {
|
||||
mASurfaceAsGLContext = sGLContextProvider.CreateForNativePixmapSurface(aData.mSurface);
|
||||
if (mASurfaceAsGLContext)
|
||||
mASurfaceAsGLContext->BindTexImage();
|
||||
}
|
||||
if (mASurfaceAsGLContext)
|
||||
return;
|
||||
|
||||
// XXX This could be a lot more efficient if we already have an image-compatible
|
||||
// surface
|
||||
// XXX if we ever create an ImageFormatRGB24 surface, make sure that we use
|
||||
@@ -550,14 +570,6 @@ CairoImageOGL::SetData(const CairoImage::Data &aData)
|
||||
context->SetSource(aData.mSurface);
|
||||
context->Paint();
|
||||
|
||||
gl->fActiveTexture(LOCAL_GL_TEXTURE0);
|
||||
gl->fBindTexture(LOCAL_GL_TEXTURE_2D, mTexture.GetTextureID());
|
||||
|
||||
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);
|
||||
|
||||
gl->fTexImage2D(LOCAL_GL_TEXTURE_2D,
|
||||
0,
|
||||
LOCAL_GL_RGBA,
|
||||
|
||||
Reference in New Issue
Block a user