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 #ifndef _SO_TEXTURE_
00026 #define _SO_TEXTURE_
00027
00028 #include <Inventor/fields/SoSFVec4f.h>
00029 #include <Inventor/fields/SoSFEnum.h>
00030 #include <Inventor/fields/SoSFImage.h>
00031 #include <Inventor/fields/SoSFString.h>
00032 #include <Inventor/fields/SoSFBool.h>
00033 #include <Inventor/fields/SoSFFloat.h>
00034 #include <Inventor/fields/SoSFColor.h>
00035 #include <Inventor/nodes/SoNode.h>
00036 #include <Inventor/sys/SoGLType.h>
00037 #include <Inventor/elements/SoTextureImageElement.h>
00038 #include <SoDeprecationRules.h>
00039 #include <Inventor/SbEnums.h>
00040 #include <Inventor/renderer/RendererResourceMacro.h>
00041
00042 class SoFieldSensor;
00043 class SoNodeSensor;
00044 class SbRasterImage;
00045 class SoGLTexture;
00046
00047 namespace inventor {
00048 namespace impl{
00049 class SoExtTexture2Impl;
00050 class SoIndexedTexture2Impl;
00051 };
00052 namespace renderer{
00053 class RendererContext;
00054 }
00055 };
00056
00057 namespace inventor {
00058 namespace renderer{
00059 template<typename T> struct Resource;
00060 class FixedPipelineShader;
00061 };
00062 };
00063
00064 #ifndef GL_COMBINE
00065 #define GL_COMBINE 0x8570
00066 #endif
00067 #ifndef GL_CLAMP_TO_BORDER
00068 #define GL_CLAMP_TO_BORDER 0x812D
00069 #endif
00070 #ifndef GL_CLAMP_TO_EDGE
00071 #define GL_CLAMP_TO_EDGE 0x812F
00072 #endif
00073 #ifndef GL_MIRRORED_REPEAT
00074 #define GL_MIRRORED_REPEAT 0x8370
00075 #endif
00076
00077 SO_PIMPL_BASE_PUBLIC_DECLARATION(SoTexture)
00078
00079
00080
00081
00082
00083
00084
00086
00152 class SoTexture : public SoNode {
00153
00154 SO_NODE_ABSTRACT_HEADER(SoTexture);
00155
00156 SO_PIMPL_BASE_PUBLIC_HEADER(SoTexture);
00157 RENDERER_RESOURCE(SoTexture);
00158 public:
00162 enum InternalFormat {
00164 AUTO_INTERNAL_FORMAT,
00166 ALPHA_FORMAT,SoDEPRECATED ALPHA4,
00170 ALPHA8,
00172 ALPHA12,
00174 ALPHA16,
00176 LUMINANCE_FORMAT, SoDEPRECATED LUMINANCE4,
00180 LUMINANCE8,
00182 LUMINANCE12,
00184 LUMINANCE16,
00186 LUMINANCE_ALPHA,
00188 LUMINANCE4_ALPHA4,
00190 LUMINANCE6_ALPHA2,
00192 LUMINANCE8_ALPHA8,
00194 LUMINANCE12_ALPHA4,
00196 LUMINANCE12_ALPHA12,
00198 LUMINANCE16_ALPHA16,
00200 INTENSITY_FORMAT, SoDEPRECATED INTENSITY4,
00204 INTENSITY8,
00206 INTENSITY12,
00208 INTENSITY16,
00210 R3_G3_B2,
00212 RGB_FORMAT,
00214 RGB4,
00216 RGB5,
00218 RG8,
00220 RGB8,
00222 RGB10,
00224 RGB12,
00226 RGB16,
00228 RGBA_FORMAT,
00230 RGBA2,
00232 RGBA4,
00234 RGB5_ALPHA1,
00236 RGBA8,
00238 RGB10_ALPHA2,
00240 RGBA12,
00242 RGBA16,
00244 RGBA_FLOAT32,
00246 RGB_FLOAT32,
00248 ALPHA_FLOAT32,
00250 INTENSITY_FLOAT32,
00252 LUMINANCE_FLOAT32,
00254 LUMINANCE_ALPHA_FLOAT32,
00256 RGBA_FLOAT16,
00258 RGB_FLOAT16,
00260 ALPHA_FLOAT16,
00262 INTENSITY_FLOAT16,
00264 LUMINANCE_FLOAT16,
00266 LUMINANCE_ALPHA_FLOAT16,
00268 COMPRESSED_ALPHA,
00270 COMPRESSED_LUMINANCE,
00272 COMPRESSED_LUMINANCE_ALPHA,
00274 COMPRESSED_INTENSITY,
00276 COMPRESSED_RGB,
00278 COMPRESSED_RGBA,
00282 COMPRESSED_LUMINANCE_LATC1,
00286 COMPRESSED_SIGNED_LUMINANCE_LATC1,
00290 COMPRESSED_LUMINANCE_ALPHA_LATC2,
00294 COMPRESSED_SIGNED_LUMINANCE_ALPHA_LATC2,
00298 COMPRESSED_RED_RGTC1,
00302 COMPRESSED_SIGNED_RED_RGTC1,
00306 COMPRESSED_RED_GREEN_RGTC2,
00310 COMPRESSED_SIGNED_RED_GREEN_RGTC2,
00314 DEPTH_COMPONENT16,
00318 DEPTH_COMPONENT24,
00322 DEPTH24_STENCIL8,
00326 R8I,
00327 R8UI,
00328 R16I,
00329 R16UI,
00330 R32I,
00331 R32UI,
00332 RG8I,
00333 RG8UI,
00334 RG16I,
00335 RG16UI,
00336 RG32I,
00337 RG32UI,
00338 RGB8I,
00339 RGB8UI,
00340 RGB16I,
00341 RGB16UI,
00342 RGB32I,
00343 RGB32UI,
00344 RGBA8I,
00345 RGBA8UI,
00346 RGBA16I,
00347 RGBA16UI,
00348 RGBA32I,
00349 RGBA32UI,
00350 #ifndef HIDDEN_FROM_DOC
00351 LAST_FORMAT
00352 #endif
00353 };
00354
00356 enum Model {
00360 MODULATE = SbEnums::TEX_MODEL_MODULATE,
00361
00371 DECAL = SbEnums::TEX_MODEL_DECAL,
00372
00376 BLEND = SbEnums::TEX_MODEL_BLEND,
00377
00383 REPLACE = SbEnums::TEX_MODEL_REPLACE,
00384
00390 ADD = SbEnums::TEX_MODEL_ADD,
00391
00399 COMBINE = SbEnums::TEX_MODEL_COMBINE
00400
00401 };
00402
00404 enum Wrap {
00408 REPEAT = SbEnums::TEX_ADDRESS_REPEAT,
00409
00413 CLAMP = SbEnums::TEX_ADDRESS_CLAMP,
00414
00421 CLAMP_TO_BORDER = SbEnums::TEX_ADDRESS_CLAMP_BORDER,
00422
00429 CLAMP_TO_EDGE = SbEnums::TEX_ADDRESS_CLAMP_TO_EDGE,
00430
00437 MIRRORED_REPEAT = SbEnums::TEX_ADDRESS_MIRROR_REPEAT
00438
00439 };
00440
00446 enum Filter
00447 {
00449 AUTO = SbEnums::TEX_FILTER_AUTO,
00451 NEAREST = SbEnums::TEX_FILTER_NEAREST,
00453 LINEAR = SbEnums::TEX_FILTER_LINEAR,
00455 NEAREST_MIPMAP_NEAREST = SbEnums::TEX_FILTER_NEAREST_MIPMAP_NEAREST,
00457 NEAREST_MIPMAP_LINEAR = SbEnums::TEX_FILTER_NEAREST_MIPMAP_LINEAR,
00459 LINEAR_MIPMAP_NEAREST = SbEnums::TEX_FILTER_LINEAR_MIPMAP_NEAREST,
00461 LINEAR_MIPMAP_LINEAR = SbEnums::TEX_FILTER_LINEAR_MIPMAP_LINEAR
00462 } ;
00463
00467 enum HW_Feature {
00471 HW_NPOT = 0,
00472
00476 HW_FLOATFORMAT,
00477
00481 HW_DEPTHFORMAT,
00482
00486 HW_AUTOMIPMAP,
00487
00491 HW_BORDER_CLAMP,
00492
00496 HW_EDGE_CLAMP,
00497
00501 HW_MIRRORED_REPEAT,
00502
00506 HW_COMPRESSION_S3TC,
00507
00511 HW_COMPRESSION_LATC,
00512
00516 HW_COMPRESSION_RGTC,
00517
00518 #ifndef HIDDEN_FROM_DOC
00519 HW_LAST
00520 #endif
00521 };
00522
00532 SoSFEnum internalFormat;
00533
00547 SoSFBool enableCompressedTexture;
00548
00554 SoSFEnum wrapS;
00555
00560 SoSFEnum model;
00561
00565 SoSFColor blendColor;
00566
00573 SoSFBool enableBorder;
00574
00581 SoSFVec4f borderColor;
00582
00594 SoSFFloat maxAnisotropy;
00595
00612 SoSFEnum minFilter;
00613
00633 SoSFEnum magFilter;
00634
00636 enum FileType
00637 {
00639 UNKNOWN,
00641 RGB,
00643 SGI,
00645 TIFF,
00647 GIF,
00649 JPEG,
00651 BMP,
00653 PNG,
00655 JPEG2000,
00657 PGX,
00659 PNM,
00661 RAS,
00663 DDS,
00665 HDRI,
00667 NUM_FILETYPES
00668 };
00669
00679 void setBitmapFileType(FileType in_type);
00680
00684 FileType getBitmapFileType(void);
00685
00693 static SbBool isSupported(HW_Feature feature);
00694
00699 inline virtual void setOverride(const SbBool state)
00700 { override.setValue(state); }
00701
00705 inline virtual SbBool isOverride() const
00706 { return override.getValue(); }
00707
00718 static SbRasterImage* readTexture( const SbString& filename, FileType filetype = UNKNOWN );
00719
00720 private:
00721 virtual void doAction(SoAction *action)=0;
00722 virtual void GLRender(SoGLRenderAction *action)=0;
00723 virtual void callback(SoCallbackAction *action);
00724
00725 private:
00726 static void initClass();
00727 static void exitClass();
00728
00733 virtual bool affectsPath() const;
00734
00735 SoSFBool override;
00736
00742 SoSFBool forInternalShader;
00743
00745 void subImage(const std::vector<SoTextureImageElementBase::TextureDataConfiguration>& subTextures);
00746
00747 private:
00748 SoTexture();
00749
00750 virtual ~SoTexture();
00751
00752 private:
00753
00754 #if 1 SoDEPRECATED
00756 SoSFBool useAutoMipmap;
00757 #endif
00760 void commonConstructor();
00761
00762 friend class inventor::impl::SoExtTexture2Impl;
00763 friend class inventor::impl::SoIndexedTexture2Impl;
00764 friend struct inventor::renderer::Resource<SoTexture>;
00765 friend class inventor::renderer::FixedPipelineShader;
00766 friend class inventor::renderer::RendererContext;
00767 };
00768
00769 #endif
00770
00771