| 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 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 140 | 140 |
| 141 // Creates the vertex struct resource on the service side. It will only set the | 141 // Creates the vertex struct resource on the service side. It will only set the |
| 142 // vertex inputs if they represent semantics and types we know about. The | 142 // vertex inputs if they represent semantics and types we know about. The |
| 143 // command buffer API will not draw with an incomplete vertex struct. | 143 // command buffer API will not draw with an incomplete vertex struct. |
| 144 // This function will get called on Draw, after any change to the vertex inputs | 144 // This function will get called on Draw, after any change to the vertex inputs |
| 145 // has occurred. | 145 // has occurred. |
| 146 void StreamBankCB::CreateVertexStruct() { | 146 void StreamBankCB::CreateVertexStruct() { |
| 147 DCHECK_EQ(kInvalidResource, vertex_struct_id_); | 147 DCHECK_EQ(kInvalidResource, vertex_struct_id_); |
| 148 vertex_struct_id_ = renderer_->vertex_structs_ids().AllocateID(); | 148 vertex_struct_id_ = renderer_->vertex_structs_ids().AllocateID(); |
| 149 CommandBufferHelper *helper = renderer_->helper(); | 149 CommandBufferHelper *helper = renderer_->helper(); |
| 150 CommandBufferEntry args[5]; | 150 helper->CreateVertexStruct(vertex_struct_id_, vertex_stream_params_.size()); |
| 151 args[0].value_uint32 = vertex_struct_id_; | |
| 152 args[1].value_uint32 = vertex_stream_params_.size(); | |
| 153 helper->AddCommand(command_buffer::CREATE_VERTEX_STRUCT, 2, args); | |
| 154 for (unsigned int i = 0; i < vertex_stream_params_.size(); ++i) { | 151 for (unsigned int i = 0; i < vertex_stream_params_.size(); ++i) { |
| 155 const Stream &stream = vertex_stream_params_[i]->stream(); | 152 const Stream &stream = vertex_stream_params_[i]->stream(); |
| 156 vertex_struct::Semantic cb_semantic; | 153 vertex_struct::Semantic cb_semantic; |
| 157 unsigned int cb_semantic_index; | 154 unsigned int cb_semantic_index; |
| 158 if (!GetCBSemantic(stream.semantic(), stream.semantic_index(), &cb_semantic, | 155 if (!GetCBSemantic(stream.semantic(), stream.semantic_index(), &cb_semantic, |
| 159 &cb_semantic_index)) { | 156 &cb_semantic_index)) { |
| 160 DLOG(INFO) << "Unknown semantic (" << stream.semantic() << ", " | 157 DLOG(INFO) << "Unknown semantic (" << stream.semantic() << ", " |
| 161 << stream.semantic_index() << ") - ignoring stream."; | 158 << stream.semantic_index() << ") - ignoring stream."; |
| 162 continue; | 159 continue; |
| 163 } | 160 } |
| 164 vertex_struct::Type cb_type = GetCBType(stream.field()); | 161 vertex_struct::Type cb_type = GetCBType(stream.field()); |
| 165 if (cb_type == vertex_struct::NUM_TYPES) { | 162 if (cb_type == vertex_struct::NUM_TYPES) { |
| 166 DLOG(INFO) << "Invalid type (" << stream.field().num_components() | 163 DLOG(INFO) << "Invalid type (" << stream.field().num_components() |
| 167 << ") - ignoring stream."; | 164 << ") - ignoring stream."; |
| 168 continue; | 165 continue; |
| 169 } | 166 } |
| 170 | 167 |
| 171 namespace cmd = command_buffer::set_vertex_input_cmd; | |
| 172 VertexBufferCB *vertex_buffer = | 168 VertexBufferCB *vertex_buffer = |
| 173 static_cast<VertexBufferCB *>(stream.field().buffer()); | 169 static_cast<VertexBufferCB *>(stream.field().buffer()); |
| 174 args[0].value_uint32 = vertex_struct_id_; | 170 helper->SetVertexInput( |
| 175 args[1].value_uint32 = i; | 171 vertex_struct_id_, i, |
| 176 args[2].value_uint32 = vertex_buffer->resource_id(); | 172 vertex_buffer->resource_id(), |
| 177 args[3].value_uint32 = stream.field().offset(); | 173 stream.field().offset(), |
| 178 args[4].value_uint32 = | 174 cb_semantic, |
| 179 cmd::SemanticIndex::MakeValue(cb_semantic_index) | | 175 cb_semantic_index, |
| 180 cmd::Semantic::MakeValue(cb_semantic) | | 176 cb_type, |
| 181 cmd::Type::MakeValue(cb_type) | | 177 vertex_buffer->stride()); |
| 182 cmd::Stride::MakeValue(vertex_buffer->stride()); | |
| 183 helper->AddCommand(command_buffer::SET_VERTEX_INPUT, 5, args); | |
| 184 } | 178 } |
| 185 } | 179 } |
| 186 | 180 |
| 187 // Destroys the vertex struct resource on the service side. | 181 // Destroys the vertex struct resource on the service side. |
| 188 void StreamBankCB::DestroyVertexStruct() { | 182 void StreamBankCB::DestroyVertexStruct() { |
| 189 if (vertex_struct_id_ != kInvalidResource) { | 183 if (vertex_struct_id_ != kInvalidResource) { |
| 190 CommandBufferHelper *helper = renderer_->helper(); | 184 CommandBufferHelper *helper = renderer_->helper(); |
| 191 CommandBufferEntry args[1]; | 185 helper->DestroyVertexStruct(vertex_struct_id_); |
| 192 args[0].value_uint32 = vertex_struct_id_; | |
| 193 helper->AddCommand(command_buffer::DESTROY_VERTEX_STRUCT, 1, args); | |
| 194 renderer_->vertex_structs_ids().FreeID(vertex_struct_id_); | 186 renderer_->vertex_structs_ids().FreeID(vertex_struct_id_); |
| 195 vertex_struct_id_ = kInvalidResource; | 187 vertex_struct_id_ = kInvalidResource; |
| 196 } | 188 } |
| 197 } | 189 } |
| 198 | 190 |
| 199 void StreamBankCB::BindStreamsForRendering() { | 191 void StreamBankCB::BindStreamsForRendering() { |
| 200 if (vertex_struct_id_ == kInvalidResource) | 192 if (vertex_struct_id_ == kInvalidResource) |
| 201 CreateVertexStruct(); | 193 CreateVertexStruct(); |
| 202 CommandBufferHelper *helper = renderer_->helper(); | 194 CommandBufferHelper *helper = renderer_->helper(); |
| 203 CommandBufferEntry args[6]; | 195 helper->SetVertexStruct(vertex_struct_id_); |
| 204 // Sets current vertex struct. | |
| 205 args[0].value_uint32 = vertex_struct_id_; | |
| 206 helper->AddCommand(command_buffer::SET_VERTEX_STRUCT, 1, args); | |
| 207 } | 196 } |
| 208 | 197 |
| 209 } // namespace o3d | 198 } // namespace o3d |
| OLD | NEW |