50#if !defined(PTEX_PLATFORM_WINDOWS)
52# define PTEX_USE_STDSTRING
131 static const int sizes[] = { 1,2,2,4 };
137 static const float one[] = { 255.f, 65535.f, 1.f, 1.f };
143 static const float one[] = { 1.f/255.f, 1.f/65535.f, 1.f, 1.f };
170 Res(uint16_t value) :
ulog2(int8_t(value&0xff)),
vlog2(int8_t((value>>8)&0xff)) {}
173 int u()
const {
return 1<<(unsigned)
ulog2; }
176 int v()
const {
return 1<<(unsigned)
vlog2; }
248 FaceInfo(
Res res_,
int adjfaces_[4],
int adjedges_[4],
bool isSubface_=
false)
251 setadjfaces(adjfaces_[0], adjfaces_[1], adjfaces_[2], adjfaces_[3]);
252 setadjedges(adjedges_[0], adjedges_[1], adjedges_[2], adjedges_[3]);
279 {
adjedges = (uint8_t)((e0&3) | ((e1&3)<<2) | ((e2&3)<<4) | ((e3&3)<<6)); }
292#ifdef PTEX_USE_STDSTRING
293typedef std::string String;
313#ifndef PTEX_USE_STDSTRING
348 virtual void getValue(
const char* key,
const char*& value) = 0;
352 virtual void getValue(
int index,
const char*& value) = 0;
356 virtual void getValue(
const char* key,
const int8_t*& value,
int& count) = 0;
360 virtual void getValue(
int index,
const int8_t*& value,
int& count) = 0;
364 virtual void getValue(
const char* key,
const int16_t*& value,
int& count) = 0;
368 virtual void getValue(
int index,
const int16_t*& value,
int& count) = 0;
372 virtual void getValue(
const char* key,
const int32_t*& value,
int& count) = 0;
376 virtual void getValue(
int index,
const int32_t*& value,
int& count) = 0;
380 virtual void getValue(
const char* key,
const float*& value,
int& count) = 0;
384 virtual void getValue(
int index,
const float*& value,
int& count) = 0;
388 virtual void getValue(
const char* key,
const double*& value,
int& count) = 0;
392 virtual void getValue(
int index,
const double*& value,
int& count) = 0;
426 virtual void getPixel(
int u,
int v,
void* result) = 0;
483 virtual const char*
path() = 0;
551 virtual void getData(
int faceid,
void* buffer,
int stride) = 0;
593 float* result,
int firstchan,
int nchannels) = 0;
607 float* result,
int firstchan,
int nchannels,
640 virtual size_t read(
void* buffer,
size_t size,
Handle handle) = 0;
713 bool premultiply=
false,
771 virtual void purge(
const char* path) = 0;
829 int nchannels,
int alphachan,
int nfaces,
852 int nchannels,
int alphachan,
int nfaces,
876 virtual void writeMeta(
const char* key,
const char*
string) = 0;
879 virtual void writeMeta(
const char* key,
const int8_t* value,
int count) = 0;
882 virtual void writeMeta(
const char* key,
const int16_t* value,
int count) = 0;
885 virtual void writeMeta(
const char* key,
const int32_t* value,
int count) = 0;
888 virtual void writeMeta(
const char* key,
const float* value,
int count) = 0;
891 virtual void writeMeta(
const char* key,
const double* value,
int count) = 0;
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;
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;
1042 operator T* ()
const {
return _ptr; }
1077using Ptex::PtexMetaData;
1078using Ptex::PtexFaceData;
1079using Ptex::PtexTexture;
1080using Ptex::PtexInputHandler;
1081using Ptex::PtexErrorHandler;
1082using Ptex::PtexCache;
1083using Ptex::PtexWriter;
1084using Ptex::PtexFilter;
Definitions related to exported Ptex API symbol visibility.
Portable fixed-width integer types.
std::ostream & operator<<(std::ostream &stream, const String &str)
#define PTEX_NAMESPACE_END
File-handle and memory cache for reading ptex files.
virtual void getStats(Stats &stats)=0
Get stats.
virtual void release()=0
Release PtexCache. Cache will be immediately destroyed and all resources will be released.
virtual PtexTexture * get(const char *path, Ptex::String &error)=0
Access a texture.
virtual void purge(PtexTexture *texture)=0
Remove a texture file from the cache.
static PtexCache * create(int maxFiles, size_t maxMem, bool premultiply=false, PtexInputHandler *inputHandler=0, PtexErrorHandler *errorHandler=0)
Create a cache with the specified limits.
virtual void setSearchPath(const char *path)=0
Set a search path for finding textures.
virtual ~PtexCache()
Destructor not for public use. Use release() instead.
virtual const char * getSearchPath()=0
Query the search path.
virtual void purgeAll()=0
Remove all texture files from the cache.
virtual void purge(const char *path)=0
Remove a texture file from the cache by pathname.
Custom handler interface redirecting Ptex error messages.
virtual void reportError(const char *error)=0
virtual ~PtexErrorHandler()
Per-face texture data accessor.
virtual PtexFaceData * getTile(int tile)=0
Access a tile from the data block.
virtual bool isTiled()=0
True if this data block is tiled.
virtual void release()=0
Release resources held by this pointer (pointer becomes invalid).
virtual void getPixel(int u, int v, void *result)=0
Read a single texel from the data block.
virtual Ptex::Res tileRes()=0
Resolution of each tile in this data block.
virtual bool isConstant()=0
True if this data block is constant.
virtual ~PtexFaceData()
Destructor not for public use. Use release() instead.
virtual void * getData()=0
Access the data from this data block.
virtual Ptex::Res res()=0
Resolution of the texture held by this data block.
Interface for filtered sampling of ptex data files.
static PtexFilter * getFilter(PtexTexture *tx, const Options &opts)
virtual void release()=0
Release resources held by this pointer (pointer becomes invalid).
virtual ~PtexFilter()
Destructor not for public use. Use release() instead.
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.
@ f_bicubic
General bi-cubic filter (uses sharpness option)
@ f_bspline
BSpline (equivalent to bi-cubic w/ sharpness=0)
@ f_bilinear
Bi-linear interpolation.
@ f_catmullrom
Catmull-Rom (equivalent to bi-cubic w/ sharpness=1)
@ f_mitchell
Mitchell (equivalent to bi-cubic w/ sharpness=2/3)
@ f_gaussian
Gaussian filter.
@ f_point
Point-sampled (no filtering)
Smart-pointer for acquiring and releasing API objects.
PtexPtr(const PtexPtr &p)
Copying prohibited.
PtexPtr(T *ptr=0)
Constructor.
void reset(T *ptr=0)
Deallocate object pointed to, and optionally set to new value.
T * get() const
Get pointer value.
void operator=(PtexPtr &p)
Assignment prohibited.
~PtexPtr()
Destructor, calls ptr->release().
T * operator->() const
Access members of pointer.
void swap(PtexPtr &p)
Swap pointer values.
Interface for reading data from a ptex file.
virtual void getData(int faceid, void *buffer, int stride)=0
Access texture data for a face at highest-resolution.
virtual Ptex::MeshType meshType()=0
Type of mesh for which texture data is defined.
virtual Ptex::BorderMode uBorderMode()=0
Mode for filtering texture access beyond mesh border.
virtual ~PtexTexture()
Destructor not for public use. Use release() instead.
virtual PtexMetaData * getMetaData()=0
Access meta data.
virtual bool hasMipMaps()=0
True if the file has mipmaps.
virtual int numFaces()=0
Number of faces stored in file.
virtual Ptex::DataType dataType()=0
Type of data stored in file.
virtual void getData(int faceid, void *buffer, int stride, Ptex::Res res)=0
Access texture data for a face at a specific resolution.
virtual PtexFaceData * getData(int faceid, Ptex::Res res)=0
Access texture data for a face at a specific resolution as stored on disk.
virtual const char * path()=0
Path that file was opened with.
virtual int alphaChannel()=0
Index of alpha channel (if any).
virtual Ptex::EdgeFilterMode edgeFilterMode()=0
Mode for filtering textures across edges.
static PtexTexture * open(const char *path, Ptex::String &error, bool premultiply=0)
Open a ptex file for reading.
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 .
virtual PtexFaceData * getData(int faceid)=0
Access texture data for a face at highest-resolution as stored on disk.
virtual bool hasEdits()=0
True if the file has edit blocks.
virtual Ptex::BorderMode vBorderMode()=0
Mode for filtering texture access beyond mesh border.
virtual int numChannels()=0
Number of channels stored in file.
virtual const Ptex::FaceInfo & getFaceInfo(int faceid)=0
Access resolution and adjacency information about a face.
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.
virtual void release()=0
Release resources held by this pointer (pointer becomes invalid).
Interface for writing data to a ptex file.
virtual void setBorderModes(Ptex::BorderMode uBorderMode, Ptex::BorderMode vBorderMode)=0
Set border modes.
virtual void writeMeta(const char *key, const float *value, int count)=0
Write an array of signed 32-bit floats as meta data.
virtual void setEdgeFilterMode(Ptex::EdgeFilterMode edgeFilterMode)=0
Set edge filter mode.
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 release()=0
Release resources held by this pointer (pointer becomes invalid).
virtual void writeMeta(const char *key, const int8_t *value, int count)=0
Write an array of signed 8-bit integers as meta data.
static bool applyEdits(const char *path, Ptex::String &error)
Apply edits to a file.
virtual void writeMeta(const char *key, const int32_t *value, int count)=0
Write an array of signed 32-bit integers as meta data.
virtual void writeMeta(const char *key, const int16_t *value, int count)=0
Write an array of signed 16-bit integers as meta data.
virtual void writeMeta(const char *key, const char *string)=0
Write a string as meta data.
virtual bool close(Ptex::String &error)=0
Close the file.
virtual void writeMeta(const char *key, const double *value, int count)=0
Write an array of signed 32-bit doubles as meta data.
virtual void writeMeta(PtexMetaData *data)=0
Copy meta data from an existing meta data block.
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.
virtual bool writeConstantFace(int faceid, const Ptex::FaceInfo &info, const void *data)=0
Write constant texture data for a face.
virtual ~PtexWriter()
Destructor not for public use. Use release() instead.
virtual bool writeFace(int faceid, const Ptex::FaceInfo &info, const void *data, int stride=0)=0
Write texture data for a face.
const char * c_str() const
String & operator=(const std::string &str)
String & operator=(const String &str)
String(const String &str)
String & operator=(const char *str)
Common data structures and enums used throughout the API.
const char * DataTypeName(DataType dt)
Look up name of given data type.
int DataSize(DataType dt)
Look up size of given data type (in bytes).
const char * MeshTypeName(MeshType mt)
Look up name of given mesh type.
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.
EdgeId
Edge IDs used in adjacency data in the Ptex::FaceInfo struct.
@ e_right
Right edge, from UV (1,0) to (1,1)
@ e_top
Top edge, from UV (1,1) to (0,1)
@ e_left
Left edge, from UV (0,1) to (0,0)
@ e_bottom
Bottom edge, from UV (0,0) to (1,0)
const char * EdgeFilterModeName(EdgeFilterMode m)
Look up name of given edge filter mode.
DataType
Type of data stored in texture file.
@ dt_half
Half-precision (16-bit) floating point.
@ dt_float
Single-precision (32-bit) floating point.
@ dt_uint16
Unsigned, 16-bit integer.
@ dt_uint8
Unsigned, 8-bit integer.
float OneValue(DataType dt)
Look up value of given data type that corresponds to the normalized value of 1.0.
const char * MetaDataTypeName(MetaDataType mdt)
Look up name of given meta data type.
const char * EdgeIdName(EdgeId eid)
Look up name of given edge ID.
MeshType
Type of base mesh for which the textures are defined.
@ mt_triangle
Mesh is triangle-based.
@ mt_quad
Mesh is quad-based.
BorderMode
How to handle mesh border when filtering.
@ m_black
texel beyond border are assumed to be black
@ m_clamp
texel access is clamped to border
@ m_periodic
texel access wraps to other side of face
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.
MetaDataType
Type of meta data entry.
@ mdt_string
Null-terminated string.
@ mdt_float
Single-precision (32-bit) floating point.
@ mdt_int32
Signed 32-bit integer.
@ mdt_int8
Signed 8-bit integer.
@ mdt_double
Double-precision (32-bit) floating point.
@ mdt_int16
Signed 16-bit integer.
EdgeFilterMode
How to handle transformation across edges when filtering.
@ efm_none
Don't do anything with the values.
@ efm_tanvec
Values are vectors in tangent space; rotate values.
const char * BorderModeName(BorderMode m)
Look up name of given border mode.
float OneValueInv(DataType dt)
Lookup up inverse value of given data type that corresponds to the normalized value of 1....
FilterType filter
Filter type.
int __structSize
(for internal use only)
float sharpness
Filter sharpness, 0..1 (for general bi-cubic filter only).
bool lerp
Interpolate between mipmap levels.
bool noedgeblend
Disable cross-face filtering. Useful for debugging or rendering on polys.
Options(FilterType filter_=f_box, bool lerp_=0, float sharpness_=0, bool noedgeblend_=0)
Constructor - sets defaults.
Get most commonly used info in a single call for convenience / efficiency.
EdgeFilterMode edgeFilterMode
Information about a face, as stored in the Ptex file header.
void setadjedges(int e0, int e1, int e2, int e3)
Set the adjedges data.
bool hasEdits() const
Determine if face has edits in the file (by checking a flag).
bool isNeighborhoodConstant() const
Determine if neighborhood of face is constant (by checking a flag).
FaceInfo(Res res_)
Constructor.
bool isSubface() const
Determine if face is a subface (by checking a flag).
Res res
Resolution of face.
EdgeId adjedge(int eid) const
Access an adjacent edge id. The eid value must be 0..3.
bool isConstant() const
Determine if face is constant (by checking a flag).
uint8_t adjedges
Adjacent edges, 2 bits per edge.
int32_t adjfaces[4]
Adjacent faces (-1 == no adjacent face).
FaceInfo(Res res_, int adjfaces_[4], int adjedges_[4], bool isSubface_=false)
Constructor.
FaceInfo()
Default constructor.
void setadjfaces(int f0, int f1, int f2, int f3)
Set the adjfaces data.
int adjface(int eid) const
Access an adjacent face id. The eid value must be 0..3.
Pixel resolution of a given texture.
bool operator>=(const Res &r) const
True if res is >= given res in both u and v directions.
int ntilesu(Res tileres) const
Determine the number of tiles in the u direction for the given tile res.
bool operator!=(const Res &r) const
Comparison operator.
Res(uint16_t value)
Constructor.
int8_t ulog2
log base 2 of u resolution, in texels
int ntilesv(Res tileres) const
Determine the number of tiles in the v direction for the given tile res.
Res()
Default constructor, sets res to 0 (1x1 texel).
uint16_t val() const
Resolution as a single 16-bit integer value.
int v() const
V resolution in texels.
Res swappeduv() const
Get value of resolution with u and v swapped.
int size() const
Total size of specified texture in texels (u * v).
Res(int8_t ulog2_, int8_t vlog2_)
Constructor.
void swapuv()
Swap the u and v resolution values in place.
void clamp(const Res &r)
Clamp the resolution value against the given value.
int ntiles(Res tileres) const
Determine the total number of tiles for the given tile res.
int u() const
U resolution in texels.
int8_t vlog2
log base 2 of v resolution, in texels
bool operator==(const Res &r) const
Comparison operator.