Ptex

Ptexture.h
Go to the documentation of this file.
1 #ifndef Ptexture_h
2 #define Ptexture_h
3
4 /*
5 PTEX SOFTWARE
6 Copyright 2014 Disney Enterprises, Inc. All rights reserved
7
8 Redistribution and use in source and binary forms, with or without
9 modification, are permitted provided that the following conditions are
10 met:
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
25 Disclaimer: THIS SOFTWARE IS PROVIDED BY WALT DISNEY PICTURES AND
26 CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
27 BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS
28 FOR A PARTICULAR PURPOSE, NONINFRINGEMENT AND TITLE ARE DISCLAIMED.
29 IN NO EVENT SHALL WALT DISNEY PICTURES, THE COPYRIGHT HOLDER OR
30 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
31 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
32 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
33 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND BASED ON ANY
34 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
35 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
36 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
37 */
38
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 bool operator==(const Res& r) const { return r.ulog2 == ulog2 && r.vlog2 == vlog2; }
186
188 bool operator!=(const Res& r) const { return !(r==*this); }
189
191 bool operator>=(const Res& r) const { return ulog2 >= r.ulog2 && vlog2 >= r.vlog2; }
192
194 Res swappeduv() const { return Res(vlog2, ulog2); }
195
197 void swapuv() { *this = swappeduv(); }
198
200 void clamp(const Res& r) {
201 if (ulog2 > r.ulog2) ulog2 = r.ulog2;
202 if (vlog2 > r.vlog2) vlog2 = r.vlog2;
203 }
204
206 int ntilesu(Res tileres) const { return 1<<(ulog2-tileres.ulog2); }
207
209 int ntilesv(Res tileres) const { return 1<<(vlog2-tileres.vlog2); }
210
212 int ntiles(Res tileres) const { return ntilesu(tileres) * ntilesv(tileres); }
213 };
214
229 struct FaceInfo {
230 Res res;
231 uint8_t adjedges;
232 uint8_t flags;
233 int32_t adjfaces[4];
234
236 FaceInfo() : res(), adjedges(0), flags(0)
237 {
238 adjfaces[0] = adjfaces[1] = adjfaces[2] = adjfaces[3] = -1;
239 }
240
242 FaceInfo(Res res_) : res(res_), adjedges(0), flags(0)
243 {
244 adjfaces[0] = adjfaces[1] = adjfaces[2] = adjfaces[3] = -1;
245 }
246
248 FaceInfo(Res res_, int adjfaces_[4], int adjedges_[4], bool isSubface_=false)
249 : res(res_), flags(isSubface_ ? flag_subface : 0)
250 {
251 setadjfaces(adjfaces_[0], adjfaces_[1], adjfaces_[2], adjfaces_[3]);
252 setadjedges(adjedges_[0], adjedges_[1], adjedges_[2], adjedges_[3]);
253 }
254
256 EdgeId adjedge(int eid) const { return EdgeId((adjedges >> (2*eid)) & 3); }
257
259 int adjface(int eid) const { return adjfaces[eid]; }
260
262 bool isConstant() const { return (flags & flag_constant) != 0; }
263
265 bool isNeighborhoodConstant() const { return (flags & flag_nbconstant) != 0; }
266
268 bool hasEdits() const { return (flags & flag_hasedits) != 0; }
269
271 bool isSubface() const { return (flags & flag_subface) != 0; }
272
274 void setadjfaces(int f0, int f1, int f2, int f3)
275 { adjfaces[0] = f0, adjfaces[1] = f1, adjfaces[2] = f2; adjfaces[3] = f3; }
276
278 void setadjedges(int e0, int e1, int e2, int e3)
279 { adjedges = (uint8_t)((e0&3) | ((e1&3)<<2) | ((e2&3)<<4) | ((e3&3)<<6)); }
280
282 enum { flag_constant = 1, flag_hasedits = 2, flag_nbconstant = 4, flag_subface = 8 };
283 };
284
285
292 #ifdef PTEX_USE_STDSTRING
293 typedef std::string String;
294 #else
295 class String
296 {
297 public:
298 String() : _str(0) {}
299 String(const String& str) : _str(0) { *this = str; }
300 PTEXAPI ~String();
301 PTEXAPI String& operator=(const char* str);
302 String& operator=(const String& str) { *this = str._str; return *this; }
303 String& operator=(const std::string& str) { *this = str.c_str(); return *this; }
304 const char* c_str() const { return _str ? _str : ""; }
305 bool empty() const { return _str == 0 || _str[0] == '\0'; }
306
307 private:
308 char* _str;
309 };
310 #endif
311
313 #ifndef PTEX_USE_STDSTRING
314 PTEXAPI std::ostream& operator << (std::ostream& stream, const Ptex::String& str);
315 #endif
316
317
318 #ifdef DOXYGEN
319 } // end namespace Ptex
320 #endif
321
328 class PtexMetaData {
329 protected:
331 virtual ~PtexMetaData() {}
332
333 public:
335 virtual void release() = 0;
336
338 virtual int numKeys() = 0;
339
341 virtual void getKey(int index, const char*& key, Ptex::MetaDataType& type) = 0;
342
344 virtual bool findKey(const char* key, int& index, Ptex::MetaDataType& type) = 0;
345
348 virtual void getValue(const char* key, const char*& value) = 0;
349
352 virtual void getValue(int index, const char*& value) = 0;
353
356 virtual void getValue(const char* key, const int8_t*& value, int& count) = 0;
357
360 virtual void getValue(int index, const int8_t*& value, int& count) = 0;
361
364 virtual void getValue(const char* key, const int16_t*& value, int& count) = 0;
365
368 virtual void getValue(int index, const int16_t*& value, int& count) = 0;
369
372 virtual void getValue(const char* key, const int32_t*& value, int& count) = 0;
373
376 virtual void getValue(int index, const int32_t*& value, int& count) = 0;
377
380 virtual void getValue(const char* key, const float*& value, int& count) = 0;
381
384 virtual void getValue(int index, const float*& value, int& count) = 0;
385
388 virtual void getValue(const char* key, const double*& value, int& count) = 0;
389
392 virtual void getValue(int index, const double*& value, int& count) = 0;
393 };
394
395
406 class PtexFaceData {
407 protected:
409 virtual ~PtexFaceData() {}
410
411 public:
413 virtual void release() = 0;
414
416 virtual bool isConstant() = 0;
417
421 virtual Ptex::Res res() = 0;
422
426 virtual void getPixel(int u, int v, void* result) = 0;
427
434 virtual void* getData() = 0;
435
438 virtual bool isTiled() = 0;
439
441 virtual Ptex::Res tileRes() = 0;
442
444 virtual PtexFaceData* getTile(int tile) = 0;
445 };
446
447
457 class PtexTexture {
458 protected:
460 virtual ~PtexTexture() {}
461
462 public:
474 PTEXAPI static PtexTexture* open(const char* path, Ptex::String& error, bool premultiply=0);
475
476
478 virtual void release() = 0;
479
483 virtual const char* path() = 0;
484
486 struct Info {
487 MeshType meshType;
488 DataType dataType;
489 BorderMode uBorderMode;
490 BorderMode vBorderMode;
491 EdgeFilterMode edgeFilterMode;
492 int alphaChannel;
493 int numChannels;
494 int numFaces;
495 };
496 virtual Info getInfo() = 0;
497
499 virtual Ptex::MeshType meshType() = 0;
500
502 virtual Ptex::DataType dataType() = 0;
503
505 virtual Ptex::BorderMode uBorderMode() = 0;
506
508 virtual Ptex::BorderMode vBorderMode() = 0;
509
511 virtual Ptex::EdgeFilterMode edgeFilterMode() = 0;
512
516 virtual int alphaChannel() = 0;
517
519 virtual int numChannels() = 0;
520
522 virtual int numFaces() = 0;
523
525 virtual bool hasEdits() = 0;
526
528 virtual bool hasMipMaps() = 0;
529
531 virtual PtexMetaData* getMetaData() = 0;
532
534 virtual const Ptex::FaceInfo& getFaceInfo(int faceid) = 0;
535
551 virtual void getData(int faceid, void* buffer, int stride) = 0;
552
564 virtual void getData(int faceid, void* buffer, int stride, Ptex::Res res) = 0;
565
567 virtual PtexFaceData* getData(int faceid) = 0;
568
578 virtual PtexFaceData* getData(int faceid, Ptex::Res res) = 0;
579
592 virtual void getPixel(int faceid, int u, int v,
593 float* result, int firstchan, int nchannels) = 0;
594
606 virtual void getPixel(int faceid, int u, int v,
607 float* result, int firstchan, int nchannels,
608 Ptex::Res res) = 0;
609 };
610
611
619 class PtexInputHandler {
620 protected:
621 virtual ~PtexInputHandler() {}
622
623 public:
624 typedef void* Handle;
625
630 virtual Handle open(const char* path) = 0;
631
633 virtual void seek(Handle handle, int64_t pos) = 0;
634
640 virtual size_t read(void* buffer, size_t size, Handle handle) = 0;
641
644 virtual bool close(Handle handle) = 0;
645
647 virtual const char* lastError() = 0;
648 };
649
650
658 class PtexErrorHandler {
659 protected:
660 virtual ~PtexErrorHandler() {}
661
662 public:
663 virtual void reportError(const char* error) = 0;
664 };
665
666
684 class PtexCache {
685 protected:
687 virtual ~PtexCache() {}
688
689 public:
711 PTEXAPI static PtexCache* create(int maxFiles,
712 size_t maxMem,
713 bool premultiply=false,
714 PtexInputHandler* inputHandler=0,
715 PtexErrorHandler* errorHandler=0);
716
718 virtual void release() = 0;
719
725 virtual void setSearchPath(const char* path) = 0;
726
728 virtual const char* getSearchPath() = 0;
729
757 virtual PtexTexture* get(const char* path, Ptex::String& error) = 0;
758
764 virtual void purge(PtexTexture* texture) = 0;
765
771 virtual void purge(const char* path) = 0;
772
777 virtual void purgeAll() = 0;
778
779 struct Stats {
780 uint64_t memUsed;
781 uint64_t peakMemUsed;
782 uint64_t filesOpen;
783 uint64_t peakFilesOpen;
784 uint64_t filesAccessed;
785 uint64_t fileReopens;
786 uint64_t blockReads;
787 };
788
790 virtual void getStats(Stats& stats) = 0;
791 };
792
793
810 class PtexWriter {
811 protected:
813 virtual ~PtexWriter() {}
814
815 public:
826 PTEXAPI
827 static PtexWriter* open(const char* path,
828 Ptex::MeshType mt, Ptex::DataType dt,
829 int nchannels, int alphachan, int nfaces,
830 Ptex::String& error, bool genmipmaps=true);
831
849 PTEXAPI
850 static PtexWriter* edit(const char* path, bool incremental,
851 Ptex::MeshType mt, Ptex::DataType dt,
852 int nchannels, int alphachan, int nfaces,
853 Ptex::String& error, bool genmipmaps=true);
854
863 PTEXAPI
864 static bool applyEdits(const char* path, Ptex::String& error);
865
867 virtual void release() = 0;
868
870 virtual void setBorderModes(Ptex::BorderMode uBorderMode, Ptex::BorderMode vBorderMode) = 0;
871
873 virtual void setEdgeFilterMode(Ptex::EdgeFilterMode edgeFilterMode) = 0;
874
876 virtual void writeMeta(const char* key, const char* string) = 0;
877
879 virtual void writeMeta(const char* key, const int8_t* value, int count) = 0;
880
882 virtual void writeMeta(const char* key, const int16_t* value, int count) = 0;
883
885 virtual void writeMeta(const char* key, const int32_t* value, int count) = 0;
886
888 virtual void writeMeta(const char* key, const float* value, int count) = 0;
889
891 virtual void writeMeta(const char* key, const double* value, int count) = 0;
892
894 virtual void writeMeta(PtexMetaData* data) = 0;
895
907 virtual bool writeFace(int faceid, const Ptex::FaceInfo& info, const void* data, int stride=0) = 0;
908
914 virtual bool writeConstantFace(int faceid, const Ptex::FaceInfo& info, const void* data) = 0;
915
919 virtual bool close(Ptex::String& error) = 0;
920
921 #if NEW_API
922 virtual bool writeFaceReduction(int faceid, const Ptex::Res& res, const void* data, int stride=0) = 0;
923 virtual bool writeConstantFaceReduction(int faceid, const Ptex::Res& res, const void* data) = 0;
924 #endif
925 };
926
927
937 class PtexFilter {
938 protected:
940 virtual ~PtexFilter() {}
941
942 public:
944 enum FilterType {
945 f_point,
946 f_bilinear,
947 f_box,
948 f_gaussian,
949 f_bicubic,
950 f_bspline,
951 f_catmullrom,
952 f_mitchell
953 };
954
956 struct Options {
957 int __structSize;
958 FilterType filter;
959 bool lerp;
960 float sharpness;
961 bool noedgeblend;
962
964 Options(FilterType filter_=f_box, bool lerp_=0, float sharpness_=0, bool noedgeblend_=0) :
965 __structSize(sizeof(Options)),
966 filter(filter_), lerp(lerp_), sharpness(sharpness_), noedgeblend(noedgeblend_) {}
967 };
968
969 /* Construct a filter for the given texture.
970 */
971 PTEXAPI static PtexFilter* getFilter(PtexTexture* tx, const Options& opts);
972
974 virtual void release() = 0;
975
997 virtual void eval(float* result, int firstchan, int nchannels,
998 int faceid, float u, float v, float uw1, float vw1, float uw2, float vw2,
999 float width=1, float blur=0) = 0;
1000 };
1001
1002
1032 template <class T> class PtexPtr {
1033 T* _ptr;
1034 public:
1036 PtexPtr(T* ptr=0) : _ptr(ptr) {}
1037
1039 ~PtexPtr() { if (_ptr) _ptr->release(); }
1040
1042 operator T* () const { return _ptr; }
1043
1045 T* operator-> () const { return _ptr; }
1046
1048 T* get() const { return _ptr; }
1049
1051 void swap(PtexPtr& p)
1052 {
1053 T* tmp = p._ptr;
1054 p._ptr = _ptr;
1055 _ptr = tmp;
1056 }
1057
1059 void reset(T* ptr=0) {
1060 if (_ptr) _ptr->release();
1061 _ptr = ptr;
1062 }
1063
1064 private:
1066 PtexPtr(const PtexPtr& p);
1067
1069 void operator= (PtexPtr& p);
1070 };
1071
1072 #ifndef DOXYGEN
1073 namespace PtexUtils {}
1074
1075 PTEX_NAMESPACE_END
1076
1077 using Ptex::PtexMetaData;
1078 using Ptex::PtexFaceData;
1079 using Ptex::PtexTexture;
1080 using Ptex::PtexInputHandler;
1081 using Ptex::PtexErrorHandler;
1082 using Ptex::PtexCache;
1083 using Ptex::PtexWriter;
1084 using Ptex::PtexFilter;
1085 using Ptex::PtexPtr;
1086 namespace PtexUtils = Ptex::PtexUtils;
1087
1088 #endif
1089 #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.
operator<<
std::ostream & operator<<(std::ostream &stream, const String &str)
Definition: PtexUtils.cpp:692
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:684
PtexCache::getStats
virtual void getStats(Stats &stats)=0
Get stats.
PtexCache::getSearchPath
virtual const char * getSearchPath()=0
Query the search path.
PtexCache::release
virtual void release()=0
Release PtexCache. Cache will be immediately destroyed and all resources will be released.
PtexCache::purge
virtual void purge(PtexTexture *texture)=0
Remove a texture file from the cache.
PtexCache::get
virtual PtexTexture * get(const char *path, Ptex::String &error)=0
Access a texture.
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:177
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:687
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:658
PtexErrorHandler::reportError
virtual void reportError(const char *error)=0
PtexErrorHandler::~PtexErrorHandler
virtual ~PtexErrorHandler()
Definition: Ptexture.h:660
PtexFaceData
Per-face texture data accessor.
Definition: Ptexture.h:406
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::getData
virtual void * getData()=0
Access the data from this data block.
PtexFaceData::getPixel
virtual void getPixel(int u, int v, void *result)=0
Read a single texel from the data block.
PtexFaceData::getTile
virtual PtexFaceData * getTile(int tile)=0
Access a tile 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:409
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:937
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:940
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:944
PtexFilter::f_bicubic
@ f_bicubic
General bi-cubic filter (uses sharpness option)
Definition: Ptexture.h:949
PtexFilter::f_bspline
@ f_bspline
BSpline (equivalent to bi-cubic w/ sharpness=0)
Definition: Ptexture.h:950
PtexFilter::f_bilinear
@ f_bilinear
Bi-linear interpolation.
Definition: Ptexture.h:946
PtexFilter::f_catmullrom
@ f_catmullrom
Catmull-Rom (equivalent to bi-cubic w/ sharpness=1)
Definition: Ptexture.h:951
PtexFilter::f_mitchell
@ f_mitchell
Mitchell (equivalent to bi-cubic w/ sharpness=2/3)
Definition: Ptexture.h:952
PtexFilter::f_box
@ f_box
Box filter.
Definition: Ptexture.h:947
PtexFilter::f_gaussian
@ f_gaussian
Gaussian filter.
Definition: Ptexture.h:948
PtexFilter::f_point
@ f_point
Point-sampled (no filtering)
Definition: Ptexture.h:945
PtexInputHandler
Custom handler interface for intercepting and redirecting Ptex input stream calls.
Definition: Ptexture.h:619
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:621
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:624
PtexInputHandler::close
virtual bool close(Handle handle)=0
Close a file.
PtexMetaData
Meta data accessor.
Definition: Ptexture.h:328
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:331
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
Smart-pointer for acquiring and releasing API objects.
Definition: Ptexture.h:1032
PtexPtr::operator->
T * operator->() const
Access members of pointer.
Definition: Ptexture.h:1045
PtexPtr::PtexPtr
PtexPtr(const PtexPtr &p)
Copying prohibited.
PtexPtr::get
T * get() const
Get pointer value.
Definition: Ptexture.h:1048
PtexPtr::PtexPtr
PtexPtr(T *ptr=0)
Constructor.
Definition: Ptexture.h:1036
PtexPtr::reset
void reset(T *ptr=0)
Deallocate object pointed to, and optionally set to new value.
Definition: Ptexture.h:1059
PtexPtr::operator=
void operator=(PtexPtr &p)
Assignment prohibited.
PtexPtr::~PtexPtr
~PtexPtr()
Destructor, calls ptr->release().
Definition: Ptexture.h:1039
PtexPtr::swap
void swap(PtexPtr &p)
Swap pointer values.
Definition: Ptexture.h:1051
PtexPtr::_ptr
T * _ptr
Definition: Ptexture.h:1033
PtexTexture
Interface for reading data from a ptex file.
Definition: Ptexture.h:457
PtexTexture::getFaceInfo
virtual const Ptex::FaceInfo & getFaceInfo(int faceid)=0
Access resolution and adjacency information about a face.
PtexTexture::getData
virtual void getData(int faceid, void *buffer, int stride)=0
Access texture data for a face at highest-resolution.
PtexTexture::path
virtual const char * path()=0
Path that file was opened with.
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:460
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::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:59
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::hasEdits
virtual bool hasEdits()=0
True if the file has edit blocks.
PtexTexture::vBorderMode
virtual Ptex::BorderMode vBorderMode()=0
Mode for filtering texture access beyond mesh border.
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::numChannels
virtual int numChannels()=0
Number of channels stored in file.
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).
PtexTexture::getData
virtual PtexFaceData * getData(int faceid)=0
Access texture data for a face at highest-resolution as stored on disk.
PtexWriter
Interface for writing data to a ptex file.
Definition: Ptexture.h:810
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::edit
static PtexWriter * edit(const char *path, bool incremental, 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:186
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)
Apply edits to a file.
Definition: PtexWriter.cpp:242
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::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:167
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:813
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:296
Ptex::String::empty
bool empty() const
Definition: Ptexture.h:305
Ptex::String::String
String()
Definition: Ptexture.h:298
Ptex::String::c_str
const char * c_str() const
Definition: Ptexture.h:304
Ptex::String::_str
char * _str
Definition: Ptexture.h:308
Ptex::String::operator=
String & operator=(const String &str)
Definition: Ptexture.h:302
Ptex::String::String
String(const String &str)
Definition: Ptexture.h:299
Ptex::String::operator=
String & operator=(const std::string &str)
Definition: Ptexture.h:303
Ptex::String::~String
~String()
Definition: PtexUtils.cpp:679
Ptex::String::operator=
String & operator=(const char *str)
Definition: PtexUtils.cpp:685
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::DataSize
int DataSize(DataType dt)
Look up size of given data type (in bytes).
Definition: Ptexture.h:130
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::EdgeIdName
const char * EdgeIdName(EdgeId eid)
Look up name of given edge ID.
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::MeshTypeName
const char * MeshTypeName(MeshType mt)
Look up name of given mesh type.
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::DataTypeName
const char * DataTypeName(DataType dt)
Look up name of given data type.
Ptex::BorderModeName
const char * BorderModeName(BorderMode m)
Look up name of given border mode.
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::MetaDataTypeName
const char * MetaDataTypeName(MetaDataType mdt)
Look up name of given meta data type.
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:779
PtexCache::Stats::filesAccessed
uint64_t filesAccessed
Definition: Ptexture.h:784
PtexCache::Stats::filesOpen
uint64_t filesOpen
Definition: Ptexture.h:782
PtexCache::Stats::peakFilesOpen
uint64_t peakFilesOpen
Definition: Ptexture.h:783
PtexCache::Stats::fileReopens
uint64_t fileReopens
Definition: Ptexture.h:785
PtexCache::Stats::memUsed
uint64_t memUsed
Definition: Ptexture.h:780
PtexCache::Stats::blockReads
uint64_t blockReads
Definition: Ptexture.h:786
PtexCache::Stats::peakMemUsed
uint64_t peakMemUsed
Definition: Ptexture.h:781
PtexFilter::Options
Choose filter options.
Definition: Ptexture.h:956
PtexFilter::Options::filter
FilterType filter
Filter type.
Definition: Ptexture.h:958
PtexFilter::Options::__structSize
int __structSize
(for internal use only)
Definition: Ptexture.h:957
PtexFilter::Options::sharpness
float sharpness
Filter sharpness, 0..1 (for general bi-cubic filter only).
Definition: Ptexture.h:960
PtexFilter::Options::lerp
bool lerp
Interpolate between mipmap levels.
Definition: Ptexture.h:959
PtexFilter::Options::noedgeblend
bool noedgeblend
Disable cross-face filtering. Useful for debugging or rendering on polys.
Definition: Ptexture.h:961
PtexFilter::Options::Options
Options(FilterType filter_=f_box, bool lerp_=0, float sharpness_=0, bool noedgeblend_=0)
Constructor - sets defaults.
Definition: Ptexture.h:964
PtexTexture::Info
Get most commonly used info in a single call for convenience / efficiency.
Definition: Ptexture.h:486
PtexTexture::Info::numChannels
int numChannels
Definition: Ptexture.h:493
PtexTexture::Info::uBorderMode
BorderMode uBorderMode
Definition: Ptexture.h:489
PtexTexture::Info::vBorderMode
BorderMode vBorderMode
Definition: Ptexture.h:490
PtexTexture::Info::edgeFilterMode
EdgeFilterMode edgeFilterMode
Definition: Ptexture.h:491
PtexTexture::Info::alphaChannel
int alphaChannel
Definition: Ptexture.h:492
PtexTexture::Info::dataType
DataType dataType
Definition: Ptexture.h:488
PtexTexture::Info::numFaces
int numFaces
Definition: Ptexture.h:494
PtexTexture::Info::meshType
MeshType meshType
Definition: Ptexture.h:487
Ptex::FaceInfo
Information about a face, as stored in the Ptex file header.
Definition: Ptexture.h:229
Ptex::FaceInfo::setadjedges
void setadjedges(int e0, int e1, int e2, int e3)
Set the adjedges data.
Definition: Ptexture.h:278
Ptex::FaceInfo::hasEdits
bool hasEdits() const
Determine if face has edits in the file (by checking a flag).
Definition: Ptexture.h:268
Ptex::FaceInfo::isNeighborhoodConstant
bool isNeighborhoodConstant() const
Determine if neighborhood of face is constant (by checking a flag).
Definition: Ptexture.h:265
Ptex::FaceInfo::FaceInfo
FaceInfo(Res res_)
Constructor.
Definition: Ptexture.h:242
Ptex::FaceInfo::isSubface
bool isSubface() const
Determine if face is a subface (by checking a flag).
Definition: Ptexture.h:271
Ptex::FaceInfo::res
Res res
Resolution of face.
Definition: Ptexture.h:230
Ptex::FaceInfo::adjedge
EdgeId adjedge(int eid) const
Access an adjacent edge id. The eid value must be 0..3.
Definition: Ptexture.h:256
Ptex::FaceInfo::isConstant
bool isConstant() const
Determine if face is constant (by checking a flag).
Definition: Ptexture.h:262
Ptex::FaceInfo::flag_hasedits
@ flag_hasedits
Definition: Ptexture.h:282
Ptex::FaceInfo::flag_constant
@ flag_constant
Definition: Ptexture.h:282
Ptex::FaceInfo::flag_nbconstant
@ flag_nbconstant
Definition: Ptexture.h:282
Ptex::FaceInfo::flag_subface
@ flag_subface
Definition: Ptexture.h:282
Ptex::FaceInfo::adjedges
uint8_t adjedges
Adjacent edges, 2 bits per edge.
Definition: Ptexture.h:231
Ptex::FaceInfo::adjfaces
int32_t adjfaces[4]
Adjacent faces (-1 == no adjacent face).
Definition: Ptexture.h:233
Ptex::FaceInfo::flags
uint8_t flags
Flags.
Definition: Ptexture.h:232
Ptex::FaceInfo::FaceInfo
FaceInfo(Res res_, int adjfaces_[4], int adjedges_[4], bool isSubface_=false)
Constructor.
Definition: Ptexture.h:248
Ptex::FaceInfo::FaceInfo
FaceInfo()
Default constructor.
Definition: Ptexture.h:236
Ptex::FaceInfo::setadjfaces
void setadjfaces(int f0, int f1, int f2, int f3)
Set the adjfaces data.
Definition: Ptexture.h:274
Ptex::FaceInfo::adjface
int adjface(int eid) const
Access an adjacent face id. The eid value must be 0..3.
Definition: Ptexture.h:259
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:191
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:206
Ptex::Res::operator!=
bool operator!=(const Res &r) const
Comparison operator.
Definition: Ptexture.h:188
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:209
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:194
Ptex::Res::size
int size() const
Total size of specified texture in texels (u * v).
Definition: Ptexture.h:182
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:197
Ptex::Res::clamp
void clamp(const Res &r)
Clamp the resolution value against the given value.
Definition: Ptexture.h:200
Ptex::Res::ntiles
int ntiles(Res tileres) const
Determine the total number of tiles for the given tile res.
Definition: Ptexture.h:212
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:185