Show
Ignore:
Timestamp:
10/09/09 15:39:11 (5 years ago)
Author:
robert
Message:

Introduced new uniforms for tracking the modelview and project matrices in shaders using non built-ins.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osg/Geometry.cpp

    r10615 r10621  
    21152115    AttributeFunctorArrayVisitor afav(af); 
    21162116 
    2117     afav.applyArray(VERTICES,_vertexData.array.get()); 
     2117    if (_vertexData.array.valid()) 
     2118    { 
     2119        afav.applyArray(VERTICES,_vertexData.array.get()); 
     2120    } 
     2121    else if (_vertexAttribList.size()>0) 
     2122    { 
     2123        osg::notify(osg::INFO)<<"Geometry::accept(AttributeFunctor& af): Using vertex attribute instead"<<std::endl; 
     2124        afav.applyArray(VERTICES,_vertexAttribList[0].array.get()); 
     2125    } 
     2126 
    21182127    afav.applyArray(NORMALS,_normalData.array.get()); 
    21192128    afav.applyArray(COLORS,_colorData.array.get()); 
     
    21792188    ConstAttributeFunctorArrayVisitor afav(af); 
    21802189     
    2181     afav.applyArray(VERTICES,_vertexData.array.get()); 
     2190    if (_vertexData.array.valid()) 
     2191    { 
     2192        afav.applyArray(VERTICES,_vertexData.array.get()); 
     2193    } 
     2194    else if (_vertexAttribList.size()>0) 
     2195    { 
     2196        osg::notify(osg::INFO)<<"Geometry::accept(ConstAttributeFunctor& af): Using vertex attribute instead"<<std::endl; 
     2197        afav.applyArray(VERTICES,_vertexAttribList[0].array.get()); 
     2198    } 
     2199 
    21822200    afav.applyArray(NORMALS,_normalData.array.get()); 
    21832201    afav.applyArray(COLORS,_colorData.array.get()); 
     
    21982216void Geometry::accept(PrimitiveFunctor& functor) const 
    21992217{ 
    2200     if (!_vertexData.array.valid() || _vertexData.array->getNumElements()==0) return; 
    2201  
    2202     if (!_vertexData.indices.valid()) 
    2203     { 
    2204         switch(_vertexData.array->getType()) 
     2218    const osg::Array* vertices = _vertexData.array.get(); 
     2219    const osg::IndexArray* indices = _vertexData.indices.get(); 
     2220 
     2221    if (!vertices && _vertexAttribList.size()>0) 
     2222    { 
     2223        osg::notify(osg::INFO)<<"Using vertex attribute instead"<<std::endl; 
     2224        vertices = _vertexAttribList[0].array.get(); 
     2225        indices = _vertexAttribList[0].indices.get(); 
     2226    } 
     2227 
     2228    if (!vertices || vertices->getNumElements()==0) return; 
     2229 
     2230    if (!indices) 
     2231    { 
     2232        switch(vertices->getType()) 
    22052233        { 
    22062234        case(Array::Vec2ArrayType):  
    2207             functor.setVertexArray(_vertexData.array->getNumElements(),static_cast<const Vec2*>(_vertexData.array->getDataPointer())); 
     2235            functor.setVertexArray(vertices->getNumElements(),static_cast<const Vec2*>(vertices->getDataPointer())); 
    22082236            break; 
    22092237        case(Array::Vec3ArrayType):  
    2210             functor.setVertexArray(_vertexData.array->getNumElements(),static_cast<const Vec3*>(_vertexData.array->getDataPointer())); 
     2238            functor.setVertexArray(vertices->getNumElements(),static_cast<const Vec3*>(vertices->getDataPointer())); 
    22112239            break; 
    22122240        case(Array::Vec4ArrayType):  
    2213             functor.setVertexArray(_vertexData.array->getNumElements(),static_cast<const Vec4*>(_vertexData.array->getDataPointer())); 
     2241            functor.setVertexArray(vertices->getNumElements(),static_cast<const Vec4*>(vertices->getDataPointer())); 
    22142242            break; 
    22152243        case(Array::Vec2dArrayType):  
    2216             functor.setVertexArray(_vertexData.array->getNumElements(),static_cast<const Vec2d*>(_vertexData.array->getDataPointer())); 
     2244            functor.setVertexArray(vertices->getNumElements(),static_cast<const Vec2d*>(vertices->getDataPointer())); 
    22172245            break; 
    22182246        case(Array::Vec3dArrayType):  
    2219             functor.setVertexArray(_vertexData.array->getNumElements(),static_cast<const Vec3d*>(_vertexData.array->getDataPointer())); 
     2247            functor.setVertexArray(vertices->getNumElements(),static_cast<const Vec3d*>(vertices->getDataPointer())); 
    22202248            break; 
    22212249        case(Array::Vec4dArrayType):  
    2222             functor.setVertexArray(_vertexData.array->getNumElements(),static_cast<const Vec4d*>(_vertexData.array->getDataPointer())); 
     2250            functor.setVertexArray(vertices->getNumElements(),static_cast<const Vec4d*>(vertices->getDataPointer())); 
    22232251            break; 
    22242252        default: 
    2225             notify(WARN)<<"Warning: Geometry::accept(PrimitiveFunctor&) cannot handle Vertex Array type"<<_vertexData.array->getType()<<std::endl; 
     2253            notify(WARN)<<"Warning: Geometry::accept(PrimitiveFunctor&) cannot handle Vertex Array type"<<vertices->getType()<<std::endl; 
    22262254            return; 
    22272255        } 
     
    22422270        const Vec3d* vec3dArray = 0; 
    22432271        const Vec4d* vec4dArray = 0; 
    2244         Array::Type type = _vertexData.array->getType(); 
     2272        Array::Type type = vertices->getType(); 
    22452273        switch(type) 
    22462274        { 
    22472275        case(Array::Vec2ArrayType):  
    2248             vec2Array = static_cast<const Vec2*>(_vertexData.array->getDataPointer()); 
     2276            vec2Array = static_cast<const Vec2*>(vertices->getDataPointer()); 
    22492277            break; 
    22502278        case(Array::Vec3ArrayType):  
    2251             vec3Array = static_cast<const Vec3*>(_vertexData.array->getDataPointer()); 
     2279            vec3Array = static_cast<const Vec3*>(vertices->getDataPointer()); 
    22522280            break; 
    22532281        case(Array::Vec4ArrayType):  
    2254             vec4Array = static_cast<const Vec4*>(_vertexData.array->getDataPointer()); 
     2282            vec4Array = static_cast<const Vec4*>(vertices->getDataPointer()); 
    22552283            break; 
    22562284        case(Array::Vec2dArrayType):  
    2257             vec2dArray = static_cast<const Vec2d*>(_vertexData.array->getDataPointer()); 
     2285            vec2dArray = static_cast<const Vec2d*>(vertices->getDataPointer()); 
    22582286            break; 
    22592287        case(Array::Vec3dArrayType):  
    2260             vec3dArray = static_cast<const Vec3d*>(_vertexData.array->getDataPointer()); 
     2288            vec3dArray = static_cast<const Vec3d*>(vertices->getDataPointer()); 
    22612289            break; 
    22622290        case(Array::Vec4dArrayType):  
    2263             vec4dArray = static_cast<const Vec4d*>(_vertexData.array->getDataPointer()); 
     2291            vec4dArray = static_cast<const Vec4d*>(vertices->getDataPointer()); 
    22642292            break; 
    22652293        default: 
    2266             notify(WARN)<<"Warning: Geometry::accept(PrimitiveFunctor&) cannot handle Vertex Array type"<<_vertexData.array->getType()<<std::endl; 
     2294            notify(WARN)<<"Warning: Geometry::accept(PrimitiveFunctor&) cannot handle Vertex Array type"<<vertices->getType()<<std::endl; 
    22672295            return; 
    22682296        } 
    22692297 
    2270      
    22712298        for(PrimitiveSetList::const_iterator itr=_primitives.begin(); 
    22722299            itr!=_primitives.end(); 
     
    23122339 
    23132340                    } 
    2314                      
     2341 
    23152342                    functor.end(); 
    23162343                    break; 
     
    23552382                            ++vindex; 
    23562383                        } 
    2357                          
     2384 
    23582385                        functor.end(); 
    23592386 
     
    24882515void Geometry::accept(PrimitiveIndexFunctor& functor) const 
    24892516{ 
    2490     if (!_vertexData.array.valid() || _vertexData.array->getNumElements()==0) return; 
    2491  
    2492     switch(_vertexData.array->getType()) 
     2517    const osg::Array* vertices = _vertexData.array.get(); 
     2518    const osg::IndexArray* indices = _vertexData.indices.get(); 
     2519 
     2520    if (!vertices && _vertexAttribList.size()>0) 
     2521    { 
     2522        osg::notify(osg::INFO)<<"Geometry::accept(PrimitiveIndexFunctor& functor): Using vertex attribute instead"<<std::endl; 
     2523        vertices = _vertexAttribList[0].array.get(); 
     2524        indices = _vertexAttribList[0].indices.get(); 
     2525    } 
     2526 
     2527    if (!vertices || vertices->getNumElements()==0) return; 
     2528 
     2529    switch(vertices->getType()) 
    24932530    { 
    24942531    case(Array::Vec2ArrayType):  
    2495         functor.setVertexArray(_vertexData.array->getNumElements(),static_cast<const Vec2*>(_vertexData.array->getDataPointer())); 
     2532        functor.setVertexArray(vertices->getNumElements(),static_cast<const Vec2*>(vertices->getDataPointer())); 
    24962533        break; 
    24972534    case(Array::Vec3ArrayType):  
    2498         functor.setVertexArray(_vertexData.array->getNumElements(),static_cast<const Vec3*>(_vertexData.array->getDataPointer())); 
     2535        functor.setVertexArray(vertices->getNumElements(),static_cast<const Vec3*>(vertices->getDataPointer())); 
    24992536        break; 
    25002537    case(Array::Vec4ArrayType):  
    2501         functor.setVertexArray(_vertexData.array->getNumElements(),static_cast<const Vec4*>(_vertexData.array->getDataPointer())); 
     2538        functor.setVertexArray(vertices->getNumElements(),static_cast<const Vec4*>(vertices->getDataPointer())); 
    25022539        break; 
    25032540    case(Array::Vec2dArrayType):  
    2504         functor.setVertexArray(_vertexData.array->getNumElements(),static_cast<const Vec2d*>(_vertexData.array->getDataPointer())); 
     2541        functor.setVertexArray(vertices->getNumElements(),static_cast<const Vec2d*>(vertices->getDataPointer())); 
    25052542        break; 
    25062543    case(Array::Vec3dArrayType):  
    2507         functor.setVertexArray(_vertexData.array->getNumElements(),static_cast<const Vec3d*>(_vertexData.array->getDataPointer())); 
     2544        functor.setVertexArray(vertices->getNumElements(),static_cast<const Vec3d*>(vertices->getDataPointer())); 
    25082545        break; 
    25092546    case(Array::Vec4dArrayType):  
    2510         functor.setVertexArray(_vertexData.array->getNumElements(),static_cast<const Vec4d*>(_vertexData.array->getDataPointer())); 
     2547        functor.setVertexArray(vertices->getNumElements(),static_cast<const Vec4d*>(vertices->getDataPointer())); 
    25112548        break; 
    25122549    default: 
    2513         notify(WARN)<<"Warning: Geometry::accept(PrimitiveIndexFunctor&) cannot handle Vertex Array type"<<_vertexData.array->getType()<<std::endl; 
     2550        notify(WARN)<<"Warning: Geometry::accept(PrimitiveIndexFunctor&) cannot handle Vertex Array type"<<vertices->getType()<<std::endl; 
    25142551        return; 
    25152552    }