- Timestamp:
- 07/26/14 04:25:23 (11 years ago)
- Location:
- trunk/src
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/formats/assimp_loader.cc
r291 r292 63 63 bool nv::assimp_loader::load( stream& source ) 64 64 { 65 load_assimp_library(); 65 66 if ( m_scene != nullptr ) aiReleaseImport( (const aiScene*)m_scene ); 66 67 m_scene = nullptr; 67 68 m_mesh_count = 0; 68 load_assimp_library();69 69 NV_LOG( nv::LOG_NOTICE, "AssImp loading file..." ); 70 70 int size = (int)source.size(); -
trunk/src/formats/nmd_loader.cc
r291 r292 157 157 } 158 158 159 // ---------------------------------------------------------------- 160 // nmd format dump 161 // HACK : TEMPORARY - will go to it's own file, probably nmd_io 162 static void nmd_dump_mesh( const mesh_data* mesh, stream& stream_out ) 163 { 164 const std::vector< mesh_raw_channel* >& data = mesh->get_raw_channels(); 165 166 uint32 size = sizeof( nmd_element_header ); 167 for ( auto chan : data ) 168 { 169 size += sizeof( nmd_element_header ) + sizeof( nmd_stream_header ); 170 size += chan->size(); 171 } 172 173 nmd_element_header eheader; 174 eheader.type = nmd_type::MESH; 175 eheader.name = 0; 176 eheader.children = (uint16)data.size(); 177 eheader.size = size; 178 stream_out.write( &eheader, sizeof( eheader ), 1 ); 179 180 for ( auto chan : data ) 181 { 182 nmd_element_header cheader; 183 eheader.name = 0; 184 cheader.type = nmd_type::STREAM; 185 cheader.children = 0; 186 cheader.size = chan->size() + sizeof( nmd_stream_header ); 187 stream_out.write( &cheader, sizeof( cheader ), 1 ); 188 189 nmd_stream_header sheader; 190 sheader.format = chan->desc; 191 sheader.count = chan->count; 192 stream_out.write( &sheader, sizeof( sheader ), 1 ); 193 stream_out.write( chan->data, chan->desc.size, chan->count ); 194 } 195 } 196 197 static void nmd_dump_nodes_data( const mesh_nodes_data* nodes, stream& stream_out, string_table_creator* strings ) 198 { 199 uint32 total = sizeof( nmd_animation_header ); 200 for ( uint32 i = 0; i < nodes->get_count(); ++i ) 201 { 202 const mesh_node_data* node = nodes->get_node(i); 203 total += sizeof( nmd_element_header ) + sizeof( nmd_node_header ); 204 if ( node->data ) 205 for ( uint32 c = 0; c < node->data->get_channel_count(); ++c ) 206 { 207 total += sizeof( nmd_element_header ) + sizeof( nmd_key_channel_header ); 208 total += node->data->get_channel(c)->size(); 209 } 210 } 211 212 nmd_element_header header; 213 header.name = 0; 214 header.type = nmd_type::ANIMATION; 215 header.children = (uint16)nodes->get_count(); 216 header.size = total; 217 stream_out.write( &header, sizeof( header ), 1 ); 218 219 nmd_animation_header aheader; 220 aheader.frame_rate = nodes->get_frame_rate(); 221 aheader.duration = nodes->get_duration(); 222 aheader.flat = nodes->is_flat(); 223 stream_out.write( &aheader, sizeof( aheader ), 1 ); 224 225 for ( uint32 i = 0; i < nodes->get_count(); ++i ) 226 { 227 const mesh_node_data* node = nodes->get_node(i); 228 uint32 chan_size = 0; 229 uint32 chan_count = ( node->data ? node->data->get_channel_count() : 0 ); 230 for ( uint32 c = 0; c < chan_count; ++c ) 231 { 232 chan_size += sizeof( nmd_element_header ) + sizeof( nv::nmd_key_channel_header ); 233 chan_size += node->data->get_channel(c)->size(); 234 } 235 236 nmd_element_header eheader; 237 eheader.type = nmd_type::NODE; 238 eheader.name = strings->insert( node->name ); 239 eheader.children = (uint16)chan_count; 240 eheader.size = sizeof( nmd_node_header ) + chan_size; 241 stream_out.write( &eheader, sizeof( eheader ), 1 ); 242 243 nmd_node_header nheader; 244 nheader.parent_id = (uint16)node->parent_id; 245 nheader.transform = node->transform; 246 stream_out.write( &nheader, sizeof( nheader ), 1 ); 247 248 for ( uint32 c = 0; c < chan_count; ++c ) 249 { 250 const key_raw_channel* channel = node->data->get_channel(c); 251 252 eheader.type = nmd_type::KEY_CHANNEL; 253 eheader.children = 0; 254 eheader.size = sizeof( nmd_key_channel_header ) + channel->size(); 255 stream_out.write( &eheader, sizeof( eheader ), 1 ); 256 257 nmd_key_channel_header cheader; 258 cheader.format = channel->desc; 259 cheader.count = channel->count; 260 stream_out.write( &cheader, sizeof( cheader ), 1 ); 261 stream_out.write( channel->data, channel->desc.size, channel->count ); 262 } 263 } 264 } 265 266 void nv::nmd_dump( const mesh_data_pack* model, stream& stream_out ) 267 { 268 string_table_creator strings; 269 { 270 nmd_header header; 271 header.id = four_cc<'n','m','f','1'>::value; 272 header.elements = 1; // +1 string array 273 header.elements += model->get_count(); 274 if ( model->get_nodes() && model->get_nodes()->get_count() > 0 ) 275 header.elements += 1;// +1 bone array 276 header.version = 1; 277 stream_out.write( &header, sizeof( header ), 1 ); 278 } 279 280 for ( uint32 i = 0; i < model->get_count(); ++i ) 281 { 282 const mesh_data* mesh = model->get_mesh(i); 283 nmd_dump_mesh( mesh, stream_out ); 284 } 285 286 if ( model->get_nodes() && model->get_nodes()->get_count() > 0 ) 287 { 288 nmd_dump_nodes_data( model->get_nodes(), stream_out, &strings ); 289 } 290 291 nmd_element_header sheader; 292 sheader.type = nv::nmd_type::STRING_TABLE; 293 sheader.name = 0; 294 sheader.size = strings.dump_size(); 295 sheader.children = 0; 296 stream_out.write( &sheader, sizeof( sheader ), 1 ); 297 strings.dump( &stream_out ); 298 } -
trunk/src/gl/gl_device.cc
r245 r292 81 81 return nullptr; 82 82 } 83 image_data* data = new image_data( glm::ivec2( image->w, image->h ), image->format->BytesPerPixel, (nv::uint8*)image->pixels ); 83 // TODO: BGR vs RGB, single channel 84 assert( image->format->BytesPerPixel > 2 ); 85 image_format format(image->format->BytesPerPixel == 3 ? RGB : RGBA, UBYTE ); 86 image_data* data = new image_data( format, glm::ivec2( image->w, image->h ), (nv::uint8*)image->pixels ); 84 87 return data; 85 88 } 86 89 87 texture2d* gl_device::create_texture2d( ivec2 size, image_format aformat, datatype adatatype, sampler asampler, void* data /*= nullptr */ )90 texture2d* gl_device::create_texture2d( ivec2 size, pixel_format aformat, datatype adatatype, sampler asampler, void* data /*= nullptr */ ) 88 91 { 89 92 return new gl_texture2d( size, aformat, adatatype, asampler, data ); -
trunk/src/gl/gl_enum.cc
r237 r292 147 147 } 148 148 149 unsigned int nv::image_format_to_enum( image_format format )149 unsigned int nv::image_format_to_enum( pixel_format format ) 150 150 { 151 151 switch( format ) -
trunk/src/gl/gl_texture2d.cc
r204 r292 10 10 using namespace nv; 11 11 12 nv::gl_texture2d::gl_texture2d( ivec2 size, image_format aformat, datatype adatatype, sampler asampler, void* data /*= nullptr */ )12 nv::gl_texture2d::gl_texture2d( ivec2 size, pixel_format aformat, datatype adatatype, sampler asampler, void* data /*= nullptr */ ) 13 13 : texture2d( size, aformat, adatatype, asampler ), m_name() 14 14 { … … 38 38 { 39 39 glBindTexture( GL_TEXTURE_2D, m_name.get_value() ); 40 glTexImage2D( GL_TEXTURE_2D, 0, (GLint)nv::image_format_to_enum(m_format ), m_size.x, m_size.y, 0, nv::image_format_to_enum(m_format), nv::datatype_to_gl_enum(m_datatype), data );40 glTexImage2D( GL_TEXTURE_2D, 0, (GLint)nv::image_format_to_enum(m_format.format), m_size.x, m_size.y, 0, nv::image_format_to_enum(m_format.format), nv::datatype_to_gl_enum(m_format.type), data ); 41 41 glBindTexture( GL_TEXTURE_2D, 0 ); 42 42 }
Note: See TracChangeset
for help on using the changeset viewer.