00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef OSDL_GL_TEXTURE_H_
00028 #define OSDL_GL_TEXTURE_H_
00029
00030
00031 #include "OSDLOpenGL.h"
00032
00033 #include "Ceylan.h"
00034
00035 #include <string>
00036
00037
00038
00039
00040 namespace OSDL
00041 {
00042
00043
00044
00045 namespace Video
00046 {
00047
00048
00049
00050
00051 class Surface ;
00052
00053
00054
00055 namespace OpenGL
00056 {
00057
00058
00059
00072 typedef GLU::Int GLTextureIdentifier ;
00073
00074
00075
00076
00078 class OSDL_DLL GLTextureException : public OpenGLException
00079 {
00080
00081 public:
00082
00083
00085 GLTextureException( const std::string & reason ) ;
00086
00087
00089 virtual ~GLTextureException() throw() ;
00090
00091 } ;
00092
00093
00094
00122 class OSDL_DLL GLTexture : public Ceylan::TextDisplayable,
00123 public Ceylan::LoadableWithContent<Surface>
00124 {
00125
00126
00127 public:
00128
00129
00130
00138 enum TextureDimensionality { Disabled, OneDim, TwoDim } ;
00139
00140
00141
00152 enum TextureFlavour { None, Basic, For2D, For3D } ;
00153
00154
00155
00180 explicit GLTexture( const std::string textureFilename,
00181 TextureFlavour flavour, bool preload = true ) ;
00182
00183
00184
00200 GLTexture( Surface & sourceSurface,
00201 TextureFlavour flavour ) ;
00202
00203
00204
00210 virtual ~GLTexture() throw() ;
00211
00212
00213
00221 virtual Length getWidth() const ;
00222
00223
00231 virtual Length getHeight() const ;
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00248 virtual bool wasUploaded() const ;
00249
00250
00266 virtual void upload() ;
00267
00268
00269
00278 virtual void remove() ;
00279
00280
00281
00282
00283
00291 virtual void setAsCurrent() const ;
00292
00293
00294
00302 virtual bool isResident() ;
00303
00304
00305
00306
00307
00308
00309
00310
00311
00325 virtual bool load() ;
00326
00327
00328
00345 virtual bool unload() ;
00346
00347
00348
00349
00350
00363 virtual const std::string toString(
00364 Ceylan::VerbosityLevels level = Ceylan::high ) const ;
00365
00366
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376
00378 static TextureDimensionality GetTextureDimensionality() ;
00379
00380
00381
00383 static void SetTextureDimensionality(
00384 TextureDimensionality Dimensionality = TwoDim ) ;
00385
00386
00387
00394 static TextureDimensionality CurrentTextureDimensionality ;
00395
00396
00397
00408 static void SetTextureFlavour(
00409 TextureFlavour textureFlavour ) ;
00410
00411
00412
00427 static void SetTextureEnvironmentParameter(
00428 GLEnumeration targetEnvironment,
00429 GLEnumeration environmentParameter,
00430 GLfloat parameterValue ) ;
00431
00432
00433
00449 static void SetTextureEnvironmentParameter(
00450 GLEnumeration targetEnvironment,
00451 GLEnumeration environmentParameter,
00452 const GLfloat * parameterValues ) ;
00453
00454
00455
00462 static void UnbindCurrentTexture() ;
00463
00464
00465
00476 static std::string GetExtensionForFlavour(
00477 TextureFlavour flavour ) ;
00478
00479
00480
00481
00482
00483
00484 protected:
00485
00486
00487
00518 void setUpInternalSurfaceFrom( Surface & sourceSurface ) ;
00519
00520
00521
00522
00523
00524
00525
00526
00527
00528
00529
00534 GLTextureIdentifier _id ;
00535
00536
00537
00546 TextureFlavour _flavour ;
00547
00548
00549
00558 bool _unloadable ;
00559
00560
00561
00562 private:
00563
00564
00565
00574 explicit GLTexture( const GLTexture & source ) ;
00575
00576
00577
00586 GLTexture & operator = ( const GLTexture & source ) ;
00587
00588
00589 } ;
00590
00591
00592
00594 typedef Ceylan::CountedPointer<GLTexture> TextureCountedPtr ;
00595
00596 }
00597
00598 }
00599
00600 }
00601
00602
00603
00604 #endif // OSDL_GL_TEXTURE_H_
00605