00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef __GZ_TEXTURE_H__
00024 #define __GZ_TEXTURE_H__
00025
00031 #include "gzObject.h"
00032 #include "gzMatrix.h"
00033 #include "gzImage.h"
00034
00036 enum gzTextureMagFilter
00037 {
00038 GZ_TEXTURE_MAG_NEAREST =GZ_NEAREST,
00039 GZ_TEXTURE_MAG_LINEAR =GZ_LINEAR,
00040 };
00041
00043 enum gzTextureMinFilter
00044 {
00045 GZ_TEXTURE_MIN_NEAREST =GZ_NEAREST,
00046 GZ_TEXTURE_MIN_LINEAR =GZ_LINEAR,
00047 GZ_TEXTURE_MIN_NEAREST_MIPMAP_NEAREST =GZ_NEAREST_MIPMAP_NEAREST,
00048 GZ_TEXTURE_MIN_NEAREST_MIPMAP_LINEAR =GZ_NEAREST_MIPMAP_LINEAR,
00049 GZ_TEXTURE_MIN_LINEAR_MIPMAP_NEAREST =GZ_LINEAR_MIPMAP_NEAREST,
00050 GZ_TEXTURE_MIN_LINEAR_MIPMAP_LINEAR =GZ_LINEAR_MIPMAP_LINEAR,
00051 };
00052
00054
00058 enum gzTextureWrapMode
00059 {
00060 GZ_TEXTURE_WRAP_CLAMP = GZ_CLAMP,
00061 GZ_TEXTURE_WRAP_REPEAT = GZ_REPEAT,
00062 GZ_TEXTURE_WRAP_CLAMP_TO_EDGE = GZ_CLAMP_TO_EDGE,
00063 GZ_TEXTURE_WRAP_CLAMP_TO_BORDER = GZ_CLAMP_TO_BORDER,
00064 GZ_TEXTURE_WRAP_MIRRORED_REPEAT = GZ_MIRRORED_REPEAT,
00065 };
00066
00067 class gzContext;
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083 class gzBindTextureInfo
00084 {
00085 public:
00086
00087 gzBindTextureInfo():bindID(0),contextEnumerator(0),isBind(FALSE){};
00088
00089 gzRefPointer<gzRefIdStorage> bindPool;
00090 gzUInt bindID;
00091 gzULong contextEnumerator;
00092 gzBool isBind;
00093 };
00094
00096 enum gzGfxInternalTextureFormat
00097 {
00098 GZ_TEX_FORMAT_LUMINANCE = GZ_LUMINANCE,
00099 GZ_TEX_FORMAT_LUMINANCE_ALPHA = GZ_LUMINANCE_ALPHA,
00100 GZ_TEX_FORMAT_RGB = GZ_RGB,
00101 GZ_TEX_FORMAT_RGBA = GZ_RGBA,
00102
00103 GZ_TEX_FORMAT_ALPHA = GZ_ALPHA,
00104 GZ_TEX_FORMAT_ALPHA4 = GZ_ALPHA4,
00105 GZ_TEX_FORMAT_ALPHA8 = GZ_ALPHA8,
00106 GZ_TEX_FORMAT_ALPHA12 = GZ_ALPHA12,
00107 GZ_TEX_FORMAT_ALPHA16 = GZ_ALPHA16,
00108 GZ_TEX_FORMAT_COMPRESSED_ALPHA = GZ_COMPRESSED_ALPHA,
00109 GZ_TEX_FORMAT_COMPRESSED_LUMINANCE = GZ_COMPRESSED_LUMINANCE,
00110 GZ_TEX_FORMAT_COMPRESSED_LUMINANCE_ALPHA = GZ_COMPRESSED_LUMINANCE_ALPHA,
00111 GZ_TEX_FORMAT_COMPRESSED_INTENSITY = GZ_COMPRESSED_INTENSITY,
00112 GZ_TEX_FORMAT_COMPRESSED_RGB = GZ_COMPRESSED_RGB,
00113 GZ_TEX_FORMAT_COMPRESSED_RGBA = GZ_COMPRESSED_RGBA,
00114 GZ_TEX_FORMAT_DEPTH_COMPONENT = GZ_DEPTH_COMPONENT,
00115 };
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131 class gzTexture : public gzObject
00132 {
00133 public:
00134 GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_GRAPH_EXPORT);
00135
00137 GZ_GRAPH_EXPORT gzTexture();
00138
00140 GZ_GRAPH_EXPORT gzTexture( const gzTexture ©);
00141
00143 GZ_GRAPH_EXPORT virtual ~gzTexture();
00144
00145 GZ_GRAPH_EXPORT gzVoid virtual activate(gzContext *context);
00146 GZ_GRAPH_EXPORT static gzVoid deactivate(gzContext *context);
00147
00148
00150
00153 GZ_GRAPH_EXPORT gzImage * setImage(gzImage *image);
00154
00156 GZ_GRAPH_EXPORT gzImage * getImage();
00157
00158
00160 GZ_GRAPH_EXPORT gzVoid setComponents(gzUByte count);
00161
00162
00164 GZ_GRAPH_EXPORT gzVoid setInternalFormat(gzGfxInternalTextureFormat format);
00165
00166
00168
00172 GZ_GRAPH_EXPORT gzVoid setWrapS(gzTextureWrapMode wrap);
00173
00175 GZ_GRAPH_EXPORT gzTextureWrapMode getWrapS();
00176
00177
00179
00183 GZ_GRAPH_EXPORT gzVoid setWrapT(gzTextureWrapMode wrap);
00184
00186 GZ_GRAPH_EXPORT gzTextureWrapMode getWrapT();
00187
00188
00190
00194 GZ_GRAPH_EXPORT gzVoid setMagFilter(gzTextureMagFilter filter);
00195
00197
00201 GZ_GRAPH_EXPORT gzVoid setMinFilter(gzTextureMinFilter filter);
00202
00203
00205 GZ_GRAPH_EXPORT gzVoid setBorder(gzFloat red , gzFloat green , gzFloat blue , gzFloat alpha);
00206
00207
00209 GZ_GRAPH_EXPORT gzVoid setBorderWidth(gzUShort width);
00210
00212 GZ_GRAPH_EXPORT gzUShort getBorderWidth();
00213
00214
00216
00219 GZ_GRAPH_EXPORT gzVoid useMipMaps(gzBool on);
00220
00222 GZ_GRAPH_EXPORT gzVoid setMipMaps(const gzRefList<gzImage> &imageList);
00223
00225 GZ_GRAPH_EXPORT gzRefList<gzImage> getMipMaps();
00226
00227
00228 GZ_GRAPH_EXPORT gzVoid setBind(gzBool bind);
00229 GZ_GRAPH_EXPORT gzVoid reBind();
00230
00231 GZ_GRAPH_EXPORT gzVoid disposeImage(gzBool on=FALSE);
00232 GZ_GRAPH_EXPORT gzVoid compressImageOnGPU(gzBool on=FALSE);
00233
00235 GZ_GRAPH_EXPORT gzVoid createMipMaps(gzBool rebind=TRUE);
00236
00237
00238
00240 GZ_GRAPH_EXPORT virtual gzReference* clone() const;
00241
00243 GZ_GRAPH_EXPORT virtual gzBool useDeepCopy();
00244
00245
00247
00251 GZ_GRAPH_EXPORT gzBool operator==(const gzTexture &right) const;
00252
00254
00258 GZ_GRAPH_EXPORT gzBool operator!=(const gzTexture &right) const { return !operator==(right); }
00259
00260
00261 private:
00262
00263 gzVoid transferImage(gzContext *context,gzBool forceImageUpload);
00264 gzVoid transferImage(gzImage *image,gzULong level,gzBool fullUpload,gzContext *mainContext);
00265 gzVoid checkImagePowerSize();
00266
00267
00268 gzDynamicArray<gzBindTextureInfo> m_bindInfo;
00269
00270 gzRefList<gzImage> m_mipMaps;
00271 gzRefPointer<gzImage> m_image;
00272
00273 gzEnum m_wrap_s;
00274 gzEnum m_wrap_t;
00275 gzEnum m_mag_filter;
00276 gzEnum m_min_filter;
00277
00278 gzULong m_texDataSize;
00279
00280 gzLookupUpdateID m_updateID;
00281
00282 gzLateBindData<gzRGBA> m_border_color;
00283
00284 gzUShort m_borderWidth;
00285
00286 gzGfxInternalTextureFormat m_internalFormat;
00287
00288 gzBool m_useMipMap:1;
00289 gzBool m_bind:1;
00290 gzBool m_disposeImage:1;
00291 gzBool m_compressOnGPU:1;
00292 };
00293
00294
00295 GZ_DECLARE_REFPTR(gzTexture);
00296
00297
00298 #endif