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
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #include <stdlib.h>
00039 #include <stdio.h>
00040
00041 #include "OSGConfig.h"
00042 #include "OSGBaseFunctions.h"
00043
00044 OSG_BEGIN_NAMESPACE
00045
00046 inline
00047 UInt32 TextureChunk::getStaticClassId(void)
00048 {
00049 return getStaticClass()->getId();
00050 }
00051
00052 inline
00053 const StateChunkClass *TextureChunk::getStaticClass(void)
00054 {
00055 return &TextureChunk::_class;
00056 }
00057
00058 inline
00059 void TextureChunk::setImage(ImagePtr &pImage)
00060 {
00061 addRefCP(pImage);
00062
00063 subRefCP(_sfImage.getValue());
00064
00065 _sfImage.setValue(pImage);
00066 }
00067
00074 inline
00075 void TextureChunk::imageContentChanged( Int32 minx, Int32 maxx,
00076 Int32 miny, Int32 maxy,
00077 Int32 minz, Int32 maxz)
00078 {
00079 TextureChunkPtr tc(*this);
00080
00081 beginEditCP(tc, DirtyMinXFieldMask | DirtyMaxXFieldMask |
00082 DirtyMinYFieldMask | DirtyMaxYFieldMask |
00083 DirtyMinZFieldMask | DirtyMaxZFieldMask);
00084
00085 tc->setDirtyMinX(minx);
00086 tc->setDirtyMaxX(maxx);
00087 tc->setDirtyMinY(miny);
00088 tc->setDirtyMaxY(maxy);
00089 tc->setDirtyMinZ(minz);
00090 tc->setDirtyMaxZ(maxz);
00091
00092 endEditCP( tc, DirtyMinXFieldMask | DirtyMaxXFieldMask |
00093 DirtyMinYFieldMask | DirtyMaxYFieldMask |
00094 DirtyMinZFieldMask | DirtyMaxZFieldMask);
00095 }
00096
00097
00098 inline
00099 bool TextureChunk::hasMultiTexture(Window *win)
00100 {
00101 return win->hasExtension(_arbMultiTex);
00102 }
00103
00105 inline
00106 void TextureChunk::activeTexture(Window *win, UInt16 texture)
00107 {
00108 void (OSG_APIENTRY *ActiveTexture)(GLenum target) =
00109 (void (OSG_APIENTRY*)(GLenum target))
00110 win->getFunction(_funcActiveTexture);
00111
00112 ActiveTexture(GL_TEXTURE0_ARB + texture);
00113 }
00114
00117 inline
00118 bool TextureChunk::activateTexture(Window *win, UInt16 texture)
00119 {
00120 if(hasMultiTexture(win))
00121 {
00122 activeTexture(win, texture);
00123 }
00124 #ifdef OSG_DEBUG
00125 else
00126 {
00127 if(texture != 0)
00128 {
00129 FWARNING(("TextureChunk::activateTexture: trying to activate "
00130 "texture %d, but Window %p doesn't support multi-textures!\n",
00131 texture, win));
00132 return true;
00133 }
00134 }
00135 #endif
00136 return false;
00137 }
00138
00139 inline
00140 void TextureChunk::setShaderOffsetMatrix(Real32 m11, Real32 m12,
00141 Real32 m21, Real32 m22)
00142 {
00143 getShaderOffsetMatrix().resize(4);
00144
00145 getShaderOffsetMatrix()[0] = m11;
00146 getShaderOffsetMatrix()[1] = m12;
00147 getShaderOffsetMatrix()[2] = m21;
00148 getShaderOffsetMatrix()[3] = m22;
00149 }
00150
00151
00152 OSG_END_NAMESPACE
00153
00154 #define OSGTEXTURECHUNK_INLINE_CVSID "@(#)$Id: FCTemplate_inl.h,v 1.7 2001/09/17 14:15:07 vossg Exp $"
00155