1// Copyright 2013 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef GPU_COMMAND_BUFFER_CLIENT_CONTEXT_SUPPORT_H_
6#define GPU_COMMAND_BUFFER_CLIENT_CONTEXT_SUPPORT_H_
7
8#include "base/callback.h"
9#include "ui/gfx/overlay_transform.h"
10#include "ui/gfx/rect.h"
11
12namespace gpu {
13
14class ContextSupport {
15 public:
16  // Runs |callback| when a sync point is reached.
17  virtual void SignalSyncPoint(uint32 sync_point,
18                               const base::Closure& callback) = 0;
19
20  // Runs |callback| when a query created via glCreateQueryEXT() has cleared
21  // passed the glEndQueryEXT() point.
22  virtual void SignalQuery(uint32 query, const base::Closure& callback) = 0;
23
24  // For onscreen contexts, indicates that the surface visibility has changed.
25  // Clients aren't expected to draw to an invisible surface.
26  virtual void SetSurfaceVisible(bool visible) = 0;
27
28  virtual void Swap() = 0;
29  virtual void PartialSwapBuffers(const gfx::Rect& sub_buffer) = 0;
30
31  virtual void SetSwapBuffersCompleteCallback(
32      const base::Closure& callback) = 0;
33
34  // Schedule a texture to be presented as an overlay synchronously with the
35  // primary surface during the next buffer swap.
36  // This method is not stateful and needs to be re-scheduled every frame.
37  virtual void ScheduleOverlayPlane(int plane_z_order,
38                                    gfx::OverlayTransform plane_transform,
39                                    unsigned overlay_texture_id,
40                                    const gfx::Rect& display_bounds,
41                                    const gfx::RectF& uv_rect) = 0;
42
43  virtual uint32 InsertFutureSyncPointCHROMIUM() = 0;
44  virtual void RetireSyncPointCHROMIUM(uint32 sync_point) = 0;
45
46 protected:
47  ContextSupport() {}
48  virtual ~ContextSupport() {}
49};
50
51}
52
53#endif  // GPU_COMMAND_BUFFER_CLIENT_CONTEXT_SUPPORT_H_
54