SoMultiTextureImageElement.h
#ifndef COIN_SOMULTITEXTUREIMAGEELEMENT_H
#define COIN_SOMULTITEXTUREIMAGEELEMENT_H
/**************************************************************************\
* Copyright (c) Kongsberg Oil & Gas Technologies AS
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* Neither the name of the copyright holder nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\**************************************************************************/
#include <Inventor/elements/SoReplacedElement.h>
#include <Inventor/SbVec2s.h>
#include <Inventor/SbVec3s.h>
#include <Inventor/SbColor.h>
class SoState;
class SoMultiTextureImageElementP;
class COIN_DLL_API SoMultiTextureImageElement : public SoElement {
typedef SoElement inherited;
SO_ELEMENT_HEADER(SoMultiTextureImageElement);
public:
static void initClass(void);
protected:
virtual ~SoMultiTextureImageElement();
public:
enum Model {
// These should match GL_BLEND, GL_MODULATE and GL_DECAL for SGI
// Inventor compatibility (these are also used by SoTexture2 and
// SoTexture3).
BLEND = 0x0be2,
MODULATE = 0x2100,
DECAL = 0x2101,
REPLACE = 0x1E01 // must match GL_REPLACE
};
enum Wrap {
// These should match GL_CLAMP and GL_REPEAT for SGI Inventor
// compatibility (these are also used by SoTexture2 and
// SoTexture3).
CLAMP = 0x2900,
REPEAT = 0x2901,
CLAMP_TO_BORDER = 0x812D
};
virtual void init(SoState * state);
static void setDefault(SoState * const state, SoNode * const node, const int unit = 0);
static void set(SoState * const state, SoNode * const node,
const int unit,
const SbVec2s & size, const int numComponents,
const unsigned char * bytes,
const Wrap wrapS,
const Wrap wrapT,
const Model model, const SbColor & blendColor);
static void set(SoState * const state, SoNode * const node,
const int unit,
const SbVec3s & size, const int numComponents,
const unsigned char * bytes,
const Wrap wrapS,
const Wrap wrapT,
const Wrap wrapR,
const Model model, const SbColor & blendColor);
static const unsigned char *get(SoState * const state,
const int unit,
SbVec2s & size,
int & numComponents,
Wrap & wrapS,
Wrap & wrapT,
Model & model,
SbColor & blendColor);
static const unsigned char *get(SoState * const state,
const int unit,
SbVec3s & size,
int & numComponents,
Wrap & wrapS,
Wrap & wrapT,
Wrap & wrapR,
Model & model,
SbColor & blendColor);
static const unsigned char *getImage(SoState * const state,
const int unit,
SbVec2s & size,
int & numComponents);
static const unsigned char *getImage(SoState * const state,
const int unit,
SbVec3s &size,
int &numComponents);
static const SbColor & getBlendColor(SoState * const state, const int unit = 0);
static Model getModel(SoState * const state, const int unit = 0);
static Wrap getWrapS(SoState * const state, const int unit = 0);
static Wrap getWrapT(SoState * const state, const int unit = 0);
static Wrap getWrapR(SoState * const state, const int unit = 0);
static SbBool containsTransparency(SoState * const state);
static const unsigned char * getDefault(SbVec2s & size, int & numComponents);
static const unsigned char * getDefault(SbVec3s & size, int & numComponents);
virtual void push(SoState * state);
virtual SbBool matches(const SoElement * elem) const;
SoElement * copyMatchInfo(void) const;
virtual void setElt(const int unit,
const SbUniqueId nodeid,
const SbVec2s & size, const int numComponents,
const unsigned char * bytes,
const Wrap wrapS,
const Wrap wrapT,
const Model model,
const SbColor & blendColor);
virtual void setElt(const int unit,
const SbUniqueId nodeid,
const SbVec3s & size, const int numComponents,
const unsigned char * bytes,
const Wrap wrapS,
const Wrap wrapT,
const Wrap wrapR,
const Model model,
const SbColor & blendColor);
virtual SbBool hasTransparency(const int unit = 0) const;
class UnitData {
public:
UnitData();
UnitData(const UnitData & org);
SbUniqueId nodeid;
SbVec3s size;
int numComponents;
const unsigned char * bytes;
Wrap wrapS, wrapT, wrapR;
Model model;
SbColor blendColor;
};
protected:
const UnitData & getUnitData(const int unit) const;
int getNumUnits() const;
private:
SoMultiTextureImageElementP * pimpl;
public: // Coin-3 support
static void set(SoState * const state, SoNode * const node,
const SbVec2s & size, const int numComponents,
const unsigned char * bytes,
const int wrapS, const int wrapT,
const int model, const SbColor & blendColor) {
set(state, node,0, size, numComponents, bytes,
(Wrap) wrapS, (Wrap) wrapT, (Model) model, blendColor);
}
static void set(SoState * const state, SoNode * const node,
const SbVec2s & size, const int numComponents,
const unsigned char * bytes,
const Wrap wrapS, const Wrap wrapT,
const Model model, const SbColor & blendColor) {
set(state, node, 0, size, numComponents, bytes,
wrapS, wrapT, model, blendColor);
}
static void set(SoState * const state, SoNode * const node,
const SbVec3s & size, const int numComponents,
const unsigned char * bytes,
const int wrapS, const int wrapT, const int wrapR,
const int model, const SbColor & blendColor) {
set(state, node, 0, size, numComponents, bytes,
(Wrap) wrapS, (Wrap) wrapT, (Wrap) wrapR, (Model) model, blendColor);
}
static void set(SoState * const state, SoNode * const node,
const SbVec3s & size, const int numComponents,
const unsigned char * bytes,
const Wrap wrapS, const Wrap wrapT, const Wrap wrapR,
const Model model, const SbColor & blendColor) {
set(state, node, 0, size, numComponents, bytes,
wrapS, wrapT, wrapR, model, blendColor);
}
static const unsigned char *get(SoState * const state,
SbVec2s & size,
int & numComponents,
Wrap & wrapS,
Wrap & wrapT,
Model & model,
SbColor & blendColor) {
return get(state, 0, size, numComponents, wrapS, wrapT, model, blendColor);
}
static const unsigned char *get(SoState * const state,
SbVec3s & size,
int & numComponents,
Wrap & wrapS,
Wrap & wrapT,
Wrap & wrapR,
Model & model,
SbColor & blendColor) {
return get(state, 0, size, numComponents, wrapS, wrapT, wrapR, model, blendColor);
}
static const unsigned char *get(SoState * const state,
SbVec2s & size,
int & numComponents,
int & wrapS,
int & wrapT,
int & model,
SbColor & blendColor) {
Wrap s, t;
Model m;
const unsigned char * bytes = get(state, 0, size, numComponents, s, t, m, blendColor);
wrapS = (int) s;
wrapT = (int) t;
model = (int) m;
return bytes;
}
static const unsigned char *get(SoState * const state,
SbVec3s & size,
int & numComponents,
int & wrapS,
int & wrapT,
int & wrapR,
int & model,
SbColor & blendColor) {
Wrap s, t, r;
Model m;
const unsigned char * bytes = get(state, 0, size, numComponents, s, t, r, m, blendColor);
wrapS = (int) s;
wrapT = (int) t;
wrapR = (int) r;
model = (int) m;
return bytes;
}
static const unsigned char *getImage(SoState * const state,
SbVec2s &size,
int &numComponents) {
return getImage(state, 0, size, numComponents);
}
static const unsigned char *getImage(SoState * const state,
SbVec3s &size,
int &numComponents) {
return getImage(state, 0, size, numComponents);
}
};
#endif // !COIN_SOMULTITEXTUREIMAGEELEMENT_H
SbColor
The SbColor class contains the red, green and blue components which make up a color value.
Definition SbColor.h:39
SbVec2s
The SbVec2s class is a 2 dimensional vector with short integer coordinates.
Definition SbVec2s.h:51
SbVec3s
The SbVec3s class is a 3 dimensional vector with short integer coordinates.
Definition SbVec3s.h:51
SoElement::SoElement
SoElement(void)
Definition SoElement.cpp:534
SoElement::matches
virtual SbBool matches(const SoElement *element) const =0
Definition SoElement.cpp:609
SoElement::initClass
static void initClass(void)
Definition SoElement.cpp:507
SoElement::copyMatchInfo
virtual SoElement * copyMatchInfo(void) const =0
SoElement::init
virtual void init(SoState *state)
Definition SoElement.cpp:553
SoElement::push
virtual void push(SoState *state)
Definition SoElement.cpp:570
SoMultiTextureImageElement::UnitData
Definition SoMultiTextureImageElement.h:155
SoMultiTextureImageElement::getWrapT
static Wrap getWrapT(SoState *const state, const int unit=0)
Definition SoMultiTextureImageElement.cpp:462
SoMultiTextureImageElement::getDefault
static const unsigned char * getDefault(SbVec2s &size, int &numComponents)
FIXME: write doc.
Definition SoMultiTextureImageElement.cpp:320
SoMultiTextureImageElement::containsTransparency
static SbBool containsTransparency(SoState *const state)
FIXME: write doc.
Definition SoMultiTextureImageElement.cpp:271
SoMultiTextureImageElement::setElt
virtual void setElt(const int unit, const SbUniqueId nodeid, const SbVec2s &size, const int numComponents, const unsigned char *bytes, const Wrap wrapS, const Wrap wrapT, const Model model, const SbColor &blendColor)
FIXME: write doc.
Definition SoMultiTextureImageElement.cpp:379
SoMultiTextureImageElement::getImage
static const unsigned char * getImage(SoState *const state, const int unit, SbVec2s &size, int &numComponents)
Definition SoMultiTextureImageElement.cpp:229
SoMultiTextureImageElement::getWrapS
static Wrap getWrapS(SoState *const state, const int unit=0)
Definition SoMultiTextureImageElement.cpp:448
SoMultiTextureImageElement::getWrapR
static Wrap getWrapR(SoState *const state, const int unit=0)
Definition SoMultiTextureImageElement.cpp:476
SoMultiTextureImageElement::setDefault
static void setDefault(SoState *const state, SoNode *const node, const int unit=0)
Definition SoMultiTextureImageElement.cpp:112
SoMultiTextureImageElement::getModel
static Model getModel(SoState *const state, const int unit=0)
Definition SoMultiTextureImageElement.cpp:490
SoMultiTextureImageElement::getBlendColor
static const SbColor & getBlendColor(SoState *const state, const int unit=0)
Definition SoMultiTextureImageElement.cpp:434
SoMultiTextureImageElement::set
static void set(SoState *const state, SoNode *const node, const int unit, const SbVec2s &size, const int numComponents, const unsigned char *bytes, const Wrap wrapS, const Wrap wrapT, const Model model, const SbColor &blendColor)
FIXME: write doc.
Definition SoMultiTextureImageElement.cpp:123
SoMultiTextureImageElement::hasTransparency
virtual SbBool hasTransparency(const int unit=0) const
Definition SoMultiTextureImageElement.cpp:292
SoMultiTextureImageElement::get
static const unsigned char * get(SoState *const state, const int unit, SbVec2s &size, int &numComponents, Wrap &wrapS, Wrap &wrapT, Model &model, SbColor &blendColor)
FIXME: write doc.
Definition SoMultiTextureImageElement.cpp:168
SoMultiTextureImageElement::getNumUnits
int getNumUnits() const
Definition SoMultiTextureImageElement.cpp:312
SoNode
The SoNode class is the base class for nodes used in scene graphs.
Definition SoNode.h:56
SoState
The SoState class manages the Coin scene graph traversal state data.
Definition SoState.h:44
CoinResources::get
SbByteBuffer get(const char *resloc)
Definition CoinResources.cpp:178
CoinResources::set
SbBool set(const char *resloc, const SbByteBuffer &buffer, ResourceFlags flags=NONE)
Definition CoinResources.cpp:294