44 #if defined(_WIN32) || defined(_WINDOWS) || defined(_MSC_VER) 
   48 #       define PTEXAPI __declspec(dllexport) 
   50 #       define PTEXAPI __declspec(dllimport) 
   61 #    define PTEX_USE_STDSTRING 
   68 #define PtexAPIVersion 2 
   69 #define PtexFileMajorVersion 1 
   70 #define PtexFileMinorVersion 3 
  133         static const int sizes[] = { 1,2,2,4 };
 
  139         static const float one[] = { 255.f, 65535.f, 1.f, 1.f };
 
  145         static const float one[] = { 1.f/255.f, 1.f/65535.f, 1.f, 1.f };
 
  166         Res() : ulog2(0), vlog2(0) {}
 
  169         Res(int8_t ulog2_, int8_t vlog2_) : ulog2(ulog2_), vlog2(vlog2_) {}
 
  173             ulog2 = *(uint8_t *)&value;
 
  174             vlog2 = *((uint8_t *)&value + 1);
 
  178         int u()
 const { 
return 1<<(unsigned)ulog2; }
 
  181         int v()
 const { 
return 1<<(unsigned)vlog2; }
 
  184         uint16_t& 
val() { 
return *(uint16_t*)
this; }
 
  187         const uint16_t& 
val()
 const { 
return *(
const uint16_t*)
this; }
 
  246             adjfaces[0] = adjfaces[1] = adjfaces[2] = adjfaces[3] = -1; 
 
  252             adjfaces[0] = adjfaces[1] = adjfaces[2] = adjfaces[3] = -1; 
 
  256         FaceInfo(
Res res_, 
int adjfaces_[4], 
int adjedges_[4], 
bool isSubface_=
false)
 
  259             setadjfaces(adjfaces_[0], adjfaces_[1], adjfaces_[2], adjfaces_[3]);
 
  260             setadjedges(adjedges_[0], adjedges_[1], adjedges_[2], adjedges_[3]);
 
  267         int adjface(
int eid)
 const { 
return adjfaces[eid]; }
 
  283         { adjfaces[0] = f0, adjfaces[1] = f1, adjfaces[2] = f2; adjfaces[3] = f3; }
 
  287         { adjedges = (uint8_t)((e0&3) | ((e1&3)<<2) | ((e2&3)<<4) | ((e3&3)<<6)); }
 
  300 #ifdef PTEX_USE_STDSTRING 
  301     typedef std::string 
String;
 
  326 #ifndef PTEX_USE_STDSTRING 
  354     virtual void getValue(
const char* key, 
const char*& value) = 0;
 
  358     virtual void getValue(
const char* key, 
const int8_t*& value, 
int& count) = 0;
 
  362     virtual void getValue(
const char* key, 
const int16_t*& value, 
int& count) = 0;
 
  366     virtual void getValue(
const char* key, 
const int32_t*& value, 
int& count) = 0;
 
  370     virtual void getValue(
const char* key, 
const float*& value, 
int& count) = 0;
 
  374     virtual void getValue(
const char* key, 
const double*& value, 
int& count) = 0;
 
  408     virtual void getPixel(
int u, 
int v, 
void* result) = 0;
 
  465     virtual const char* 
