/**************************************************************************\
*
* This file is part of the Coin 3D visualization library.
* Copyright (C) 1998-2007 by Systems in Motion. All rights reserved.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* ("GPL") version 2 as published by the Free Software Foundation.
* See the file LICENSE.GPL at the root directory of this source
* distribution for additional information about the GNU GPL.
*
* For using Coin with software that can not be combined with the GNU
* GPL, and for taking advantage of the additional benefits of our
* support services, please contact Systems in Motion about acquiring
* a Coin Professional Edition License.
*
* See http://www.coin3d.org/ for more information.
*
* Systems in Motion, Postboks 1283, Pirsenteret, 7462 Trondheim, NORWAY.
* http://www.sim.no/ sales@sim.no coin-support@coin3d.org
*
\**************************************************************************/
/*!
\class SoTextureCoordinateBinding SoTextureCoordinateBinding.h Inventor/nodes/SoTextureCoordinateBinding.h
\brief The SoTextureCoordinateBinding class says how texture coordinates should be bound to shapes.
\ingroup nodes
SoTextureCoordinateBinding binds current coordinates to subsequent
shapes by using either per vertex or per indexed vertex binding.
FILE FORMAT/DEFAULTS:
\code
TextureCoordinateBinding {
value PER_VERTEX_INDEXED
}
\endcode
*/
// *************************************************************************
#include
#include
#include
#include
// *************************************************************************
/*!
\enum SoTextureCoordinateBinding::Binding
The binding types available for the
SoTextureCoordinateBinding::value field.
*/
/*!
\var SoTextureCoordinateBinding::Binding SoTextureCoordinateBinding::PER_VERTEX
Get a new texture coordinate from the pool of texture coordinates for
each vertex of the shape.
Texture Coordinates are fetched from index 0 and onwards, incrementing
the index into the texture coordinates pool by 1 for each new vertex
of the shape node.
*/
/*!
\var SoTextureCoordinateBinding::Binding SoTextureCoordinateBinding::PER_VERTEX_INDEXED
Get a new texture coordinate from the pool of texture coordinates for
each vertex of the shape.
Texture coordinates are fetched by the index value settings of the shape.
*/
/*!
\var SoTextureCoordinateBinding::Binding SoTextureCoordinateBinding::DEFAULT
Obsolete value, please don't use.
*/
/*!
\var SoSFEnum SoTextureCoordinateBinding::value
Type of texturemap binding for subsequent shape nodes in the
scenegraph. Default field value is
SoTextureCoordinateBinding::PER_VERTEX_INDEXED.
*/
// *************************************************************************
SO_NODE_SOURCE(SoTextureCoordinateBinding);
/*!
Constructor.
*/
SoTextureCoordinateBinding::SoTextureCoordinateBinding(void)
{
SO_NODE_INTERNAL_CONSTRUCTOR(SoTextureCoordinateBinding);
SO_NODE_ADD_FIELD(value, (SoTextureCoordinateBinding::PER_VERTEX_INDEXED));
SO_NODE_DEFINE_ENUM_VALUE(Binding, PER_VERTEX);
SO_NODE_DEFINE_ENUM_VALUE(Binding, PER_VERTEX_INDEXED);
SO_NODE_DEFINE_ENUM_VALUE(Binding, DEFAULT);
SO_NODE_SET_SF_ENUM_TYPE(value, Binding);
}
/*!
Destructor.
*/
SoTextureCoordinateBinding::~SoTextureCoordinateBinding()
{
}
// Documented in superclass.
void
SoTextureCoordinateBinding::initClass(void)
{
SO_NODE_INTERNAL_INIT_CLASS(SoTextureCoordinateBinding, SO_FROM_INVENTOR_1);
SO_ENABLE(SoGLRenderAction, SoTextureCoordinateBindingElement);
SO_ENABLE(SoPickAction, SoTextureCoordinateBindingElement);
SO_ENABLE(SoCallbackAction, SoTextureCoordinateBindingElement);
}
// Documented in superclass.
void
SoTextureCoordinateBinding::GLRender(SoGLRenderAction * action)
{
SoTextureCoordinateBinding::doAction(action);
}
// Documented in superclass.
void
SoTextureCoordinateBinding::doAction(SoAction *action)
{
if (!value.isIgnored())
SoTextureCoordinateBindingElement::set(action->getState(), this,
(SoTextureCoordinateBindingElement::Binding)value.getValue());
}
// Documented in superclass.
void
SoTextureCoordinateBinding::callback(SoCallbackAction *action)
{
SoTextureCoordinateBinding::doAction(action);
}
// Documented in superclass.
void
SoTextureCoordinateBinding::pick(SoPickAction *action)
{
SoTextureCoordinateBinding::doAction(action);
}
// Documented in superclass.
SbBool
SoTextureCoordinateBinding::readInstance(SoInput * in, unsigned short flags)
{
SbBool ret = inherited::readInstance(in, flags);
if (ret) {
// test for obsolete values
if (this->value.getValue() < 2) {
this->value = PER_VERTEX_INDEXED;
}
}
return ret;
}