00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00021
00022
00023 #ifndef H_SPK_QUADRENDERERINTERFACE
00024 #define H_SPK_QUADRENDERERINTERFACE
00025
00026 #include "Core/SPK_DEF.h"
00027 #include "Core/SPK_Particle.h"
00028
00029 namespace SPK
00030 {
00036 enum TexturingMode
00037 {
00038 TEXTURE_NONE,
00039 TEXTURE_2D,
00040 TEXTURE_3D,
00041 };
00042
00043
00048 class SPK_PREFIX QuadRendererInterface
00049 {
00050 public :
00051
00053
00055
00061 QuadRendererInterface(float scaleX = 1.0f,float scaleY = 1.0f);
00062
00064
00066
00068 virtual ~QuadRendererInterface() {}
00069
00071
00073
00086 virtual bool setTexturingMode(TexturingMode mode);
00087
00111 void setAtlasDimensions(size_t nbX,size_t nbY);
00112
00126 void setScale(float scaleX,float scaleY);
00127
00129
00131
00136 TexturingMode getTexturingMode() const;
00137
00145 size_t getAtlasDimensionX() const;
00146
00154 size_t getAtlasDimensionY() const;
00155
00160 float getScaleX() const;
00161
00166 float getScaleY() const;
00167
00168 protected :
00169
00170 TexturingMode texturingMode;
00171
00172 float scaleX;
00173 float scaleY;
00174
00175
00176 size_t textureAtlasNbX;
00177 size_t textureAtlasNbY;
00178 float textureAtlasW;
00179 float textureAtlasH;
00180
00181 void computeAtlasCoordinates(const Particle& particle) const;
00182
00183 float textureAtlasU0() const;
00184 float textureAtlasU1() const;
00185 float textureAtlasV0() const;
00186 float textureAtlasV1() const;
00187
00188 private :
00189
00190
00191 mutable float atlasU0;
00192 mutable float atlasU1;
00193 mutable float atlasV0;
00194 mutable float atlasV1;
00195 };
00196
00197
00198 inline bool QuadRendererInterface::setTexturingMode(TexturingMode mode)
00199 {
00200 texturingMode = mode;
00201 return true;
00202 }
00203
00204 inline void QuadRendererInterface::setScale(float scaleX,float scaleY)
00205 {
00206 this->scaleX = scaleX;
00207 this->scaleY = scaleY;
00208 }
00209
00210 inline TexturingMode QuadRendererInterface::getTexturingMode() const
00211 {
00212 return texturingMode;
00213 }
00214
00215 inline size_t QuadRendererInterface::getAtlasDimensionX() const
00216 {
00217 return textureAtlasNbX;
00218 }
00219
00220 inline size_t QuadRendererInterface::getAtlasDimensionY() const
00221 {
00222 return textureAtlasNbY;
00223 }
00224
00225 inline float QuadRendererInterface::getScaleX() const
00226 {
00227 return scaleX;
00228 }
00229
00230 inline float QuadRendererInterface::getScaleY() const
00231 {
00232 return scaleY;
00233 }
00234
00235 inline float QuadRendererInterface::textureAtlasU0() const
00236 {
00237 return atlasU0;
00238 }
00239
00240 inline float QuadRendererInterface::textureAtlasU1() const
00241 {
00242 return atlasU1;
00243 }
00244
00245 inline float QuadRendererInterface::textureAtlasV0() const
00246 {
00247 return atlasV0;
00248 }
00249
00250 inline float QuadRendererInterface::textureAtlasV1() const
00251 {
00252 return atlasV1;
00253 }
00254
00255 inline void QuadRendererInterface::computeAtlasCoordinates(const Particle& particle) const
00256 {
00257 int textureIndex = static_cast<int>(particle.getParamCurrentValue(PARAM_TEXTURE_INDEX));
00258 atlasU0 = atlasU1 = static_cast<float>(textureIndex % textureAtlasNbX) / textureAtlasNbX;
00259 atlasV0 = atlasV1 = static_cast<float>(textureIndex / textureAtlasNbX) / textureAtlasNbY;
00260 atlasU1 += textureAtlasW;
00261 atlasV1 += textureAtlasH;
00262 }
00263 }
00264
00265 #endif