Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1573)

Side by Side Diff: webkit/plugins/ppapi/ppb_surface_3d_impl.cc

Issue 5944001: Make Graphics3D::SwapBuffers take a completion callback (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Update to Alok's Context3D/Surface3D changes Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « webkit/plugins/ppapi/ppb_surface_3d_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "webkit/plugins/ppapi/ppb_surface_3d_impl.h" 5 #include "webkit/plugins/ppapi/ppb_surface_3d_impl.h"
6 6
7 #include "gpu/command_buffer/common/command_buffer.h" 7 #include "gpu/command_buffer/common/command_buffer.h"
8 #include "ppapi/c/dev/ppb_graphics_3d_dev.h" 8 #include "ppapi/c/dev/ppb_graphics_3d_dev.h"
9 #include "webkit/plugins/ppapi/common.h" 9 #include "webkit/plugins/ppapi/common.h"
10 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h" 10 #include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
44 int32_t attribute, 44 int32_t attribute,
45 int32_t* value) { 45 int32_t* value) {
46 // TODO(alokp): Implement me. 46 // TODO(alokp): Implement me.
47 return 0; 47 return 0;
48 } 48 }
49 49
50 int32_t SwapBuffers(PP_Resource surface_id, 50 int32_t SwapBuffers(PP_Resource surface_id,
51 PP_CompletionCallback callback) { 51 PP_CompletionCallback callback) {
52 scoped_refptr<PPB_Surface3D_Impl> surface( 52 scoped_refptr<PPB_Surface3D_Impl> surface(
53 Resource::GetAs<PPB_Surface3D_Impl>(surface_id)); 53 Resource::GetAs<PPB_Surface3D_Impl>(surface_id));
54 return surface->SwapBuffers(); 54 return surface->SwapBuffers(callback);
55 } 55 }
56 56
57 const PPB_Surface3D_Dev ppb_surface3d = { 57 const PPB_Surface3D_Dev ppb_surface3d = {
58 &Create, 58 &Create,
59 &IsSurface3D, 59 &IsSurface3D,
60 &SetAttrib, 60 &SetAttrib,
61 &GetAttrib, 61 &GetAttrib,
62 &SwapBuffers 62 &SwapBuffers
63 }; 63 };
64 64
65 } // namespace 65 } // namespace
66 66
67 PPB_Surface3D_Impl::PPB_Surface3D_Impl(PluginInstance* instance) 67 PPB_Surface3D_Impl::PPB_Surface3D_Impl(PluginInstance* instance)
68 : Resource(instance->module()), 68 : Resource(instance->module()),
69 instance_(instance), 69 instance_(instance),
70 bound_to_instance_(false), 70 bound_to_instance_(false),
71 swap_initiated_(false),
72 swap_callback_(PP_BlockUntilComplete()),
71 context_(NULL) { 73 context_(NULL) {
72 } 74 }
73 75
74 PPB_Surface3D_Impl::~PPB_Surface3D_Impl() { 76 PPB_Surface3D_Impl::~PPB_Surface3D_Impl() {
75 } 77 }
76 78
77 const PPB_Surface3D_Dev* PPB_Surface3D_Impl::GetInterface() { 79 const PPB_Surface3D_Dev* PPB_Surface3D_Impl::GetInterface() {
78 return &ppb_surface3d; 80 return &ppb_surface3d;
79 } 81 }
80 82
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 // TODO(apatrick): Figure out the semantics of binding and resizing. 116 // TODO(apatrick): Figure out the semantics of binding and resizing.
115 context->SwapBuffers(); 117 context->SwapBuffers();
116 118
117 context->SetSwapBuffersCallback( 119 context->SetSwapBuffersCallback(
118 NewCallback(this, &PPB_Surface3D_Impl::OnSwapBuffers)); 120 NewCallback(this, &PPB_Surface3D_Impl::OnSwapBuffers));
119 } 121 }
120 context_ = context; 122 context_ = context;
121 return true; 123 return true;
122 } 124 }
123 125
124 bool PPB_Surface3D_Impl::SwapBuffers() { 126 bool PPB_Surface3D_Impl::SwapBuffers(PP_CompletionCallback callback) {
125 return context_ && context_->SwapBuffers(); 127 if (!context_)
128 return false;
129
130 if (swap_callback_.func) {
131 // Already a pending SwapBuffers that hasn't returned yet.
132 return false;
133 }
134
135 swap_callback_ = callback;
136 return context_->SwapBuffers();
137 }
138
139 void PPB_Surface3D_Impl::ViewInitiatedPaint() {
140 if (swap_callback_.func) {
141 swap_initiated_ = true;
142 }
143 }
144
145 void PPB_Surface3D_Impl::ViewFlushedPaint() {
146 if (swap_initiated_ && swap_callback_.func) {
147 // We must clear swap_callback_ before issuing the callback. It will be
148 // common for the plugin to issue another SwapBuffers in response to the
149 // callback, and we don't want to think that a callback is already pending.
150 PP_CompletionCallback callback = PP_BlockUntilComplete();
151 std::swap(callback, swap_callback_);
152 swap_initiated_ = false;
153 PP_RunCompletionCallback(&callback, PP_OK);
154 }
126 } 155 }
127 156
128 unsigned int PPB_Surface3D_Impl::GetBackingTextureId() { 157 unsigned int PPB_Surface3D_Impl::GetBackingTextureId() {
129 return context_ ? context_->GetBackingTextureId() : 0; 158 return context_ ? context_->GetBackingTextureId() : 0;
130 } 159 }
131 160
132 void PPB_Surface3D_Impl::OnSwapBuffers() { 161 void PPB_Surface3D_Impl::OnSwapBuffers() {
133 if (bound_to_instance_) 162 if (bound_to_instance_)
134 instance()->CommitBackingTexture(); 163 instance()->CommitBackingTexture();
135 } 164 }
136 165
137 } // namespace ppapi 166 } // namespace ppapi
138 } // namespace webkit 167 } // namespace webkit
139 168
OLDNEW
« no previous file with comments | « webkit/plugins/ppapi/ppb_surface_3d_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698