blob: c67effa15f27e5ce92a1329c33d300160740ca20 [file] [log] [blame]
// Copyright 2013 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 MOJO_SERVICES_GLES2_COMMAND_BUFFER_IMPL_H_
#define MOJO_SERVICES_GLES2_COMMAND_BUFFER_IMPL_H_
#include "base/macros.h"
#include "base/memory/scoped_ptr.h"
#include "base/timer/timer.h"
#include "mojo/public/cpp/system/core.h"
#include "mojo/services/public/interfaces/gpu/command_buffer.mojom.h"
#include "ui/gfx/native_widget_types.h"
#include "ui/gfx/size.h"
namespace gpu {
class CommandBufferService;
class GpuScheduler;
class GpuControlService;
namespace gles2 {
class GLES2Decoder;
class MailboxManager;
}
}
namespace gfx {
class GLContext;
class GLShareGroup;
class GLSurface;
}
namespace mojo {
class CommandBufferImpl : public InterfaceImpl<CommandBuffer> {
public:
// Offscreen.
CommandBufferImpl(gfx::GLShareGroup* share_group,
gpu::gles2::MailboxManager* mailbox_manager);
// Onscreen.
CommandBufferImpl(gfx::AcceleratedWidget widget,
const gfx::Size& size,
gfx::GLShareGroup* share_group,
gpu::gles2::MailboxManager* mailbox_manager);
~CommandBufferImpl() override;
void Initialize(CommandBufferSyncClientPtr sync_client,
mojo::ScopedSharedBufferHandle shared_state) override;
void SetGetBuffer(int32_t buffer) override;
void Flush(int32_t put_offset) override;
void MakeProgress(int32_t last_get_offset) override;
void RegisterTransferBuffer(int32_t id,
mojo::ScopedSharedBufferHandle transfer_buffer,
uint32_t size) override;
void DestroyTransferBuffer(int32_t id) override;
void Echo(const Callback<void()>& callback) override;
private:
bool DoInitialize(mojo::ScopedSharedBufferHandle shared_state);
void OnResize(gfx::Size size, float scale_factor);
void OnParseError();
CommandBufferSyncClientPtr sync_client_;
gfx::AcceleratedWidget widget_;
gfx::Size size_;
scoped_ptr<gpu::CommandBufferService> command_buffer_;
scoped_ptr<gpu::gles2::GLES2Decoder> decoder_;
scoped_ptr<gpu::GpuScheduler> scheduler_;
scoped_refptr<gfx::GLContext> context_;
scoped_refptr<gfx::GLSurface> surface_;
scoped_refptr<gfx::GLShareGroup> share_group_;
scoped_refptr<gpu::gles2::MailboxManager> mailbox_manager_;
DISALLOW_COPY_AND_ASSIGN(CommandBufferImpl);
};
} // namespace mojo
#endif // MOJO_SERVICES_GLES2_COMMAND_BUFFER_IMPL_H_