path() = 0;
 
  517     virtual void getData(
int faceid, 
void* buffer, 
int stride) = 0;
 
  530     virtual void getData(
int faceid, 
void* buffer, 
int stride, 
Ptex::Res res) = 0;
 
  558     virtual void getPixel(
int faceid, 
int u, 
int v,
 
  559                           float* result, 
int firstchan, 
int nchannels) = 0;
 
  572     virtual void getPixel(
int faceid, 
int u, 
int v,
 
  573                           float* result, 
int firstchan, 
int nchannels,
 
  596     virtual Handle 
open(
const char* path) = 0;
 
  599     virtual void seek(Handle handle, int64_t pos) = 0;
 
  606     virtual size_t read(
void* buffer, 
size_t size, Handle handle) = 0;
 
  610     virtual bool close(Handle handle) = 0;
 
  657                                      bool premultiply=
false,
 
  712     virtual void purge(
const char* path) = 0;
 
  756                             int nchannels, 
int alphachan, 
int nfaces,
 
  779                             int nchannels, 
int alphachan, 
int nfaces,
 
  800     virtual void writeMeta(
const char* key, 
const char* 
string) = 0;
 
  803     virtual void writeMeta(
const char* key, 
const int8_t* value, 
int count) = 0;
 
  806     virtual void writeMeta(
const char* key, 
const int16_t* value, 
int count) = 0;
 
  809     virtual void writeMeta(
const char* key, 
const int32_t* value, 
int count) = 0;
 
  812     virtual void writeMeta(
const char* key, 
const float* value, 
int count) = 0;
 
  815     virtual void writeMeta(
const char* key, 
const double* value, 
int count) = 0;
 
  846     virtual bool writeFaceReduction(
int faceid, 
const Ptex::Res& res, 
const void* data, 
int stride=0) = 0;
 
  847     virtual bool writeConstantFaceReduction(
int faceid, 
const Ptex::Res& res, 
const void* data) = 0;
 
  889             filter(filter_), lerp(lerp_), sharpness(sharpness_) {}
 
  920     virtual void eval(
float* result, 
int firstchan, 
int nchannels,
 
  921                       int faceid, 
float u, 
float v, 
float uw1, 
float vw1, 
float uw2, 
float vw2,
 
  922                       float width=1, 
float blur=0) = 0;
 
  965     operator T* () { 
return _ptr; }
 
  983         if (_ptr) _ptr->release();
 
Single-precision (32-bit) floating point. 
PtexPtr(T *ptr=0)
Constructor. 
T * operator->()
Access members of pointer. 
Left edge, from UV (0,1) to (0,0) 
virtual Ptex::BorderMode vBorderMode()=0
Mode for filtering texture access beyond mesh border. 
static float OneValueInv(DataType dt)
Lookup up inverse value of given data type that corresponds to the normalized value of 1...
int ntiles(Res tileres) const 
Determine the total number of tiles for the given tile res. 
int ntilesv(Res tileres) const 
Determine the number of tiles in the v direction for the given tile res. 
FaceInfo()
Default constructor, sets all members to zero. 
int adjface(int eid) const 
Access an adjacent face id. The eid value must be 0..3. 
virtual int numChannels()=0
Number of channels stored in file. 
Interface for writing data to a ptex file. 
void setadjedges(int e0, int e1, int e2, int e3)
Set the adjedges data. 
Common data structures and enums used throughout the API. 
virtual void setBorderModes(Ptex::BorderMode uBorderMode, Ptex::BorderMode vBorderMode)=0
Set border modes. 
bool isConstant() const 
Determine if face is constant (by checking a flag). 
MeshType
Type of base mesh for which the textures are defined. 
bool operator>=(const Res &r) const 
True if res is >= given res in both u and v directions. 
Unsigned, 16-bit integer. 
static int DataSize(DataType dt)
Look up size of given data type (in bytes). 
virtual bool hasEdits()=0
True if the file has edit blocks. 
Top edge, from UV (1,1) to (0,1) 
Half-precision (16-bit) floating point. 
DataType
Type of data stored in texture file. 
void reset(T *ptr=0)
Deallocate object pointed to, and optionally set to new value. 
FaceInfo(Res res_)
Constructor. 
Options(FilterType filter_=f_box, bool lerp_=0, float sharpness_=0)
Constructor - sets defaults. 
static PtexFilter * getFilter(PtexTexture *tx, const Options &opts)
virtual void release()=0
Release resources held by this pointer (pointer becomes invalid). 
Res swappeduv() const 
Get value of resolution with u and v swapped. 
File-handle and memory cache for reading ptex files. 
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. 
bool isNeighborhoodConstant() const 
Determine if neighborhood of face is constant (by checking a flag). 
String & operator=(const char *str)
Pixel resolution of a given texture. 
void operator=(PtexPtr &p)
Assignment prohibited. 
static PtexCache * create(int maxFiles=0, int maxMem=0, bool premultiply=false, PtexInputHandler *handler=0)
Create a cache with the specified limits. 
MetaDataType
Type of meta data entry. 
virtual void release()=0
Release resources held by this pointer (pointer becomes invalid). 
int v() const 
V resolution in texels. 
EdgeId
Edge IDs used in adjacency data in the Ptex::FaceInfo struct. 
virtual int alphaChannel()=0
Index of alpha channel (if any). 
virtual PtexMetaData * getMetaData()=0
Access meta data. 
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. 
static float OneValue(DataType dt)
Look up value of given data type that corresponds to the normalized value of 1.0. ...
int8_t vlog2
log base 2 of v resolution, in texels 
Bottom edge, from UV (0,0) to (1,0) 
static const char * MeshTypeName(MeshType mt)
Look up name of given mesh type. 
virtual ~PtexFaceData()
Destructor not for public use. Use release() instead. 
int32_t adjfaces[4]
Adjacent faces (-1 == no adjacent face). 
BorderMode
How to handle mesh border when filtering. 
virtual Ptex::MeshType meshType()=0
Type of mesh for which texture data is defined. 
virtual Ptex::Res res()=0
Resolution of the texture held by this data block. 
virtual ~PtexWriter()
Destructor not for public use. Use release() instead. 
Per-face texture data accessor. 
bool operator!=(const Res &r) const 
Comparison operator. 
virtual bool writeConstantFace(int faceid, const Ptex::FaceInfo &info, const void *data)=0
Write constant texture data for a face. 
int u() const 
U resolution in texels. 
virtual void * getData()=0
Access the data from this data block. 
int8_t vlog2
log base 2 of v resolution, in texels 
uint16_t & val()
Resolution as a single 16-bit integer value. 
virtual void writeMeta(const char *key, const char *string)=0
Write a string as meta data. 
int ntilesu(Res tileres) const 
Determine the number of tiles in the u direction for the given tile res. 
virtual PtexFaceData * getTile(int tile)=0
Access a tile from the data block. 
int8_t ulog2
log base 2 of u resolution, in texels 
Single-precision (32-bit) floating point. 
virtual void getData(int faceid, void *buffer, int stride)=0
Access texture data for a face at highest-resolution. 
DataType
Type of data stored in texture file. 
std::ostream & operator<<(std::ostream &stream, const Ptex::String &str)
BorderMode
How to handle mesh border when filtering. 
bool isSubface() const 
Determine if face is a subface (by checking a flag). 
virtual bool hasMipMaps()=0
True if the file has mipmaps. 
bool hasEdits() const 
Determine if face has edits in the file (by checking a flag). 
String & operator=(const String &str)
virtual void purgeAll()=0
Remove all texture files from the cache. 
virtual void release()=0
Release resources held by this pointer (pointer becomes invalid). 
virtual ~PtexFilter()
Destructor not for public use. Use release() instead. 
virtual int numFaces()=0
Number of faces stored in file. 
static const char * DataTypeName(DataType dt)
Look up name of given data type. 
~PtexPtr()
Destructor, calls ptr->release(). 
virtual bool writeFace(int faceid, const Ptex::FaceInfo &info, const void *data, int stride=0)=0
Write texture data for a face. 
const uint16_t & val() const 
Resolution as a single 16-bit integer value. 
virtual void release()=0
Release resources held by this pointer (pointer becomes invalid). 
Mitchell (equivalent to bi-cubic w/ sharpness=2/3) 
MeshType
Type of base mesh for which the textures are defined. 
Point-sampled (no filtering) 
EdgeId adjedge(int eid) const 
Access an adjacent edge id. The eid value must be 0..3. 
MetaDataType
Type of meta data entry. 
virtual ~PtexTexture()
Destructor not for public use. Use release() instead. 
String(const String &str)
FilterType filter
Filter type. 
FaceInfo(Res res_, int adjfaces_[4], int adjedges_[4], bool isSubface_=false)
Constructor. 
int size() const 
Total size of specified texture in texels (u * v). 
void setadjfaces(int f0, int f1, int f2, int f3)
Set the adjfaces data. 
String & operator=(const std::string &str)
texel beyond border are assumed to be black 
Catmull-Rom (equivalent to bi-cubic w/ sharpness=1) 
virtual Ptex::DataType dataType()=0
Type of data stored in file. 
Res()
Default constructor, sets res to 0 (1x1 texel). 
static PtexTexture * open(const char *path, Ptex::String &error, bool premultiply=0)
Open a ptex file for reading. 
virtual const char * path()=0
Path that file was opened with. 
void swapuv()
Swap the u and v resolution values in place. 
BSpline (equivalent to bi-cubic w/ sharpness=0) 
Res(int8_t ulog2_, int8_t vlog2_)
Constructor. 
Smart-pointer for acquiring and releasing API objects. 
virtual bool isTiled()=0
True if this data block is tiled. 
static const char * MetaDataTypeName(MetaDataType mdt)
Look up name of given meta data type. 
virtual bool isConstant()=0
True if this data block is constant. 
int8_t ulog2
log base 2 of u resolution, in texels 
virtual void getPixel(int u, int v, void *result)=0
Read a single texel from the data block. 
static const char * BorderModeName(BorderMode m)
Look up name of given border mode. 
float sharpness
Filter sharpness, 0..1 (for general bi-cubic filter only). 
uint16_t & val()
Resolution as a single 16-bit integer value. 
Right edge, from UV (1,0) to (1,1) 
Interface for reading data from a ptex file. 
static bool applyEdits(const char *path, Ptex::String &error)
Apply edits to a file. 
Pixel resolution of a given texture. 
virtual void setSearchPath(const char *path)=0
Set a search path for finding textures. 
virtual Ptex::BorderMode uBorderMode()=0
Mode for filtering texture access beyond mesh border. 
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 . 
Res res
Resolution of face. 
uint8_t adjedges
Adjacent edges, 2 bits per edge. 
virtual const char * getSearchPath()=0
Query the search path. 
Information about a face, as stored in the Ptex file header. 
virtual bool close(Ptex::String &error)=0
Close the file. 
texel access wraps to other side of face 
virtual void release()=0
Release resources held by this pointer (pointer becomes invalid). 
static 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. 
virtual const Ptex::FaceInfo & getFaceInfo(int faceid)=0
Access resolution and adjacency information about a face. 
Double-precision (32-bit) floating point. 
Res(uint16_t value)
Constructor from 16-bit integer. 
bool operator==(const Res &r) const 
Comparison operator. 
static 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. 
texel access is clamped to border 
const char * c_str() const 
Portable fixed-width integer types. 
void swap(PtexPtr &p)
Swap pointer values. 
static const char * EdgeIdName(EdgeId eid)
Look up name of given edge ID. 
void clamp(const Res &r)
Clamp the resolution value against the given value. 
virtual ~PtexCache()
Destructor not for public use. Use release() instead. 
int __structSize
(for internal use only) 
bool lerp
Interpolate between mipmap levels. 
EdgeId
Edge IDs used in adjacency data in the Ptex::FaceInfo struct. 
General bi-cubic filter (uses sharpness option) 
Interface for filtered sampling of ptex data files. 
virtual Ptex::Res tileRes()=0
Resolution of each tile in this data block. 
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. 
virtual void purge(PtexTexture *texture)=0
Remove a texture file from the cache.