| Index: content/common/gpu/client/gl_helper.h
|
| diff --git a/content/common/gpu/client/gl_helper.h b/content/common/gpu/client/gl_helper.h
|
| index bac0560651b048f6a8b819a781ecf02f5c9eda04..90e9b7198e1cf2e2f42f51884643f38847b37c8b 100644
|
| --- a/content/common/gpu/client/gl_helper.h
|
| +++ b/content/common/gpu/client/gl_helper.h
|
| @@ -10,7 +10,7 @@
|
| #include "base/callback.h"
|
| #include "base/memory/scoped_ptr.h"
|
| #include "content/common/content_export.h"
|
| -#include "content/common/gpu/client/webgraphicscontext3d_command_buffer_impl.h"
|
| +#include "gpu/command_buffer/client/gles2_interface.h"
|
|
|
| namespace gfx {
|
| class Rect;
|
| @@ -32,169 +32,122 @@ namespace content {
|
|
|
| class GLHelperScaling;
|
|
|
| -class ScopedWebGLId {
|
| +class ScopedGLuint {
|
| public:
|
| - typedef void (blink::WebGraphicsContext3D::*DeleteFunc)(WebGLId);
|
| - ScopedWebGLId(blink::WebGraphicsContext3D* context,
|
| - WebGLId id,
|
| - DeleteFunc delete_func)
|
| - : context_(context),
|
| - id_(id),
|
| - delete_func_(delete_func) {
|
| + typedef void (gpu::gles2::GLES2Interface::*GenFunc)(GLsizei n, GLuint* ids);
|
| + typedef void (gpu::gles2::GLES2Interface::*DeleteFunc)(GLsizei n,
|
| + const GLuint* ids);
|
| + ScopedGLuint(gpu::gles2::GLES2Interface* gl,
|
| + GenFunc gen_func,
|
| + DeleteFunc delete_func)
|
| + : gl_(gl), id_(0u), delete_func_(delete_func) {
|
| + (gl_->*gen_func)(1, &id_);
|
| }
|
|
|
| - operator WebGLId() const {
|
| - return id_;
|
| - }
|
| -
|
| - WebGLId id() const { return id_; }
|
| + operator GLuint() const { return id_; }
|
|
|
| - WebGLId Detach() {
|
| - WebGLId id = id_;
|
| - id_ = 0;
|
| - return id;
|
| - }
|
| + GLuint id() const { return id_; }
|
|
|
| - ~ScopedWebGLId() {
|
| + ~ScopedGLuint() {
|
| if (id_ != 0) {
|
| - (context_->*delete_func_)(id_);
|
| + (gl_->*delete_func_)(1, &id_);
|
| }
|
| }
|
|
|
| private:
|
| - blink::WebGraphicsContext3D* context_;
|
| - WebGLId id_;
|
| + gpu::gles2::GLES2Interface* gl_;
|
| + GLuint id_;
|
| DeleteFunc delete_func_;
|
|
|
| - DISALLOW_COPY_AND_ASSIGN(ScopedWebGLId);
|
| -};
|
| -
|
| -class ScopedBuffer : public ScopedWebGLId {
|
| - public:
|
| - ScopedBuffer(blink::WebGraphicsContext3D* context,
|
| - WebGLId id)
|
| - : ScopedWebGLId(context,
|
| - id,
|
| - &blink::WebGraphicsContext3D::deleteBuffer) {}
|
| + DISALLOW_COPY_AND_ASSIGN(ScopedGLuint);
|
| };
|
|
|
| -class ScopedFramebuffer : public ScopedWebGLId {
|
| +class ScopedBuffer : public ScopedGLuint {
|
| public:
|
| - ScopedFramebuffer(blink::WebGraphicsContext3D* context,
|
| - WebGLId id)
|
| - : ScopedWebGLId(context,
|
| - id,
|
| - &blink::WebGraphicsContext3D::deleteFramebuffer) {}
|
| + explicit ScopedBuffer(gpu::gles2::GLES2Interface* gl)
|
| + : ScopedGLuint(gl,
|
| + &gpu::gles2::GLES2Interface::GenBuffers,
|
| + &gpu::gles2::GLES2Interface::DeleteBuffers) {}
|
| };
|
|
|
| -class ScopedProgram : public ScopedWebGLId {
|
| +class ScopedFramebuffer : public ScopedGLuint {
|
| public:
|
| - ScopedProgram(blink::WebGraphicsContext3D* context,
|
| - WebGLId id)
|
| - : ScopedWebGLId(context,
|
| - id,
|
| - &blink::WebGraphicsContext3D::deleteProgram) {}
|
| + explicit ScopedFramebuffer(gpu::gles2::GLES2Interface* gl)
|
| + : ScopedGLuint(gl,
|
| + &gpu::gles2::GLES2Interface::GenFramebuffers,
|
| + &gpu::gles2::GLES2Interface::DeleteFramebuffers) {}
|
| };
|
|
|
| -class ScopedShader : public ScopedWebGLId {
|
| +class ScopedTexture : public ScopedGLuint {
|
| public:
|
| - ScopedShader(blink::WebGraphicsContext3D* context,
|
| - WebGLId id)
|
| - : ScopedWebGLId(context,
|
| - id,
|
| - &blink::WebGraphicsContext3D::deleteShader) {}
|
| + explicit ScopedTexture(gpu::gles2::GLES2Interface* gl)
|
| + : ScopedGLuint(gl,
|
| + &gpu::gles2::GLES2Interface::GenTextures,
|
| + &gpu::gles2::GLES2Interface::DeleteTextures) {}
|
| };
|
|
|
| -class ScopedTexture : public ScopedWebGLId {
|
| - public:
|
| - ScopedTexture(blink::WebGraphicsContext3D* context,
|
| - WebGLId id)
|
| - : ScopedWebGLId(context,
|
| - id,
|
| - &blink::WebGraphicsContext3D::deleteTexture) {}
|
| -};
|
| -
|
| -template <blink::WGC3Denum target>
|
| +template <GLenum Target>
|
| class ScopedBinder {
|
| public:
|
| - typedef void (blink::WebGraphicsContext3D::*BindFunc)(blink::WGC3Denum,
|
| - WebGLId);
|
| - ScopedBinder(blink::WebGraphicsContext3D* context,
|
| - WebGLId id,
|
| - BindFunc bind_func)
|
| - : context_(context),
|
| - bind_func_(bind_func) {
|
| - (context_->*bind_func_)(target, id);
|
| + typedef void (gpu::gles2::GLES2Interface::*BindFunc)(GLenum target,
|
| + GLuint id);
|
| + ScopedBinder(gpu::gles2::GLES2Interface* gl, GLuint id, BindFunc bind_func)
|
| + : gl_(gl), bind_func_(bind_func) {
|
| + (gl_->*bind_func_)(Target, id);
|
| }
|
|
|
| - virtual ~ScopedBinder() {
|
| - (context_->*bind_func_)(target, 0);
|
| - }
|
| + virtual ~ScopedBinder() { (gl_->*bind_func_)(Target, 0); }
|
|
|
| private:
|
| - blink::WebGraphicsContext3D* context_;
|
| + gpu::gles2::GLES2Interface* gl_;
|
| BindFunc bind_func_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ScopedBinder);
|
| };
|
|
|
| -template <blink::WGC3Denum target>
|
| -class ScopedBufferBinder : ScopedBinder<target> {
|
| +template <GLenum Target>
|
| +class ScopedBufferBinder : ScopedBinder<Target> {
|
| public:
|
| - ScopedBufferBinder(blink::WebGraphicsContext3D* context,
|
| - WebGLId id)
|
| - : ScopedBinder<target>(
|
| - context,
|
| - id,
|
| - &blink::WebGraphicsContext3D::bindBuffer) {}
|
| + ScopedBufferBinder(gpu::gles2::GLES2Interface* gl, GLuint id)
|
| + : ScopedBinder<Target>(gl, id, &gpu::gles2::GLES2Interface::BindBuffer) {}
|
| };
|
|
|
| -template <blink::WGC3Denum target>
|
| -class ScopedFramebufferBinder : ScopedBinder<target> {
|
| +template <GLenum Target>
|
| +class ScopedFramebufferBinder : ScopedBinder<Target> {
|
| public:
|
| - ScopedFramebufferBinder(blink::WebGraphicsContext3D* context,
|
| - WebGLId id)
|
| - : ScopedBinder<target>(
|
| - context,
|
| - id,
|
| - &blink::WebGraphicsContext3D::bindFramebuffer) {}
|
| + ScopedFramebufferBinder(gpu::gles2::GLES2Interface* gl, GLuint id)
|
| + : ScopedBinder<Target>(gl,
|
| + id,
|
| + &gpu::gles2::GLES2Interface::BindFramebuffer) {}
|
| };
|
|
|
| -template <blink::WGC3Denum target>
|
| -class ScopedTextureBinder : ScopedBinder<target> {
|
| +template <GLenum Target>
|
| +class ScopedTextureBinder : ScopedBinder<Target> {
|
| public:
|
| - ScopedTextureBinder(blink::WebGraphicsContext3D* context,
|
| - WebGLId id)
|
| - : ScopedBinder<target>(
|
| - context,
|
| - id,
|
| - &blink::WebGraphicsContext3D::bindTexture) {}
|
| + ScopedTextureBinder(gpu::gles2::GLES2Interface* gl, GLuint id)
|
| + : ScopedBinder<Target>(gl, id, &gpu::gles2::GLES2Interface::BindTexture) {
|
| + }
|
| };
|
|
|
| class ScopedFlush {
|
| public:
|
| - explicit ScopedFlush(blink::WebGraphicsContext3D* context)
|
| - : context_(context) {
|
| - }
|
| + explicit ScopedFlush(gpu::gles2::GLES2Interface* gl) : gl_(gl) {}
|
|
|
| - ~ScopedFlush() {
|
| - context_->flush();
|
| - }
|
| + ~ScopedFlush() { gl_->Flush(); }
|
|
|
| private:
|
| - blink::WebGraphicsContext3D* context_;
|
| + gpu::gles2::GLES2Interface* gl_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ScopedFlush);
|
| };
|
|
|
| -
|
| class ReadbackYUVInterface;
|
|
|
| -// Provides higher level operations on top of the blink::WebGraphicsContext3D
|
| +// Provides higher level operations on top of the gpu::gles2::GLES2Interface
|
| // interfaces.
|
| class CONTENT_EXPORT GLHelper {
|
| public:
|
| - GLHelper(blink::WebGraphicsContext3D* context,
|
| + GLHelper(gpu::gles2::GLES2Interface* gl,
|
| gpu::ContextSupport* context_support);
|
| ~GLHelper();
|
|
|
| @@ -214,7 +167,6 @@ class CONTENT_EXPORT GLHelper {
|
| SCALER_QUALITY_BEST = 3,
|
| };
|
|
|
| -
|
| // Copies the block of pixels specified with |src_subrect| from |src_texture|,
|
| // scales it to |dst_size|, and writes it into |out|.
|
| // |src_size| is the size of |src_texture|. The result is of format GL_BGRA
|
| @@ -224,7 +176,7 @@ class CONTENT_EXPORT GLHelper {
|
| // Note that the src_texture will have the min/mag filter set to GL_LINEAR
|
| // and wrap_s/t set to CLAMP_TO_EDGE in this call.
|
| void CropScaleReadbackAndCleanTexture(
|
| - blink::WebGLId src_texture,
|
| + GLuint src_texture,
|
| const gfx::Size& src_size,
|
| const gfx::Rect& src_subrect,
|
| const gfx::Size& dst_size,
|
| @@ -252,44 +204,41 @@ class CONTENT_EXPORT GLHelper {
|
| // Copies the texture data out of |texture| into |out|. |size| is the
|
| // size of the texture. No post processing is applied to the pixels. The
|
| // texture is assumed to have a format of GL_RGBA with a pixel type of
|
| - // GL_UNSIGNED_BYTE. This is a blocking call that calls glReadPixels on this
|
| - // current context.
|
| - void ReadbackTextureSync(blink::WebGLId texture,
|
| + // GL_UNSIGNED_BYTE. This is a blocking call that calls glReadPixels on the
|
| + // current OpenGL context.
|
| + void ReadbackTextureSync(GLuint texture,
|
| const gfx::Rect& src_rect,
|
| unsigned char* out);
|
|
|
| // Creates a copy of the specified texture. |size| is the size of the texture.
|
| // Note that the src_texture will have the min/mag filter set to GL_LINEAR
|
| // and wrap_s/t set to CLAMP_TO_EDGE in this call.
|
| - blink::WebGLId CopyTexture(blink::WebGLId texture,
|
| - const gfx::Size& size);
|
| + GLuint CopyTexture(GLuint texture, const gfx::Size& size);
|
|
|
| // Creates a scaled copy of the specified texture. |src_size| is the size of
|
| // the texture and |dst_size| is the size of the resulting copy.
|
| // Note that the src_texture will have the min/mag filter set to GL_LINEAR
|
| // and wrap_s/t set to CLAMP_TO_EDGE in this call.
|
| - blink::WebGLId CopyAndScaleTexture(
|
| - blink::WebGLId texture,
|
| - const gfx::Size& src_size,
|
| - const gfx::Size& dst_size,
|
| - bool vertically_flip_texture,
|
| - ScalerQuality quality);
|
| + GLuint CopyAndScaleTexture(GLuint texture,
|
| + const gfx::Size& src_size,
|
| + const gfx::Size& dst_size,
|
| + bool vertically_flip_texture,
|
| + ScalerQuality quality);
|
|
|
| // Returns the shader compiled from the source.
|
| - blink::WebGLId CompileShaderFromSource(const blink::WGC3Dchar* source,
|
| - blink::WGC3Denum type);
|
| + GLuint CompileShaderFromSource(const GLchar* source, GLenum type);
|
|
|
| // Copies all pixels from |previous_texture| into |texture| that are
|
| // inside the region covered by |old_damage| but not part of |new_damage|.
|
| - void CopySubBufferDamage(blink::WebGLId texture,
|
| - blink::WebGLId previous_texture,
|
| + void CopySubBufferDamage(GLuint texture,
|
| + GLuint previous_texture,
|
| const SkRegion& new_damage,
|
| const SkRegion& old_damage);
|
|
|
| // Simply creates a texture.
|
| - blink::WebGLId CreateTexture();
|
| + GLuint CreateTexture();
|
| // Deletes a texture.
|
| - void DeleteTexture(blink::WebGLId texture_id);
|
| + void DeleteTexture(GLuint texture_id);
|
|
|
| // Insert a sync point into the GL command buffer.
|
| uint32 InsertSyncPoint();
|
| @@ -300,23 +249,22 @@ class CONTENT_EXPORT GLHelper {
|
| // point to wait on before using the mailbox. Returns an empty mailbox on
|
| // failure.
|
| // Note the texture is assumed to be GL_TEXTURE_2D.
|
| - gpu::Mailbox ProduceMailboxFromTexture(blink::WebGLId texture_id,
|
| - uint32* sync_point);
|
| + gpu::Mailbox ProduceMailboxFromTexture(GLuint texture_id, uint32* sync_point);
|
|
|
| // Creates a texture and consumes a mailbox into it. Returns 0 on failure.
|
| // Note the mailbox is assumed to be GL_TEXTURE_2D.
|
| - blink::WebGLId ConsumeMailboxToTexture(const gpu::Mailbox& mailbox,
|
| - uint32 sync_point);
|
| + GLuint ConsumeMailboxToTexture(const gpu::Mailbox& mailbox,
|
| + uint32 sync_point);
|
|
|
| // Resizes the texture's size to |size|.
|
| - void ResizeTexture(blink::WebGLId texture, const gfx::Size& size);
|
| + void ResizeTexture(GLuint texture, const gfx::Size& size);
|
|
|
| // Copies the framebuffer data given in |rect| to |texture|.
|
| - void CopyTextureSubImage(blink::WebGLId texture, const gfx::Rect& rect);
|
| + void CopyTextureSubImage(GLuint texture, const gfx::Rect& rect);
|
|
|
| // Copies the all framebuffer data to |texture|. |size| specifies the
|
| // size of the framebuffer.
|
| - void CopyTextureFullImage(blink::WebGLId texture, const gfx::Size& size);
|
| + void CopyTextureFullImage(GLuint texture, const gfx::Size& size);
|
|
|
| // A scaler will cache all intermediate textures and programs
|
| // needed to scale from a specified size to a destination size.
|
| @@ -329,8 +277,7 @@ class CONTENT_EXPORT GLHelper {
|
|
|
| // Note that the src_texture will have the min/mag filter set to GL_LINEAR
|
| // and wrap_s/t set to CLAMP_TO_EDGE in this call.
|
| - virtual void Scale(blink::WebGLId source_texture,
|
| - blink::WebGLId dest_texture) = 0;
|
| + virtual void Scale(GLuint source_texture, GLuint dest_texture) = 0;
|
| virtual const gfx::Size& SrcSize() = 0;
|
| virtual const gfx::Rect& SrcSubrect() = 0;
|
| virtual const gfx::Size& DstSize() = 0;
|
| @@ -355,18 +302,17 @@ class CONTENT_EXPORT GLHelper {
|
| // a multiple of two. If |use_mrt| is true, the pipeline will try to optimize
|
| // the YUV conversion using the multi-render-target extension. |use_mrt|
|
| // should only be set to false for testing.
|
| - ReadbackYUVInterface* CreateReadbackPipelineYUV(
|
| - ScalerQuality quality,
|
| - const gfx::Size& src_size,
|
| - const gfx::Rect& src_subrect,
|
| - const gfx::Size& dst_size,
|
| - const gfx::Rect& dst_subrect,
|
| - bool flip_vertically,
|
| - bool use_mrt);
|
| + ReadbackYUVInterface* CreateReadbackPipelineYUV(ScalerQuality quality,
|
| + const gfx::Size& src_size,
|
| + const gfx::Rect& src_subrect,
|
| + const gfx::Size& dst_size,
|
| + const gfx::Rect& dst_subrect,
|
| + bool flip_vertically,
|
| + bool use_mrt);
|
|
|
| // Returns the maximum number of draw buffers available,
|
| // 0 if GL_EXT_draw_buffers is not available.
|
| - blink::WGC3Dint MaxDrawBuffers();
|
| + GLint MaxDrawBuffers();
|
|
|
| protected:
|
| class CopyTextureToImpl;
|
| @@ -376,7 +322,7 @@ class CONTENT_EXPORT GLHelper {
|
| // Creates |scaler_impl_| if NULL.
|
| void InitScalerImpl();
|
|
|
| - blink::WebGraphicsContext3D* context_;
|
| + gpu::gles2::GLES2Interface* gl_;
|
| gpu::ContextSupport* context_support_;
|
| scoped_ptr<CopyTextureToImpl> copy_texture_to_impl_;
|
| scoped_ptr<GLHelperScaling> scaler_impl_;
|
| @@ -392,16 +338,15 @@ class CONTENT_EXPORT GLHelper {
|
| // if the source or destination sizes change, you'll need to create
|
| // a new readback pipeline.
|
| class CONTENT_EXPORT ReadbackYUVInterface {
|
| -public:
|
| + public:
|
| ReadbackYUVInterface() {}
|
| virtual ~ReadbackYUVInterface() {}
|
|
|
| // Note that |target| must use YV12 format.
|
| - virtual void ReadbackYUV(
|
| - const gpu::Mailbox& mailbox,
|
| - uint32 sync_point,
|
| - const scoped_refptr<media::VideoFrame>& target,
|
| - const base::Callback<void(bool)>& callback) = 0;
|
| + virtual void ReadbackYUV(const gpu::Mailbox& mailbox,
|
| + uint32 sync_point,
|
| + const scoped_refptr<media::VideoFrame>& target,
|
| + const base::Callback<void(bool)>& callback) = 0;
|
| virtual GLHelper::ScalerInterface* scaler() = 0;
|
| };
|
|
|
|
|