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 |