97 lines
2.2 KiB
C++
97 lines
2.2 KiB
C++
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
|
|
*
|
|
* This library is open source and may be redistributed and/or modified under
|
|
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
|
* (at your option) any later version. The full license is in LICENSE file
|
|
* included with this distribution, and on the openscenegraph.org website.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* OpenSceneGraph Public License for more details.
|
|
*/
|
|
#include <osg/ShapeDrawable>
|
|
#include <osg/GL>
|
|
#include <osg/Notify>
|
|
|
|
using namespace osg;
|
|
|
|
ShapeDrawable::ShapeDrawable():
|
|
_color(1.0f, 1.0f, 1.0f, 1.0f)
|
|
{
|
|
}
|
|
|
|
ShapeDrawable::ShapeDrawable(Shape* shape,TessellationHints* hints):
|
|
_color(1.0f, 1.0f, 1.0f, 1.0f),
|
|
_tessellationHints(hints)
|
|
{
|
|
setShape(shape);
|
|
}
|
|
|
|
ShapeDrawable::ShapeDrawable(const ShapeDrawable& sd,const CopyOp& copyop):
|
|
Geometry(sd,copyop),
|
|
_color(sd._color),
|
|
_tessellationHints(sd._tessellationHints)
|
|
{
|
|
}
|
|
|
|
ShapeDrawable::~ShapeDrawable()
|
|
{
|
|
}
|
|
|
|
void ShapeDrawable::setShape(Shape* shape)
|
|
{
|
|
if (_shape==shape) return;
|
|
|
|
_shape = shape;
|
|
|
|
build();
|
|
}
|
|
|
|
|
|
void ShapeDrawable::setColor(const Vec4& color)
|
|
{
|
|
_color = color;
|
|
|
|
Vec4Array* colors = dynamic_cast<Vec4Array*>(_colorArray.get());
|
|
if (!colors || colors->empty() || colors->getBinding()!=Array::BIND_OVERALL)
|
|
{
|
|
_colorArray = colors = new Vec4Array(Array::BIND_OVERALL, 1);
|
|
}
|
|
|
|
(*colors)[0] = color;
|
|
colors->dirty();
|
|
|
|
dirtyGLObjects();
|
|
}
|
|
|
|
void ShapeDrawable::setTessellationHints(TessellationHints* hints)
|
|
{
|
|
if (_tessellationHints!=hints)
|
|
{
|
|
_tessellationHints = hints;
|
|
build();
|
|
}
|
|
}
|
|
|
|
void ShapeDrawable::build()
|
|
{
|
|
// reset all the properties.
|
|
setVertexArray(0);
|
|
setNormalArray(0);
|
|
setColorArray(0);
|
|
setSecondaryColorArray(0);
|
|
setFogCoordArray(0);
|
|
getTexCoordArrayList().clear();
|
|
getVertexAttribArrayList().clear();
|
|
getPrimitiveSetList().clear();
|
|
|
|
if (_shape)
|
|
{
|
|
BuildShapeGeometryVisitor dsv(this, _tessellationHints.get());
|
|
_shape->accept(dsv);
|
|
}
|
|
|
|
setColor(_color);
|
|
}
|