Bug 571832 - GL ThebesLayer rendering layout on X-System terribly slow. ImageLayer. r=vladimir.

This commit is contained in:
Oleg Romashin
2010-06-23 10:03:31 -04:00
parent a03715ba0e
commit c07a4627aa
2 changed files with 22 additions and 9 deletions

View File

@@ -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,