blob: 5dae8c75a91b7d86a8dcc3568f22d926bf87dafa [file] [log] [blame]
#ifndef GLES_TEXTURE_UTILS_H
#define GLES_TEXTURE_UTILS_H
#include <GLES3/gl31.h>
namespace GLESTextureUtils {
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 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);
// 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);
} // namespace GLESTextureUtils
#endif