1 // Copyright (c) 2012 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.
5 #ifndef CONTENT_RENDERER_PEPPER_PPB_GRAPHICS_3D_IMPL_H_
6 #define CONTENT_RENDERER_PEPPER_PPB_GRAPHICS_3D_IMPL_H_
8 #include "base/memory/weak_ptr.h"
9 #include "ppapi/shared_impl/ppb_graphics_3d_shared.h"
10 #include "ppapi/shared_impl/resource.h"
13 class PlatformContext3D;
15 class PPB_Graphics3D_Impl : public ppapi::PPB_Graphics3D_Shared {
17 static PP_Resource Create(PP_Instance instance,
18 PP_Resource share_context,
19 const int32_t* attrib_list);
20 static PP_Resource CreateRaw(PP_Instance instance,
21 PP_Resource share_context,
22 const int32_t* attrib_list);
24 // PPB_Graphics3D_API trusted implementation.
25 virtual PP_Bool SetGetBuffer(int32_t transfer_buffer_id) OVERRIDE;
26 virtual gpu::CommandBuffer::State GetState() OVERRIDE;
27 virtual int32_t CreateTransferBuffer(uint32_t size) OVERRIDE;
28 virtual PP_Bool DestroyTransferBuffer(int32_t id) OVERRIDE;
29 virtual PP_Bool GetTransferBuffer(int32_t id,
31 uint32_t* shm_size) OVERRIDE;
32 virtual PP_Bool Flush(int32_t put_offset) OVERRIDE;
33 virtual gpu::CommandBuffer::State WaitForTokenInRange(int32_t start,
34 int32_t end) OVERRIDE;
35 virtual gpu::CommandBuffer::State WaitForGetOffsetInRange(int32_t start,
38 virtual uint32_t InsertSyncPoint() OVERRIDE;
40 // Binds/unbinds the graphics of this context with the associated instance.
41 // Returns true if binding/unbinding is successful.
42 bool BindToInstance(bool bind);
44 // Returns true if the backing texture is always opaque.
47 // Notifications about the view's progress painting. See PluginInstance.
48 // These messages are used to send Flush callbacks to the plugin.
49 void ViewInitiatedPaint();
50 void ViewFlushedPaint();
52 PlatformContext3D* platform_context() { return platform_context_.get(); }
55 virtual ~PPB_Graphics3D_Impl();
56 // ppapi::PPB_Graphics3D_Shared overrides.
57 virtual gpu::CommandBuffer* GetCommandBuffer() OVERRIDE;
58 virtual gpu::GpuControl* GetGpuControl() OVERRIDE;
59 virtual int32 DoSwapBuffers() OVERRIDE;
62 explicit PPB_Graphics3D_Impl(PP_Instance instance);
64 bool Init(PPB_Graphics3D_API* share_context,
65 const int32_t* attrib_list);
66 bool InitRaw(PPB_Graphics3D_API* share_context,
67 const int32_t* attrib_list);
69 // Notifications received from the GPU process.
72 void OnConsoleMessage(const std::string& msg, int id);
73 // Notifications sent to plugin.
74 void SendContextLost();
76 // True if context is bound to instance.
77 bool bound_to_instance_;
78 // True when waiting for compositor to commit our backing texture.
80 // The 3D Context. Responsible for providing the command buffer.
81 scoped_ptr<PlatformContext3D> platform_context_;
82 base::WeakPtrFactory<PPB_Graphics3D_Impl> weak_ptr_factory_;
84 DISALLOW_COPY_AND_ASSIGN(PPB_Graphics3D_Impl);
87 } // namespace content
89 #endif // CONTENT_RENDERER_PEPPER_PPB_GRAPHICS_3D_IMPL_H_