7#ifndef HDST_PTEX_MIPMAP_TEXTURE_LOADER_H
8#define HDST_PTEX_MIPMAP_TEXTURE_LOADER_H
11#include "pxr/imaging/hdSt/api.h"
17PXR_NAMESPACE_OPEN_SCOPE
20class HdStPtexMipmapTextureLoader final
24 HdStPtexMipmapTextureLoader(PtexTexture *ptex,
27 size_t targetMemory = 0,
28 bool seamlessMipmap =
true);
31 ~HdStPtexMipmapTextureLoader();
33 const unsigned char * GetLayoutBuffer()
const {
36 const unsigned char * GetTexelBuffer()
const {
39 int GetNumFaces()
const {
40 return (
int)_blocks.size();
42 int GetNumPages()
const {
43 return (
int)_pages.size();
45 int GetPageWidth()
const {
48 int GetPageHeight()
const {
51 size_t GetMemoryUsage()
const {
91 uint16_t width, height;
92 uint16_t adjSizeDiffs;
95 void Generate(HdStPtexMipmapTextureLoader *loader, PtexTexture *ptex,
96 unsigned char *destination,
97 int bpp,
int width,
int maxLevels);
99 void SetSize(
unsigned char ulog2_,
unsigned char vlog2_,
bool mipmap);
101 int GetNumTexels()
const {
105 void guttering(HdStPtexMipmapTextureLoader *loader, PtexTexture *ptex,
106 int level,
int width,
int height,
107 unsigned char *pptr,
int bpp,
int stride);
109 static bool sort(
const Block *a,
const Block *b) {
110 return (a->height > b->height) ||
111 ((a->height == b->height) && (a->width > b->width));
114 static bool sortByArea(
const Block *a,
const Block *b) {
115 return (a->GetNumTexels() > b->GetNumTexels());
120 class CornerIterator;
122 void generateBuffers();
123 void optimizePacking(
int maxNumPages,
size_t targetMemory);
124 int getLevelDiff(
int face,
int edge);
125 bool getCornerPixel(
float *resultPixel,
int numchannels,
126 int face,
int edge, int8_t res);
127 void sampleNeighbor(
unsigned char *border,
128 int face,
int edge,
int length,
int bpp);
129 int resampleBorder(
int face,
int edgeId,
unsigned char *result,
130 int dstLength,
int bpp,
131 float srcStart = 0.0f,
float srcEnd = 1.0f);
133 std::vector<Block> _blocks;
134 std::vector<Page *> _pages;
139 int _pageWidth, _pageHeight;
141 unsigned char *_texelBuffer;
142 unsigned char *_layoutBuffer;
148PXR_NAMESPACE_CLOSE_SCOPE