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 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
105 stream_bank_cb, | 105 stream_bank_cb, |
106 material, | 106 material, |
107 override)) { | 107 override)) { |
108 // TODO: should we do this here, or on the service side ? | 108 // TODO: should we do this here, or on the service side ? |
109 // InsertMissingVertexStreams(); | 109 // InsertMissingVertexStreams(); |
110 } | 110 } |
111 | 111 |
112 IndexBufferCB *index_buffer_cb = | 112 IndexBufferCB *index_buffer_cb = |
113 down_cast<IndexBufferCB *>(index_buffer()); | 113 down_cast<IndexBufferCB *>(index_buffer()); |
114 if (!index_buffer_cb) { | 114 if (!index_buffer_cb) { |
115 // TODO: draw non-index in this case ? we don't do it currently on | 115 // TODO(gman): draw non-indexed primitives. |
116 // other platforms, so keep compatibility. | |
117 DLOG(INFO) << "Trying to draw with an empty index buffer."; | 116 DLOG(INFO) << "Trying to draw with an empty index buffer."; |
118 return; | 117 return; |
119 } | 118 } |
120 GAPIInterface::PrimitiveType cb_primitive_type = | 119 GAPIInterface::PrimitiveType cb_primitive_type = |
121 GetCBPrimitiveType(primitive_type_); | 120 GetCBPrimitiveType(primitive_type_); |
122 if (cb_primitive_type == GAPIInterface::MAX_PRIMITIVE_TYPE) { | 121 if (cb_primitive_type == GAPIInterface::MAX_PRIMITIVE_TYPE) { |
123 DLOG(INFO) << "Invalid primitive type (" << primitive_type_ << ")."; | 122 DLOG(INFO) << "Invalid primitive type (" << primitive_type_ << ")."; |
124 return; | 123 return; |
125 } | 124 } |
126 | 125 |
127 // Make sure our streams are up to date (skinned, etc..) | 126 // Make sure our streams are up to date (skinned, etc..) |
128 stream_bank_cb->UpdateStreams(); | 127 stream_bank_cb->UpdateStreams(); |
129 | 128 |
130 stream_bank_cb->BindStreamsForRendering(); | 129 stream_bank_cb->BindStreamsForRendering(); |
131 | 130 |
132 CommandBufferHelper *helper = renderer_->helper(); | 131 CommandBufferHelper *helper = renderer_->helper(); |
133 CommandBufferEntry args[6]; | |
134 | 132 |
135 // Sets current effect. | 133 // Sets current effect. |
136 // TODO: cache current effect ? | 134 // TODO: cache current effect ? |
137 args[0].value_uint32 = effect_cb->resource_id(); | 135 helper->SetEffect(effect_cb->resource_id()); |
138 helper->AddCommand(command_buffer::SET_EFFECT, 1, args); | |
139 param_cache_cb->RunHandlers(helper); | 136 param_cache_cb->RunHandlers(helper); |
140 | 137 |
141 | |
142 // Draws. | 138 // Draws. |
143 args[0].value_uint32 = cb_primitive_type; | 139 helper->DrawIndexed(cb_primitive_type, index_buffer_cb->resource_id(), |
144 args[1].value_uint32 = index_buffer_cb->resource_id(); | 140 0, number_primitives_, 0, number_vertices_ - 1); |
145 args[2].value_uint32 = 0; // first index. | |
146 args[3].value_uint32 = number_primitives_; // primitive count. | |
147 args[4].value_uint32 = 0; // min index. | |
148 args[5].value_uint32 = number_vertices_ - 1; // max index. | |
149 helper->AddCommand(command_buffer::DRAW_INDEXED, 6, args); | |
150 } | 141 } |
151 | 142 |
152 } // namespace o3d | 143 } // namespace o3d |
OLD | NEW |