1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116
|
/**************************************************************************\
*
* This file is part of the Coin 3D visualization library.
* Copyright (C) by Kongsberg Oil & Gas Technologies.
*
* 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 Kongsberg Oil & Gas Technologies
* about acquiring a Coin Professional Edition License.
*
* See http://www.coin3d.org/ for more information.
*
* Kongsberg Oil & Gas Technologies, Bygdoy Alle 5, 0257 Oslo, NORWAY.
* http://www.sim.no/ sales@sim.no coin-support@coin3d.org
*
\**************************************************************************/
/*!
\class SoColorIndex SoColorIndex.h Inventor/nodes/SoColorIndex.h
\brief The SoColorIndex class is used to specify color indices for subsequent shapes.
\ingroup nodes
This node should only be used in OpenGL color-index mode, and only
when the current light model is set to SoLightModel::BASE_COLOR.
OpenGL colorindex mode is where the colors for individual pixels are
fetched from a color lookup table ("CLUT"). The usual thing to do is
to set up a canvas in RGBA truecolor mode.
One common use for colorindex mode OpenGL canvases is to use one in
the overlay planes (which are usually limited to only 2 or 4
available colors), if supported by the OpenGL hardware and / or
driver.
<b>FILE FORMAT/DEFAULTS:</b>
\code
ColorIndex {
index 1
}
\endcode
*/
// FIXME: couldn't we check for the above mentioned pre-conditions
// (colorindex mode, SoLightModel::BASE_COLOR) and assert() or
// SoDebugError::post() if any of the two is not met?
//
// UPDATE: use glGetBooleanv(GL_RGBA_MODE, ...) or
// SoGLColorIndexElement::isColorIndexMode() for the color-index
// mode-check.
//
// 20010809 mortene.
#include <Inventor/nodes/SoColorIndex.h>
#include <Inventor/elements/SoOverrideElement.h>
#include <Inventor/elements/SoGLColorIndexElement.h>
#include <Inventor/actions/SoGLRenderAction.h>
#include "nodes/SoSubNodeP.h"
/*!
\var SoMFInt32 SoColorIndex::index
Color indices which can be used by shapes.
*/
// *************************************************************************
SO_NODE_SOURCE(SoColorIndex);
/*!
Constructor.
*/
SoColorIndex::SoColorIndex()
{
SO_NODE_INTERNAL_CONSTRUCTOR(SoColorIndex);
SO_NODE_ADD_FIELD(index, (1));
}
/*!
Destructor.
*/
SoColorIndex::~SoColorIndex()
{
}
// doc in parent
void
SoColorIndex::initClass(void)
{
SO_NODE_INTERNAL_INIT_CLASS(SoColorIndex, SO_FROM_INVENTOR_1);
SO_ENABLE(SoGLRenderAction, SoGLColorIndexElement);
}
// doc in parent
void
SoColorIndex::GLRender(SoGLRenderAction * action)
{
SoState * state = action->getState();
if (!this->index.isIgnored() &&
!SoOverrideElement::getColorIndexOverride(state)) {
if (this->isOverride()) {
SoOverrideElement::setColorIndexOverride(state, this, TRUE);
}
SoGLColorIndexElement::set(state, this,
this->index.getNum(),
this->index.getValues(0));
}
}
|