Added support for generating RGBA, RGBA-16 and RGBA-compressed texture databases

This commit is contained in:
Robert Osfield
2005-05-02 14:16:25 +00:00
parent 991feca6cc
commit 015c9a9765
3 changed files with 27 additions and 9 deletions

View File

@@ -753,6 +753,8 @@ void DataSet::SourceData::readImage(DestinationData& destination)
destinationColumnPtr[1] = (int)(rd * (float)destinationColumnPtr[1] + rs * (float)sourceColumnPtr[1]);
destinationColumnPtr[2] = (int)(rd * (float)destinationColumnPtr[2] + rs * (float)sourceColumnPtr[2]);
if (destination_hasAlpha)
destinationColumnPtr[3] = osg::maximum(destinationColumnPtr[3],sourceColumnPtr[3]);
}
}
@@ -2224,7 +2226,7 @@ osg::StateSet* DataSet::DestinationTile::createStateSet()
if (compressedImageSupported &&
image->s()>=minumCompressedTextureSize && image->t()>=minumCompressedTextureSize &&
_dataSet->getTextureType()==COMPRESSED_TEXTURE &&
(_dataSet->getTextureType()==COMPRESSED_TEXTURE || _dataSet->getTextureType()==COMPRESSED_RGBA_TEXTURE) &&
(image->getPixelFormat()==GL_RGB || image->getPixelFormat()==GL_RGBA))
{
@@ -2258,10 +2260,14 @@ osg::StateSet* DataSet::DestinationTile::createStateSet()
}
else
{
if (_dataSet->getTextureType()==RGB_16_BIT && image->getPixelFormat()==GL_RGB)
if (_dataSet->getTextureType()==RGB_16 && image->getPixelFormat()==GL_RGB)
{
image->scaleImage(image->s(),image->t(),image->r(),GL_UNSIGNED_SHORT_5_6_5);
}
else if (_dataSet->getTextureType()==RGBA_16 && image->getPixelFormat()==GL_RGBA)
{
image->scaleImage(image->s(),image->t(),image->r(),GL_UNSIGNED_SHORT_5_5_5_1);
}
if (mipmapImageSupported && _dataSet->getMipMappingMode()==DataSet::MIP_MAPPING_IMAGERY)
{
@@ -3538,6 +3544,9 @@ DataSet::CompositeDestination* DataSet::createDestinationGraph(CompositeDestinat
tile->_dataSet = this;
tile->_cs = cs;
tile->_extents = extents;
tile->_pixelFormat = (getTextureType()==COMPRESSED_RGBA_TEXTURE||
getTextureType()==RGBA ||
getTextureType()==RGBA_16) ? GL_RGBA : GL_RGB;
tile->setMaximumImagerySize(maxImageSize,maxImageSize);
tile->setMaximumTerrainSize(maxTerrainSize,maxTerrainSize);
tile->computeMaximumSourceResolution(_sourceGraph.get());