24#ifndef HDST_PTEX_MIPMAP_TEXTURE_LOADER_H
25#define HDST_PTEX_MIPMAP_TEXTURE_LOADER_H
28#include "pxr/imaging/hdSt/api.h"
34PXR_NAMESPACE_OPEN_SCOPE
37class HdStPtexMipmapTextureLoader final
41 HdStPtexMipmapTextureLoader(PtexTexture *ptex,
44 size_t targetMemory = 0,
45 bool seamlessMipmap =
true);
48 ~HdStPtexMipmapTextureLoader();
50 const unsigned char * GetLayoutBuffer()
const {
53 const unsigned char * GetTexelBuffer()
const {
56 int GetNumFaces()
const {
57 return (
int)_blocks.size();
59 int GetNumPages()
const {
60 return (
int)_pages.size();
62 int GetPageWidth()
const {
65 int GetPageHeight()
const {
68 size_t GetMemoryUsage()
const {
108 uint16_t width, height;
109 uint16_t adjSizeDiffs;
112 void Generate(HdStPtexMipmapTextureLoader *loader, PtexTexture *ptex,
113 unsigned char *destination,
114 int bpp,
int width,
int maxLevels);
116 void SetSize(
unsigned char ulog2_,
unsigned char vlog2_,
bool mipmap);
118 int GetNumTexels()
const {
122 void guttering(HdStPtexMipmapTextureLoader *loader, PtexTexture *ptex,
123 int level,
int width,
int height,
124 unsigned char *pptr,
int bpp,
int stride);
126 static bool sort(
const Block *a,
const Block *b) {
127 return (a->height > b->height) ||
128 ((a->height == b->height) && (a->width > b->width));
131 static bool sortByArea(
const Block *a,
const Block *b) {
132 return (a->GetNumTexels() > b->GetNumTexels());
137 class CornerIterator;
139 void generateBuffers();
140 void optimizePacking(
int maxNumPages,
size_t targetMemory);
141 int getLevelDiff(
int face,
int edge);
142 bool getCornerPixel(
float *resultPixel,
int numchannels,
143 int face,
int edge, int8_t res);
144 void sampleNeighbor(
unsigned char *border,
145 int face,
int edge,
int length,
int bpp);
146 int resampleBorder(
int face,
int edgeId,
unsigned char *result,
147 int dstLength,
int bpp,
148 float srcStart = 0.0f,
float srcEnd = 1.0f);
150 std::vector<Block> _blocks;
151 std::vector<Page *> _pages;
156 int _pageWidth, _pageHeight;
158 unsigned char *_texelBuffer;
159 unsigned char *_layoutBuffer;
165PXR_NAMESPACE_CLOSE_SCOPE