зеркало из https://github.com/mozilla/gecko-dev.git
Bug 942506 - Remove ApplyFilterToBoundTexture from GLContext - r=bjacob
Move it to CompositorOGL.
This commit is contained in:
Родитель
eb13a35408
Коммит
01884a573b
|
@ -8,6 +8,7 @@
|
||||||
#include "GLUploadHelpers.h"
|
#include "GLUploadHelpers.h"
|
||||||
#include "DecomposeIntoNoRepeatTriangles.h"
|
#include "DecomposeIntoNoRepeatTriangles.h"
|
||||||
#include "GLContext.h"
|
#include "GLContext.h"
|
||||||
|
#include "ScopedGLHelpers.h"
|
||||||
#include "nsRect.h"
|
#include "nsRect.h"
|
||||||
#include "gfx2DGlue.h"
|
#include "gfx2DGlue.h"
|
||||||
#include "gfxUtils.h"
|
#include "gfxUtils.h"
|
||||||
|
@ -143,7 +144,8 @@ GLBlitTextureImageHelper::BlitTextureImage(TextureImage *aSrc, const nsIntRect&
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TextureImage::ScopedBindTexture texBind(aSrc, LOCAL_GL_TEXTURE0);
|
ScopedBindTextureUnit autoTexUnit(mGL, LOCAL_GL_TEXTURE0);
|
||||||
|
ScopedBindTexture autoTex(mGL, aSrc->GetTextureID());
|
||||||
|
|
||||||
mGL->fBindBuffer(LOCAL_GL_ARRAY_BUFFER, 0);
|
mGL->fBindBuffer(LOCAL_GL_ARRAY_BUFFER, 0);
|
||||||
|
|
||||||
|
|
|
@ -1189,24 +1189,6 @@ GLContext::ListHasExtension(const GLubyte *extensions, const char *extension)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLContext::ApplyFilterToBoundTexture(GraphicsFilter aFilter)
|
|
||||||
{
|
|
||||||
ApplyFilterToBoundTexture(LOCAL_GL_TEXTURE_2D, aFilter);
|
|
||||||
}
|
|
||||||
|
|
||||||
void GLContext::ApplyFilterToBoundTexture(GLuint aTarget,
|
|
||||||
GraphicsFilter aFilter)
|
|
||||||
{
|
|
||||||
if (aFilter == GraphicsFilter::FILTER_NEAREST) {
|
|
||||||
fTexParameteri(aTarget, LOCAL_GL_TEXTURE_MIN_FILTER, LOCAL_GL_NEAREST);
|
|
||||||
fTexParameteri(aTarget, LOCAL_GL_TEXTURE_MAG_FILTER, LOCAL_GL_NEAREST);
|
|
||||||
} else {
|
|
||||||
fTexParameteri(aTarget, LOCAL_GL_TEXTURE_MIN_FILTER, LOCAL_GL_LINEAR);
|
|
||||||
fTexParameteri(aTarget, LOCAL_GL_TEXTURE_MAG_FILTER, LOCAL_GL_LINEAR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
GLContext::DetermineCaps()
|
GLContext::DetermineCaps()
|
||||||
{
|
{
|
||||||
|
|
|
@ -2482,17 +2482,6 @@ public:
|
||||||
*/
|
*/
|
||||||
virtual bool ReleaseTexImage() { return false; }
|
virtual bool ReleaseTexImage() { return false; }
|
||||||
|
|
||||||
/**
|
|
||||||
* Applies aFilter to the texture currently bound to GL_TEXTURE_2D.
|
|
||||||
*/
|
|
||||||
void ApplyFilterToBoundTexture(GraphicsFilter aFilter);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Applies aFilter to the texture currently bound to aTarget.
|
|
||||||
*/
|
|
||||||
void ApplyFilterToBoundTexture(GLuint aTarget,
|
|
||||||
GraphicsFilter aFilter);
|
|
||||||
|
|
||||||
// Before reads from offscreen texture
|
// Before reads from offscreen texture
|
||||||
void GuaranteeResolve();
|
void GuaranteeResolve();
|
||||||
|
|
||||||
|
|
|
@ -58,7 +58,7 @@ GLXLibrary::SelectLibrary(const ContextFlags& aFlags)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check that we have at least version aMajor.aMinor .
|
// Check that we have at least version aMajor.aMinor .
|
||||||
bool
|
bool
|
||||||
GLXLibrary::GLXVersionCheck(int aMajor, int aMinor)
|
GLXLibrary::GLXVersionCheck(int aMajor, int aMinor)
|
||||||
{
|
{
|
||||||
return aMajor < mGLXMajorVersion ||
|
return aMajor < mGLXMajorVersion ||
|
||||||
|
@ -244,7 +244,7 @@ GLXLibrary::EnsureInitialized(LibType libType)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HasExtension(extensionsStr, "GLX_EXT_texture_from_pixmap") &&
|
if (HasExtension(extensionsStr, "GLX_EXT_texture_from_pixmap") &&
|
||||||
GLLibraryLoader::LoadSymbols(mOGLLibrary, symbols_texturefrompixmap,
|
GLLibraryLoader::LoadSymbols(mOGLLibrary, symbols_texturefrompixmap,
|
||||||
(GLLibraryLoader::PlatformLookupFunction)&xGetProcAddress))
|
(GLLibraryLoader::PlatformLookupFunction)&xGetProcAddress))
|
||||||
{
|
{
|
||||||
#ifdef MOZ_WIDGET_GTK
|
#ifdef MOZ_WIDGET_GTK
|
||||||
|
@ -278,7 +278,7 @@ GLXLibrary::SupportsTextureFromPixmap(gfxASurface* aSurface)
|
||||||
if (!EnsureInitialized(mLibType)) {
|
if (!EnsureInitialized(mLibType)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (aSurface->GetType() != gfxSurfaceTypeXlib || !mUseTextureFromPixmap) {
|
if (aSurface->GetType() != gfxSurfaceTypeXlib || !mUseTextureFromPixmap) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -286,7 +286,7 @@ GLXLibrary::SupportsTextureFromPixmap(gfxASurface* aSurface)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
GLXPixmap
|
GLXPixmap
|
||||||
GLXLibrary::CreatePixmap(gfxASurface* aSurface)
|
GLXLibrary::CreatePixmap(gfxASurface* aSurface)
|
||||||
{
|
{
|
||||||
if (!SupportsTextureFromPixmap(aSurface)) {
|
if (!SupportsTextureFromPixmap(aSurface)) {
|
||||||
|
@ -320,7 +320,7 @@ GLXLibrary::CreatePixmap(gfxASurface* aSurface)
|
||||||
attribs,
|
attribs,
|
||||||
&numConfigs));
|
&numConfigs));
|
||||||
|
|
||||||
// Find an fbconfig that matches the pixel format used on the Pixmap.
|
// Find an fbconfig that matches the pixel format used on the Pixmap.
|
||||||
int matchIndex = -1;
|
int matchIndex = -1;
|
||||||
unsigned long redMask =
|
unsigned long redMask =
|
||||||
static_cast<unsigned long>(direct.redMask) << direct.red;
|
static_cast<unsigned long>(direct.redMask) << direct.red;
|
||||||
|
@ -436,7 +436,7 @@ GLXLibrary::DestroyPixmap(GLXPixmap aPixmap)
|
||||||
|
|
||||||
void
|
void
|
||||||
GLXLibrary::BindTexImage(GLXPixmap aPixmap)
|
GLXLibrary::BindTexImage(GLXPixmap aPixmap)
|
||||||
{
|
{
|
||||||
if (!mUseTextureFromPixmap) {
|
if (!mUseTextureFromPixmap) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -508,7 +508,7 @@ GLXLibrary::AfterGLXCall()
|
||||||
#define BEFORE_GLX_CALL do { \
|
#define BEFORE_GLX_CALL do { \
|
||||||
sGLXLibrary[gCurrLib].BeforeGLXCall(); \
|
sGLXLibrary[gCurrLib].BeforeGLXCall(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define AFTER_GLX_CALL do { \
|
#define AFTER_GLX_CALL do { \
|
||||||
sGLXLibrary[gCurrLib].AfterGLXCall(); \
|
sGLXLibrary[gCurrLib].AfterGLXCall(); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
@ -519,8 +519,8 @@ GLXLibrary::AfterGLXCall()
|
||||||
#define AFTER_GLX_CALL do { } while(0)
|
#define AFTER_GLX_CALL do { } while(0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
GLXLibrary::xDestroyContext(Display* display, GLXContext context)
|
GLXLibrary::xDestroyContext(Display* display, GLXContext context)
|
||||||
{
|
{
|
||||||
BEFORE_GLX_CALL;
|
BEFORE_GLX_CALL;
|
||||||
|
@ -528,9 +528,9 @@ GLXLibrary::xDestroyContext(Display* display, GLXContext context)
|
||||||
AFTER_GLX_CALL;
|
AFTER_GLX_CALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
Bool
|
Bool
|
||||||
GLXLibrary::xMakeCurrent(Display* display,
|
GLXLibrary::xMakeCurrent(Display* display,
|
||||||
GLXDrawable drawable,
|
GLXDrawable drawable,
|
||||||
GLXContext context)
|
GLXContext context)
|
||||||
{
|
{
|
||||||
BEFORE_GLX_CALL;
|
BEFORE_GLX_CALL;
|
||||||
|
@ -539,7 +539,7 @@ GLXLibrary::xMakeCurrent(Display* display,
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
GLXContext
|
GLXContext
|
||||||
GLXLibrary::xGetCurrentContext()
|
GLXLibrary::xGetCurrentContext()
|
||||||
{
|
{
|
||||||
BEFORE_GLX_CALL;
|
BEFORE_GLX_CALL;
|
||||||
|
@ -548,7 +548,7 @@ GLXLibrary::xGetCurrentContext()
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* static */ void*
|
/* static */ void*
|
||||||
GLXLibrary::xGetProcAddress(const char *procName)
|
GLXLibrary::xGetProcAddress(const char *procName)
|
||||||
{
|
{
|
||||||
BEFORE_GLX_CALL;
|
BEFORE_GLX_CALL;
|
||||||
|
@ -558,9 +558,9 @@ GLXLibrary::xGetProcAddress(const char *procName)
|
||||||
}
|
}
|
||||||
|
|
||||||
GLXFBConfig*
|
GLXFBConfig*
|
||||||
GLXLibrary::xChooseFBConfig(Display* display,
|
GLXLibrary::xChooseFBConfig(Display* display,
|
||||||
int screen,
|
int screen,
|
||||||
const int *attrib_list,
|
const int *attrib_list,
|
||||||
int *nelements)
|
int *nelements)
|
||||||
{
|
{
|
||||||
BEFORE_GLX_CALL;
|
BEFORE_GLX_CALL;
|
||||||
|
@ -569,9 +569,9 @@ GLXLibrary::xChooseFBConfig(Display* display,
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
GLXFBConfig*
|
GLXFBConfig*
|
||||||
GLXLibrary::xGetFBConfigs(Display* display,
|
GLXLibrary::xGetFBConfigs(Display* display,
|
||||||
int screen,
|
int screen,
|
||||||
int *nelements)
|
int *nelements)
|
||||||
{
|
{
|
||||||
BEFORE_GLX_CALL;
|
BEFORE_GLX_CALL;
|
||||||
|
@ -579,16 +579,16 @@ GLXLibrary::xGetFBConfigs(Display* display,
|
||||||
AFTER_GLX_CALL;
|
AFTER_GLX_CALL;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
GLXContext
|
GLXContext
|
||||||
GLXLibrary::xCreateNewContext(Display* display,
|
GLXLibrary::xCreateNewContext(Display* display,
|
||||||
GLXFBConfig config,
|
GLXFBConfig config,
|
||||||
int render_type,
|
int render_type,
|
||||||
GLXContext share_list,
|
GLXContext share_list,
|
||||||
Bool direct)
|
Bool direct)
|
||||||
{
|
{
|
||||||
BEFORE_GLX_CALL;
|
BEFORE_GLX_CALL;
|
||||||
GLXContext result = xCreateNewContextInternal(display, config,
|
GLXContext result = xCreateNewContextInternal(display, config,
|
||||||
render_type,
|
render_type,
|
||||||
share_list, direct);
|
share_list, direct);
|
||||||
AFTER_GLX_CALL;
|
AFTER_GLX_CALL;
|
||||||
|
@ -647,7 +647,7 @@ GLXLibrary::xQueryServerString(Display *display,
|
||||||
}
|
}
|
||||||
|
|
||||||
GLXPixmap
|
GLXPixmap
|
||||||
GLXLibrary::xCreatePixmap(Display *display,
|
GLXLibrary::xCreatePixmap(Display *display,
|
||||||
GLXFBConfig config,
|
GLXFBConfig config,
|
||||||
Pixmap pixmap,
|
Pixmap pixmap,
|
||||||
const int *attrib_list)
|
const int *attrib_list)
|
||||||
|
@ -710,7 +710,7 @@ GLXLibrary::xReleaseTexImage(Display *display,
|
||||||
AFTER_GLX_CALL;
|
AFTER_GLX_CALL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
GLXLibrary::xWaitGL()
|
GLXLibrary::xWaitGL()
|
||||||
{
|
{
|
||||||
BEFORE_GLX_CALL;
|
BEFORE_GLX_CALL;
|
||||||
|
@ -727,16 +727,16 @@ GLXLibrary::xWaitX()
|
||||||
}
|
}
|
||||||
|
|
||||||
GLXContext
|
GLXContext
|
||||||
GLXLibrary::xCreateContextAttribs(Display* display,
|
GLXLibrary::xCreateContextAttribs(Display* display,
|
||||||
GLXFBConfig config,
|
GLXFBConfig config,
|
||||||
GLXContext share_list,
|
GLXContext share_list,
|
||||||
Bool direct,
|
Bool direct,
|
||||||
const int* attrib_list)
|
const int* attrib_list)
|
||||||
{
|
{
|
||||||
BEFORE_GLX_CALL;
|
BEFORE_GLX_CALL;
|
||||||
GLXContext result = xCreateContextAttribsInternal(display,
|
GLXContext result = xCreateContextAttribsInternal(display,
|
||||||
config,
|
config,
|
||||||
share_list,
|
share_list,
|
||||||
direct,
|
direct,
|
||||||
attrib_list);
|
attrib_list);
|
||||||
AFTER_GLX_CALL;
|
AFTER_GLX_CALL;
|
||||||
|
@ -905,7 +905,7 @@ TRY_AGAIN_NO_SHARING:
|
||||||
switch(aType) {
|
switch(aType) {
|
||||||
case NativeGLContext:
|
case NativeGLContext:
|
||||||
return mContext;
|
return mContext;
|
||||||
|
|
||||||
case NativeThebesSurface:
|
case NativeThebesSurface:
|
||||||
return mPixmap;
|
return mPixmap;
|
||||||
|
|
||||||
|
@ -1012,13 +1012,13 @@ GLContextProviderGLX::CreateForWindow(nsIWidget *aWidget)
|
||||||
// performance might be suboptimal. But using the existing visual
|
// performance might be suboptimal. But using the existing visual
|
||||||
// is a relatively safe intermediate step.
|
// is a relatively safe intermediate step.
|
||||||
|
|
||||||
Display *display = (Display*)aWidget->GetNativeData(NS_NATIVE_DISPLAY);
|
Display *display = (Display*)aWidget->GetNativeData(NS_NATIVE_DISPLAY);
|
||||||
int xscreen = DefaultScreen(display);
|
int xscreen = DefaultScreen(display);
|
||||||
Window window = GET_NATIVE_WINDOW(aWidget);
|
Window window = GET_NATIVE_WINDOW(aWidget);
|
||||||
|
|
||||||
int numConfigs;
|
int numConfigs;
|
||||||
ScopedXFree<GLXFBConfig> cfgs;
|
ScopedXFree<GLXFBConfig> cfgs;
|
||||||
if (sDefGLXLib.IsATI() ||
|
if (sDefGLXLib.IsATI() ||
|
||||||
!sDefGLXLib.GLXVersionCheck(1, 3)) {
|
!sDefGLXLib.GLXVersionCheck(1, 3)) {
|
||||||
const int attribs[] = {
|
const int attribs[] = {
|
||||||
LOCAL_GLX_DOUBLEBUFFER, False,
|
LOCAL_GLX_DOUBLEBUFFER, False,
|
||||||
|
|
|
@ -205,13 +205,6 @@ BasicTextureImage::BindTexture(GLenum aTextureUnit)
|
||||||
mGLContext->fActiveTexture(LOCAL_GL_TEXTURE0);
|
mGLContext->fActiveTexture(LOCAL_GL_TEXTURE0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
BasicTextureImage::ApplyFilter()
|
|
||||||
{
|
|
||||||
mGLContext->ApplyFilterToBoundTexture(mFilter);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
already_AddRefed<gfxASurface>
|
already_AddRefed<gfxASurface>
|
||||||
BasicTextureImage::GetSurfaceForUpdate(const gfxIntSize& aSize, ImageFormat aFmt)
|
BasicTextureImage::GetSurfaceForUpdate(const gfxIntSize& aSize, ImageFormat aFmt)
|
||||||
{
|
{
|
||||||
|
@ -637,12 +630,6 @@ TiledTextureImage::BindTexture(GLenum aTextureUnit)
|
||||||
mImages[mCurrentImage]->BindTexture(aTextureUnit);
|
mImages[mCurrentImage]->BindTexture(aTextureUnit);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
TiledTextureImage::ApplyFilter()
|
|
||||||
{
|
|
||||||
mGL->ApplyFilterToBoundTexture(mFilter);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Resize, trying to reuse tiles. The reuse strategy is to decide on reuse per
|
* Resize, trying to reuse tiles. The reuse strategy is to decide on reuse per
|
||||||
* column. A tile on a column is reused if it hasn't changed size, otherwise it
|
* column. A tile on a column is reused if it hasn't changed size, otherwise it
|
||||||
|
@ -745,16 +732,6 @@ uint32_t TiledTextureImage::GetTileCount()
|
||||||
return mImages.Length();
|
return mImages.Length();
|
||||||
}
|
}
|
||||||
|
|
||||||
TextureImage::ScopedBindTexture::ScopedBindTexture(TextureImage* aTexture,
|
|
||||||
GLenum aTextureUnit)
|
|
||||||
: mTexture(aTexture)
|
|
||||||
{
|
|
||||||
if (mTexture) {
|
|
||||||
MOZ_ASSERT(aTextureUnit >= LOCAL_GL_TEXTURE0);
|
|
||||||
mTexture->BindTexture(aTextureUnit);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
already_AddRefed<TextureImage>
|
already_AddRefed<TextureImage>
|
||||||
CreateBasicTextureImage(GLContext* aGL,
|
CreateBasicTextureImage(GLContext* aGL,
|
||||||
const nsIntSize& aSize,
|
const nsIntSize& aSize,
|
||||||
|
|
|
@ -185,41 +185,6 @@ public:
|
||||||
const gfx::IntPoint* aSrcOffset = nullptr);
|
const gfx::IntPoint* aSrcOffset = nullptr);
|
||||||
|
|
||||||
virtual void BindTexture(GLenum aTextureUnit) = 0;
|
virtual void BindTexture(GLenum aTextureUnit) = 0;
|
||||||
virtual void ReleaseTexture() {}
|
|
||||||
|
|
||||||
void BindTextureAndApplyFilter(GLenum aTextureUnit) {
|
|
||||||
BindTexture(aTextureUnit);
|
|
||||||
ApplyFilter();
|
|
||||||
}
|
|
||||||
|
|
||||||
class ScopedBindTexture
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ScopedBindTexture(TextureImage *aTexture, GLenum aTextureUnit);
|
|
||||||
|
|
||||||
~ScopedBindTexture()
|
|
||||||
{
|
|
||||||
if (mTexture) {
|
|
||||||
mTexture->ReleaseTexture();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
TextureImage *mTexture;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ScopedBindTextureAndApplyFilter
|
|
||||||
: public ScopedBindTexture
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ScopedBindTextureAndApplyFilter(TextureImage *aTexture, GLenum aTextureUnit) :
|
|
||||||
ScopedBindTexture(aTexture, aTextureUnit)
|
|
||||||
{
|
|
||||||
if (mTexture) {
|
|
||||||
mTexture->ApplyFilter();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the image format of the texture. Only valid after a matching
|
* Returns the image format of the texture. Only valid after a matching
|
||||||
|
@ -247,12 +212,6 @@ public:
|
||||||
|
|
||||||
void SetFilter(GraphicsFilter aFilter) { mFilter = aFilter; }
|
void SetFilter(GraphicsFilter aFilter) { mFilter = aFilter; }
|
||||||
|
|
||||||
/**
|
|
||||||
* Applies this TextureImage's filter, assuming that its texture is
|
|
||||||
* the currently bound texture.
|
|
||||||
*/
|
|
||||||
virtual void ApplyFilter() = 0;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
friend class GLContext;
|
friend class GLContext;
|
||||||
|
|
||||||
|
@ -345,9 +304,7 @@ public:
|
||||||
|
|
||||||
virtual void Resize(const nsIntSize& aSize);
|
virtual void Resize(const nsIntSize& aSize);
|
||||||
|
|
||||||
virtual void ApplyFilter();
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
GLuint mTexture;
|
GLuint mTexture;
|
||||||
TextureState mTextureState;
|
TextureState mTextureState;
|
||||||
nsRefPtr<GLContext> mGLContext;
|
nsRefPtr<GLContext> mGLContext;
|
||||||
|
@ -390,7 +347,6 @@ public:
|
||||||
virtual bool DirectUpdate(gfxASurface* aSurf, const nsIntRegion& aRegion, const nsIntPoint& aFrom = nsIntPoint(0,0));
|
virtual bool DirectUpdate(gfxASurface* aSurf, const nsIntRegion& aRegion, const nsIntPoint& aFrom = nsIntPoint(0,0));
|
||||||
virtual bool InUpdate() const { return mInUpdate; }
|
virtual bool InUpdate() const { return mInUpdate; }
|
||||||
virtual void BindTexture(GLenum);
|
virtual void BindTexture(GLenum);
|
||||||
virtual void ApplyFilter();
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual gfx::IntRect GetSrcTileRect();
|
virtual gfx::IntRect GetSrcTileRect();
|
||||||
|
|
|
@ -311,12 +311,6 @@ TextureImageEGL::DestroyEGLSurface(void)
|
||||||
mSurface = nullptr;
|
mSurface = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
TextureImageEGL::ApplyFilter()
|
|
||||||
{
|
|
||||||
mGLContext->ApplyFilterToBoundTexture(mFilter);
|
|
||||||
}
|
|
||||||
|
|
||||||
already_AddRefed<TextureImage>
|
already_AddRefed<TextureImage>
|
||||||
CreateTextureImageEGL(GLContext *gl,
|
CreateTextureImageEGL(GLContext *gl,
|
||||||
const nsIntSize& aSize,
|
const nsIntSize& aSize,
|
||||||
|
@ -357,4 +351,4 @@ TileGenFuncEGL(GLContext *gl,
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -75,8 +75,6 @@ protected:
|
||||||
TextureState mTextureState;
|
TextureState mTextureState;
|
||||||
|
|
||||||
bool mBound;
|
bool mBound;
|
||||||
|
|
||||||
virtual void ApplyFilter();
|
|
||||||
};
|
};
|
||||||
|
|
||||||
already_AddRefed<TextureImage>
|
already_AddRefed<TextureImage>
|
||||||
|
@ -97,4 +95,4 @@ TileGenFuncEGL(GLContext *gl,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // TEXTUREIMAGEEGL_H_
|
#endif // TEXTUREIMAGEEGL_H_
|
||||||
|
|
|
@ -41,6 +41,7 @@
|
||||||
#include "nsServiceManagerUtils.h" // for do_GetService
|
#include "nsServiceManagerUtils.h" // for do_GetService
|
||||||
#include "nsString.h" // for nsString, nsAutoCString, etc
|
#include "nsString.h" // for nsString, nsAutoCString, etc
|
||||||
#include "DecomposeIntoNoRepeatTriangles.h"
|
#include "DecomposeIntoNoRepeatTriangles.h"
|
||||||
|
#include "ScopedGLHelpers.h"
|
||||||
|
|
||||||
#if MOZ_ANDROID_OMTC
|
#if MOZ_ANDROID_OMTC
|
||||||
#include "TexturePoolOGL.h"
|
#include "TexturePoolOGL.h"
|
||||||
|
@ -978,28 +979,57 @@ CompositorOGL::GetProgramTypeForEffect(Effect *aEffect) const
|
||||||
}
|
}
|
||||||
|
|
||||||
struct MOZ_STACK_CLASS AutoBindTexture
|
struct MOZ_STACK_CLASS AutoBindTexture
|
||||||
|
: public ScopedGLWrapper<AutoBindTexture>
|
||||||
{
|
{
|
||||||
AutoBindTexture() : mTexture(nullptr) {}
|
friend struct ScopedGLWrapper<AutoBindTexture>;
|
||||||
AutoBindTexture(TextureSourceOGL* aTexture, GLenum aTextureUnit)
|
|
||||||
: mTexture(nullptr) { Bind(aTexture, aTextureUnit); }
|
protected:
|
||||||
~AutoBindTexture()
|
GLenum mTexUnit;
|
||||||
|
GLuint mOldTexId;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit AutoBindTexture(GLContext* aGL)
|
||||||
|
: ScopedGLWrapper<AutoBindTexture>(aGL)
|
||||||
|
, mTexUnit(0)
|
||||||
|
, mOldTexId((GLuint) -1)
|
||||||
|
{ }
|
||||||
|
|
||||||
|
AutoBindTexture(GLContext* aGL, TextureSourceOGL* aTexture,
|
||||||
|
GLenum aTexUnit = LOCAL_GL_TEXTURE0)
|
||||||
|
: ScopedGLWrapper<AutoBindTexture>(aGL)
|
||||||
|
, mTexUnit(0)
|
||||||
|
, mOldTexId((GLuint) -1)
|
||||||
{
|
{
|
||||||
if (mTexture) {
|
Bind(aTexture, aTexUnit);
|
||||||
mTexture->UnbindTexture();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Bind(TextureSourceOGL* aTexture, GLenum aTextureUnit)
|
void Bind(TextureSourceOGL* aTexture,
|
||||||
|
GLenum aTexUnit = LOCAL_GL_TEXTURE0)
|
||||||
{
|
{
|
||||||
MOZ_ASSERT(!mTexture);
|
if (!aTexture)
|
||||||
mTexture = aTexture;
|
return;
|
||||||
mTexture->BindTexture(aTextureUnit);
|
|
||||||
|
MOZ_ASSERT(mOldTexId == (GLuint) -1);
|
||||||
|
mTexUnit = aTexUnit;
|
||||||
|
|
||||||
|
ScopedBindTextureUnit savedTexUnit(mGL, aTexUnit);
|
||||||
|
|
||||||
|
mGL->GetUIntegerv(LOCAL_GL_TEXTURE_BINDING_2D, &mOldTexId);
|
||||||
|
aTexture->BindTexture(mTexUnit);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
TextureSourceOGL* mTexture;
|
void UnwrapImpl()
|
||||||
|
{
|
||||||
|
if (mOldTexId == (GLuint) -1)
|
||||||
|
return;
|
||||||
|
|
||||||
|
ScopedBindTextureUnit savedTexUnit(mGL, mTexUnit);
|
||||||
|
mGL->fBindTexture(LOCAL_GL_TEXTURE_2D, mOldTexId);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
CompositorOGL::DrawLines(const std::vector<gfx::Point>& aLines, const gfx::Rect& aClipRect,
|
CompositorOGL::DrawLines(const std::vector<gfx::Point>& aLines, const gfx::Rect& aClipRect,
|
||||||
const gfx::Color& aColor,
|
const gfx::Color& aColor,
|
||||||
|
@ -1019,6 +1049,20 @@ CompositorOGL::DrawLines(const std::vector<gfx::Point>& aLines, const gfx::Rect&
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Applies aFilter to the texture currently bound to aTarget.
|
||||||
|
*/
|
||||||
|
void ApplyFilterToBoundTexture(GLContext* aGL,
|
||||||
|
GraphicsFilter aFilter,
|
||||||
|
GLuint aTarget = LOCAL_GL_TEXTURE_2D)
|
||||||
|
{
|
||||||
|
GLenum filter =
|
||||||
|
(aFilter == GraphicsFilter::FILTER_NEAREST ? LOCAL_GL_NEAREST : LOCAL_GL_LINEAR);
|
||||||
|
|
||||||
|
aGL->fTexParameteri(aTarget, LOCAL_GL_TEXTURE_MIN_FILTER, filter);
|
||||||
|
aGL->fTexParameteri(aTarget, LOCAL_GL_TEXTURE_MAG_FILTER, filter);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
CompositorOGL::DrawQuadInternal(const Rect& aRect,
|
CompositorOGL::DrawQuadInternal(const Rect& aRect,
|
||||||
const Rect& aClipRect,
|
const Rect& aClipRect,
|
||||||
|
@ -1112,7 +1156,7 @@ CompositorOGL::DrawQuadInternal(const Rect& aRect,
|
||||||
|
|
||||||
program->SetRenderColor(color);
|
program->SetRenderColor(color);
|
||||||
|
|
||||||
AutoBindTexture bindMask;
|
AutoBindTexture bindMask(mGLContext);
|
||||||
if (maskType != MaskNone) {
|
if (maskType != MaskNone) {
|
||||||
bindMask.Bind(sourceMask, LOCAL_GL_TEXTURE0);
|
bindMask.Bind(sourceMask, LOCAL_GL_TEXTURE0);
|
||||||
program->SetMaskTextureUnit(0);
|
program->SetMaskTextureUnit(0);
|
||||||
|
@ -1137,7 +1181,7 @@ CompositorOGL::DrawQuadInternal(const Rect& aRect,
|
||||||
LOCAL_GL_ONE, LOCAL_GL_ONE);
|
LOCAL_GL_ONE, LOCAL_GL_ONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
AutoBindTexture bindSource(source->AsSourceOGL(), LOCAL_GL_TEXTURE0);
|
AutoBindTexture bindSource(mGLContext, source->AsSourceOGL(), LOCAL_GL_TEXTURE0);
|
||||||
|
|
||||||
gfx3DMatrix textureTransform = source->AsSourceOGL()->GetTextureTransform();
|
gfx3DMatrix textureTransform = source->AsSourceOGL()->GetTextureTransform();
|
||||||
program->SetTextureTransform(textureTransform);
|
program->SetTextureTransform(textureTransform);
|
||||||
|
@ -1155,13 +1199,13 @@ CompositorOGL::DrawQuadInternal(const Rect& aRect,
|
||||||
filter = GraphicsFilter::FILTER_NEAREST;
|
filter = GraphicsFilter::FILTER_NEAREST;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
mGLContext->ApplyFilterToBoundTexture(source->AsSourceOGL()->GetTextureTarget(),
|
ApplyFilterToBoundTexture(mGLContext, filter,
|
||||||
filter);
|
source->AsSourceOGL()->GetTextureTarget());
|
||||||
|
|
||||||
program->SetTextureUnit(0);
|
program->SetTextureUnit(0);
|
||||||
program->SetLayerOpacity(aOpacity);
|
program->SetLayerOpacity(aOpacity);
|
||||||
|
|
||||||
AutoBindTexture bindMask;
|
AutoBindTexture bindMask(mGLContext);
|
||||||
if (maskType != MaskNone) {
|
if (maskType != MaskNone) {
|
||||||
mGLContext->fActiveTexture(LOCAL_GL_TEXTURE1);
|
mGLContext->fActiveTexture(LOCAL_GL_TEXTURE1);
|
||||||
bindMask.Bind(sourceMask, LOCAL_GL_TEXTURE1);
|
bindMask.Bind(sourceMask, LOCAL_GL_TEXTURE1);
|
||||||
|
@ -1193,18 +1237,18 @@ CompositorOGL::DrawQuadInternal(const Rect& aRect,
|
||||||
|
|
||||||
GraphicsFilter filter = ThebesFilter(effectYCbCr->mFilter);
|
GraphicsFilter filter = ThebesFilter(effectYCbCr->mFilter);
|
||||||
|
|
||||||
AutoBindTexture bindY(sourceY, LOCAL_GL_TEXTURE0);
|
AutoBindTexture bindY(mGLContext, sourceY, LOCAL_GL_TEXTURE0);
|
||||||
mGLContext->ApplyFilterToBoundTexture(filter);
|
ApplyFilterToBoundTexture(mGLContext, filter);
|
||||||
AutoBindTexture bindCb(sourceCb, LOCAL_GL_TEXTURE1);
|
AutoBindTexture bindCb(mGLContext, sourceCb, LOCAL_GL_TEXTURE1);
|
||||||
mGLContext->ApplyFilterToBoundTexture(filter);
|
ApplyFilterToBoundTexture(mGLContext, filter);
|
||||||
AutoBindTexture bindCr(sourceCr, LOCAL_GL_TEXTURE2);
|
AutoBindTexture bindCr(mGLContext, sourceCr, LOCAL_GL_TEXTURE2);
|
||||||
mGLContext->ApplyFilterToBoundTexture(filter);
|
ApplyFilterToBoundTexture(mGLContext, filter);
|
||||||
|
|
||||||
program->SetYCbCrTextureUnits(Y, Cb, Cr);
|
program->SetYCbCrTextureUnits(Y, Cb, Cr);
|
||||||
program->SetLayerOpacity(aOpacity);
|
program->SetLayerOpacity(aOpacity);
|
||||||
program->SetTextureTransform(gfx3DMatrix());
|
program->SetTextureTransform(gfx3DMatrix());
|
||||||
|
|
||||||
AutoBindTexture bindMask;
|
AutoBindTexture bindMask(mGLContext);
|
||||||
if (maskType != MaskNone) {
|
if (maskType != MaskNone) {
|
||||||
bindMask.Bind(sourceMask, LOCAL_GL_TEXTURE3);
|
bindMask.Bind(sourceMask, LOCAL_GL_TEXTURE3);
|
||||||
program->SetMaskTextureUnit(3);
|
program->SetMaskTextureUnit(3);
|
||||||
|
@ -1228,7 +1272,7 @@ CompositorOGL::DrawQuadInternal(const Rect& aRect,
|
||||||
program->SetLayerOpacity(aOpacity);
|
program->SetLayerOpacity(aOpacity);
|
||||||
program->SetTextureTransform(gfx3DMatrix());
|
program->SetTextureTransform(gfx3DMatrix());
|
||||||
|
|
||||||
AutoBindTexture bindMask;
|
AutoBindTexture bindMask(mGLContext);
|
||||||
if (maskType != MaskNone) {
|
if (maskType != MaskNone) {
|
||||||
bindMask.Bind(sourceMask, LOCAL_GL_TEXTURE1);
|
bindMask.Bind(sourceMask, LOCAL_GL_TEXTURE1);
|
||||||
program->SetMaskTextureUnit(1);
|
program->SetMaskTextureUnit(1);
|
||||||
|
@ -1277,8 +1321,8 @@ CompositorOGL::DrawQuadInternal(const Rect& aRect,
|
||||||
LOCAL_GL_ONE, LOCAL_GL_ONE);
|
LOCAL_GL_ONE, LOCAL_GL_ONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
AutoBindTexture bindSourceOnBlack(sourceOnBlack, LOCAL_GL_TEXTURE0);
|
AutoBindTexture bindSourceOnBlack(mGLContext, sourceOnBlack, LOCAL_GL_TEXTURE0);
|
||||||
AutoBindTexture bindSourceOnWhite(sourceOnWhite, LOCAL_GL_TEXTURE1);
|
AutoBindTexture bindSourceOnWhite(mGLContext, sourceOnWhite, LOCAL_GL_TEXTURE1);
|
||||||
|
|
||||||
program->Activate();
|
program->Activate();
|
||||||
program->SetBlackTextureUnit(0);
|
program->SetBlackTextureUnit(0);
|
||||||
|
@ -1288,7 +1332,7 @@ CompositorOGL::DrawQuadInternal(const Rect& aRect,
|
||||||
program->SetTextureTransform(gfx3DMatrix());
|
program->SetTextureTransform(gfx3DMatrix());
|
||||||
program->SetRenderOffset(offset.x, offset.y);
|
program->SetRenderOffset(offset.x, offset.y);
|
||||||
program->SetLayerQuadRect(aRect);
|
program->SetLayerQuadRect(aRect);
|
||||||
AutoBindTexture bindMask;
|
AutoBindTexture bindMask(mGLContext);
|
||||||
if (maskType != MaskNone) {
|
if (maskType != MaskNone) {
|
||||||
bindMask.Bind(sourceMask, LOCAL_GL_TEXTURE2);
|
bindMask.Bind(sourceMask, LOCAL_GL_TEXTURE2);
|
||||||
program->SetMaskTextureUnit(2);
|
program->SetMaskTextureUnit(2);
|
||||||
|
|
|
@ -32,8 +32,6 @@ public:
|
||||||
|
|
||||||
virtual void BindTexture(GLenum aTextureUnit) MOZ_OVERRIDE;
|
virtual void BindTexture(GLenum aTextureUnit) MOZ_OVERRIDE;
|
||||||
|
|
||||||
virtual void UnbindTexture() MOZ_OVERRIDE {}
|
|
||||||
|
|
||||||
virtual gfx::IntSize GetSize() const MOZ_OVERRIDE;
|
virtual gfx::IntSize GetSize() const MOZ_OVERRIDE;
|
||||||
|
|
||||||
virtual TextureSourceOGL* AsSourceOGL() MOZ_OVERRIDE { return this; }
|
virtual TextureSourceOGL* AsSourceOGL() MOZ_OVERRIDE { return this; }
|
||||||
|
|
|
@ -41,8 +41,6 @@ public:
|
||||||
|
|
||||||
virtual GLenum GetWrapMode() const MOZ_OVERRIDE { return LOCAL_GL_CLAMP_TO_EDGE; }
|
virtual GLenum GetWrapMode() const MOZ_OVERRIDE { return LOCAL_GL_CLAMP_TO_EDGE; }
|
||||||
|
|
||||||
virtual void UnbindTexture() MOZ_OVERRIDE {}
|
|
||||||
|
|
||||||
// MacIOSurfaceTextureSourceOGL doesn't own any gl texture
|
// MacIOSurfaceTextureSourceOGL doesn't own any gl texture
|
||||||
virtual void DeallocateDeviceData() {}
|
virtual void DeallocateDeviceData() {}
|
||||||
|
|
||||||
|
@ -104,4 +102,4 @@ protected:
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // MOZILLA_GFX_MACIOSURFACETEXTUREHOSTOGL_H
|
#endif // MOZILLA_GFX_MACIOSURFACETEXTUREHOSTOGL_H
|
||||||
|
|
|
@ -127,8 +127,6 @@ public:
|
||||||
|
|
||||||
virtual void BindTexture(GLenum aTextureUnit) = 0;
|
virtual void BindTexture(GLenum aTextureUnit) = 0;
|
||||||
|
|
||||||
virtual void UnbindTexture() = 0;
|
|
||||||
|
|
||||||
virtual gfx::IntSize GetSize() const = 0;
|
virtual gfx::IntSize GetSize() const = 0;
|
||||||
|
|
||||||
virtual GLenum GetTextureTarget() const { return LOCAL_GL_TEXTURE_2D; }
|
virtual GLenum GetTextureTarget() const { return LOCAL_GL_TEXTURE_2D; }
|
||||||
|
@ -187,11 +185,6 @@ public:
|
||||||
|
|
||||||
virtual bool IsValid() const MOZ_OVERRIDE { return !!mTexImage; }
|
virtual bool IsValid() const MOZ_OVERRIDE { return !!mTexImage; }
|
||||||
|
|
||||||
virtual void UnbindTexture() MOZ_OVERRIDE
|
|
||||||
{
|
|
||||||
mTexImage->ReleaseTexture();
|
|
||||||
}
|
|
||||||
|
|
||||||
virtual GLenum GetWrapMode() const MOZ_OVERRIDE
|
virtual GLenum GetWrapMode() const MOZ_OVERRIDE
|
||||||
{
|
{
|
||||||
return mTexImage->GetWrapMode();
|
return mTexImage->GetWrapMode();
|
||||||
|
@ -269,8 +262,6 @@ public:
|
||||||
|
|
||||||
virtual GLenum GetWrapMode() const MOZ_OVERRIDE { return mWrapMode; }
|
virtual GLenum GetWrapMode() const MOZ_OVERRIDE { return mWrapMode; }
|
||||||
|
|
||||||
virtual void UnbindTexture() MOZ_OVERRIDE {}
|
|
||||||
|
|
||||||
// SharedTextureSource doesn't own any gl texture
|
// SharedTextureSource doesn't own any gl texture
|
||||||
virtual void DeallocateDeviceData() {}
|
virtual void DeallocateDeviceData() {}
|
||||||
|
|
||||||
|
@ -406,11 +397,6 @@ public:
|
||||||
mTexture->BindTexture(aTextureUnit);
|
mTexture->BindTexture(aTextureUnit);
|
||||||
}
|
}
|
||||||
|
|
||||||
void UnbindTexture() MOZ_OVERRIDE
|
|
||||||
{
|
|
||||||
mTexture->ReleaseTexture();
|
|
||||||
}
|
|
||||||
|
|
||||||
gfx::IntSize GetSize() const MOZ_OVERRIDE;
|
gfx::IntSize GetSize() const MOZ_OVERRIDE;
|
||||||
|
|
||||||
GLenum GetWrapMode() const MOZ_OVERRIDE
|
GLenum GetWrapMode() const MOZ_OVERRIDE
|
||||||
|
@ -528,10 +514,6 @@ public:
|
||||||
{
|
{
|
||||||
mTexImage->BindTexture(aUnit);
|
mTexImage->BindTexture(aUnit);
|
||||||
}
|
}
|
||||||
void UnbindTexture() MOZ_OVERRIDE
|
|
||||||
{
|
|
||||||
mTexImage->ReleaseTexture();
|
|
||||||
}
|
|
||||||
virtual bool IsValid() const MOZ_OVERRIDE
|
virtual bool IsValid() const MOZ_OVERRIDE
|
||||||
{
|
{
|
||||||
return !!mTexImage;
|
return !!mTexImage;
|
||||||
|
@ -650,7 +632,6 @@ public:
|
||||||
// Lock already bound us!
|
// Lock already bound us!
|
||||||
MOZ_ASSERT(activetex == LOCAL_GL_TEXTURE0);
|
MOZ_ASSERT(activetex == LOCAL_GL_TEXTURE0);
|
||||||
}
|
}
|
||||||
void UnbindTexture() MOZ_OVERRIDE {}
|
|
||||||
GLuint GetTextureID() { return mTextureHandle; }
|
GLuint GetTextureID() { return mTextureHandle; }
|
||||||
ContentType GetContentType()
|
ContentType GetContentType()
|
||||||
{
|
{
|
||||||
|
@ -731,8 +712,6 @@ public:
|
||||||
|
|
||||||
void BindTexture(GLenum activetex) MOZ_OVERRIDE;
|
void BindTexture(GLenum activetex) MOZ_OVERRIDE;
|
||||||
|
|
||||||
void UnbindTexture() MOZ_OVERRIDE {}
|
|
||||||
|
|
||||||
GLuint GetTextureID() { return mTextureHandle; }
|
GLuint GetTextureID() { return mTextureHandle; }
|
||||||
ContentType GetContentType() {
|
ContentType GetContentType() {
|
||||||
return (mFormat == gfx::FORMAT_B8G8R8A8) ?
|
return (mFormat == gfx::FORMAT_B8G8R8A8) ?
|
||||||
|
@ -792,7 +771,6 @@ public:
|
||||||
virtual bool IsValid() const MOZ_OVERRIDE { return true; }
|
virtual bool IsValid() const MOZ_OVERRIDE { return true; }
|
||||||
virtual GLenum GetWrapMode() const MOZ_OVERRIDE { return LOCAL_GL_CLAMP_TO_EDGE; }
|
virtual GLenum GetWrapMode() const MOZ_OVERRIDE { return LOCAL_GL_CLAMP_TO_EDGE; }
|
||||||
virtual void BindTexture(GLenum aTextureUnit);
|
virtual void BindTexture(GLenum aTextureUnit);
|
||||||
virtual void UnbindTexture() MOZ_OVERRIDE {}
|
|
||||||
virtual gfx::IntSize GetSize() const MOZ_OVERRIDE
|
virtual gfx::IntSize GetSize() const MOZ_OVERRIDE
|
||||||
{
|
{
|
||||||
return mSize;
|
return mSize;
|
||||||
|
@ -875,7 +853,6 @@ public:
|
||||||
virtual const char* Name() { return "GrallocDeprecatedTextureHostOGL"; }
|
virtual const char* Name() { return "GrallocDeprecatedTextureHostOGL"; }
|
||||||
|
|
||||||
void BindTexture(GLenum aTextureUnit) MOZ_OVERRIDE;
|
void BindTexture(GLenum aTextureUnit) MOZ_OVERRIDE;
|
||||||
void UnbindTexture() MOZ_OVERRIDE {}
|
|
||||||
|
|
||||||
virtual TextureSourceOGL* AsSourceOGL() MOZ_OVERRIDE
|
virtual TextureSourceOGL* AsSourceOGL() MOZ_OVERRIDE
|
||||||
{
|
{
|
||||||
|
|
Загрузка…
Ссылка в новой задаче