Changeset 302 for trunk/src/gfx/keyframed_mesh.cc
- Timestamp:
- 08/07/14 19:06:34 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/gfx/keyframed_mesh.cc
r299 r302 15 15 using namespace nv; 16 16 17 nv::keyframed_mesh::keyframed_mesh( con st mesh_data* a_data, const mesh_nodes_data* a_tag_map )17 nv::keyframed_mesh::keyframed_mesh( context* a_context, const mesh_data* a_data, const mesh_nodes_data* a_tag_map ) 18 18 : animated_mesh() 19 , m_context( a_context ) 19 20 , m_mesh_data( a_data ) 20 21 , m_tag_map( a_tag_map ) … … 36 37 } 37 38 m_frame_count = m_vchannel->count / m_vertex_count; 39 m_pbuffer = buffer(); 38 40 } 39 41 … … 103 105 nv::keyframed_mesh::~keyframed_mesh() 104 106 { 105 delete m_va;107 m_context->get_device()->release( m_va ); 106 108 } 107 109 … … 122 124 123 125 nv::keyframed_mesh_gpu::keyframed_mesh_gpu( context* a_context, const mesh_data* a_data, const mesh_nodes_data* a_tag_map ) 124 : keyframed_mesh( a_ data, a_tag_map )126 : keyframed_mesh( a_context, a_data, a_tag_map ) 125 127 , m_loc_next_position( -1 ) 126 128 , m_loc_next_normal( -1 ) … … 129 131 , m_gpu_next_frame( 0xFFFFFFFF ) 130 132 { 131 m_va = a_context->get_device()->create_vertex_array( a_data, STATIC_DRAW ); 133 m_va = a_context->get_device()->create_vertex_array( a_data, STATIC_DRAW ); 134 m_pbuffer = a_context->get_device()->find_buffer( m_va, slot::POSITION ); 132 135 } 133 136 … … 137 140 if ( m_loc_next_position == -1 ) return; 138 141 animated_mesh::update( ms ); 139 142 device* dev = m_context->get_device(); 140 143 if ( m_gpu_last_frame != m_last_frame ) 141 144 { 142 m_va->update_vertex_buffer( slot::POSITION, m_last_frame * m_vertex_count * m_vsize ); 143 m_va->update_vertex_buffer( slot::NORMAL, m_last_frame * m_vertex_count * m_vsize + sizeof( vec3 ) ); 145 uint32 base_offset = m_last_frame * m_vertex_count * m_vsize; 146 dev->update_attribute_offset( m_va, slot::POSITION, base_offset ); 147 dev->update_attribute_offset( m_va, slot::NORMAL, base_offset + sizeof( vec3 ) ); 144 148 if ( m_has_tangent && m_loc_next_tangent != -1 ) 145 149 { 146 m_va->update_vertex_buffer( slot::TANGENT, m_last_frame * m_vertex_count * m_vsize+ 2*sizeof( vec3 ) );150 dev->update_attribute_offset( m_va, slot::TANGENT, base_offset + 2*sizeof( vec3 ) ); 147 151 } 148 152 m_gpu_last_frame = m_last_frame; … … 150 154 if ( m_loc_next_position != -1 && m_gpu_next_frame != m_next_frame ) 151 155 { 152 m_va->update_vertex_buffer( m_loc_next_position, m_next_frame * m_vertex_count * m_vsize ); 153 m_va->update_vertex_buffer( m_loc_next_normal, m_next_frame * m_vertex_count * m_vsize + sizeof( vec3 ) ); 154 m_va->update_vertex_buffer( m_loc_next_tangent, m_next_frame * m_vertex_count * m_vsize + 2*sizeof( vec3 ) ); 156 uint32 base_offset = m_next_frame * m_vertex_count * m_vsize; 157 dev->update_attribute_offset( m_va, (slot)m_loc_next_position, base_offset ); 158 dev->update_attribute_offset( m_va, (slot)m_loc_next_normal, base_offset + sizeof( vec3 ) ); 159 if ( m_has_tangent && m_loc_next_tangent != -1 ) 160 { 161 dev->update_attribute_offset( m_va, (slot)m_loc_next_tangent, base_offset + 2*sizeof( vec3 ) ); 162 } 155 163 m_gpu_next_frame = m_next_frame; 156 164 } … … 166 174 m_loc_next_tangent = a_program->get_attribute( "nv_next_tangent" )->get_location(); 167 175 168 vertex_buffer* vb = m_va->find_buffer( slot::POSITION);169 m_va->add_vertex_buffer( m_loc_next_position, vb, FLOAT, 3, 0, m_vsize, false );170 m_va->add_vertex_buffer( m_loc_next_normal, vb, FLOAT, 3, sizeof( vec3 ), m_vsize, false );176 device* dev = m_context->get_device(); 177 dev->add_vertex_buffer( m_va, (slot)m_loc_next_position, m_pbuffer, FLOAT, 3, 0, m_vsize, false ); 178 dev->add_vertex_buffer( m_va, (slot)m_loc_next_normal, m_pbuffer, FLOAT, 3, sizeof( vec3 ), m_vsize, false ); 171 179 if ( m_has_tangent ) 172 m_va->add_vertex_buffer( m_loc_next_tangent, vb, FLOAT, 4, 2*sizeof( vec3 ), m_vsize, false );180 dev->add_vertex_buffer( m_va, (slot)m_loc_next_tangent, m_pbuffer, FLOAT, 4, 2*sizeof( vec3 ), m_vsize, false ); 173 181 } 174 182 keyframed_mesh::update( a_program ); … … 176 184 177 185 nv::keyframed_mesh_cpu::keyframed_mesh_cpu( context* a_context, const mesh_data* a_data, const mesh_nodes_data* a_tag_map ) 178 : keyframed_mesh( a_ data, a_tag_map )179 , m_context( a_context ) 180 { 181 m_ va = m_context->get_device()->create_vertex_array();182 m_ vb = m_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_vertex_count * m_vsize, (void*)m_vchannel->data);183 m_va->add_vertex_buffers( m_vb, m_vchannel ); 184 185 nv::vertex_buffer* vb = m_context->get_device()->create_vertex_buffer( nv::STATIC_DRAW, m_vertex_count * sizeof( nv::vec2 ), (void*)m_mesh_data->get_channel<vertex_t>()->data);186 m_va->add_vertex_buffers( vb, m_mesh_data->get_channel<vertex_t>() ); 187 188 nv::index_buffer* ib = m_context->get_device()->create_index_buffer( nv::STATIC_DRAW, m_mesh_data->get_index_channel()->size(), (void*)m_mesh_data->get_index_channel()->data ); 189 m_ va->set_index_buffer(ib, m_mesh_data->get_index_channel()->desc.slots[0].etype, true );186 : keyframed_mesh( a_context, a_data, a_tag_map ) 187 { 188 m_va = m_context->get_device()->create_vertex_array(); 189 m_pbuffer = m_context->get_device()->create_buffer( VERTEX_BUFFER, STATIC_DRAW, m_vertex_count * m_vsize, (void*)m_vchannel->data ); 190 m_context->get_device()->add_vertex_buffers( m_va, m_pbuffer, m_vchannel ); 191 192 buffer vb = m_context->get_device()->create_buffer( VERTEX_BUFFER, STATIC_DRAW, m_vertex_count * sizeof( vec2 ), (void*)m_mesh_data->get_channel<vertex_t>()->data ); 193 m_context->get_device()->add_vertex_buffers( m_va, vb, m_mesh_data->get_channel<vertex_t>() ); 194 195 buffer ib = m_context->get_device()->create_buffer( INDEX_BUFFER, STATIC_DRAW, m_mesh_data->get_index_channel()->size(), (void*)m_mesh_data->get_index_channel()->data ); 196 197 m_context->get_device()->set_index_buffer( m_va, ib, m_mesh_data->get_index_channel()->desc.slots[0].etype, true ); 190 198 191 199 m_data = new uint8[ m_vertex_count * m_vsize ]; … … 224 232 } 225 233 226 m_context->update( m_ vb, m_data, 0, m_vertex_count * m_vsize );234 m_context->update( m_pbuffer, m_data, 0, m_vertex_count * m_vsize ); 227 235 } 228 236
Note: See TracChangeset
for help on using the changeset viewer.