| 1864 | } |
| 1865 | |
| 1866 | void TSShape::write(Stream * s, bool saveOldFormat) |
| 1867 | { |
| 1868 | S32 currentVersion = smVersion; |
| 1869 | if (saveOldFormat) |
| 1870 | smVersion = 24; |
| 1871 | |
| 1872 | // write version |
| 1873 | s->write(smVersion | (mExporterVersion<<16)); |
| 1874 | |
| 1875 | tsalloc.setWrite(); |
| 1876 | disassembleShape(); |
| 1877 | |
| 1878 | S32 * buffer32 = tsalloc.getBuffer32(); |
| 1879 | S16 * buffer16 = tsalloc.getBuffer16(); |
| 1880 | S8 * buffer8 = tsalloc.getBuffer8(); |
| 1881 | |
| 1882 | S32 size32 = tsalloc.getBufferSize32(); |
| 1883 | S32 size16 = tsalloc.getBufferSize16(); |
| 1884 | S32 size8 = tsalloc.getBufferSize8(); |
| 1885 | |
| 1886 | // convert sizes to dwords... |
| 1887 | if (size16 & 1) |
| 1888 | size16 += 2; |
| 1889 | size16 >>= 1; |
| 1890 | if (size8 & 3) |
| 1891 | size8 += 4; |
| 1892 | size8 >>= 2; |
| 1893 | |
| 1894 | S32 sizeMemBuffer, start16, start8; |
| 1895 | sizeMemBuffer = size32 + size16 + size8; |
| 1896 | start16 = size32; |
| 1897 | start8 = start16+size16; |
| 1898 | |
| 1899 | // in dwords -- write will properly endian-flip. |
| 1900 | s->write(sizeMemBuffer); |
| 1901 | s->write(start16); |
| 1902 | s->write(start8); |
| 1903 | |
| 1904 | // endian-flip the entire write buffers. |
| 1905 | fixEndian(buffer32,buffer16,buffer8,size32,size16,size8); |
| 1906 | |
| 1907 | // now write buffers |
| 1908 | s->write(size32*4,buffer32); |
| 1909 | s->write(size16*4,buffer16); |
| 1910 | s->write(size8 *4,buffer8); |
| 1911 | |
| 1912 | // write sequences - write will properly endian-flip. |
| 1913 | s->write(sequences.size()); |
| 1914 | for (S32 i=0; i<sequences.size(); i++) |
| 1915 | sequences[i].write(s); |
| 1916 | |
| 1917 | // write material list - write will properly endian-flip. |
| 1918 | materialList->write(*s); |
| 1919 | |
| 1920 | delete [] buffer32; |
| 1921 | delete [] buffer16; |
| 1922 | delete [] buffer8; |
| 1923 |
no test coverage detected