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 FlushSync(int32_t put_offset) OVERRIDE;
34 virtual gpu::CommandBuffer::State FlushSyncFast(
36 int32_t last_known_get) OVERRIDE;
37 virtual uint32_t InsertSyncPoint() OVERRIDE;
39 // Binds/unbinds the graphics of this context with the associated instance.
40 // Returns true if binding/unbinding is successful.
41 bool BindToInstance(bool bind);
43 // Returns true if the backing texture is always opaque.
46 // Notifications about the view's progress painting. See PluginInstance.
47 // These messages are used to send Flush callbacks to the plugin.
48 void ViewInitiatedPaint();
49 void ViewFlushedPaint();
51 PlatformContext3D* platform_context() { return platform_context_.get(); }
54 virtual ~PPB_Graphics3D_Impl();
55 // ppapi::PPB_Graphics3D_Shared overrides.
56 virtual gpu::CommandBuffer* GetCommandBuffer() OVERRIDE;
57 virtual gpu::GpuControl* GetGpuControl() OVERRIDE;
58 virtual int32 DoSwapBuffers() OVERRIDE;
61 explicit PPB_Graphics3D_Impl(PP_Instance instance);
63 static PP_Bool IsGpuBlacklisted();
65 bool Init(PPB_Graphics3D_API* share_context,
66 const int32_t* attrib_list);
67 bool InitRaw(PPB_Graphics3D_API* share_context,
68 const int32_t* attrib_list);
70 // Notifications received from the GPU process.
73 void OnConsoleMessage(const std::string& msg, int id);
74 // Notifications sent to plugin.
75 void SendContextLost();
77 // True if context is bound to instance.
78 bool bound_to_instance_;
79 // True when waiting for compositor to commit our backing texture.
81 // The 3D Context. Responsible for providing the command buffer.
82 scoped_ptr<PlatformContext3D> platform_context_;
83 base::WeakPtrFactory<PPB_Graphics3D_Impl> weak_ptr_factory_;
85 DISALLOW_COPY_AND_ASSIGN(PPB_Graphics3D_Impl);
88 } // namespace content
90 #endif // CONTENT_RENDERER_PEPPER_PPB_GRAPHICS_3D_IMPL_H_