| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 "ppapi/shared_impl/ppb_graphics_3d_shared.h" | 5 #include "ppapi/shared_impl/ppb_graphics_3d_shared.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "gpu/command_buffer/client/gles2_cmd_helper.h" | 8 #include "gpu/command_buffer/client/gles2_cmd_helper.h" |
| 9 #include "gpu/command_buffer/client/gles2_implementation.h" | 9 #include "gpu/command_buffer/client/gles2_implementation.h" |
| 10 #include "gpu/command_buffer/client/transfer_buffer.h" | 10 #include "gpu/command_buffer/client/transfer_buffer.h" |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 43 | 43 |
| 44 int32_t PPB_Graphics3D_Shared::GetError() { | 44 int32_t PPB_Graphics3D_Shared::GetError() { |
| 45 // TODO(alokp): Implement me. | 45 // TODO(alokp): Implement me. |
| 46 return PP_ERROR_FAILED; | 46 return PP_ERROR_FAILED; |
| 47 } | 47 } |
| 48 | 48 |
| 49 int32_t PPB_Graphics3D_Shared::ResizeBuffers(int32_t width, int32_t height) { | 49 int32_t PPB_Graphics3D_Shared::ResizeBuffers(int32_t width, int32_t height) { |
| 50 if ((width < 0) || (height < 0)) | 50 if ((width < 0) || (height < 0)) |
| 51 return PP_ERROR_BADARGUMENT; | 51 return PP_ERROR_BADARGUMENT; |
| 52 | 52 |
| 53 ScopedNoLocking already_locked(this); | |
| 54 gles2_impl()->ResizeCHROMIUM(width, height, 1.f); | 53 gles2_impl()->ResizeCHROMIUM(width, height, 1.f); |
| 55 // TODO(alokp): Check if resize succeeded and return appropriate error code. | 54 // TODO(alokp): Check if resize succeeded and return appropriate error code. |
| 56 return PP_OK; | 55 return PP_OK; |
| 57 } | 56 } |
| 58 | 57 |
| 59 int32_t PPB_Graphics3D_Shared::SwapBuffers( | 58 int32_t PPB_Graphics3D_Shared::SwapBuffers( |
| 60 scoped_refptr<TrackedCallback> callback) { | 59 scoped_refptr<TrackedCallback> callback) { |
| 61 ScopedNoLocking already_locked(this); | |
| 62 if (HasPendingSwap()) { | 60 if (HasPendingSwap()) { |
| 63 Log(PP_LOGLEVEL_ERROR, "PPB_Graphics3D.SwapBuffers: Plugin attempted swap " | 61 Log(PP_LOGLEVEL_ERROR, "PPB_Graphics3D.SwapBuffers: Plugin attempted swap " |
| 64 "with previous swap still pending."); | 62 "with previous swap still pending."); |
| 65 // Already a pending SwapBuffers that hasn't returned yet. | 63 // Already a pending SwapBuffers that hasn't returned yet. |
| 66 return PP_ERROR_INPROGRESS; | 64 return PP_ERROR_INPROGRESS; |
| 67 } | 65 } |
| 68 | 66 |
| 69 swap_callback_ = callback; | 67 swap_callback_ = callback; |
| 70 return DoSwapBuffers(); | 68 return DoSwapBuffers(); |
| 71 } | 69 } |
| 72 | 70 |
| 73 int32_t PPB_Graphics3D_Shared::GetAttribMaxValue(int32_t attribute, | 71 int32_t PPB_Graphics3D_Shared::GetAttribMaxValue(int32_t attribute, |
| 74 int32_t* value) { | 72 int32_t* value) { |
| 75 // TODO(alokp): Implement me. | 73 // TODO(alokp): Implement me. |
| 76 return PP_ERROR_FAILED; | 74 return PP_ERROR_FAILED; |
| 77 } | 75 } |
| 78 | 76 |
| 79 void* PPB_Graphics3D_Shared::MapTexSubImage2DCHROMIUM(GLenum target, | 77 void* PPB_Graphics3D_Shared::MapTexSubImage2DCHROMIUM(GLenum target, |
| 80 GLint level, | 78 GLint level, |
| 81 GLint xoffset, | 79 GLint xoffset, |
| 82 GLint yoffset, | 80 GLint yoffset, |
| 83 GLsizei width, | 81 GLsizei width, |
| 84 GLsizei height, | 82 GLsizei height, |
| 85 GLenum format, | 83 GLenum format, |
| 86 GLenum type, | 84 GLenum type, |
| 87 GLenum access) { | 85 GLenum access) { |
| 88 ScopedNoLocking already_locked(this); | |
| 89 return gles2_impl_->MapTexSubImage2DCHROMIUM( | 86 return gles2_impl_->MapTexSubImage2DCHROMIUM( |
| 90 target, level, xoffset, yoffset, width, height, format, type, access); | 87 target, level, xoffset, yoffset, width, height, format, type, access); |
| 91 } | 88 } |
| 92 | 89 |
| 93 void PPB_Graphics3D_Shared::UnmapTexSubImage2DCHROMIUM(const void* mem) { | 90 void PPB_Graphics3D_Shared::UnmapTexSubImage2DCHROMIUM(const void* mem) { |
| 94 ScopedNoLocking already_locked(this); | |
| 95 gles2_impl_->UnmapTexSubImage2DCHROMIUM(mem); | 91 gles2_impl_->UnmapTexSubImage2DCHROMIUM(mem); |
| 96 } | 92 } |
| 97 | 93 |
| 98 void PPB_Graphics3D_Shared::SwapBuffersACK(int32_t pp_error) { | 94 void PPB_Graphics3D_Shared::SwapBuffersACK(int32_t pp_error) { |
| 99 DCHECK(HasPendingSwap()); | 95 DCHECK(HasPendingSwap()); |
| 100 swap_callback_->Run(pp_error); | 96 swap_callback_->Run(pp_error); |
| 101 } | 97 } |
| 102 | 98 |
| 103 bool PPB_Graphics3D_Shared::HasPendingSwap() const { | 99 bool PPB_Graphics3D_Shared::HasPendingSwap() const { |
| 104 return TrackedCallback::IsPending(swap_callback_); | 100 return TrackedCallback::IsPending(swap_callback_); |
| 105 } | 101 } |
| 106 | 102 |
| 107 bool PPB_Graphics3D_Shared::CreateGLES2Impl( | 103 bool PPB_Graphics3D_Shared::CreateGLES2Impl( |
| 108 int32 command_buffer_size, | 104 int32 command_buffer_size, |
| 109 int32 transfer_buffer_size, | 105 int32 transfer_buffer_size, |
| 110 gpu::gles2::GLES2Implementation* share_gles2) { | 106 gpu::gles2::GLES2Implementation* share_gles2) { |
| 111 ScopedNoLocking already_locked(this); | |
| 112 gpu::CommandBuffer* command_buffer = GetCommandBuffer(); | 107 gpu::CommandBuffer* command_buffer = GetCommandBuffer(); |
| 113 DCHECK(command_buffer); | 108 DCHECK(command_buffer); |
| 114 | 109 |
| 115 // Create the GLES2 helper, which writes the command buffer protocol. | 110 // Create the GLES2 helper, which writes the command buffer protocol. |
| 116 gles2_helper_.reset(new gpu::gles2::GLES2CmdHelper(command_buffer)); | 111 gles2_helper_.reset(new gpu::gles2::GLES2CmdHelper(command_buffer)); |
| 117 if (!gles2_helper_->Initialize(command_buffer_size)) | 112 if (!gles2_helper_->Initialize(command_buffer_size)) |
| 118 return false; | 113 return false; |
| 119 | 114 |
| 120 // Create a transfer buffer used to copy resources between the renderer | 115 // Create a transfer buffer used to copy resources between the renderer |
| 121 // process and the GPU process. | 116 // process and the GPU process. |
| (...skipping 16 matching lines...) Expand all Loading... |
| 138 gpu::gles2::GLES2Implementation::kNoLimit)) { | 133 gpu::gles2::GLES2Implementation::kNoLimit)) { |
| 139 return false; | 134 return false; |
| 140 } | 135 } |
| 141 | 136 |
| 142 gles2_impl_->PushGroupMarkerEXT(0, "PPAPIContext"); | 137 gles2_impl_->PushGroupMarkerEXT(0, "PPAPIContext"); |
| 143 | 138 |
| 144 return true; | 139 return true; |
| 145 } | 140 } |
| 146 | 141 |
| 147 void PPB_Graphics3D_Shared::DestroyGLES2Impl() { | 142 void PPB_Graphics3D_Shared::DestroyGLES2Impl() { |
| 148 ScopedNoLocking already_locked(this); | |
| 149 gles2_impl_.reset(); | 143 gles2_impl_.reset(); |
| 150 transfer_buffer_.reset(); | 144 transfer_buffer_.reset(); |
| 151 gles2_helper_.reset(); | 145 gles2_helper_.reset(); |
| 152 } | 146 } |
| 153 | 147 |
| 154 void PPB_Graphics3D_Shared::PushAlreadyLocked() { | |
| 155 // Do nothing. This should be overridden in the plugin side. | |
| 156 } | |
| 157 | |
| 158 void PPB_Graphics3D_Shared::PopAlreadyLocked() { | |
| 159 // Do nothing. This should be overridden in the plugin side. | |
| 160 } | |
| 161 | |
| 162 } // namespace ppapi | 148 } // namespace ppapi |
| 163 | 149 |
| OLD | NEW |