本文整理汇总了C++中ImageReader::getLevelSize方法的典型用法代码示例。如果您正苦于以下问题:C++ ImageReader::getLevelSize方法的具体用法?C++ ImageReader::getLevelSize怎么用?C++ ImageReader::getLevelSize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ImageReader
的用法示例。
在下文中一共展示了ImageReader::getLevelSize方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: glActiveTexture
void LoadTextureAMT::processGPU_Texture2D()
{
ImageReader* reader = m_imageReaders[0];
if(!reader)
{
return;
}
glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &m_textureId);
glBindTexture(m_target, m_textureId);
int levels;
if(m_loadMipmaps)
{
levels = reader->getLevelAmount();
if(levels == 1)
{
// If need mipmaps and image has only base level, set number of mipmap levels to generate
levels = gmath::imageLevelCount(reader->getWidth(0), reader->getHeight(0), 1);
}
}
else
{
levels = 1;
}
glTexStorage2D(m_target, levels, m_imageGLFormat, reader->getWidth(0), reader->getHeight(0));
for(int i = 0; i < reader->getLevelAmount(); i++)
{
if(reader->isCompressedFormat())
{
glCompressedTexSubImage2D(m_target, i, 0, 0, reader->getWidth(i), reader->getHeight(i), reader->getFormat(), reader->getLevelSize(i), reader->getData(i));
}
else
{
glTexSubImage2D(m_target, i, 0, 0, reader->getWidth(i), reader->getHeight(i), reader->getFormat(), GL_UNSIGNED_BYTE, reader->getData(i));
}
}
glTexParameteri(m_target, GL_TEXTURE_BASE_LEVEL, 0);
if((reader->getLevelAmount() == 1) && m_loadMipmaps)
{
glGenerateMipmap(m_target);
}
if(m_loadMipmaps)
{
glTexParameteri(m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(m_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
else
{
glTexParameteri(m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(m_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(m_target, GL_TEXTURE_MAX_LEVEL, 0);
}
// Anisotropy filtering
float maximumAnistropy;
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maximumAnistropy);
glTexParameterf(m_target, GL_TEXTURE_MAX_ANISOTROPY_EXT, maximumAnistropy);
glBindTexture(m_target, 0);
utils::deleteAndNull(reader);
m_imageReaders[0] = nullptr;
m_context->m_target = m_target;
m_context->m_textureId = m_textureId;
}
示例2: CTextureResource
C2DTextureResource::C2DTextureResource(const std::string &filePath, const int flags) : CTextureResource(filePath)
{
GLenum iFormat;
int levels;
//uint32_t size;
ImageReader *img;
m_textureId = 0;
m_target = GL_TEXTURE_2D;
m_type = ETT_TEX2D;
// Fail loading if given extension is not supported.
if((img = getImageFileByExtension(filePath)) == 0) { return; }
// Fail loading if loaded file was invalid.
if(!img->isValid()) { return; }
iFormat = img->getOpenGLInternalFormat(flags);
glActiveTexture(GL_TEXTURE0);
glGenTextures(1, &m_textureId);
glBindTexture(m_target, m_textureId);
if(flags & ETF_MIPMAPS)
{
levels = img->getLevelAmount();
if(levels == 1)
{
// If need mipmaps and image has only base level, set number of mipmap levels to generate
levels = gmath::imageLevelCount(img->getWidth(0), img->getHeight(0), 1);
}
}
else
{
levels = 1;
}
glTexStorage2D(m_target, levels, iFormat, img->getWidth(0), img->getHeight(0));
for(int i = 0; i < img->getLevelAmount(); i++)
{
if(img->isCompressedFormat())
{
glCompressedTexSubImage2D(m_target, i, 0, 0, img->getWidth(i), img->getHeight(i), img->getFormat(), img->getLevelSize(i), img->getData(i));
}
else
{
glTexSubImage2D(m_target, i, 0, 0, img->getWidth(i), img->getHeight(i), img->getFormat(), GL_UNSIGNED_BYTE, img->getData(i));
}
}
glTexParameteri(m_target, GL_TEXTURE_BASE_LEVEL, 0);
if((img->getLevelAmount() == 1) && (flags & ETF_MIPMAPS))
{
glGenerateMipmap(m_target);
}
if(flags & ETF_MIPMAPS)
{
glTexParameteri(m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(m_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
else
{
glTexParameteri(m_target, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(m_target, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(m_target, GL_TEXTURE_MAX_LEVEL, 0);
}
// Anisotropy filtering
float maximumAnistropy;
glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &maximumAnistropy);
glTexParameterf(m_target, GL_TEXTURE_MAX_ANISOTROPY_EXT, maximumAnistropy);
//size = approxSize(iFormat, img->getXBlocks(0), img->getYBlocks(0), 1, flags & ETF_MIPMAPS);
glBindTexture(m_target, 0);
delete img;
m_loaded = true;
}