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

Side by Side Diff: core/cross/command_buffer/effect_cb.cc

Issue 147237: Adding GetStreamInfo functionality (and passing corresponding unit test). (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/o3d/
Patch Set: '' Created 11 years, 5 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
OLDNEW
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 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
42 #include "command_buffer/client/cross/fenced_allocator.h" 42 #include "command_buffer/client/cross/fenced_allocator.h"
43 #include "command_buffer/client/cross/cmd_buffer_helper.h" 43 #include "command_buffer/client/cross/cmd_buffer_helper.h"
44 44
45 namespace o3d { 45 namespace o3d {
46 46
47 using command_buffer::BufferSyncInterface; 47 using command_buffer::BufferSyncInterface;
48 using command_buffer::CommandBufferEntry; 48 using command_buffer::CommandBufferEntry;
49 using command_buffer::CommandBufferHelper; 49 using command_buffer::CommandBufferHelper;
50 using command_buffer::ResourceID; 50 using command_buffer::ResourceID;
51 namespace effect_param = command_buffer::effect_param; 51 namespace effect_param = command_buffer::effect_param;
52 namespace vertex_struct = command_buffer::vertex_struct;
52 53
53 EffectCB::EffectCB(ServiceLocator *service_locator, RendererCB *renderer) 54 EffectCB::EffectCB(ServiceLocator *service_locator, RendererCB *renderer)
54 : Effect(service_locator), 55 : Effect(service_locator),
55 resource_id_(command_buffer::kInvalidResource), 56 resource_id_(command_buffer::kInvalidResource),
56 generation_(0), 57 generation_(0),
57 renderer_(renderer) { 58 renderer_(renderer) {
58 } 59 }
59 60
60 EffectCB::~EffectCB() { 61 EffectCB::~EffectCB() {
61 Destroy(); 62 Destroy();
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 return false; 119 return false;
119 } 120 }
120 for (unsigned int i = 0; i < param_descs_.size(); ++i) { 121 for (unsigned int i = 0; i < param_descs_.size(); ++i) {
121 if (!effect_helper.GetParamStrings(&(param_descs_[i]))) { 122 if (!effect_helper.GetParamStrings(&(param_descs_[i]))) {
122 O3D_ERROR(service_locator()) 123 O3D_ERROR(service_locator())
123 << "Failed to create effect parameters strings."; 124 << "Failed to create effect parameters strings.";
124 Destroy(); 125 Destroy();
125 return false; 126 return false;
126 } 127 }
127 } 128 }
129 if (!effect_helper.GetEffectStreams(resource_id, &stream_descs_)) {
130 O3D_ERROR(service_locator()) << "Failed to get streams.";
131 Destroy();
132 return false;
133 }
128 set_source(source); 134 set_source(source);
129 return true; 135 return true;
130 } 136 }
131 137
132 void EffectCB::Destroy() { 138 void EffectCB::Destroy() {
133 set_source(""); 139 set_source("");
134 ++generation_; 140 ++generation_;
135 if (resource_id_ != command_buffer::kInvalidResource) { 141 if (resource_id_ != command_buffer::kInvalidResource) {
136 CommandBufferHelper *helper = renderer_->helper(); 142 CommandBufferHelper *helper = renderer_->helper();
137 CommandBufferEntry args[1]; 143 CommandBufferEntry args[1];
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
193 sem_class = semantic_manager->LookupSemantic(desc.semantic); 199 sem_class = semantic_manager->LookupSemantic(desc.semantic);
194 } 200 }
195 array->push_back(EffectParameterInfo(desc.name, 201 array->push_back(EffectParameterInfo(desc.name,
196 param_class, 202 param_class,
197 0, 203 0,
198 desc.semantic, 204 desc.semantic,
199 sem_class)); 205 sem_class));
200 } 206 }
201 } 207 }
202 208
209
210 static bool CBSemanticToO3DSemantic(
211 vertex_struct::Semantic semantic,
212 unsigned int semantic_index,
213 Stream::Semantic *out_semantic,
214 unsigned int *out_semantic_index) {
215 switch (semantic) {
216 case vertex_struct::POSITION:
217 if (semantic_index != 0) return false;
218 *out_semantic = Stream::POSITION;
219 *out_semantic_index = 0;
220 return true;
221 case vertex_struct::NORMAL:
222 if (semantic_index != 0) return false;
223 *out_semantic = Stream::NORMAL;
224 *out_semantic_index = 0;
225 return true;
226 case vertex_struct::COLOR:
227 if (semantic_index > 1) return false;
228 *out_semantic = Stream::COLOR;
229 *out_semantic_index = semantic_index;
230 return true;
231 case vertex_struct::TEX_COORD:
232 if (semantic_index == 6) {
233 *out_semantic = Stream::TANGENT;
234 *out_semantic_index = 0;
235 return true;
236 } else if (semantic_index == 7) {
237 *out_semantic = Stream::BINORMAL;
238 *out_semantic_index = 0;
239 return true;
240 } else {
241 *out_semantic = Stream::TEXCOORD;
242 *out_semantic_index = semantic_index;
243 return true;
244 }
245 default:
246 return false;
247 }
248 }
203 void EffectCB::GetStreamInfo(EffectStreamInfoArray *array) { 249 void EffectCB::GetStreamInfo(EffectStreamInfoArray *array) {
204 // TODO(rlp) 250 DCHECK(array);
251 array->clear();
252 for (unsigned int i = 0; i < stream_descs_.size(); ++i) {
253 Stream::Semantic semantic;
254 unsigned int semantic_index;
255 if (CBSemanticToO3DSemantic(stream_descs_[i].semantic,
256 stream_descs_[i].semantic_index,
257 &semantic,
258 &semantic_index)) {
259 array->push_back(EffectStreamInfo(semantic, semantic_index));
260 }
261 }
205 } 262 }
206 263
207 } // namespace o3d 264 } // namespace o3d
OLDNEW
« command_buffer/service/win/d3d9/effect_d3d9.cc ('K') | « core/cross/command_buffer/effect_cb.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698