| http://www.sim.no/ http://www.coin3d.org/

SoGLImage.h
1 #ifndef COIN_SOGLIMAGE_H
2 #define COIN_SOGLIMAGE_H
3
4 /**************************************************************************\
5 *
6 * This file is part of the Coin 3D visualization library.
7 * Copyright (C) by Kongsberg Oil & Gas Technologies.
8 *
9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU General Public License
11 * ("GPL") version 2 as published by the Free Software Foundation.
12 * See the file LICENSE.GPL at the root directory of this source
13 * distribution for additional information about the GNU GPL.
14 *
15 * For using Coin with software that can not be combined with the GNU
16 * GPL, and for taking advantage of the additional benefits of our
17 * support services, please contact Kongsberg Oil & Gas Technologies
18 * about acquiring a Coin Professional Edition License.
19 *
20 * See http://www.coin3d.org/ for more information.
21 *
22 * Kongsberg Oil & Gas Technologies, Bygdoy Alle 5, 0257 Oslo, NORWAY.
23 * http://www.sim.no/ sales@sim.no coin-support@coin3d.org
24 *
25 \**************************************************************************/
26
27 // WARNING: This is work in progress. Do not expect this class to have
28 // a stable interface over a long period of time. It is installed
29 // because we need it in an internal project.
30
31 // FIXME: make sure we do a design review for this class for Coin v3.0
32 // pederb, 2001-11-28
33
34 #include <Inventor/SbBasic.h>
35 #include <Inventor/SbVec2s.h>
36 #include <Inventor/SbVec3s.h>
37 #include <Inventor/SoType.h>
38 #include <stddef.h>
39
40 class SoGLDisplayList;
41 class SoState;
42 class SbImage;
43
44 class COIN_DLL_API SoGLImage {
45 public:
46
47 SoGLImage();
48 virtual void unref(SoState * state = NULL);
49
50 static SoType getClassTypeId(void);
51 virtual SoType getTypeId(void) const ;
52 virtual SbBool isOfType(SoType type) const;
53
54 enum Wrap {
55 REPEAT = 0,
56 CLAMP,
57 CLAMP_TO_EDGE,
58 CLAMP_TO_BORDER
59 };
60
61 enum ResizeReason {
62 IMAGE = 0,
63 SUBIMAGE,
64 MIPMAP
65 };
66
67 typedef SbBool SoGLImageResizeCB(SoState * state,
68 const SbVec3s &newsize,
69 unsigned char * destbuffer,
70 ResizeReason reason,
71 void * closure,
72 class SoGLImage * image);
73
74 void setGLDisplayList(SoGLDisplayList * dl,
75 SoState * state,
76 const Wrap wraps = REPEAT,
77 const Wrap wrapt = REPEAT,
78 const float quality = 0.5f);
79
80 void setPBuffer(SoState * state,
81 void * context,
82 const Wrap wraps = REPEAT,
83 const Wrap wrapt = REPEAT,
84 const float quality = 0.5f);
85
86 void setData(const unsigned char * bytes,
87 const SbVec2s & size,
88 const int numcomponents,
89 const Wrap wraps = REPEAT,
90 const Wrap wrapt = REPEAT,
91 const float quality = 0.5f,
92 const int border = 0,
93 SoState * createinstate = NULL);
94
95 void setData(const unsigned char * bytes,
96 const SbVec3s & size,
97 const int numcomponents,
98 const Wrap wraps = REPEAT,
99 const Wrap wrapt = REPEAT,
100 const Wrap wrapr = REPEAT,
101 const float quality = 0.5f,
102 const int border = 0,
103 SoState * createinstate = NULL);
104
105 virtual void setData(const SbImage * image,
106 const Wrap wraps = REPEAT,
107 const Wrap wrapt = REPEAT,
108 const float quality = 0.5f,
109 const int border = 0,
110 SoState * createinstate = NULL);
111
112 virtual void setData(const SbImage * image,
113 const Wrap wraps,
114 const Wrap wrapt,
115 const Wrap wrapr,
116 const float quality = 0.5f,
117 const int border = 0,
118 SoState * createinstate = NULL);
119
120 // these flags can be used to set texture properties.
121 enum Flags {
122 // mipmap, scaling and filtering settings
123 SCALE_DOWN = 0x0001,
124 NO_MIPMAP = 0x0002,
125 LINEAR_MAG_FILTER = 0x0004,
126 LINEAR_MIN_FILTER = 0x0008,
127 LINEAR_MIPMAP_FILTER = 0x0010,
128
129 // use if you know your image properties.
130 FORCE_TRANSPARENCY_TRUE = 0x0020,
131 FORCE_TRANSPARENCY_FALSE = 0x0040,
132 FORCE_ALPHA_TEST_TRUE = 0x0080,
133 FORCE_ALPHA_TEST_FALSE = 0x0100,
134
135 INVINCIBLE = 0x0200, // never die of old age
136
137 // use GL_NV_texture_rectangle or GL_EXT_texture_rectangle
138 RECTANGLE = 0x0400,
139
140 // Compress texture if available from OpenGL
141 COMPRESSED = 0x0800,
142
143 // use quality value to decide mipmap, filtering and scaling. This
144 // is the default.
145 USE_QUALITY_VALUE = 0X8000
146 };
147
148 void setFlags(const uint32_t flags);
149 uint32_t getFlags(void) const;
150
151 const SbImage * getImage(void) const;
152
153 virtual SoGLDisplayList * getGLDisplayList(SoState * state);
154 SbBool hasTransparency(void) const;
155 SbBool useAlphaTest(void) const;
156 Wrap getWrapS(void) const;
157 Wrap getWrapT(void) const;
158 Wrap getWrapR(void) const;
159
160 float getQuality(void) const;
161 uint32_t getGLImageId(void) const;
162
163 protected:
164
165 void incAge(void) const;
166 void resetAge(void) const;
167 virtual void unrefOldDL(SoState * state, const uint32_t maxage);
168 virtual ~SoGLImage();
169
170 private:
171
172 class SoGLImageP * pimpl;
173 friend class SoGLImageP;
174 static void cleanupClass(void);
175
176 public:
177 // internal methods for texture resource management
178 static void beginFrame(SoState * state);
179 static void tagImage(SoState * state, SoGLImage * image);
180 static void endFrame(SoState * state);
181 static void setDisplayListMaxAge(const uint32_t maxage);
182 static void freeAllImages(SoState * state = NULL);
183
184 void setEndFrameCallback(void (*cb)(void *), void * closure);
185 int getNumFramesSinceUsed(void) const;
186
187 public:
188 static void initClass(void);
189 static void setResizeCallback(SoGLImageResizeCB * f, void * closure);
190
191 private:
192 static void registerImage(SoGLImage * image);
193 static void unregisterImage(SoGLImage * image);
194 };
195
196 #endif // !COIN_SOGLIMAGE_H
SoGLImage::ResizeReason
ResizeReason
Definition: SoGLImage.h:61
SoGLImage::Flags
Flags
Definition: SoGLImage.h:121
SoGLImage::Wrap
Wrap
Definition: SoGLImage.h:54
SoState
The SoState class manages the Coin scenegraph traversal state data.The SoState class is used by actio...
Definition: SoState.h:35
SbVec3s
The SbVec3s class is a 3 dimensional vector with short integer coordinates.This vector class provides...
Definition: SbVec3s.h:39
SoGLDisplayList
The SoGLDisplayList class stores and manages OpenGL display lists.The TEXTURE_OBJECT type is not dire...
Definition: SoGLDisplayList.h:34
SoGLImage
The SoGLImage class is used to handle OpenGL 2D/3D textures.
Definition: SoGLImage.h:44
SoGLImage::SoGLImageResizeCB
SbBool SoGLImageResizeCB(SoState *state, const SbVec3s &newsize, unsigned char *destbuffer, ResizeReason reason, void *closure, class SoGLImage *image)
Definition: SoGLImage.h:67
SbImage
The SbImage class is an abstract datatype for 2D and 3D images.Be aware that this class is an extensi...
Definition: SbImage.h:37
SbVec2s
The SbVec2s class is a 2 dimensional vector with short integer coordinates.This vector class is used ...
Definition: SbVec2s.h:41
SoType
The SoType class is the basis for the run-time type system in Coin.Many of the classes in the Coin li...
Definition: SoType.h:50

Copyright © 1998-2010 by Kongsberg Oil & Gas Technologies. All rights reserved.