93 lines
3.1 KiB
C++
93 lines
3.1 KiB
C++
#ifndef GLES_TEXTURE_UTILS_H
|
|
#define GLES_TEXTURE_UTILS_H
|
|
|
|
#include <GLES3/gl31.h>
|
|
|
|
namespace GLESTextureUtils {
|
|
|
|
// By spec, the buffer is only required to provide just enough data. The
|
|
// last row does not have to fill unpackRowLength. But our decoder is
|
|
// written to always read full row. So we add "ignoreTrailing" here. When
|
|
// ignoreTrailing == 1 we compute the real size as defined by spec. When
|
|
// ignoreTrailing == 0 we compute the size used by decoder/encoder.
|
|
void computeTextureStartEnd(
|
|
GLsizei width, GLsizei height, GLsizei depth,
|
|
GLenum format, GLenum type,
|
|
int unpackAlignment,
|
|
int unpackRowLength,
|
|
int unpackImageHeight,
|
|
int unpackSkipPixels,
|
|
int unpackSkipRows,
|
|
int unpackSkipImages,
|
|
int* start,
|
|
int* end,
|
|
int ignoreTrailing);
|
|
|
|
int computeTotalImageSize(
|
|
GLsizei width, GLsizei height, GLsizei depth,
|
|
GLenum format, GLenum type,
|
|
int unpackAlignment,
|
|
int unpackRowLength,
|
|
int unpackImageHeight,
|
|
int unpackSkipPixels,
|
|
int unpackSkipRows,
|
|
int unpackSkipImages);
|
|
|
|
int computeNeededBufferSize(
|
|
GLsizei width, GLsizei height, GLsizei depth,
|
|
GLenum format, GLenum type,
|
|
int unpackAlignment,
|
|
int unpackRowLength,
|
|
int unpackImageHeight,
|
|
int unpackSkipPixels,
|
|
int unpackSkipRows,
|
|
int unpackSkipImages,
|
|
int ignoreTrailing);
|
|
|
|
// Writes out |height| offsets for glReadPixels to read back
|
|
// data in separate rows of pixels. Returns:
|
|
// 1. |startOffset|: offset in bytes to apply at the beginning
|
|
// 2. |packingPixelRowSize|: the buffer size in bytes that has the actual pixels per row.
|
|
// 2. |packingTotalRowSize|: the length in bytes of each row including the padding from row length.
|
|
void computePackingOffsets2D(
|
|
GLsizei width, GLsizei height,
|
|
GLenum format, GLenum type,
|
|
int packAlignment,
|
|
int packRowLength,
|
|
int packSkipPixels,
|
|
int packSkipRows,
|
|
int* bpp,
|
|
int* startOffset,
|
|
int* packingPixelRowSize,
|
|
int* packingTotalRowSize);
|
|
|
|
// For processing 3D textures exactly to the sizes of client buffers.
|
|
void computePackingOffsets3D(
|
|
GLsizei width, GLsizei height, GLsizei depth,
|
|
GLenum format, GLenum type,
|
|
int packAlignment,
|
|
int packRowLength,
|
|
int packImageHeight,
|
|
int packSkipPixels,
|
|
int packSkipRows,
|
|
int packSkipImages,
|
|
int* bpp,
|
|
int* startOffset,
|
|
int* packingPixelRowSize,
|
|
int* packingTotalRowSize,
|
|
int* packingPixelImageSize,
|
|
int* packingTotalImageSize);
|
|
|
|
// For calculating compressed sizes of ETC/EAC formatted images in the guest.
|
|
GLsizei getCompressedImageSize(GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, bool* error);
|
|
|
|
// Format queries
|
|
bool isEtc2Format(GLenum internalformat);
|
|
bool isAstcFormat(GLenum internalformat);
|
|
bool isBptcFormat(GLenum internalformat);
|
|
bool isS3tcFormat(GLenum internalformat);
|
|
bool isRgtcFormat(GLenum internalformat);
|
|
|
|
} // namespace GLESTextureUtils
|
|
#endif
|