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 29 matching lines...) Expand all Loading... | |
40 #include "core/cross/buffer.h" | 40 #include "core/cross/buffer.h" |
41 #include "core/cross/curve.h" | 41 #include "core/cross/curve.h" |
42 #include "core/cross/iclass_manager.h" | 42 #include "core/cross/iclass_manager.h" |
43 #include "core/cross/pack.h" | 43 #include "core/cross/pack.h" |
44 #include "core/cross/param_array.h" | 44 #include "core/cross/param_array.h" |
45 #include "core/cross/primitive.h" | 45 #include "core/cross/primitive.h" |
46 #include "core/cross/shape.h" | 46 #include "core/cross/shape.h" |
47 #include "core/cross/skin.h" | 47 #include "core/cross/skin.h" |
48 #include "core/cross/texture.h" | 48 #include "core/cross/texture.h" |
49 #include "core/cross/transform.h" | 49 #include "core/cross/transform.h" |
50 #include "import/cross/destination_buffer.h" | |
50 #include "import/cross/iarchive_generator.h" | 51 #include "import/cross/iarchive_generator.h" |
51 #include "import/cross/memory_buffer.h" | 52 #include "import/cross/memory_buffer.h" |
52 #include "import/cross/memory_stream.h" | 53 #include "import/cross/memory_stream.h" |
53 #include "serializer/cross/version.h" | 54 #include "serializer/cross/version.h" |
54 #include "utils/cross/structured_writer.h" | 55 #include "utils/cross/structured_writer.h" |
55 | 56 |
56 using std::string; | 57 using std::string; |
57 | 58 |
58 namespace o3d { | 59 namespace o3d { |
59 | 60 |
(...skipping 278 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
338 | 339 |
339 StructuredWriter* writer_; | 340 StructuredWriter* writer_; |
340 }; | 341 }; |
341 | 342 |
342 class CustomVisitor : public VisitorBase<CustomVisitor> { | 343 class CustomVisitor : public VisitorBase<CustomVisitor> { |
343 public: | 344 public: |
344 explicit CustomVisitor(StructuredWriter* writer, | 345 explicit CustomVisitor(StructuredWriter* writer, |
345 BinaryArchiveManager* binary_archive_manager) | 346 BinaryArchiveManager* binary_archive_manager) |
346 : writer_(writer), | 347 : writer_(writer), |
347 binary_archive_manager_(binary_archive_manager) { | 348 binary_archive_manager_(binary_archive_manager) { |
349 Enable<DestinationBuffer>(&CustomVisitor::Visit); | |
348 Enable<Buffer>(&CustomVisitor::Visit); | 350 Enable<Buffer>(&CustomVisitor::Visit); |
349 Enable<Curve>(&CustomVisitor::Visit); | 351 Enable<Curve>(&CustomVisitor::Visit); |
350 Enable<Primitive>(&CustomVisitor::Visit); | 352 Enable<Primitive>(&CustomVisitor::Visit); |
351 Enable<Skin>(&CustomVisitor::Visit); | 353 Enable<Skin>(&CustomVisitor::Visit); |
352 Enable<SkinEval>(&CustomVisitor::Visit); | 354 Enable<SkinEval>(&CustomVisitor::Visit); |
353 Enable<StreamBank>(&CustomVisitor::Visit); | 355 Enable<StreamBank>(&CustomVisitor::Visit); |
354 Enable<Texture2D>(&CustomVisitor::Visit); | 356 Enable<Texture2D>(&CustomVisitor::Visit); |
355 Enable<TextureCUBE>(&CustomVisitor::Visit); | 357 Enable<TextureCUBE>(&CustomVisitor::Visit); |
356 } | 358 } |
357 | 359 |
358 private: | 360 private: |
361 void Visit(DestinationBuffer* buffer) { | |
362 Visit(static_cast<NamedObject*>(buffer)); | |
apatrick
2009/07/07 00:58:25
Comment why its not the base class.
| |
363 writer_->WritePropertyName("numElements"); | |
364 Serialize(writer_, buffer->num_elements()); | |
365 writer_->WritePropertyName("fields"); | |
366 writer_->OpenArray(); | |
367 const FieldRefArray& fields = buffer->fields(); | |
368 for (size_t ii = 0; ii < fields.size(); ++ii) { | |
369 Field* field = fields[ii].Get(); | |
370 writer_->BeginCompacting(); | |
371 writer_->OpenObject(); | |
372 writer_->WritePropertyName("id"); | |
373 Serialize(writer_, field->id()); | |
374 writer_->WritePropertyName("type"); | |
375 Serialize(writer_, field->GetClassName()); | |
376 writer_->WritePropertyName("numComponents"); | |
377 Serialize(writer_, field->num_components()); | |
378 writer_->CloseObject(); | |
379 writer_->EndCompacting(); | |
380 } | |
381 writer_->CloseArray(); | |
382 } | |
383 | |
359 void Visit(Buffer* buffer) { | 384 void Visit(Buffer* buffer) { |
360 Visit(static_cast<NamedObject*>(buffer)); | 385 Visit(static_cast<NamedObject*>(buffer)); |
361 | 386 |
362 writer_->WritePropertyName("fields"); | 387 writer_->WritePropertyName("fields"); |
363 writer_->OpenArray(); | 388 writer_->OpenArray(); |
364 const FieldRefArray& fields = buffer->fields(); | 389 const FieldRefArray& fields = buffer->fields(); |
365 for (size_t ii = 0; ii < fields.size(); ++ii) { | 390 for (size_t ii = 0; ii < fields.size(); ++ii) { |
366 Field* field = fields[ii].Get(); | 391 Field* field = fields[ii].Get(); |
367 Serialize(writer_, field->id()); | 392 Serialize(writer_, field->id()); |
368 } | 393 } |
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
578 | 603 |
579 StructuredWriter* writer_; | 604 StructuredWriter* writer_; |
580 }; | 605 }; |
581 | 606 |
582 class BinaryVisitor : public VisitorBase<BinaryVisitor> { | 607 class BinaryVisitor : public VisitorBase<BinaryVisitor> { |
583 public: | 608 public: |
584 explicit BinaryVisitor(BinaryArchiveManager* binary_archive_manager) | 609 explicit BinaryVisitor(BinaryArchiveManager* binary_archive_manager) |
585 : binary_archive_manager_(binary_archive_manager) { | 610 : binary_archive_manager_(binary_archive_manager) { |
586 Enable<Curve>(&BinaryVisitor::Visit); | 611 Enable<Curve>(&BinaryVisitor::Visit); |
587 Enable<IndexBuffer>(&BinaryVisitor::Visit); | 612 Enable<IndexBuffer>(&BinaryVisitor::Visit); |
613 Enable<DestinationBuffer>(&BinaryVisitor::Visit); | |
588 Enable<VertexBufferBase>(&BinaryVisitor::Visit); | 614 Enable<VertexBufferBase>(&BinaryVisitor::Visit); |
589 Enable<Skin>(&BinaryVisitor::Visit); | 615 Enable<Skin>(&BinaryVisitor::Visit); |
590 } | 616 } |
591 | 617 |
592 private: | 618 private: |
593 void Visit(ObjectBase* object) { | 619 void Visit(ObjectBase* object) { |
594 } | 620 } |
595 | 621 |
596 // TODO: Replace this when we have code to serialize to the | 622 // TODO: Replace this when we have code to serialize to the |
597 // final binary format. This is just placeholder. | 623 // final binary format. This is just placeholder. |
598 void Visit(Curve* curve) { | 624 void Visit(Curve* curve) { |
599 Visit(static_cast<NamedObject*>(curve)); | 625 Visit(static_cast<NamedObject*>(curve)); |
600 | 626 |
601 MemoryBuffer<uint8> serialized_data; | 627 MemoryBuffer<uint8> serialized_data; |
602 SerializeCurve(*curve, &serialized_data); | 628 SerializeCurve(*curve, &serialized_data); |
603 | 629 |
604 binary_archive_manager_->WriteObjectBinary( | 630 binary_archive_manager_->WriteObjectBinary( |
605 curve, | 631 curve, |
606 "curve-keys.bin", | 632 "curve-keys.bin", |
607 serialized_data, | 633 serialized_data, |
608 serialized_data.GetLength()); | 634 serialized_data.GetLength()); |
609 } | 635 } |
610 | 636 |
637 void Visit(DestinationBuffer* buffer) { | |
638 // Destination buffers should NOT have their contents serialized. | |
639 Visit(static_cast<Buffer*>(buffer)); | |
640 } | |
641 | |
611 void Visit(IndexBuffer* buffer) { | 642 void Visit(IndexBuffer* buffer) { |
612 Visit(static_cast<Buffer*>(buffer)); | 643 Visit(static_cast<Buffer*>(buffer)); |
613 | 644 |
614 MemoryBuffer<uint8> serialized_data; | 645 MemoryBuffer<uint8> serialized_data; |
615 SerializeBuffer(*buffer, &serialized_data); | 646 SerializeBuffer(*buffer, &serialized_data); |
616 | 647 |
617 binary_archive_manager_->WriteObjectBinary( | 648 binary_archive_manager_->WriteObjectBinary( |
618 buffer, | 649 buffer, |
619 "index-buffers.bin", | 650 "index-buffers.bin", |
620 serialized_data, | 651 serialized_data, |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
778 | 809 |
779 void Serializer::SerializeSection(ObjectBase* object, Section section) { | 810 void Serializer::SerializeSection(ObjectBase* object, Section section) { |
780 DCHECK(section >= 0 && section < NUM_SECTIONS); | 811 DCHECK(section >= 0 && section < NUM_SECTIONS); |
781 sections_[section].visitor_->Accept(object); | 812 sections_[section].visitor_->Accept(object); |
782 } | 813 } |
783 | 814 |
784 void Serializer::SerializeParam(Param* param) { | 815 void Serializer::SerializeParam(Param* param) { |
785 param_visitor_->Accept(param); | 816 param_visitor_->Accept(param); |
786 } | 817 } |
787 } // namespace o3d | 818 } // namespace o3d |
OLD | NEW |