Skip to content

Commit a0e35d1

Browse files
workflow: fix missing VTFLib
1 parent 6aab315 commit a0e35d1

File tree

1 file changed

+96
-29
lines changed

1 file changed

+96
-29
lines changed

VTFLib/VTFFile.cpp

Lines changed: 96 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -536,7 +536,7 @@ static const char *GetCMPErrorString( CMP_ERROR error )
536536

537537
vlBool CVTFFile::Create( vlUInt uiWidth, vlUInt uiHeight, vlUInt uiFrames, vlUInt uiFaces, vlUInt uiSlices, vlByte **lpImageDataRGBA8888, const SVTFCreateOptions &VTFCreateOptions, const VTFImageFormat &SourceFormat )
538538
{
539-
if ( VTFCreateOptions.ImageFormat == IMAGE_FORMAT_RGBA32323232F || VTFCreateOptions.ImageFormat == IMAGE_FORMAT_RGB323232F || VTFCreateOptions.ImageFormat == IMAGE_FORMAT_RGBA16161616F )
539+
if ( VTFCreateOptions.ImageFormat == IMAGE_FORMAT_RGBA32323232F || VTFCreateOptions.ImageFormat == IMAGE_FORMAT_RGB323232F || VTFCreateOptions.ImageFormat == IMAGE_FORMAT_RGBA16161616F || VTFCreateOptions.ImageFormat == IMAGE_FORMAT_R32F )
540540
return CreateFloat( uiWidth, uiHeight, uiFrames, uiFaces, uiSlices, lpImageDataRGBA8888, VTFCreateOptions, SourceFormat );
541541
return Create( uiWidth, uiHeight, uiFrames, uiFaces, uiSlices, lpImageDataRGBA8888, VTFCreateOptions );
542542
}
@@ -893,7 +893,7 @@ vlBool CVTFFile::Create( vlUInt uiWidth, vlUInt uiHeight, vlUInt uiFrames, vlUIn
893893
//
894894
vlBool CVTFFile::CreateFloat( vlUInt uiWidth, vlUInt uiHeight, vlUInt uiFrames, vlUInt uiFaces, vlUInt uiSlices, vlByte **lpImageDataFP, const SVTFCreateOptions &VTFCreateOptions, const VTFImageFormat &SourceFormat )
895895
{
896-
if ( !( VTFCreateOptions.ImageFormat == IMAGE_FORMAT_RGBA32323232F || VTFCreateOptions.ImageFormat == IMAGE_FORMAT_RGB323232F || VTFCreateOptions.ImageFormat == IMAGE_FORMAT_RGBA16161616F ) )
896+
if ( !( VTFCreateOptions.ImageFormat == IMAGE_FORMAT_RGBA32323232F || VTFCreateOptions.ImageFormat == IMAGE_FORMAT_RGB323232F || VTFCreateOptions.ImageFormat == IMAGE_FORMAT_RGBA16161616F || VTFCreateOptions.ImageFormat == IMAGE_FORMAT_R32F ) )
897897
return false;
898898

899899
vlUInt uiCount = 0;
@@ -3906,7 +3906,7 @@ static SVTFImageConvertInfo VTFImageConvertInfo[IMAGE_FORMAT_COUNT] =
39063906
{ 64, 8, 16, 16, 16, 16, 0, 1, 2, 3, vlFalse, vlTrue, NULL, NULL, IMAGE_FORMAT_RGBA16161616F },
39073907
{ 64, 8, 16, 16, 16, 16, 0, 1, 2, 3, vlFalse, vlTrue, NULL, NULL, IMAGE_FORMAT_RGBA16161616 },
39083908
{ 32, 4, 8, 8, 8, 8, 0, 1, 2, 3, vlFalse, vlTrue, NULL, NULL, IMAGE_FORMAT_UVLX8888 },
3909-
{ 32, 4, 32, 0, 0, 0, 0, -1, -1, -1, vlFalse, vlFalse, NULL, NULL, IMAGE_FORMAT_R32F },
3909+
{ 32, 4, 32, 0, 0, 0, 0, -1, -1, -1, vlFalse, vlTrue, NULL, NULL, IMAGE_FORMAT_R32F },
39103910
{ 96, 12, 32, 32, 32, 0, 0, 1, 2, -1, vlFalse, vlTrue, NULL, NULL, IMAGE_FORMAT_RGB323232F },
39113911
{ 128, 16, 32, 32, 32, 32, 0, 1, 2, 3, vlFalse, vlTrue, NULL, NULL, IMAGE_FORMAT_RGBA32323232F },
39123912
{},
@@ -4358,43 +4358,33 @@ vlBool CVTFFile::Convert( vlByte *lpSource, vlByte *lpDest, vlUInt uiWidth, vlUI
43584358
return didConvert;
43594359
}
43604360

4361-
if ( DestFormat == IMAGE_FORMAT_RGBA16161616F )
4361+
if ( SourceFormat == IMAGE_FORMAT_R32F )
43624362
{
4363-
if ( SourceFormat == IMAGE_FORMAT_RGBA32323232F || SourceFormat == IMAGE_FORMAT_RGB323232F )
4364-
{
4365-
vlBool hasAlpha = SourceFormat == IMAGE_FORMAT_RGBA32323232F;
4363+
auto lpMiddleSize = ComputeImageSize( uiWidth, uiHeight, 1, IMAGE_FORMAT_RGBA32323232F );
4364+
auto lpMiddle = new vlByte[lpMiddleSize];
43664365

4367-
float *lpSourceFP = reinterpret_cast<float *>( lpSource );
4368-
float *lpLastFP = reinterpret_cast<float *>( lpSource + CVTFFile::ComputeImageSize( uiWidth, uiHeight, 1, SourceFormat ) );
4369-
unsigned short *lpDestFP = reinterpret_cast<unsigned short *>( lpDest );
4366+
auto lpMiddleFP = reinterpret_cast<float *>( lpMiddle );
43704367

4371-
for ( ; lpSourceFP < lpLastFP; lpSourceFP += hasAlpha ? 4 : 3, lpDestFP += 4 )
4372-
{
4373-
float test = lpSourceFP[0];
4374-
float test2 = CVTFFile::FP32ToFP16( lpSourceFP[0] );
4368+
auto lpLastFP = reinterpret_cast<float *>( lpMiddle + lpMiddleSize );
43754369

4376-
lpDestFP[0] = CVTFFile::FP32ToFP16( lpSourceFP[0] );
4377-
lpDestFP[1] = CVTFFile::FP32ToFP16( lpSourceFP[1] );
4378-
lpDestFP[2] = CVTFFile::FP32ToFP16( lpSourceFP[2] );
4379-
lpDestFP[3] = hasAlpha ? CVTFFile::FP32ToFP16( lpSourceFP[3] ) : CVTFFile::FP32ToFP16( 1.f );
4380-
}
4370+
auto lpSourceFP = reinterpret_cast<float *>( lpSource );
43814371

4382-
return vlTrue;
4372+
for ( ; lpMiddleFP < lpLastFP; lpSourceFP++, lpMiddleFP += 4 )
4373+
{
4374+
lpMiddleFP[0] = lpSourceFP[0];
4375+
lpMiddleFP[1] = 0.f;
4376+
lpMiddleFP[2] = 0.f;
4377+
lpMiddleFP[3] = 1.f;
43834378
}
43844379

4385-
auto lpIntermediateRGBA = new vlByte[CVTFFile::ComputeImageSize( uiWidth, uiHeight, 1, IMAGE_FORMAT_RGBA32323232F )];
4386-
4387-
if ( !LDR_TO_HDR( lpSource, lpIntermediateRGBA, uiWidth, uiHeight, SourceInfo, VTFImageConvertInfo[IMAGE_FORMAT_RGBA32323232F] ) )
4380+
if ( !Convert( lpMiddle, lpDest, uiWidth, uiHeight, IMAGE_FORMAT_RGBA32323232F, DestFormat ) )
43884381
{
4389-
delete[] lpIntermediateRGBA;
4382+
delete[] lpMiddle;
43904383
return vlFalse;
43914384
}
43924385

4393-
vlBool didConvert = Convert( lpIntermediateRGBA, lpDest, uiWidth, uiHeight, IMAGE_FORMAT_RGBA32323232F, DestFormat );
4394-
4395-
delete[] lpIntermediateRGBA;
4396-
4397-
return didConvert;
4386+
delete[] lpMiddle;
4387+
return vlTrue;
43984388
}
43994389

44004390
if ( SourceFormat == IMAGE_FORMAT_RGBA32323232F && DestFormat == IMAGE_FORMAT_RGB323232F )
@@ -4461,6 +4451,83 @@ vlBool CVTFFile::Convert( vlByte *lpSource, vlByte *lpDest, vlUInt uiWidth, vlUI
44614451
return vlTrue;
44624452
}
44634453

4454+
if ( DestFormat == IMAGE_FORMAT_R32F )
4455+
{
4456+
if ( SourceFormat == IMAGE_FORMAT_RGBA32323232F || SourceFormat == IMAGE_FORMAT_RGB323232F )
4457+
{
4458+
vlBool hasAlpha = SourceFormat == IMAGE_FORMAT_RGBA32323232F;
4459+
4460+
auto lpSourceFP = reinterpret_cast<float *>( lpSource );
4461+
auto lpLastFP = reinterpret_cast<float *>( lpSource + ComputeImageSize( uiWidth, uiHeight, 1, hasAlpha ? IMAGE_FORMAT_RGBA32323232F : IMAGE_FORMAT_RGB323232F ) );
4462+
4463+
auto lpDestFP = reinterpret_cast<float *>( lpDest );
4464+
4465+
for ( ; lpSourceFP < lpLastFP; lpSourceFP += hasAlpha ? 4 : 3, lpDestFP++ )
4466+
lpDestFP[0] = lpSourceFP[0];
4467+
4468+
return vlTrue;
4469+
}
4470+
4471+
auto lpMiddleSize = ComputeImageSize( uiWidth, uiHeight, 1, IMAGE_FORMAT_RGBA32323232F );
4472+
auto lpMiddle = new vlByte[lpMiddleSize];
4473+
4474+
if ( !Convert( lpSource, lpMiddle, uiWidth, uiHeight, SourceFormat, IMAGE_FORMAT_RGBA32323232F ) )
4475+
{
4476+
delete[] lpMiddle;
4477+
return vlFalse;
4478+
}
4479+
4480+
auto lpSourceFP = reinterpret_cast<float *>( lpMiddle );
4481+
auto lpLastFP = reinterpret_cast<float *>( lpMiddle + lpMiddleSize );
4482+
4483+
auto lpDestFP = reinterpret_cast<float *>( lpDest );
4484+
4485+
for ( ; lpSourceFP < lpLastFP; lpSourceFP += 4, lpDestFP++ )
4486+
lpDestFP[0] = lpSourceFP[0];
4487+
4488+
delete[] lpMiddle;
4489+
return vlTrue;
4490+
}
4491+
4492+
if ( DestFormat == IMAGE_FORMAT_RGBA16161616F )
4493+
{
4494+
if ( SourceFormat == IMAGE_FORMAT_RGBA32323232F || SourceFormat == IMAGE_FORMAT_RGB323232F )
4495+
{
4496+
vlBool hasAlpha = SourceFormat == IMAGE_FORMAT_RGBA32323232F;
4497+
4498+
float *lpSourceFP = reinterpret_cast<float *>( lpSource );
4499+
float *lpLastFP = reinterpret_cast<float *>( lpSource + CVTFFile::ComputeImageSize( uiWidth, uiHeight, 1, SourceFormat ) );
4500+
unsigned short *lpDestFP = reinterpret_cast<unsigned short *>( lpDest );
4501+
4502+
for ( ; lpSourceFP < lpLastFP; lpSourceFP += hasAlpha ? 4 : 3, lpDestFP += 4 )
4503+
{
4504+
float test = lpSourceFP[0];
4505+
float test2 = CVTFFile::FP32ToFP16( lpSourceFP[0] );
4506+
4507+
lpDestFP[0] = CVTFFile::FP32ToFP16( lpSourceFP[0] );
4508+
lpDestFP[1] = CVTFFile::FP32ToFP16( lpSourceFP[1] );
4509+
lpDestFP[2] = CVTFFile::FP32ToFP16( lpSourceFP[2] );
4510+
lpDestFP[3] = hasAlpha ? CVTFFile::FP32ToFP16( lpSourceFP[3] ) : CVTFFile::FP32ToFP16( 1.f );
4511+
}
4512+
4513+
return vlTrue;
4514+
}
4515+
4516+
auto lpIntermediateRGBA = new vlByte[CVTFFile::ComputeImageSize( uiWidth, uiHeight, 1, IMAGE_FORMAT_RGBA32323232F )];
4517+
4518+
if ( !LDR_TO_HDR( lpSource, lpIntermediateRGBA, uiWidth, uiHeight, SourceInfo, VTFImageConvertInfo[IMAGE_FORMAT_RGBA32323232F] ) )
4519+
{
4520+
delete[] lpIntermediateRGBA;
4521+
return vlFalse;
4522+
}
4523+
4524+
vlBool didConvert = Convert( lpIntermediateRGBA, lpDest, uiWidth, uiHeight, IMAGE_FORMAT_RGBA32323232F, DestFormat );
4525+
4526+
delete[] lpIntermediateRGBA;
4527+
4528+
return didConvert;
4529+
}
4530+
44644531
// Do general convertions.
44654532
if ( SourceInfo.bIsCompressed || DestInfo.bIsCompressed )
44664533
{

0 commit comments

Comments
 (0)