flutter_flutter/mojo/gles2/control_thunks_impl.h
James Robinson c8eff5e44f Update to mojo d259eb58aa59e14a13d5e0dc3984b855b475ba09
This updates to mojo commit d259eb58aa59 and limits the roll script to
only pull in the parts of //mojo that are currently being used. More
stuff will be dropped in the future.
2015-08-25 14:56:25 -07:00

70 lines
2.0 KiB
C++

// Copyright 2015 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_GLES2_CONTROL_THUNKS_IMPL_H_
#define MOJO_GLES2_CONTROL_THUNKS_IMPL_H_
#include "base/lazy_instance.h"
#include "base/macros.h"
#include "base/threading/thread_local.h"
#include "gpu/GLES2/gl2extchromium.h"
#include "mojo/gles2/gles2_context.h"
#include "mojo/public/c/gles2/gles2.h"
#include "mojo/public/c/gpu/MGL/mgl.h"
namespace gpu {
namespace gles2 {
class GLES2Interface;
}
}
namespace gles2 {
// ControlThunksImpl is a singleton class that implements the MGL and MojoGLES2
// control functions. The class maintains a lazily allocated TLS slot on each
// thread for the current GL context.
class ControlThunksImpl {
public:
static ControlThunksImpl* Get();
MGLContext CreateContext(MGLOpenGLAPIVersion version,
MojoHandle command_buffer_handle,
MGLContext share_group,
MGLContextLostCallback lost_callback,
void* lost_callback_closure,
const struct MojoAsyncWaiter* async_waiter);
void DestroyContext(MGLContext context);
void MakeCurrent(MGLContext context);
MGLContext GetCurrentContext();
void ResizeSurface(uint32_t width, uint32_t height);
void SwapBuffers();
void* GetGLES2Interface(MojoGLES2Context context);
void SignalSyncPoint(MojoGLES2Context context,
uint32_t sync_point,
MojoGLES2SignalSyncPointCallback callback,
void* closure);
gpu::gles2::GLES2Interface* CurrentGLES2Interface();
private:
friend base::DefaultLazyInstanceTraits<gles2::ControlThunksImpl>;
ControlThunksImpl();
~ControlThunksImpl();
base::ThreadLocalPointer<GLES2Context> current_context_tls_;
DISALLOW_COPY_AND_ASSIGN(ControlThunksImpl);
};
} // namespace gles2
#endif // MOJO_GLES2_CONTROL_THUNKS_IMPL_H_