| 1824 | } |
| 1825 | |
| 1826 | void TSShape::write(Stream * s, bool saveOldFormat) |
| 1827 | { |
| 1828 | S32 currentVersion = smVersion; |
| 1829 | if (saveOldFormat) |
| 1830 | smVersion = 24; |
| 1831 | |
| 1832 | // write version |
| 1833 | s->write(smVersion | (mExporterVersion<<16)); |
| 1834 | |
| 1835 | tsalloc.setWrite(); |
| 1836 | disassembleShape(); |
| 1837 | |
| 1838 | S32 * buffer32 = tsalloc.getBuffer32(); |
| 1839 | S16 * buffer16 = tsalloc.getBuffer16(); |
| 1840 | S8 * buffer8 = tsalloc.getBuffer8(); |
| 1841 | |
| 1842 | S32 size32 = tsalloc.getBufferSize32(); |
| 1843 | S32 size16 = tsalloc.getBufferSize16(); |
| 1844 | S32 size8 = tsalloc.getBufferSize8(); |
| 1845 | |
| 1846 | // convert sizes to dwords... |
| 1847 | if (size16 & 1) |
| 1848 | size16 += 2; |
| 1849 | size16 >>= 1; |
| 1850 | if (size8 & 3) |
| 1851 | size8 += 4; |
| 1852 | size8 >>= 2; |
| 1853 | |
| 1854 | S32 sizeMemBuffer, start16, start8; |
| 1855 | sizeMemBuffer = size32 + size16 + size8; |
| 1856 | start16 = size32; |
| 1857 | start8 = start16+size16; |
| 1858 | |
| 1859 | // in dwords -- write will properly endian-flip. |
| 1860 | s->write(sizeMemBuffer); |
| 1861 | s->write(start16); |
| 1862 | s->write(start8); |
| 1863 | |
| 1864 | // endian-flip the entire write buffers. |
| 1865 | fixEndian(buffer32,buffer16,buffer8,size32,size16,size8); |
| 1866 | |
| 1867 | // now write buffers |
| 1868 | s->write(size32*4,buffer32); |
| 1869 | s->write(size16*4,buffer16); |
| 1870 | s->write(size8 *4,buffer8); |
| 1871 | |
| 1872 | // write sequences - write will properly endian-flip. |
| 1873 | s->write(sequences.size()); |
| 1874 | for (S32 i=0; i<sequences.size(); i++) |
| 1875 | sequences[i].write(s); |
| 1876 | |
| 1877 | // write material list - write will properly endian-flip. |
| 1878 | materialList->write(*s); |
| 1879 | |
| 1880 | delete [] buffer32; |
| 1881 | delete [] buffer16; |
| 1882 | delete [] buffer8; |
| 1883 |
no test coverage detected