mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 11:25:00 +00:00
Bug 1097877. Move GLBlitTextureImageHelper from gfx/gl to gfx/layers/opengl. r=nical
The only user is in layers/opengl. This is needed to do better state tracking in the compositor. --HG-- rename : gfx/gl/GLBlitTextureImageHelper.cpp => gfx/layers/opengl/GLBlitTextureImageHelper.cpp rename : gfx/gl/GLBlitTextureImageHelper.h => gfx/layers/opengl/GLBlitTextureImageHelper.h extra : rebase_source : bba00cbfac9253ca933721659dadbda2bfbe65c5
This commit is contained in:
parent
1a4b6b3cf2
commit
f2786d3f9f
@ -11,7 +11,6 @@
|
||||
|
||||
#include "GLContext.h"
|
||||
#include "GLBlitHelper.h"
|
||||
#include "GLBlitTextureImageHelper.h"
|
||||
#include "GLReadTexImageHelper.h"
|
||||
|
||||
#include "gfxCrashReporterUtils.h"
|
||||
@ -2090,7 +2089,6 @@ GLContext::MarkDestroyed()
|
||||
DestroyScreenBuffer();
|
||||
|
||||
mBlitHelper = nullptr;
|
||||
mBlitTextureImageHelper = nullptr;
|
||||
mReadTexImageHelper = nullptr;
|
||||
|
||||
mTexGarbageBin->GLContextTeardown();
|
||||
@ -2413,16 +2411,6 @@ GLContext::BlitHelper()
|
||||
return mBlitHelper.get();
|
||||
}
|
||||
|
||||
GLBlitTextureImageHelper*
|
||||
GLContext::BlitTextureImageHelper()
|
||||
{
|
||||
if (!mBlitTextureImageHelper) {
|
||||
mBlitTextureImageHelper = MakeUnique<GLBlitTextureImageHelper>(this);
|
||||
}
|
||||
|
||||
return mBlitTextureImageHelper.get();
|
||||
}
|
||||
|
||||
GLReadTexImageHelper*
|
||||
GLContext::ReadTexImageHelper()
|
||||
{
|
||||
|
@ -3418,7 +3418,6 @@ protected:
|
||||
#endif
|
||||
|
||||
UniquePtr<GLBlitHelper> mBlitHelper;
|
||||
UniquePtr<GLBlitTextureImageHelper> mBlitTextureImageHelper;
|
||||
UniquePtr<GLReadTexImageHelper> mReadTexImageHelper;
|
||||
|
||||
public:
|
||||
|
@ -33,7 +33,6 @@ EXPORTS += [
|
||||
'ForceDiscreteGPUHelperCGL.h',
|
||||
'GfxTexturesReporter.h',
|
||||
'GLBlitHelper.h',
|
||||
'GLBlitTextureImageHelper.h',
|
||||
'GLConsts.h',
|
||||
'GLContext.h',
|
||||
'GLContextEGL.h',
|
||||
@ -122,7 +121,6 @@ UNIFIED_SOURCES += [
|
||||
'EGLUtils.cpp',
|
||||
'GfxTexturesReporter.cpp',
|
||||
'GLBlitHelper.cpp',
|
||||
'GLBlitTextureImageHelper.cpp',
|
||||
'GLContext.cpp',
|
||||
'GLContextFeatures.cpp',
|
||||
'GLContextTypes.cpp',
|
||||
|
@ -313,6 +313,7 @@ UNIFIED_SOURCES += [
|
||||
'LayerSorter.cpp',
|
||||
'opengl/CompositingRenderTargetOGL.cpp',
|
||||
'opengl/CompositorOGL.cpp',
|
||||
'opengl/GLBlitTextureImageHelper.cpp',
|
||||
'opengl/OGLShaderProgram.cpp',
|
||||
'opengl/TextureClientOGL.cpp',
|
||||
'opengl/TextureHostOGL.cpp',
|
||||
|
@ -39,6 +39,7 @@
|
||||
#include "nsString.h" // for nsString, nsAutoCString, etc
|
||||
#include "ScopedGLHelpers.h"
|
||||
#include "GLReadTexImageHelper.h"
|
||||
#include "GLBlitTextureImageHelper.h"
|
||||
#include "TiledLayerBuffer.h" // for TiledLayerComposer
|
||||
#include "HeapCopyOfStackArray.h"
|
||||
|
||||
@ -174,6 +175,9 @@ CompositorOGL::CleanupResources()
|
||||
}
|
||||
|
||||
mGLContext->MakeCurrent();
|
||||
|
||||
mBlitTextureImageHelper = nullptr;
|
||||
|
||||
mContextStateTracker.DestroyOGL(mGLContext);
|
||||
|
||||
// On the main thread the Widget will be destroyed soon and calling MakeCurrent
|
||||
@ -1383,7 +1387,7 @@ TemporaryRef<DataTextureSource>
|
||||
CompositorOGL::CreateDataTextureSource(TextureFlags aFlags)
|
||||
{
|
||||
RefPtr<DataTextureSource> result =
|
||||
new TextureImageTextureSourceOGL(mGLContext, aFlags);
|
||||
new TextureImageTextureSourceOGL(this, aFlags);
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -1439,6 +1443,18 @@ CompositorOGL::BindAndDrawQuads(ShaderProgramOGL *aProg,
|
||||
mGLContext->fDrawArrays(LOCAL_GL_TRIANGLES, 0, 6 * aQuads);
|
||||
}
|
||||
|
||||
GLBlitTextureImageHelper*
|
||||
CompositorOGL::BlitTextureImageHelper()
|
||||
{
|
||||
if (!mBlitTextureImageHelper) {
|
||||
mBlitTextureImageHelper = MakeUnique<GLBlitTextureImageHelper>(this);
|
||||
}
|
||||
|
||||
return mBlitTextureImageHelper.get();
|
||||
}
|
||||
|
||||
|
||||
|
||||
GLuint
|
||||
CompositorOGL::GetTemporaryTexture(GLenum aTarget, GLenum aUnit)
|
||||
{
|
||||
|
@ -54,7 +54,7 @@ class GLManagerCompositor;
|
||||
class TextureSource;
|
||||
struct Effect;
|
||||
struct EffectChain;
|
||||
|
||||
class GLBlitTextureImageHelper;
|
||||
/**
|
||||
* Interface for pools of temporary gl textures for the compositor.
|
||||
* The textures are fully owned by the pool, so the latter is responsible
|
||||
@ -259,6 +259,8 @@ public:
|
||||
return gfx::SurfaceFormat::R8G8B8A8;
|
||||
}
|
||||
|
||||
GLBlitTextureImageHelper* BlitTextureImageHelper();
|
||||
|
||||
/**
|
||||
* The compositor provides with temporary textures for use with direct
|
||||
* textruing like gralloc texture.
|
||||
@ -280,6 +282,7 @@ private:
|
||||
nsIWidget *mWidget;
|
||||
nsIntSize mWidgetSize;
|
||||
nsRefPtr<GLContext> mGLContext;
|
||||
UniquePtr<GLBlitTextureImageHelper> mBlitTextureImageHelper;
|
||||
gfx::Matrix4x4 mProjMatrix;
|
||||
|
||||
/** The size of the surface we are rendering to */
|
||||
|
@ -8,16 +8,20 @@
|
||||
#include "GLUploadHelpers.h"
|
||||
#include "DecomposeIntoNoRepeatTriangles.h"
|
||||
#include "GLContext.h"
|
||||
#include "GLTextureImage.h"
|
||||
#include "ScopedGLHelpers.h"
|
||||
#include "nsRect.h"
|
||||
#include "gfx2DGlue.h"
|
||||
#include "gfxUtils.h"
|
||||
#include "CompositorOGL.h"
|
||||
|
||||
using namespace mozilla::gl;
|
||||
|
||||
namespace mozilla {
|
||||
namespace gl {
|
||||
namespace layers {
|
||||
|
||||
GLBlitTextureImageHelper::GLBlitTextureImageHelper(GLContext* gl)
|
||||
: mGL(gl)
|
||||
GLBlitTextureImageHelper::GLBlitTextureImageHelper(CompositorOGL* aCompositor)
|
||||
: mCompositor(aCompositor)
|
||||
, mBlitProgram(0)
|
||||
, mBlitFramebuffer(0)
|
||||
|
||||
@ -26,15 +30,17 @@ GLBlitTextureImageHelper::GLBlitTextureImageHelper(GLContext* gl)
|
||||
|
||||
GLBlitTextureImageHelper::~GLBlitTextureImageHelper()
|
||||
{
|
||||
GLContext *gl = mCompositor->gl();
|
||||
// Likely used by OGL Layers.
|
||||
mGL->fDeleteProgram(mBlitProgram);
|
||||
mGL->fDeleteFramebuffers(1, &mBlitFramebuffer);
|
||||
gl->fDeleteProgram(mBlitProgram);
|
||||
gl->fDeleteFramebuffers(1, &mBlitFramebuffer);
|
||||
}
|
||||
|
||||
void
|
||||
GLBlitTextureImageHelper::BlitTextureImage(TextureImage *aSrc, const nsIntRect& aSrcRect,
|
||||
TextureImage *aDst, const nsIntRect& aDstRect)
|
||||
{
|
||||
GLContext *gl = mCompositor->gl();
|
||||
NS_ASSERTION(!aSrc->InUpdate(), "Source texture is in update!");
|
||||
NS_ASSERTION(!aDst->InUpdate(), "Destination texture is in update!");
|
||||
|
||||
@ -42,10 +48,10 @@ GLBlitTextureImageHelper::BlitTextureImage(TextureImage *aSrc, const nsIntRect&
|
||||
return;
|
||||
|
||||
int savedFb = 0;
|
||||
mGL->fGetIntegerv(LOCAL_GL_FRAMEBUFFER_BINDING, &savedFb);
|
||||
gl->fGetIntegerv(LOCAL_GL_FRAMEBUFFER_BINDING, &savedFb);
|
||||
|
||||
ScopedGLState scopedScissorTestState(mGL, LOCAL_GL_SCISSOR_TEST, false);
|
||||
ScopedGLState scopedBlendState(mGL, LOCAL_GL_BLEND, false);
|
||||
ScopedGLState scopedScissorTestState(gl, LOCAL_GL_SCISSOR_TEST, false);
|
||||
ScopedGLState scopedBlendState(gl, LOCAL_GL_BLEND, false);
|
||||
|
||||
// 2.0 means scale up by two
|
||||
float blitScaleX = float(aDstRect.width) / float(aSrcRect.width);
|
||||
@ -113,12 +119,12 @@ GLBlitTextureImageHelper::BlitTextureImage(TextureImage *aSrc, const nsIntRect&
|
||||
float dy0 = 2.0f * float(srcSubInDstRect.y) / float(dstSize.height) - 1.0f;
|
||||
float dx1 = 2.0f * float(srcSubInDstRect.x + srcSubInDstRect.width) / float(dstSize.width) - 1.0f;
|
||||
float dy1 = 2.0f * float(srcSubInDstRect.y + srcSubInDstRect.height) / float(dstSize.height) - 1.0f;
|
||||
ScopedViewportRect autoViewportRect(mGL, 0, 0, dstSize.width, dstSize.height);
|
||||
ScopedViewportRect autoViewportRect(gl, 0, 0, dstSize.width, dstSize.height);
|
||||
|
||||
RectTriangles rects;
|
||||
|
||||
nsIntSize realTexSize = srcSize;
|
||||
if (!CanUploadNonPowerOfTwo(mGL)) {
|
||||
if (!CanUploadNonPowerOfTwo(gl)) {
|
||||
realTexSize = nsIntSize(gfx::NextPowerOfTwo(srcSize.width),
|
||||
gfx::NextPowerOfTwo(srcSize.height));
|
||||
}
|
||||
@ -144,12 +150,12 @@ GLBlitTextureImageHelper::BlitTextureImage(TextureImage *aSrc, const nsIntRect&
|
||||
}
|
||||
}
|
||||
|
||||
ScopedBindTextureUnit autoTexUnit(mGL, LOCAL_GL_TEXTURE0);
|
||||
ScopedBindTexture autoTex(mGL, aSrc->GetTextureID());
|
||||
ScopedVertexAttribPointer autoAttrib0(mGL, 0, 2, LOCAL_GL_FLOAT, LOCAL_GL_FALSE, 0, 0, rects.vertCoords().Elements());
|
||||
ScopedVertexAttribPointer autoAttrib1(mGL, 1, 2, LOCAL_GL_FLOAT, LOCAL_GL_FALSE, 0, 0, rects.texCoords().Elements());
|
||||
ScopedBindTextureUnit autoTexUnit(gl, LOCAL_GL_TEXTURE0);
|
||||
ScopedBindTexture autoTex(gl, aSrc->GetTextureID());
|
||||
ScopedVertexAttribPointer autoAttrib0(gl, 0, 2, LOCAL_GL_FLOAT, LOCAL_GL_FALSE, 0, 0, rects.vertCoords().Elements());
|
||||
ScopedVertexAttribPointer autoAttrib1(gl, 1, 2, LOCAL_GL_FLOAT, LOCAL_GL_FALSE, 0, 0, rects.texCoords().Elements());
|
||||
|
||||
mGL->fDrawArrays(LOCAL_GL_TRIANGLES, 0, rects.elements());
|
||||
gl->fDrawArrays(LOCAL_GL_TRIANGLES, 0, rects.elements());
|
||||
|
||||
} while (aSrc->NextTile());
|
||||
} while (aDst->NextTile());
|
||||
@ -157,24 +163,25 @@ GLBlitTextureImageHelper::BlitTextureImage(TextureImage *aSrc, const nsIntRect&
|
||||
// unbind the previous texture from the framebuffer
|
||||
SetBlitFramebufferForDestTexture(0);
|
||||
|
||||
mGL->fBindFramebuffer(LOCAL_GL_FRAMEBUFFER, savedFb);
|
||||
gl->fBindFramebuffer(LOCAL_GL_FRAMEBUFFER, savedFb);
|
||||
}
|
||||
|
||||
void
|
||||
GLBlitTextureImageHelper::SetBlitFramebufferForDestTexture(GLuint aTexture)
|
||||
{
|
||||
GLContext *gl = mCompositor->gl();
|
||||
if (!mBlitFramebuffer) {
|
||||
mGL->fGenFramebuffers(1, &mBlitFramebuffer);
|
||||
gl->fGenFramebuffers(1, &mBlitFramebuffer);
|
||||
}
|
||||
|
||||
mGL->fBindFramebuffer(LOCAL_GL_FRAMEBUFFER, mBlitFramebuffer);
|
||||
mGL->fFramebufferTexture2D(LOCAL_GL_FRAMEBUFFER,
|
||||
gl->fBindFramebuffer(LOCAL_GL_FRAMEBUFFER, mBlitFramebuffer);
|
||||
gl->fFramebufferTexture2D(LOCAL_GL_FRAMEBUFFER,
|
||||
LOCAL_GL_COLOR_ATTACHMENT0,
|
||||
LOCAL_GL_TEXTURE_2D,
|
||||
aTexture,
|
||||
0);
|
||||
|
||||
GLenum result = mGL->fCheckFramebufferStatus(LOCAL_GL_FRAMEBUFFER);
|
||||
GLenum result = gl->fCheckFramebufferStatus(LOCAL_GL_FRAMEBUFFER);
|
||||
if (aTexture && (result != LOCAL_GL_FRAMEBUFFER_COMPLETE)) {
|
||||
nsAutoCString msg;
|
||||
msg.AppendLiteral("Framebuffer not complete -- error 0x");
|
||||
@ -190,16 +197,17 @@ GLBlitTextureImageHelper::SetBlitFramebufferForDestTexture(GLuint aTexture)
|
||||
void
|
||||
GLBlitTextureImageHelper::UseBlitProgram()
|
||||
{
|
||||
GLContext *gl = mCompositor->gl();
|
||||
if (mBlitProgram) {
|
||||
mGL->fUseProgram(mBlitProgram);
|
||||
gl->fUseProgram(mBlitProgram);
|
||||
return;
|
||||
}
|
||||
|
||||
mBlitProgram = mGL->fCreateProgram();
|
||||
mBlitProgram = gl->fCreateProgram();
|
||||
|
||||
GLuint shaders[2];
|
||||
shaders[0] = mGL->fCreateShader(LOCAL_GL_VERTEX_SHADER);
|
||||
shaders[1] = mGL->fCreateShader(LOCAL_GL_FRAGMENT_SHADER);
|
||||
shaders[0] = gl->fCreateShader(LOCAL_GL_VERTEX_SHADER);
|
||||
shaders[1] = gl->fCreateShader(LOCAL_GL_FRAGMENT_SHADER);
|
||||
|
||||
const char *blitVSSrc =
|
||||
"attribute vec2 aVertex;"
|
||||
@ -216,53 +224,53 @@ GLBlitTextureImageHelper::UseBlitProgram()
|
||||
" gl_FragColor = texture2D(uSrcTexture, vTexCoord);"
|
||||
"}";
|
||||
|
||||
mGL->fShaderSource(shaders[0], 1, (const GLchar**) &blitVSSrc, nullptr);
|
||||
mGL->fShaderSource(shaders[1], 1, (const GLchar**) &blitFSSrc, nullptr);
|
||||
gl->fShaderSource(shaders[0], 1, (const GLchar**) &blitVSSrc, nullptr);
|
||||
gl->fShaderSource(shaders[1], 1, (const GLchar**) &blitFSSrc, nullptr);
|
||||
|
||||
for (int i = 0; i < 2; ++i) {
|
||||
GLint success, len = 0;
|
||||
|
||||
mGL->fCompileShader(shaders[i]);
|
||||
mGL->fGetShaderiv(shaders[i], LOCAL_GL_COMPILE_STATUS, &success);
|
||||
gl->fCompileShader(shaders[i]);
|
||||
gl->fGetShaderiv(shaders[i], LOCAL_GL_COMPILE_STATUS, &success);
|
||||
NS_ASSERTION(success, "Shader compilation failed!");
|
||||
|
||||
if (!success) {
|
||||
nsAutoCString log;
|
||||
mGL->fGetShaderiv(shaders[i], LOCAL_GL_INFO_LOG_LENGTH, (GLint*) &len);
|
||||
gl->fGetShaderiv(shaders[i], LOCAL_GL_INFO_LOG_LENGTH, (GLint*) &len);
|
||||
log.SetCapacity(len);
|
||||
mGL->fGetShaderInfoLog(shaders[i], len, (GLint*) &len, (char*) log.BeginWriting());
|
||||
gl->fGetShaderInfoLog(shaders[i], len, (GLint*) &len, (char*) log.BeginWriting());
|
||||
log.SetLength(len);
|
||||
|
||||
printf_stderr("Shader %d compilation failed:\n%s\n", i, log.get());
|
||||
return;
|
||||
}
|
||||
|
||||
mGL->fAttachShader(mBlitProgram, shaders[i]);
|
||||
mGL->fDeleteShader(shaders[i]);
|
||||
gl->fAttachShader(mBlitProgram, shaders[i]);
|
||||
gl->fDeleteShader(shaders[i]);
|
||||
}
|
||||
|
||||
mGL->fBindAttribLocation(mBlitProgram, 0, "aVertex");
|
||||
mGL->fBindAttribLocation(mBlitProgram, 1, "aTexCoord");
|
||||
gl->fBindAttribLocation(mBlitProgram, 0, "aVertex");
|
||||
gl->fBindAttribLocation(mBlitProgram, 1, "aTexCoord");
|
||||
|
||||
mGL->fLinkProgram(mBlitProgram);
|
||||
gl->fLinkProgram(mBlitProgram);
|
||||
|
||||
GLint success, len = 0;
|
||||
mGL->fGetProgramiv(mBlitProgram, LOCAL_GL_LINK_STATUS, &success);
|
||||
gl->fGetProgramiv(mBlitProgram, LOCAL_GL_LINK_STATUS, &success);
|
||||
NS_ASSERTION(success, "Shader linking failed!");
|
||||
|
||||
if (!success) {
|
||||
nsAutoCString log;
|
||||
mGL->fGetProgramiv(mBlitProgram, LOCAL_GL_INFO_LOG_LENGTH, (GLint*) &len);
|
||||
gl->fGetProgramiv(mBlitProgram, LOCAL_GL_INFO_LOG_LENGTH, (GLint*) &len);
|
||||
log.SetCapacity(len);
|
||||
mGL->fGetProgramInfoLog(mBlitProgram, len, (GLint*) &len, (char*) log.BeginWriting());
|
||||
gl->fGetProgramInfoLog(mBlitProgram, len, (GLint*) &len, (char*) log.BeginWriting());
|
||||
log.SetLength(len);
|
||||
|
||||
printf_stderr("Program linking failed:\n%s\n", log.get());
|
||||
return;
|
||||
}
|
||||
|
||||
mGL->fUseProgram(mBlitProgram);
|
||||
mGL->fUniform1i(mGL->fGetUniformLocation(mBlitProgram, "uSrcTexture"), 0);
|
||||
gl->fUseProgram(mBlitProgram);
|
||||
gl->fUniform1i(gl->fGetUniformLocation(mBlitProgram, "uSrcTexture"), 0);
|
||||
}
|
||||
|
||||
}
|
@ -15,14 +15,17 @@ struct nsIntRect;
|
||||
|
||||
namespace mozilla {
|
||||
namespace gl {
|
||||
class GLContext;
|
||||
class TextureImage;
|
||||
}
|
||||
namespace layers {
|
||||
|
||||
class GLContext;
|
||||
class TextureImage;
|
||||
class CompositorOGL;
|
||||
|
||||
class GLBlitTextureImageHelper MOZ_FINAL
|
||||
{
|
||||
// The GLContext is the sole owner of the GLBlitTextureImageHelper.
|
||||
GLContext* mGL;
|
||||
CompositorOGL* mCompositor;
|
||||
|
||||
// lazy-initialized things
|
||||
GLuint mBlitProgram, mBlitFramebuffer;
|
||||
@ -31,7 +34,7 @@ class GLBlitTextureImageHelper MOZ_FINAL
|
||||
|
||||
public:
|
||||
|
||||
explicit GLBlitTextureImageHelper(GLContext *gl);
|
||||
explicit GLBlitTextureImageHelper(CompositorOGL *gl);
|
||||
~GLBlitTextureImageHelper();
|
||||
|
||||
/**
|
||||
@ -59,8 +62,8 @@ public:
|
||||
* - active texture (will be 0)
|
||||
* - texture 0 binding
|
||||
*/
|
||||
void BlitTextureImage(TextureImage *aSrc, const nsIntRect& aSrcRect,
|
||||
TextureImage *aDst, const nsIntRect& aDstRect);
|
||||
void BlitTextureImage(gl::TextureImage *aSrc, const nsIntRect& aSrcRect,
|
||||
gl::TextureImage *aDst, const nsIntRect& aDstRect);
|
||||
};
|
||||
|
||||
}
|
@ -209,8 +209,9 @@ TextureImageTextureSourceOGL::Update(gfx::DataSourceSurface* aSurface,
|
||||
nsIntRegion* aDestRegion,
|
||||
gfx::IntPoint* aSrcOffset)
|
||||
{
|
||||
MOZ_ASSERT(mGL);
|
||||
if (!mGL) {
|
||||
GLContext *gl = mCompositor->gl();
|
||||
MOZ_ASSERT(gl);
|
||||
if (!gl) {
|
||||
NS_WARNING("trying to update TextureImageTextureSourceOGL without a GLContext");
|
||||
return false;
|
||||
}
|
||||
@ -222,7 +223,7 @@ TextureImageTextureSourceOGL::Update(gfx::DataSourceSurface* aSurface,
|
||||
mTexImage->GetContentType() != gfx::ContentForFormat(aSurface->GetFormat())) {
|
||||
if (mFlags & TextureFlags::DISALLOW_BIGIMAGE) {
|
||||
GLint maxTextureSize;
|
||||
mGL->fGetIntegerv(LOCAL_GL_MAX_TEXTURE_SIZE, &maxTextureSize);
|
||||
gl->fGetIntegerv(LOCAL_GL_MAX_TEXTURE_SIZE, &maxTextureSize);
|
||||
if (size.width > maxTextureSize || size.height > maxTextureSize) {
|
||||
NS_WARNING("Texture exceeds maximum texture size, refusing upload");
|
||||
return false;
|
||||
@ -230,7 +231,7 @@ TextureImageTextureSourceOGL::Update(gfx::DataSourceSurface* aSurface,
|
||||
// Explicitly use CreateBasicTextureImage instead of CreateTextureImage,
|
||||
// because CreateTextureImage might still choose to create a tiled
|
||||
// texture image.
|
||||
mTexImage = CreateBasicTextureImage(mGL, size,
|
||||
mTexImage = CreateBasicTextureImage(gl, size,
|
||||
gfx::ContentForFormat(aSurface->GetFormat()),
|
||||
LOCAL_GL_CLAMP_TO_EDGE,
|
||||
FlagsToGLFlags(mFlags),
|
||||
@ -240,7 +241,7 @@ TextureImageTextureSourceOGL::Update(gfx::DataSourceSurface* aSurface,
|
||||
// require the size of the destination surface to be different from
|
||||
// the size of aSurface.
|
||||
// See bug 893300 (tracks the implementation of ContentHost for new textures).
|
||||
mTexImage = CreateTextureImage(mGL,
|
||||
mTexImage = CreateTextureImage(gl,
|
||||
size,
|
||||
gfx::ContentForFormat(aSurface->GetFormat()),
|
||||
LOCAL_GL_CLAMP_TO_EDGE,
|
||||
@ -275,7 +276,7 @@ TextureImageTextureSourceOGL::EnsureBuffer(const nsIntSize& aSize,
|
||||
if (!mTexImage ||
|
||||
mTexImage->GetSize() != aSize.ToIntSize() ||
|
||||
mTexImage->GetContentType() != aContentType) {
|
||||
mTexImage = CreateTextureImage(mGL,
|
||||
mTexImage = CreateTextureImage(mCompositor->gl(),
|
||||
aSize.ToIntSize(),
|
||||
aContentType,
|
||||
LOCAL_GL_CLAMP_TO_EDGE,
|
||||
@ -294,7 +295,7 @@ TextureImageTextureSourceOGL::CopyTo(const nsIntRect& aSourceRect,
|
||||
aDest->AsSourceOGL()->AsTextureImageTextureSource();
|
||||
MOZ_ASSERT(dest, "Incompatible destination type!");
|
||||
|
||||
mGL->BlitTextureImageHelper()->BlitTextureImage(mTexImage, aSourceRect,
|
||||
mCompositor->BlitTextureImageHelper()->BlitTextureImage(mTexImage, aSourceRect,
|
||||
dest->mTexImage, aDestRect);
|
||||
dest->mTexImage->MarkValid();
|
||||
}
|
||||
@ -304,9 +305,9 @@ TextureImageTextureSourceOGL::SetCompositor(Compositor* aCompositor)
|
||||
{
|
||||
CompositorOGL* glCompositor = static_cast<CompositorOGL*>(aCompositor);
|
||||
|
||||
if (!glCompositor || (mGL != glCompositor->gl())) {
|
||||
if (!glCompositor || (mCompositor != glCompositor)) {
|
||||
DeallocateDeviceData();
|
||||
mGL = glCompositor ? glCompositor->gl() : nullptr;
|
||||
mCompositor = glCompositor;
|
||||
}
|
||||
}
|
||||
|
||||
@ -344,7 +345,7 @@ TextureImageTextureSourceOGL::BindTexture(GLenum aTextureUnit, gfx::Filter aFilt
|
||||
MOZ_ASSERT(mTexImage,
|
||||
"Trying to bind a TextureSource that does not have an underlying GL texture.");
|
||||
mTexImage->BindTexture(aTextureUnit);
|
||||
SetFilter(mGL, aFilter);
|
||||
SetFilter(mCompositor->gl(), aFilter);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////
|
||||
|
@ -189,9 +189,9 @@ class TextureImageTextureSourceOGL MOZ_FINAL : public DataTextureSource
|
||||
, public BigImageIterator
|
||||
{
|
||||
public:
|
||||
explicit TextureImageTextureSourceOGL(gl::GLContext* aGL,
|
||||
explicit TextureImageTextureSourceOGL(CompositorOGL *aCompositor,
|
||||
TextureFlags aFlags = TextureFlags::DEFAULT)
|
||||
: mGL(aGL)
|
||||
: mCompositor(aCompositor)
|
||||
, mFlags(aFlags)
|
||||
, mIterating(false)
|
||||
{}
|
||||
@ -265,7 +265,7 @@ public:
|
||||
|
||||
protected:
|
||||
nsRefPtr<gl::TextureImage> mTexImage;
|
||||
gl::GLContext* mGL;
|
||||
RefPtr<CompositorOGL> mCompositor;
|
||||
TextureFlags mFlags;
|
||||
bool mIterating;
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user