root/OpenSceneGraph/trunk/src/osgPlugins/dae/domSourceReader.cpp @ 13041

Revision 13041, 5.2 kB (checked in by robert, 3 years ago)

Ran script to remove trailing spaces and tabs

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1/*
2 * Copyright 2006 Sony Computer Entertainment Inc.
3 *
4 * Licensed under the SCEA Shared Source License, Version 1.0 (the "License"); you may not use this
5 * file except in compliance with the License. You may obtain a copy of the License at:
6 * http://research.scea.com/scea_shared_source_license.html
7 *
8 * Unless required by applicable law or agreed to in writing, software distributed under the License
9 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
10 * implied. See the License for the specific language governing permissions and limitations under the
11 * License.
12 */
13
14#include "domSourceReader.h"
15
16#include <dom/domSource.h>
17
18using namespace osgDAE;
19
20domSourceReader::domSourceReader() : m_array_type( None ), m_count( 0 ), srcInit( NULL )//, initialized( false )
21{}
22
23domSourceReader::domSourceReader( domSource *src ) : m_array_type( None ), m_count( 0 ), srcInit( src )//, initialized( false )
24{
25}
26
27void domSourceReader::convert(bool doublePrecision)
28{
29    domSource * src = srcInit;
30    srcInit = NULL;
31    domSource::domTechnique_common* technique = src->getTechnique_common();
32    if ( technique == NULL )
33    {
34        OSG_WARN<<"Warning: IntDaeSource::createFrom: Unable to find COMMON technique"<<std::endl;
35        return;
36    }
37
38    domAccessor* accessor = technique->getAccessor();
39    int stride = accessor->getStride();
40    m_count = accessor->getCount();
41
42    // Only handle floats or name array for now...
43    daeDoubleArray* float_array = NULL;
44    if (src->getFloat_array())
45    {
46        float_array = &(src->getFloat_array()->getValue());
47    }
48    else if (src->getName_array())
49    {
50        m_array_type = String;
51        return;
52    }
53
54    switch (stride)
55    {
56        case 1:
57            m_array_type = Float;
58            m_float_array = new osg::FloatArray();
59            break;
60        case 2:
61            if (!doublePrecision)
62            {
63                m_array_type = Vec2;
64                m_vec2_array = new osg::Vec2Array();
65            }
66            else
67            {
68                m_array_type = Vec2d;
69                m_vec2d_array = new osg::Vec2dArray();
70            }
71            break;
72        case 3:
73            if (!doublePrecision)
74            {
75                m_array_type = Vec3;
76                m_vec3_array = new osg::Vec3Array();
77            }
78            else
79            {
80                m_array_type = Vec3d;
81                m_vec3d_array = new osg::Vec3dArray();
82            }
83            break;
84        case 4:
85            if (!doublePrecision)
86            {
87                m_array_type = Vec4;
88                m_vec4_array = new osg::Vec4Array();
89            }
90            else
91            {
92                m_array_type = Vec4d;
93                m_vec4d_array = new osg::Vec4dArray();
94            }
95            break;
96        case 16:
97            m_array_type = Matrix;
98            m_matrix_array = new osg::MatrixfArray();
99            break;
100        default:
101            OSG_WARN<<"Unsupported stride: "<<stride<<std::endl;
102            return;
103    }
104
105    if (float_array)
106    {
107        daeDoubleArray& va = *float_array;
108        switch (m_array_type)
109        {
110        case Float:
111            for ( size_t i = 0; i < accessor->getCount(); i++ ) {
112                m_float_array->push_back(va[i]);
113            }
114            break;
115        case Vec2:
116            for ( size_t i = 0; i < accessor->getCount(); i++ ) {
117                m_vec2_array->push_back( osg::Vec2( va[i*2], va[i*2+1]));
118            }
119            break;
120        case Vec2d:
121            for ( size_t i = 0; i < accessor->getCount(); i++ ) {
122                m_vec2d_array->push_back( osg::Vec2d( va[i*2], va[i*2+1]));
123            }
124            break;
125        case Vec3:
126            for ( size_t i = 0; i < accessor->getCount(); i++ ) {
127                m_vec3_array->push_back( osg::Vec3( va[i*3], va[i*3+1], va[i*3+2]));
128            }
129            break;
130        case Vec3d:
131            for ( size_t i = 0; i < accessor->getCount(); i++ ) {
132                m_vec3d_array->push_back( osg::Vec3d( va[i*3], va[i*3+1], va[i*3+2]));
133            }
134            break;
135        case Vec4:
136            for ( size_t i = 0; i < accessor->getCount(); i++ ) {
137                m_vec4_array->push_back( osg::Vec4( va[i*4], va[i*4+1], va[i*4+2], va[i*4+3]));
138            }
139            break;
140        case Vec4d:
141            for ( size_t i = 0; i < accessor->getCount(); i++ ) {
142                m_vec4d_array->push_back( osg::Vec4d( va[i*4], va[i*4+1], va[i*4+2], va[i*4+3]));
143            }
144            break;
145        case Matrix:
146            for ( size_t i = 0; i < accessor->getCount(); i++ ) {
147                m_matrix_array->push_back(osg::Matrixf( va[i*16+0],    va[i*16+4],    va[i*16+8],    va[i*16+12],
148                                                        va[i*16+1],    va[i*16+5],    va[i*16+9],    va[i*16+13],
149                                                        va[i*16+2],    va[i*16+6],    va[i*16+10],    va[i*16+14],
150                                                        va[i*16+3],    va[i*16+7],    va[i*16+11],    va[i*16+15]));
151            }
152            break;
153        default:
154            OSG_WARN << "Unsupported stride in Source: " << stride << std::endl;
155            return;
156        }
157    }
158    else
159    {
160        OSG_WARN << "No float array found" << std::endl;
161    }
162}
Note: See TracBrowser for help on using the browser.