void PtexReader::getPixel(int faceid, int u, int v, float* result, int firstchan, int nchannels, Ptex::Res res) { memset(result, 0, nchannels); // clip nchannels against actual number available nchannels = PtexUtils::min(nchannels, _header.nchannels-firstchan); if (nchannels <= 0) return; // get raw pixel data PtexPtr<PtexFaceData> data ( getData(faceid, res) ); if (!data) return; void* pixel = alloca(_pixelsize); data->getPixel(u, v, pixel); // adjust for firstchan offset int datasize = DataSize(_header.datatype); if (firstchan) pixel = (char*) pixel + datasize * firstchan; // convert/copy to result as needed if (_header.datatype == dt_float) memcpy(result, pixel, datasize * nchannels); else ConvertToFloat(result, pixel, _header.datatype, nchannels); }
void PtexReader::TiledFaceBase::getPixel(int ui, int vi, void* result) { int tileu = ui >> _tileres.ulog2; int tilev = vi >> _tileres.vlog2; PtexPtr<PtexFaceData> tile ( getTile(tilev * _ntilesu + tileu) ); tile->getPixel(ui - (tileu<<_tileres.ulog2), vi - (tilev<<_tileres.vlog2), result); }