| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright 2009, Google Inc. | 2 * Copyright 2009, Google Inc. |
| 3 * All rights reserved. | 3 * All rights reserved. |
| 4 * | 4 * |
| 5 * Redistribution and use in source and binary forms, with or without | 5 * Redistribution and use in source and binary forms, with or without |
| 6 * modification, are permitted provided that the following conditions are | 6 * modification, are permitted provided that the following conditions are |
| 7 * met: | 7 * met: |
| 8 * | 8 * |
| 9 * * Redistributions of source code must retain the above copyright | 9 * * Redistributions of source code must retain the above copyright |
| 10 * notice, this list of conditions and the following disclaimer. | 10 * notice, this list of conditions and the following disclaimer. |
| (...skipping 29 matching lines...) Expand all Loading... |
| 40 namespace o3d { | 40 namespace o3d { |
| 41 using command_buffer::CommandBufferEntry; | 41 using command_buffer::CommandBufferEntry; |
| 42 using command_buffer::CommandBufferHelper; | 42 using command_buffer::CommandBufferHelper; |
| 43 using command_buffer::FencedAllocator; | 43 using command_buffer::FencedAllocator; |
| 44 | 44 |
| 45 VertexBufferCB::VertexBufferCB(ServiceLocator* service_locator, | 45 VertexBufferCB::VertexBufferCB(ServiceLocator* service_locator, |
| 46 RendererCB *renderer) | 46 RendererCB *renderer) |
| 47 : VertexBuffer(service_locator), | 47 : VertexBuffer(service_locator), |
| 48 lock_pointer_(NULL), | 48 lock_pointer_(NULL), |
| 49 has_data_(false), | 49 has_data_(false), |
| 50 resource_id_(0), | 50 resource_id_(command_buffer::kInvalidResource), |
| 51 renderer_(renderer) { | 51 renderer_(renderer) { |
| 52 } | 52 } |
| 53 | 53 |
| 54 | 54 |
| 55 VertexBufferCB::~VertexBufferCB() { | 55 VertexBufferCB::~VertexBufferCB() { |
| 56 ConcreteFree(); | 56 ConcreteFree(); |
| 57 } | 57 } |
| 58 | 58 |
| 59 // Sends the DESTROY_VERTEX_BUFFER command, and frees the ID from the allocator. | 59 // Sends the DESTROY_VERTEX_BUFFER command, and frees the ID from the allocator. |
| 60 void VertexBufferCB::ConcreteFree() { | 60 void VertexBufferCB::ConcreteFree() { |
| 61 if (GetSizeInBytes() != 0) { | 61 if (resource_id_ != command_buffer::kInvalidResource) { |
| 62 CommandBufferHelper *helper = renderer_->helper(); | 62 CommandBufferHelper *helper = renderer_->helper(); |
| 63 CommandBufferEntry args[1]; | 63 CommandBufferEntry args[1]; |
| 64 args[0].value_uint32 = resource_id_; | 64 args[0].value_uint32 = resource_id_; |
| 65 helper->AddCommand(command_buffer::DESTROY_VERTEX_BUFFER, 1, args); | 65 helper->AddCommand(command_buffer::DESTROY_VERTEX_BUFFER, 1, args); |
| 66 renderer_->vertex_buffer_ids().FreeID(resource_id_); | 66 renderer_->vertex_buffer_ids().FreeID(resource_id_); |
| 67 resource_id_ = command_buffer::kInvalidResource; |
| 67 } | 68 } |
| 68 } | 69 } |
| 69 | 70 |
| 70 // Allocates a resource ID, and sends the CREATE_VERTEX_BUFFER command. | 71 // Allocates a resource ID, and sends the CREATE_VERTEX_BUFFER command. |
| 71 bool VertexBufferCB::ConcreteAllocate(size_t size_in_bytes) { | 72 bool VertexBufferCB::ConcreteAllocate(size_t size_in_bytes) { |
| 72 ConcreteFree(); | 73 ConcreteFree(); |
| 73 if (size_in_bytes > 0) { | 74 if (size_in_bytes > 0) { |
| 74 resource_id_ = renderer_->vertex_buffer_ids().AllocateID(); | 75 resource_id_ = renderer_->vertex_buffer_ids().AllocateID(); |
| 75 CommandBufferHelper *helper = renderer_->helper(); | 76 CommandBufferHelper *helper = renderer_->helper(); |
| 76 CommandBufferEntry args[3]; | 77 CommandBufferEntry args[3]; |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 125 lock_pointer_ = NULL; | 126 lock_pointer_ = NULL; |
| 126 has_data_ = true; | 127 has_data_ = true; |
| 127 return true; | 128 return true; |
| 128 } | 129 } |
| 129 | 130 |
| 130 IndexBufferCB::IndexBufferCB(ServiceLocator* service_locator, | 131 IndexBufferCB::IndexBufferCB(ServiceLocator* service_locator, |
| 131 RendererCB *renderer) | 132 RendererCB *renderer) |
| 132 : IndexBuffer(service_locator), | 133 : IndexBuffer(service_locator), |
| 133 lock_pointer_(NULL), | 134 lock_pointer_(NULL), |
| 134 has_data_(false), | 135 has_data_(false), |
| 135 resource_id_(0), | 136 resource_id_(command_buffer::kInvalidResource), |
| 136 renderer_(renderer) { | 137 renderer_(renderer) { |
| 137 } | 138 } |
| 138 | 139 |
| 139 | 140 |
| 140 IndexBufferCB::~IndexBufferCB() { | 141 IndexBufferCB::~IndexBufferCB() { |
| 141 ConcreteFree(); | 142 ConcreteFree(); |
| 142 } | 143 } |
| 143 | 144 |
| 144 // Sends the DESTROY_INDEX_BUFFER command, and frees the ID from the allocator. | 145 // Sends the DESTROY_INDEX_BUFFER command, and frees the ID from the allocator. |
| 145 void IndexBufferCB::ConcreteFree() { | 146 void IndexBufferCB::ConcreteFree() { |
| 146 if (GetSizeInBytes() != 0) { | 147 if (resource_id_ != command_buffer::kInvalidResource) { |
| 147 CommandBufferHelper *helper = renderer_->helper(); | 148 CommandBufferHelper *helper = renderer_->helper(); |
| 148 CommandBufferEntry args[1]; | 149 CommandBufferEntry args[1]; |
| 149 args[0].value_uint32 = resource_id_; | 150 args[0].value_uint32 = resource_id_; |
| 150 helper->AddCommand(command_buffer::DESTROY_INDEX_BUFFER, 1, args); | 151 helper->AddCommand(command_buffer::DESTROY_INDEX_BUFFER, 1, args); |
| 151 renderer_->index_buffer_ids().FreeID(resource_id_); | 152 renderer_->index_buffer_ids().FreeID(resource_id_); |
| 153 resource_id_ = command_buffer::kInvalidResource; |
| 152 } | 154 } |
| 153 } | 155 } |
| 154 | 156 |
| 155 // Allocates a resource ID, and sends the CREATE_INDEX_BUFFER command. | 157 // Allocates a resource ID, and sends the CREATE_INDEX_BUFFER command. |
| 156 bool IndexBufferCB::ConcreteAllocate(size_t size_in_bytes) { | 158 bool IndexBufferCB::ConcreteAllocate(size_t size_in_bytes) { |
| 157 ConcreteFree(); | 159 ConcreteFree(); |
| 158 if (size_in_bytes > 0) { | 160 if (size_in_bytes > 0) { |
| 159 resource_id_ = renderer_->index_buffer_ids().AllocateID(); | 161 resource_id_ = renderer_->index_buffer_ids().AllocateID(); |
| 160 CommandBufferHelper *helper = renderer_->helper(); | 162 CommandBufferHelper *helper = renderer_->helper(); |
| 161 CommandBufferEntry args[3]; | 163 CommandBufferEntry args[3]; |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 args[4].value_uint32 = renderer_->allocator()->GetOffset(lock_pointer_); | 208 args[4].value_uint32 = renderer_->allocator()->GetOffset(lock_pointer_); |
| 207 helper->AddCommand(command_buffer::SET_INDEX_BUFFER_DATA, 5, args); | 209 helper->AddCommand(command_buffer::SET_INDEX_BUFFER_DATA, 5, args); |
| 208 renderer_->allocator()->FreePendingToken(lock_pointer_, | 210 renderer_->allocator()->FreePendingToken(lock_pointer_, |
| 209 helper->InsertToken()); | 211 helper->InsertToken()); |
| 210 lock_pointer_ = NULL; | 212 lock_pointer_ = NULL; |
| 211 has_data_ = true; | 213 has_data_ = true; |
| 212 return true; | 214 return true; |
| 213 } | 215 } |
| 214 | 216 |
| 215 } // namespace o3d | 217 } // namespace o3d |
| OLD | NEW |