Ptex: Ptexture.h Source File

Ptex

Ptexture.h
Go to the documentation of this file.
1#ifndef Ptexture_h
2#define Ptexture_h
3
4/*
5PTEX SOFTWARE
6Copyright 2014 Disney Enterprises, Inc. All rights reserved
7
8Redistribution and use in source and binary forms, with or without
9modification, are permitted provided that the following conditions are
10met:
11
12 * Redistributions of source code must retain the above copyright
13 notice, this list of conditions and the following disclaimer.
14
15 * Redistributions in binary form must reproduce the above copyright
16 notice, this list of conditions and the following disclaimer in
17 the documentation and/or other materials provided with the
18 distribution.
19
20 * The names "Disney", "Walt Disney Pictures", "Walt Disney Animation
21 Studios" or the names of its contributors may NOT be used to
22 endorse or promote products derived from this software without
23 specific prior written permission from Walt Disney Pictures.
24
25Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND
26CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
27BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
28FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED.
29IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR
30CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY
34THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
37*/
38
43
44#include "PtexExports.h"
45#include "PtexInt.h"
46#include "PtexVersion.h"
47
48#include <ostream>
49
50#if !defined(PTEX_PLATFORM_WINDOWS)
51# ifndef DOXYGEN
52# define PTEX_USE_STDSTRING
53# endif
54#endif
55
56#ifdef DOXYGEN
58 namespace Ptex {
59#else
60 PTEX_NAMESPACE_BEGIN
61#endif
62
66 enum MeshType {
67 mt_triangle,
68 mt_quad
69 };
70
72 enum DataType {
73 dt_uint8,
74 dt_uint16,
75 dt_half,
76 dt_float
77};
78
80 enum EdgeFilterMode {
81 efm_none,
82 efm_tanvec
83};
84
86 enum BorderMode {
87 m_clamp,
88 m_black,
89 m_periodic
90};
91
94 enum EdgeId {
95 e_bottom,
96 e_right,
97 e_top,
98 e_left
99};
100
102 enum MetaDataType {
103 mdt_string,
104 mdt_int8,
105 mdt_int16,
106 mdt_int32,
107 mdt_float,
108 mdt_double
109};
110
112 PTEXAPI const char* MeshTypeName(MeshType mt);
113
115 PTEXAPI const char* DataTypeName(DataType dt);
116
118 PTEXAPI const char* BorderModeName(BorderMode m);
119
121 PTEXAPI const char* EdgeFilterModeName(EdgeFilterMode m);
122
124 PTEXAPI const char* EdgeIdName(EdgeId eid);
125
127 PTEXAPI const char* MetaDataTypeName(MetaDataType mdt);
128
130 inline int DataSize(DataType dt) {
131 static const int sizes[] = { 1,2,2,4 };
132 return sizes[dt];
133}
134
136 inline float OneValue(DataType dt) {
137 static const float one[] = { 255.f, 65535.f, 1.f, 1.f };
138 return one[dt];
139}
140
142 inline float OneValueInv(DataType dt) {
143 static const float one[] = { 1.f/255.f, 1.f/65535.f, 1.f, 1.f };
144 return one[dt];
145}
146
148 PTEXAPI void ConvertToFloat(float* dst, const void* src,
149 Ptex::DataType dt, int numChannels);
150
152 PTEXAPI void ConvertFromFloat(void* dst, const float* src,
153 Ptex::DataType dt, int numChannels);
154
159 struct Res {
160 int8_t ulog2;
161 int8_t vlog2;
162
164 Res() : ulog2(0), vlog2(0) {}
165
167 Res(int8_t ulog2_, int8_t vlog2_) : ulog2(ulog2_), vlog2(vlog2_) {}
168
170 Res(uint16_t value) : ulog2(int8_t(value&0xff)), vlog2(int8_t((value>>8)&0xff)) {}
171
173 int u() const { return 1<<(unsigned)ulog2; }
174
176 int v() const { return 1<<(unsigned)vlog2; }
177
179 uint16_t val() const { return uint16_t(ulog2 | (vlog2<<8)); }
180
182 int size() const { return u() * v(); }
183
185 size_t size64() const { return size_t(u()) * v(); }
186
188 bool operator==(const Res& r) const { return r.ulog2 == ulog2 && r.vlog2 == vlog2; }
189
191 bool operator!=(const Res& r) const { return !(r==*this); }
192
194 bool operator>=(const Res& r) const { return ulog2 >= r.ulog2 && vlog2 >= r.vlog2; }
195
197 Res swappeduv() const { return Res(vlog2, ulog2); }
198
200 void swapuv() { *this = swappeduv(); }
201
203 void clamp(const Res& r) {
204 if (ulog2 > r.ulog2) ulog2 = r.ulog2;
205 if (vlog2 > r.vlog2) vlog2 = r.vlog2;
206 }
207
209 int ntilesu(Res tileres) const { return 1<<(ulog2-tileres.ulog2); }
210
212 int ntilesv(Res tileres) const { return 1<<(vlog2-tileres.vlog2); }
213
215 int ntiles(Res tileres) const { return ntilesu(tileres) * ntilesv(tileres); }
216};
217
232 struct FaceInfo {
233 Res res;
234 uint8_t adjedges;
235 uint8_t flags;
236 int32_t adjfaces[4];
237
239 FaceInfo() : res(), adjedges(0), flags(0)
240 {
241 adjfaces[0] = adjfaces[1] = adjfaces[2] = adjfaces[3] = -1;
242 }
243
245 FaceInfo(Res res_) : res(res_), adjedges(0), flags(0)
246 {
247 adjfaces[0] = adjfaces[1] = adjfaces[2] = adjfaces[3] = -1;
248 }
249
251 FaceInfo(Res res_, int adjfaces_[4], int adjedges_[4], bool isSubface_=false)
252 : res(res_), flags(isSubface_ ? flag_subface : 0)
253 {
254 setadjfaces(adjfaces_[0], adjfaces_[1], adjfaces_[2], adjfaces_[3]);
255 setadjedges(adjedges_[0], adjedges_[1], adjedges_[2], adjedges_[3]);
256 }
257
259 EdgeId adjedge(int eid) const { return EdgeId((adjedges >> (2*eid)) & 3); }
260
262 int adjface(int eid) const { return adjfaces[eid]; }
263
265 bool isConstant() const { return (flags & flag_constant) != 0; }
266
268 bool isNeighborhoodConstant() const { return (flags & flag_nbconstant) != 0; }
269
271 bool hasEdits() const { return false; }
272
274 bool isSubface() const { return (flags & flag_subface) != 0; }
275
277 void setadjfaces(int f0, int f1, int f2, int f3)
278 { adjfaces[0] = f0, adjfaces[1] = f1, adjfaces[2] = f2; adjfaces[3] = f3; }
279
281 void setadjedges(int e0, int e1, int e2, int e3)
282 { adjedges = (uint8_t)((e0&3) | ((e1&3)<<2) | ((e2&3)<<4) | ((e3&3)<<6)); }
283
285 enum { flag_constant = 1, flag_obsolete = 2, flag_nbconstant = 4, flag_subface = 8 };
286};
287
288
295#ifdef PTEX_USE_STDSTRING
296typedef std::string String;
297#else
298 class String
299{
300public:
301 String() : _str(0) {}
302 String(const String& str) : _str(0) { *this = str; }
303 PTEXAPI ~String();
304 PTEXAPI String& operator=(const char* str);
305 String& operator=(const String& str) { *this = str._str; return *this; }
306 String& operator=(const std::string& str) { *this = str.c_str(); return *this; }
307 const char* c_str() const { return _str ? _str : ""; }
308 bool empty() const { return _str == 0 || _str[0] == '\0'; }
309
310private:
311 char* _str;
312};
313#endif
314
316#ifndef PTEX_USE_STDSTRING
317 PTEXAPI std::ostream& operator << (std::ostream& stream, const Ptex::String& str);
318#endif
319
320
321#ifdef DOXYGEN
322} // end namespace Ptex
323#endif
324
331 class PtexMetaData {
332 protected:
334 virtual ~PtexMetaData() {}
335
336 public:
338 virtual void release() = 0;
339
341 virtual int numKeys() = 0;
342
344 virtual void getKey(int index, const char*& key, Ptex::MetaDataType& type) = 0;
345
347 virtual bool findKey(const char* key, int& index, Ptex::MetaDataType& type) = 0;
348
351 virtual void getValue(const char* key, const char*& value) = 0;
352
355 virtual void getValue(int index, const char*& value) = 0;
356
359 virtual void getValue(const char* key, const int8_t*& value, int& count) = 0;
360
363 virtual void getValue(int index, const int8_t*& value, int& count) = 0;
364
367 virtual void getValue(const char* key, const int16_t*& value, int& count) = 0;
368
371 virtual void getValue(int index, const int16_t*& value, int& count) = 0;
372
375 virtual void getValue(const char* key, const int32_t*& value, int& count) = 0;
376
379 virtual void getValue(int index, const int32_t*& value, int& count) = 0;
380
383 virtual void getValue(const char* key, const float*& value, int& count) = 0;
384
387 virtual void getValue(int index, const float*& value, int& count) = 0;
388
391 virtual void getValue(const char* key, const double*& value, int& count) = 0;
392
395 virtual void getValue(int index, const double*& value, int& count) = 0;
396};
397
398
409 class PtexFaceData {
410 protected:
412 virtual ~PtexFaceData() {}
413
414 public:
416 virtual void release() = 0;
417
419 virtual bool isConstant() = 0;
420
424 virtual Ptex::Res res() = 0;
425
429 virtual void getPixel(int u, int v, void* result) = 0;
430
437 virtual void* getData() = 0;
438
441 virtual bool isTiled() = 0;
442
444 virtual Ptex::Res tileRes() = 0;
445
447 virtual PtexFaceData* getTile(int tile) = 0;
448};
449
450
460 class PtexTexture {
461 protected:
463 virtual ~PtexTexture() {}
464
465 public:
477 PTEXAPI static PtexTexture* open(const char* path, Ptex::String& error, bool premultiply=0);
478
479
481 virtual void release() = 0;
482
486 virtual const char* path() = 0;
487
489 struct Info {
490 MeshType meshType;
491 DataType dataType;
492 BorderMode uBorderMode;
493 BorderMode vBorderMode;
494 EdgeFilterMode edgeFilterMode;
495 int alphaChannel;
496 int numChannels;
497 int numFaces;
498 };
499 virtual Info getInfo() = 0;
500
502 virtual Ptex::MeshType meshType() = 0;
503
505 virtual Ptex::DataType dataType() = 0;
506
508 virtual Ptex::BorderMode uBorderMode() = 0;
509
511 virtual Ptex::BorderMode vBorderMode() = 0;
512
514 virtual Ptex::EdgeFilterMode edgeFilterMode() = 0;
515
519 virtual int alphaChannel() = 0;
520
522 virtual int numChannels() = 0;
523
525 virtual int numFaces() = 0;
526
528 virtual bool hasEdits() = 0;
529
531 virtual bool hasMipMaps() = 0;
532
534 virtual PtexMetaData* getMetaData() = 0;
535
537 virtual const Ptex::FaceInfo& getFaceInfo(int faceid) = 0;
538
554 virtual void getData(int faceid, void* buffer, int stride) = 0;
555
567 virtual void getData(int faceid, void* buffer, int stride, Ptex::Res res) = 0;
568
570 virtual PtexFaceData* getData(int faceid) = 0;
571
581 virtual PtexFaceData* getData(int faceid, Ptex::Res res) = 0;
582
595 virtual void getPixel(int faceid, int u, int v,
596 float* result, int firstchan, int nchannels) = 0;
597
609 virtual void getPixel(int faceid, int u, int v,
610 float* result, int firstchan, int nchannels,
611 Ptex::Res res) = 0;
612
617 virtual void* getConstantData(int faceid) = 0;
618};
619
620
628 class PtexInputHandler {
629 protected:
630 virtual ~PtexInputHandler() {}
631
632 public:
633 typedef void* Handle;
634
639 virtual Handle open(const char* path) = 0;
640
642 virtual void seek(Handle handle, int64_t pos) = 0;
643
649 virtual size_t read(void* buffer, size_t size, Handle handle) = 0;
650
653 virtual bool close(Handle handle) = 0;
654
656 virtual const char* lastError() = 0;
657};
658
659
667 class PtexErrorHandler {
668 protected:
669 virtual ~PtexErrorHandler() {}
670
671 public:
672 virtual void reportError(const char* error) = 0;
673};
674
675
692
693 class PtexCache {
694 protected:
696 virtual ~PtexCache() {}
697
698 public:
720 PTEXAPI static PtexCache* create(int maxFiles,
721 size_t maxMem,
722 bool premultiply=false,
723 PtexInputHandler* inputHandler=0,
724 PtexErrorHandler* errorHandler=0);
725
727 virtual void release() = 0;
728
734 virtual void setSearchPath(const char* path) = 0;
735
737 virtual const char* getSearchPath() = 0;
738
766 virtual PtexTexture* get(const char* path, Ptex::String& error) = 0;
767
773 virtual void purge(PtexTexture* texture) = 0;
774
780 virtual void purge(const char* path) = 0;
781
786 virtual void purgeAll() = 0;
787
788 struct Stats {
789 uint64_t memUsed;
790 uint64_t peakMemUsed;
791 uint64_t filesOpen;
792 uint64_t peakFilesOpen;
793 uint64_t filesAccessed;
794 uint64_t fileReopens;
795 uint64_t blockReads;
796 };
797
799 virtual void getStats(Stats& stats) = 0;
800};
801
802
818
819 class PtexWriter {
820 protected:
822 virtual ~PtexWriter() {}
823
824 public:
835 PTEXAPI
836 static PtexWriter* open(const char* path,
837 Ptex::MeshType mt, Ptex::DataType dt,
838 int nchannels, int alphachan, int nfaces,
839 Ptex::String& error, bool genmipmaps=true);
840
848 PTEXAPI
849 static PtexWriter* edit(const char* path,
850 Ptex::MeshType mt, Ptex::DataType dt,
851 int nchannels, int alphachan, int nfaces,
852 Ptex::String& error, bool genmipmaps=true);
853
861 PTEXAPI
862 static PtexWriter* edit(const char* path, bool incremental,
863 Ptex::MeshType mt, Ptex::DataType dt,
864 int nchannels, int alphachan, int nfaces,
865 Ptex::String& error, bool genmipmaps=true);
866
869 PTEXAPI
870 static bool applyEdits(const char* path, Ptex::String& error);
871
873 virtual void release() = 0;
874
876 virtual void setBorderModes(Ptex::BorderMode uBorderMode, Ptex::BorderMode vBorderMode) = 0;
877
879 virtual void setEdgeFilterMode(Ptex::EdgeFilterMode edgeFilterMode) = 0;
880
882 virtual void writeMeta(const char* key, const char* string) = 0;
883
885 virtual void writeMeta(const char* key, const int8_t* value, int count) = 0;
886
888 virtual void writeMeta(const char* key, const int16_t* value, int count) = 0;
889
891 virtual void writeMeta(const char* key, const int32_t* value, int count) = 0;
892
894 virtual void writeMeta(const char* key, const float* value, int count) = 0;
895
897 virtual void writeMeta(const char* key, const double* value, int count) = 0;
898
900 virtual void writeMeta(PtexMetaData* data) = 0;
901
913 virtual bool writeFace(int faceid, const Ptex::FaceInfo& info, const void* data, int stride=0) = 0;
914
920 virtual bool writeConstantFace(int faceid, const Ptex::FaceInfo& info, const void* data) = 0;
921
925 virtual bool close(Ptex::String& error) = 0;
926
927#if NEW_API
928 virtual bool writeFaceReduction(int faceid, const Ptex::Res& res, const void* data, int stride=0) = 0;
929 virtual bool writeConstantFaceReduction(int faceid, const Ptex::Res& res, const void* data) = 0;
930#endif
931};
932
933
943 class PtexFilter {
944 protected:
946 virtual ~PtexFilter() {}
947
948 public:
950 enum FilterType {
951 f_point,
952 f_bilinear,
953 f_box,
954 f_gaussian,
955 f_bicubic,
956 f_bspline,
957 f_catmullrom,
958 f_mitchell
959 };
960
962 struct Options {
963 int __structSize;
964 FilterType filter;
965 bool lerp;
966 float sharpness;
967 bool noedgeblend;
968
970 Options(FilterType filter_=f_box, bool lerp_=0, float sharpness_=0, bool noedgeblend_=0) :
971 __structSize(sizeof(Options)),
972 filter(filter_), lerp(lerp_), sharpness(sharpness_), noedgeblend(noedgeblend_) {}
973 };
974
975
976 /* Evaluate a texture using specified filter options
977
978 The filter region is a parallelogram centered at the given
979 (u,v) coordinate with sides defined by two vectors [uw1, vw1]
980 and [uw2, vw2]. For an axis-aligned rectangle, the vectors
981 are [uw, 0] and [0, vw]. See \link filterfootprint Filter
982 Footprint \endlink for details.
983
984 @param tx Texture to evaluate
985 @param opts Filter options
986 @param result Buffer to hold filter result. Must be large enough to hold nchannels worth of data.
987 @param firstchan First channel to evaluate [0..tx->numChannels()-1]
988 @param nchannels Number of channels to evaluate
989 @param faceid Face index [0..tx->numFaces()-1]
990 @param u U coordinate, normalized [0..1]
991 @param v V coordinate, normalized [0..1]
992 @param uw1 U filter width 1, normalized [0..1]
993 @param vw1 V filter width 1, normalized [0..1]
994 @param uw2 U filter width 2, normalized [0..1]
995 @param vw2 V filter width 2, normalized [0..1]
996 @param width scale factor for filter width
997 @param blur amount to add to filter width [0..1]
998 */
999 PTEXAPI static void eval(PtexTexture* tx, const Options& opts,
1000 float* result, int firstchan, int nchannels,
1001 int faceid, float u, float v, float uw1, float vw1, float uw2, float vw2,
1002 float width=1, float blur=0);
1003
1004 /* Construct a filter for the given texture. Deprecated. (use static eval method)
1005 */
1006 PTEXAPI static PtexFilter* getFilter(PtexTexture* tx, const Options& opts);
1007
1009 virtual void release() = 0;
1010
1032 virtual void eval(float* result, int firstchan, int nchannels,
1033 int faceid, float u, float v, float uw1, float vw1, float uw2, float vw2,
1034 float width=1, float blur=0) = 0;
1035};
1036
1037
1067 template <class T> class PtexPtr {
1068 T* _ptr;
1069 public:
1071 PtexPtr(T* ptr=0) : _ptr(ptr) {}
1072
1074 ~PtexPtr() { if (_ptr) _ptr->release(); }
1075
1077 operator T* () const { return _ptr; }
1078
1080 T* operator-> () const { return _ptr; }
1081
1083 T* get() const { return _ptr; }
1084
1086 void swap(PtexPtr& p)
1087 {
1088 T* tmp = p._ptr;
1089 p._ptr = _ptr;
1090 _ptr = tmp;
1091 }
1092
1094 void reset(T* ptr=0) {
1095 if (_ptr) _ptr->release();
1096 _ptr = ptr;
1097 }
1098
1099 private:
1101 PtexPtr(const PtexPtr& p);
1102
1104 void operator= (PtexPtr& p);
1105};
1106
1107#ifndef DOXYGEN
1108namespace PtexUtils {}
1109
1110 PTEX_NAMESPACE_END
1111
1112using Ptex::PtexMetaData;
1113using Ptex::PtexFaceData;
1114using Ptex::PtexTexture;
1115using Ptex::PtexInputHandler;
1116using Ptex::PtexErrorHandler;
1117using Ptex::PtexCache;
1118using Ptex::PtexWriter;
1119using Ptex::PtexFilter;
1120using Ptex::PtexPtr;
1121namespace PtexUtils = Ptex::PtexUtils;
1122
1123#endif
1124#endif
PtexExports.h
Definitions related to exported Ptex API symbol visibility.
PTEXAPI
#define PTEXAPI
Definition PtexExports.h:60
PtexInt.h
Portable fixed-width integer types.
PtexVersion.h
PTEX_NAMESPACE_END
#define PTEX_NAMESPACE_END
Definition PtexVersion.h:62
PtexCache
File-handle and memory cache for reading ptex files.
Definition Ptexture.h:693
PtexCache::getStats
virtual void getStats(Stats &stats)=0
Get stats.
PtexCache::release
virtual void release()=0
Release PtexCache. Cache will be immediately destroyed and all resources will be released.
PtexCache::get
virtual PtexTexture * get(const char *path, Ptex::String &error)=0
Access a texture.
PtexCache::purge
virtual void purge(PtexTexture *texture)=0
Remove a texture file from the cache.
PtexCache::create
static PtexCache * create(int maxFiles, size_t maxMem, bool premultiply=false, PtexInputHandler *inputHandler=0, PtexErrorHandler *errorHandler=0)
Create a cache with the specified limits.
Definition PtexCache.cpp:173
PtexCache::setSearchPath
virtual void setSearchPath(const char *path)=0
Set a search path for finding textures.
PtexCache::~PtexCache
virtual ~PtexCache()
Destructor not for public use. Use release() instead.
Definition Ptexture.h:696
PtexCache::getSearchPath
virtual const char * getSearchPath()=0
Query the search path.
PtexCache::purgeAll
virtual void purgeAll()=0
Remove all texture files from the cache.
PtexCache::purge
virtual void purge(const char *path)=0
Remove a texture file from the cache by pathname.
PtexErrorHandler
Custom handler interface redirecting Ptex error messages.
Definition Ptexture.h:667
PtexErrorHandler::reportError
virtual void reportError(const char *error)=0
PtexErrorHandler::~PtexErrorHandler
virtual ~PtexErrorHandler()
Definition Ptexture.h:669
PtexFaceData
Per-face texture data accessor.
Definition Ptexture.h:409
PtexFaceData::getTile
virtual PtexFaceData * getTile(int tile)=0
Access a tile from the data block.
PtexFaceData::isTiled
virtual bool isTiled()=0
True if this data block is tiled.
PtexFaceData::release
virtual void release()=0
Release resources held by this pointer (pointer becomes invalid).
PtexFaceData::getPixel
virtual void getPixel(int u, int v, void *result)=0
Read a single texel from the data block.
PtexFaceData::tileRes
virtual Ptex::Res tileRes()=0
Resolution of each tile in this data block.
PtexFaceData::isConstant
virtual bool isConstant()=0
True if this data block is constant.
PtexFaceData::~PtexFaceData
virtual ~PtexFaceData()
Destructor not for public use. Use release() instead.
Definition Ptexture.h:412
PtexFaceData::getData
virtual void * getData()=0
Access the data from this data block.
PtexFaceData::res
virtual Ptex::Res res()=0
Resolution of the texture held by this data block.
PtexFilter
Interface for filtered sampling of ptex data files.
Definition Ptexture.h:943
PtexFilter::getFilter
static PtexFilter * getFilter(PtexTexture *tx, const Options &opts)
Definition PtexFilters.cpp:419
PtexFilter::release
virtual void release()=0
Release resources held by this pointer (pointer becomes invalid).
PtexFilter::~PtexFilter
virtual ~PtexFilter()
Destructor not for public use. Use release() instead.
Definition Ptexture.h:946
PtexFilter::eval
static void eval(PtexTexture *tx, const Options &opts, float *result, int firstchan, int nchannels, int faceid, float u, float v, float uw1, float vw1, float uw2, float vw2, float width=1, float blur=0)
Definition PtexFilters.cpp:446
PtexFilter::eval
virtual void eval(float *result, int firstchan, int nchannels, int faceid, float u, float v, float uw1, float vw1, float uw2, float vw2, float width=1, float blur=0)=0
Apply filter to a ptex data file.
PtexFilter::FilterType
FilterType
Filter types.
Definition Ptexture.h:950
PtexFilter::f_bicubic
@ f_bicubic
General bi-cubic filter (uses sharpness option).
Definition Ptexture.h:955
PtexFilter::f_bspline
@ f_bspline
BSpline (equivalent to bi-cubic w/ sharpness=0).
Definition Ptexture.h:956
PtexFilter::f_bilinear
@ f_bilinear
Bi-linear interpolation.
Definition Ptexture.h:952
PtexFilter::f_catmullrom
@ f_catmullrom
Catmull-Rom (equivalent to bi-cubic w/ sharpness=1).
Definition Ptexture.h:957
PtexFilter::f_mitchell
@ f_mitchell
Mitchell (equivalent to bi-cubic w/ sharpness=2/3).
Definition Ptexture.h:958
PtexFilter::f_box
@ f_box
Box filter.
Definition Ptexture.h:953
PtexFilter::f_gaussian
@ f_gaussian
Gaussian filter.
Definition Ptexture.h:954
PtexFilter::f_point
@ f_point
Point-sampled (no filtering).
Definition Ptexture.h:951
PtexInputHandler
Custom handler interface for intercepting and redirecting Ptex input stream calls.
Definition Ptexture.h:628
PtexInputHandler::seek
virtual void seek(Handle handle, int64_t pos)=0
Seek to an absolute byte position in the input stream.
PtexInputHandler::~PtexInputHandler
virtual ~PtexInputHandler()
Definition Ptexture.h:630
PtexInputHandler::read
virtual size_t read(void *buffer, size_t size, Handle handle)=0
Read a number of bytes from the file.
PtexInputHandler::lastError
virtual const char * lastError()=0
Return the last error message encountered.
PtexInputHandler::open
virtual Handle open(const char *path)=0
Open a file in read mode.
PtexInputHandler::Handle
void * Handle
Definition Ptexture.h:633
PtexInputHandler::close
virtual bool close(Handle handle)=0
Close a file.
PtexMetaData
Meta data accessor.
Definition Ptexture.h:331
PtexMetaData::getValue
virtual void getValue(int index, const int8_t *&value, int &count)=0
Query the value of a given meta data entry by index.
PtexMetaData::getValue
virtual void getValue(int index, const int32_t *&value, int &count)=0
Query the value of a given meta data entry by index.
PtexMetaData::getValue
virtual void getValue(const char *key, const double *&value, int &count)=0
Query the value of a given meta data entry.
PtexMetaData::numKeys
virtual int numKeys()=0
Query number of meta data entries stored in file.
PtexMetaData::~PtexMetaData
virtual ~PtexMetaData()
Destructor not for public use. Use release() instead.
Definition Ptexture.h:334
PtexMetaData::getValue
virtual void getValue(const char *key, const int8_t *&value, int &count)=0
Query the value of a given meta data entry.
PtexMetaData::release
virtual void release()=0
Release resources held by this pointer (pointer becomes invalid).
PtexMetaData::getValue
virtual void getValue(int index, const double *&value, int &count)=0
Query the value of a given meta data entry by index.
PtexMetaData::getValue
virtual void getValue(const char *key, const int32_t *&value, int &count)=0
Query the value of a given meta data entry.
PtexMetaData::findKey
virtual bool findKey(const char *key, int &index, Ptex::MetaDataType &type)=0
Query the index and type of a meta data entry by name.
PtexMetaData::getValue
virtual void getValue(int index, const int16_t *&value, int &count)=0
Query the value of a given meta data entry by index.
PtexMetaData::getValue
virtual void getValue(const char *key, const float *&value, int &count)=0
Query the value of a given meta data entry.
PtexMetaData::getValue
virtual void getValue(int index, const float *&value, int &count)=0
Query the value of a given meta data entry by index.
PtexMetaData::getValue
virtual void getValue(const char *key, const char *&value)=0
Query the value of a given meta data entry.
PtexMetaData::getValue
virtual void getValue(int index, const char *&value)=0
Query the value of a given meta data entry by index.
PtexMetaData::getKey
virtual void getKey(int index, const char *&key, Ptex::MetaDataType &type)=0
Query the name and type of a meta data entry.
PtexMetaData::getValue
virtual void getValue(const char *key, const int16_t *&value, int &count)=0
Query the value of a given meta data entry.
PtexPtr::PtexPtr
PtexPtr(const PtexPtr &p)
Copying prohibited.
PtexPtr::PtexPtr
PtexPtr(T *ptr=0)
Constructor.
Definition Ptexture.h:1071
PtexPtr::reset
void reset(T *ptr=0)
Deallocate object pointed to, and optionally set to new value.
Definition Ptexture.h:1094
PtexPtr::get
T * get() const
Get pointer value.
Definition Ptexture.h:1083
PtexPtr::operator=
void operator=(PtexPtr &p)
Assignment prohibited.
PtexPtr::~PtexPtr
~PtexPtr()
Destructor, calls ptr->release().
Definition Ptexture.h:1074
PtexPtr::operator->
T * operator->() const
Access members of pointer.
Definition Ptexture.h:1080
PtexPtr::swap
void swap(PtexPtr &p)
Swap pointer values.
Definition Ptexture.h:1086
PtexPtr::_ptr
T * _ptr
Definition Ptexture.h:1068
PtexTexture
Interface for reading data from a ptex file.
Definition Ptexture.h:460
PtexTexture::getConstantData
virtual void * getConstantData(int faceid)=0
Access the constant (or average) data value for a given face.
PtexTexture::getData
virtual void getData(int faceid, void *buffer, int stride)=0
Access texture data for a face at highest-resolution.
PtexTexture::meshType
virtual Ptex::MeshType meshType()=0
Type of mesh for which texture data is defined.
PtexTexture::uBorderMode
virtual Ptex::BorderMode uBorderMode()=0
Mode for filtering texture access beyond mesh border.
PtexTexture::~PtexTexture
virtual ~PtexTexture()
Destructor not for public use. Use release() instead.
Definition Ptexture.h:463
PtexTexture::getMetaData
virtual PtexMetaData * getMetaData()=0
Access meta data.
PtexTexture::hasMipMaps
virtual bool hasMipMaps()=0
True if the file has mipmaps.
PtexTexture::getInfo
virtual Info getInfo()=0
PtexTexture::numFaces
virtual int numFaces()=0
Number of faces stored in file.
PtexTexture::dataType
virtual Ptex::DataType dataType()=0
Type of data stored in file.
PtexTexture::getData
virtual void getData(int faceid, void *buffer, int stride, Ptex::Res res)=0
Access texture data for a face at a specific resolution.
PtexTexture::getData
virtual PtexFaceData * getData(int faceid, Ptex::Res res)=0
Access texture data for a face at a specific resolution as stored on disk.
PtexTexture::path
virtual const char * path()=0
Path that file was opened with.
PtexTexture::alphaChannel
virtual int alphaChannel()=0
Index of alpha channel (if any).
PtexTexture::edgeFilterMode
virtual Ptex::EdgeFilterMode edgeFilterMode()=0
Mode for filtering textures across edges.
PtexTexture::open
static PtexTexture * open(const char *path, Ptex::String &error, bool premultiply=0)
Open a ptex file for reading.
Definition PtexReader.cpp:62
PtexTexture::getPixel
virtual void getPixel(int faceid, int u, int v, float *result, int firstchan, int nchannels)=0
Access a single texel from the highest resolution texture .
PtexTexture::getData
virtual PtexFaceData * getData(int faceid)=0
Access texture data for a face at highest-resolution as stored on disk.
PtexTexture::hasEdits
virtual bool hasEdits()=0
Obsolete (returns false).
PtexTexture::vBorderMode
virtual Ptex::BorderMode vBorderMode()=0
Mode for filtering texture access beyond mesh border.
PtexTexture::numChannels
virtual int numChannels()=0
Number of channels stored in file.
PtexTexture::getFaceInfo
virtual const Ptex::FaceInfo & getFaceInfo(int faceid)=0
Access resolution and adjacency information about a face.
PtexTexture::getPixel
virtual void getPixel(int faceid, int u, int v, float *result, int firstchan, int nchannels, Ptex::Res res)=0
Access a single texel for a face at a particular resolution.
PtexTexture::release
virtual void release()=0
Release resources held by this pointer (pointer becomes invalid).
PtexWriter
Interface for writing data to a ptex file.
Definition Ptexture.h:819
PtexWriter::setBorderModes
virtual void setBorderModes(Ptex::BorderMode uBorderMode, Ptex::BorderMode vBorderMode)=0
Set border modes.
PtexWriter::writeMeta
virtual void writeMeta(const char *key, const float *value, int count)=0
Write an array of signed 32-bit floats as meta data.
PtexWriter::setEdgeFilterMode
virtual void setEdgeFilterMode(Ptex::EdgeFilterMode edgeFilterMode)=0
Set edge filter mode.
PtexWriter::release
virtual void release()=0
Release resources held by this pointer (pointer becomes invalid).
PtexWriter::writeMeta
virtual void writeMeta(const char *key, const int8_t *value, int count)=0
Write an array of signed 8-bit integers as meta data.
PtexWriter::applyEdits
static bool applyEdits(const char *path, Ptex::String &error)
Obsolete (returns true).
Definition PtexWriter.cpp:175
PtexWriter::writeMeta
virtual void writeMeta(const char *key, const int32_t *value, int count)=0
Write an array of signed 32-bit integers as meta data.
PtexWriter::writeMeta
virtual void writeMeta(const char *key, const int16_t *value, int count)=0
Write an array of signed 16-bit integers as meta data.
PtexWriter::writeMeta
virtual void writeMeta(const char *key, const char *string)=0
Write a string as meta data.
PtexWriter::edit
static PtexWriter * edit(const char *path, Ptex::MeshType mt, Ptex::DataType dt, int nchannels, int alphachan, int nfaces, Ptex::String &error, bool genmipmaps=true)
Open an existing texture file for writing.
Definition PtexWriter.cpp:119
PtexWriter::close
virtual bool close(Ptex::String &error)=0
Close the file.
PtexWriter::writeMeta
virtual void writeMeta(const char *key, const double *value, int count)=0
Write an array of signed 32-bit doubles as meta data.
PtexWriter::writeMeta
virtual void writeMeta(PtexMetaData *data)=0
Copy meta data from an existing meta data block.
PtexWriter::open
static PtexWriter * open(const char *path, Ptex::MeshType mt, Ptex::DataType dt, int nchannels, int alphachan, int nfaces, Ptex::String &error, bool genmipmaps=true)
Open a new texture file for writing.
Definition PtexWriter.cpp:100
PtexWriter::writeConstantFace
virtual bool writeConstantFace(int faceid, const Ptex::FaceInfo &info, const void *data)=0
Write constant texture data for a face.
PtexWriter::~PtexWriter
virtual ~PtexWriter()
Destructor not for public use. Use release() instead.
Definition Ptexture.h:822
PtexWriter::writeFace
virtual bool writeFace(int faceid, const Ptex::FaceInfo &info, const void *data, int stride=0)=0
Write texture data for a face.
Ptex::String
Memory-managed string.
Definition Ptexture.h:299
Ptex::String::c_str
const char * c_str() const
Definition Ptexture.h:307
Ptex::String::operator=
String & operator=(const std::string &str)
Definition Ptexture.h:306
Ptex::String::empty
bool empty() const
Definition Ptexture.h:308
Ptex::String::String
String()
Definition Ptexture.h:301
Ptex::String::_str
char * _str
Definition Ptexture.h:311
Ptex::String::operator=
String & operator=(const String &str)
Definition Ptexture.h:305
Ptex::String::String
String(const String &str)
Definition Ptexture.h:302
Ptex::String::operator=
String & operator=(const char *str)
Definition PtexUtils.cpp:685
Ptex::String::operator<<
std::ostream & operator<<(std::ostream &stream, const Ptex::String &str)
std::stream output operator.
PTEX_NAMESPACE_BEGIN
Definition PtexSeparableKernel.cpp:42
PtexUtils
Definition PtexUtils.cpp:145
Ptex
Common data structures and enums used throughout the API.
Definition Ptexture.h:58
Ptex::DataTypeName
const char * DataTypeName(DataType dt)
Look up name of given data type.
Ptex::DataSize
int DataSize(DataType dt)
Look up size of given data type (in bytes).
Definition Ptexture.h:130
Ptex::MeshTypeName
const char * MeshTypeName(MeshType mt)
Look up name of given mesh type.
Ptex::ConvertFromFloat
void ConvertFromFloat(void *dst, const float *src, Ptex::DataType dt, int numChannels)
Convert a number of data values from float to the given data type.
Ptex::EdgeId
EdgeId
Edge IDs used in adjacency data in the Ptex::FaceInfo struct.
Definition Ptexture.h:94
Ptex::e_right
@ e_right
Right edge, from UV (1,0) to (1,1).
Definition Ptexture.h:96
Ptex::e_top
@ e_top
Top edge, from UV (1,1) to (0,1).
Definition Ptexture.h:97
Ptex::e_left
@ e_left
Left edge, from UV (0,1) to (0,0).
Definition Ptexture.h:98
Ptex::e_bottom
@ e_bottom
Bottom edge, from UV (0,0) to (1,0).
Definition Ptexture.h:95
Ptex::EdgeFilterModeName
const char * EdgeFilterModeName(EdgeFilterMode m)
Look up name of given edge filter mode.
Ptex::DataType
DataType
Type of data stored in texture file.
Definition Ptexture.h:72
Ptex::dt_half
@ dt_half
Half-precision (16-bit) floating point.
Definition Ptexture.h:75
Ptex::dt_float
@ dt_float
Single-precision (32-bit) floating point.
Definition Ptexture.h:76
Ptex::dt_uint16
@ dt_uint16
Unsigned, 16-bit integer.
Definition Ptexture.h:74
Ptex::dt_uint8
@ dt_uint8
Unsigned, 8-bit integer.
Definition Ptexture.h:73
Ptex::OneValue
float OneValue(DataType dt)
Look up value of given data type that corresponds to the normalized value of 1.0.
Definition Ptexture.h:136
Ptex::MetaDataTypeName
const char * MetaDataTypeName(MetaDataType mdt)
Look up name of given meta data type.
Ptex::EdgeIdName
const char * EdgeIdName(EdgeId eid)
Look up name of given edge ID.
Ptex::MeshType
MeshType
Type of base mesh for which the textures are defined.
Definition Ptexture.h:66
Ptex::mt_triangle
@ mt_triangle
Mesh is triangle-based.
Definition Ptexture.h:67
Ptex::mt_quad
@ mt_quad
Mesh is quad-based.
Definition Ptexture.h:68
Ptex::BorderMode
BorderMode
How to handle mesh border when filtering.
Definition Ptexture.h:86
Ptex::m_black
@ m_black
texel beyond border are assumed to be black
Definition Ptexture.h:88
Ptex::m_clamp
@ m_clamp
texel access is clamped to border
Definition Ptexture.h:87
Ptex::m_periodic
@ m_periodic
texel access wraps to other side of face
Definition Ptexture.h:89
Ptex::ConvertToFloat
void ConvertToFloat(float *dst, const void *src, Ptex::DataType dt, int numChannels)
Convert a number of data values from the given data type to float.
Ptex::MetaDataType
MetaDataType
Type of meta data entry.
Definition Ptexture.h:102
Ptex::mdt_string
@ mdt_string
Null-terminated string.
Definition Ptexture.h:103
Ptex::mdt_float
@ mdt_float
Single-precision (32-bit) floating point.
Definition Ptexture.h:107
Ptex::mdt_int32
@ mdt_int32
Signed 32-bit integer.
Definition Ptexture.h:106
Ptex::mdt_int8
@ mdt_int8
Signed 8-bit integer.
Definition Ptexture.h:104
Ptex::mdt_double
@ mdt_double
Double-precision (32-bit) floating point.
Definition Ptexture.h:108
Ptex::mdt_int16
@ mdt_int16
Signed 16-bit integer.
Definition Ptexture.h:105
Ptex::EdgeFilterMode
EdgeFilterMode
How to handle transformation across edges when filtering.
Definition Ptexture.h:80
Ptex::efm_none
@ efm_none
Don't do anything with the values.
Definition Ptexture.h:81
Ptex::efm_tanvec
@ efm_tanvec
Values are vectors in tangent space; rotate values.
Definition Ptexture.h:82
Ptex::BorderModeName
const char * BorderModeName(BorderMode m)
Look up name of given border mode.
Ptex::OneValueInv
float OneValueInv(DataType dt)
Lookup up inverse value of given data type that corresponds to the normalized value of 1....
Definition Ptexture.h:142
PtexCache::Stats
Definition Ptexture.h:788
PtexCache::Stats::filesAccessed
uint64_t filesAccessed
Definition Ptexture.h:793
PtexCache::Stats::filesOpen
uint64_t filesOpen
Definition Ptexture.h:791
PtexCache::Stats::peakFilesOpen
uint64_t peakFilesOpen
Definition Ptexture.h:792
PtexCache::Stats::fileReopens
uint64_t fileReopens
Definition Ptexture.h:794
PtexCache::Stats::memUsed
uint64_t memUsed
Definition Ptexture.h:789
PtexCache::Stats::blockReads
uint64_t blockReads
Definition Ptexture.h:795
PtexCache::Stats::peakMemUsed
uint64_t peakMemUsed
Definition Ptexture.h:790
PtexFilter::Options::filter
FilterType filter
Filter type.
Definition Ptexture.h:964
PtexFilter::Options::__structSize
int __structSize
(for internal use only)
Definition Ptexture.h:963
PtexFilter::Options::sharpness
float sharpness
Filter sharpness, 0..1 (for general bi-cubic filter only).
Definition Ptexture.h:966
PtexFilter::Options::lerp
bool lerp
Interpolate between mipmap levels.
Definition Ptexture.h:965
PtexFilter::Options::noedgeblend
bool noedgeblend
Disable cross-face filtering. Useful for debugging or rendering on polys.
Definition Ptexture.h:967
PtexFilter::Options::Options
Options(FilterType filter_=f_box, bool lerp_=0, float sharpness_=0, bool noedgeblend_=0)
Constructor - sets defaults.
Definition Ptexture.h:970
PtexTexture::Info
Get most commonly used info in a single call for convenience / efficiency.
Definition Ptexture.h:489
PtexTexture::Info::numChannels
int numChannels
Definition Ptexture.h:496
PtexTexture::Info::uBorderMode
BorderMode uBorderMode
Definition Ptexture.h:492
PtexTexture::Info::vBorderMode
BorderMode vBorderMode
Definition Ptexture.h:493
PtexTexture::Info::edgeFilterMode
EdgeFilterMode edgeFilterMode
Definition Ptexture.h:494
PtexTexture::Info::alphaChannel
int alphaChannel
Definition Ptexture.h:495
PtexTexture::Info::dataType
DataType dataType
Definition Ptexture.h:491
PtexTexture::Info::numFaces
int numFaces
Definition Ptexture.h:497
PtexTexture::Info::meshType
MeshType meshType
Definition Ptexture.h:490
Ptex::FaceInfo
Information about a face, as stored in the Ptex file header.
Definition Ptexture.h:232
Ptex::FaceInfo::setadjedges
void setadjedges(int e0, int e1, int e2, int e3)
Set the adjedges data.
Definition Ptexture.h:281
Ptex::FaceInfo::hasEdits
bool hasEdits() const
Obsolete (returns false).
Definition Ptexture.h:271
Ptex::FaceInfo::isNeighborhoodConstant
bool isNeighborhoodConstant() const
Determine if neighborhood of face is constant (by checking a flag).
Definition Ptexture.h:268
Ptex::FaceInfo::FaceInfo
FaceInfo(Res res_)
Constructor.
Definition Ptexture.h:245
Ptex::FaceInfo::isSubface
bool isSubface() const
Determine if face is a subface (by checking a flag).
Definition Ptexture.h:274
Ptex::FaceInfo::res
Res res
Resolution of face.
Definition Ptexture.h:233
Ptex::FaceInfo::adjedge
EdgeId adjedge(int eid) const
Access an adjacent edge id. The eid value must be 0..3.
Definition Ptexture.h:259
Ptex::FaceInfo::isConstant
bool isConstant() const
Determine if face is constant (by checking a flag).
Definition Ptexture.h:265
Ptex::FaceInfo::adjedges
uint8_t adjedges
Adjacent edges, 2 bits per edge.
Definition Ptexture.h:234
Ptex::FaceInfo::adjfaces
int32_t adjfaces[4]
Adjacent faces (-1 == no adjacent face).
Definition Ptexture.h:236
Ptex::FaceInfo::flags
uint8_t flags
Flags.
Definition Ptexture.h:235
Ptex::FaceInfo::FaceInfo
FaceInfo(Res res_, int adjfaces_[4], int adjedges_[4], bool isSubface_=false)
Constructor.
Definition Ptexture.h:251
Ptex::FaceInfo::FaceInfo
FaceInfo()
Default constructor.
Definition Ptexture.h:239
Ptex::FaceInfo::setadjfaces
void setadjfaces(int f0, int f1, int f2, int f3)
Set the adjfaces data.
Definition Ptexture.h:277
Ptex::FaceInfo::adjface
int adjface(int eid) const
Access an adjacent face id. The eid value must be 0..3.
Definition Ptexture.h:262
Ptex::FaceInfo::flag_constant
@ flag_constant
Definition Ptexture.h:285
Ptex::FaceInfo::flag_obsolete
@ flag_obsolete
Definition Ptexture.h:285
Ptex::FaceInfo::flag_nbconstant
@ flag_nbconstant
Definition Ptexture.h:285
Ptex::FaceInfo::flag_subface
@ flag_subface
Definition Ptexture.h:285
Ptex::Res
Pixel resolution of a given texture.
Definition Ptexture.h:159
Ptex::Res::operator>=
bool operator>=(const Res &r) const
True if res is >= given res in both u and v directions.
Definition Ptexture.h:194
Ptex::Res::ntilesu
int ntilesu(Res tileres) const
Determine the number of tiles in the u direction for the given tile res.
Definition Ptexture.h:209
Ptex::Res::operator!=
bool operator!=(const Res &r) const
Comparison operator.
Definition Ptexture.h:191
Ptex::Res::Res
Res(uint16_t value)
Constructor.
Definition Ptexture.h:170
Ptex::Res::ulog2
int8_t ulog2
log base 2 of u resolution, in texels
Definition Ptexture.h:160
Ptex::Res::ntilesv
int ntilesv(Res tileres) const
Determine the number of tiles in the v direction for the given tile res.
Definition Ptexture.h:212
Ptex::Res::Res
Res()
Default constructor, sets res to 0 (1x1 texel).
Definition Ptexture.h:164
Ptex::Res::val
uint16_t val() const
Resolution as a single 16-bit integer value.
Definition Ptexture.h:179
Ptex::Res::v
int v() const
V resolution in texels.
Definition Ptexture.h:176
Ptex::Res::swappeduv
Res swappeduv() const
Get value of resolution with u and v swapped.
Definition Ptexture.h:197
Ptex::Res::size
int size() const
Total size of specified texture in texels (u * v). (deprecated, use size64).
Definition Ptexture.h:182
Ptex::Res::size64
size_t size64() const
Total size of specified texture in texels (u * v), allowing arbitrarily large textures.
Definition Ptexture.h:185
Ptex::Res::Res
Res(int8_t ulog2_, int8_t vlog2_)
Constructor.
Definition Ptexture.h:167
Ptex::Res::swapuv
void swapuv()
Swap the u and v resolution values in place.
Definition Ptexture.h:200
Ptex::Res::clamp
void clamp(const Res &r)
Clamp the resolution value against the given value.
Definition Ptexture.h:203
Ptex::Res::ntiles
int ntiles(Res tileres) const
Determine the total number of tiles for the given tile res.
Definition Ptexture.h:215
Ptex::Res::u
int u() const
U resolution in texels.
Definition Ptexture.h:173
Ptex::Res::vlog2
int8_t vlog2
log base 2 of v resolution, in texels
Definition Ptexture.h:161
Ptex::Res::operator==
bool operator==(const Res &r) const
Comparison operator.
Definition Ptexture.h:188