| Index: ui/gl/async_pixel_transfer_delegate.h
|
| diff --git a/ui/gl/async_pixel_transfer_delegate.h b/ui/gl/async_pixel_transfer_delegate.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6448cc9bf8d1764d058f70db2055eba4e005ffb3
|
| --- /dev/null
|
| +++ b/ui/gl/async_pixel_transfer_delegate.h
|
| @@ -0,0 +1,117 @@
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#ifndef UI_GL_ASYNC_TASK_DELEGATE_H_
|
| +#define UI_GL_ASYNC_TASK_DELEGATE_H_
|
| +
|
| +#include "base/basictypes.h"
|
| +#include "base/bind.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "build/build_config.h"
|
| +#include "ui/gl/gl_bindings.h"
|
| +#include "ui/gl/gl_export.h"
|
| +
|
| +namespace base {
|
| +class SharedMemory;
|
| +}
|
| +
|
| +namespace gfx {
|
| +
|
| +struct AsyncTexImage2DParams {
|
| + GLenum target;
|
| + GLint level;
|
| + GLenum internal_format;
|
| + GLsizei width;
|
| + GLsizei height;
|
| + GLint border;
|
| + GLenum format;
|
| + GLenum type;
|
| +};
|
| +
|
| +struct AsyncTexSubImage2DParams {
|
| + GLenum target;
|
| + GLint level;
|
| + GLint xoffset;
|
| + GLint yoffset;
|
| + GLsizei width;
|
| + GLsizei height;
|
| + GLenum format;
|
| + GLenum type;
|
| +};
|
| +
|
| +struct AsyncMemoryParams {
|
| + base::SharedMemory* shared_memory;
|
| + uint32 shm_size;
|
| + uint32 shm_data_offset;
|
| + uint32 shm_data_size;
|
| +};
|
| +
|
| +// AsyncPixelTransferState holds the resources required to do async
|
| +// transfers on one texture. It should stay alive for the lifetime
|
| +// of the texture to allow multiple transfers.
|
| +class GL_EXPORT AsyncPixelTransferState :
|
| + public base::SupportsWeakPtr<AsyncPixelTransferState> {
|
| + public:
|
| + virtual ~AsyncPixelTransferState() {}
|
| +
|
| + // Returns true if there is a transfer in progress.
|
| + virtual bool TransferIsInProgress() = 0;
|
| +
|
| + // Perform any custom binding of the transfer (currently only
|
| + // needed for AsyncTexImage2D). The params used to define the texture
|
| + // are returned in level_params.
|
| + //
|
| + // The transfer must be complete to call this (!TransferIsInProgress).
|
| + virtual void BindTransfer(AsyncTexImage2DParams* level_params) = 0;
|
| +
|
| + protected:
|
| + friend class base::RefCounted<AsyncPixelTransferState>;
|
| + AsyncPixelTransferState() {}
|
| +
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferState);
|
| +};
|
| +
|
| +class GL_EXPORT AsyncPixelTransferDelegate {
|
| + public:
|
| + static scoped_ptr<AsyncPixelTransferDelegate>
|
| + Create(gfx::GLContext* context);
|
| + virtual ~AsyncPixelTransferDelegate() {}
|
| +
|
| + // This wouldn't work with MOCK_METHOD, so it routes through
|
| + // a virtual protected version which returns a raw pointer.
|
| + scoped_ptr<AsyncPixelTransferState>
|
| + CreatePixelTransferState(GLuint texture_id) {
|
| + return make_scoped_ptr(CreateRawPixelTransferState(texture_id));
|
| + }
|
| +
|
| + virtual void AsyncNotifyCompletion(
|
| + const base::Closure& notify_task) = 0;
|
| +
|
| + virtual void AsyncTexImage2D(
|
| + AsyncPixelTransferState* state,
|
| + const AsyncTexImage2DParams& tex_params,
|
| + const AsyncMemoryParams& mem_params) = 0;
|
| +
|
| + virtual void AsyncTexSubImage2D(
|
| + AsyncPixelTransferState* state,
|
| + const AsyncTexSubImage2DParams& tex_params,
|
| + const AsyncMemoryParams& mem_params) = 0;
|
| +
|
| + protected:
|
| + AsyncPixelTransferDelegate() {}
|
| + // For testing, as returning scoped_ptr wouldn't work with MOCK_METHOD.
|
| + virtual AsyncPixelTransferState*
|
| + CreateRawPixelTransferState(GLuint texture_id) = 0;
|
| +
|
| + private:
|
| + DISALLOW_COPY_AND_ASSIGN(AsyncPixelTransferDelegate);
|
| +};
|
| +
|
| +} // namespace gfx
|
| +
|
| +#endif // UI_GL_ASYNC_TASK_DELEGATE_H_
|
| +
|
|
|