Skip to content

Commit 34b64ba

Browse files
committed
Fixed an issue with mipmap length calculation with maxmipmaps option set
1 parent 8490e72 commit 34b64ba

File tree

4 files changed

+84
-8
lines changed

4 files changed

+84
-8
lines changed

BCnEnc.Net/BCnEncoder.csproj

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<Project Sdk="Microsoft.NET.Sdk">
1+
<Project Sdk="Microsoft.NET.Sdk">
22

33
<PropertyGroup>
44
<TargetFramework>netstandard2.1</TargetFramework>
@@ -12,7 +12,7 @@
1212
<PackageLicenseExpression>MIT OR Unlicense</PackageLicenseExpression>
1313
<Copyright />
1414
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
15-
<Version>2.0.1</Version>
15+
<Version>2.0.2</Version>
1616
<Authors>Nominom</Authors>
1717
<Company />
1818
<Product>BCnEncoder.Net</Product>
@@ -31,9 +31,9 @@ Supported formats are:
3131
<RepositoryType>git</RepositoryType>
3232
<PackageTags>BCn BC BC1 BC2 BC3 BC4 BC5 BC7 BPTC RGTC S3TC DXT1 DXT3 DXT5 ktx dds texture compression encoding decoding decompression image gpu</PackageTags>
3333
<PackageProjectUrl>https://github.com/Nominom/BCnEncoder.NET</PackageProjectUrl>
34-
<PackageReleaseNotes>Removed ImageSharp dependency, added async api methods, added ATC and BGRA support, added new raw api methods, improved dds file handling and fixed some bugs. See the github page for more information about 2.0.
34+
<PackageReleaseNotes>2.0.0 - Removed ImageSharp dependency, added async api methods, added ATC and BGRA support, added new raw api methods, improved dds file handling and fixed some bugs. See the github page for more information about 2.0.
3535

36-
2.0.1 - fixed progress api</PackageReleaseNotes>
36+
2.0.2 - fixed a bug in mipmap calculations</PackageReleaseNotes>
3737
</PropertyGroup>
3838

3939
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">

BCnEnc.Net/Shared/MipMapper.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,16 @@ public static int CalculateMipChainLength(int width, int height, int maxNumMipMa
8282
}
8383

8484
var output = 0;
85-
for (var mipLevel = 1; mipLevel < maxNumMipMaps; mipLevel++)
85+
for (var mipLevel = 1; mipLevel <= maxNumMipMaps; mipLevel++)
8686
{
8787
var mipWidth = Math.Max(1, width >> mipLevel);
8888
var mipHeight = Math.Max(1, height >> mipLevel);
8989

90+
if (mipLevel == maxNumMipMaps)
91+
{
92+
return maxNumMipMaps;
93+
}
94+
9095
if (mipWidth == 1 && mipHeight == 1)
9196
{
9297
output = mipLevel + 1;

BCnEncTests/EncoderOptionsTests.cs

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
using BCnEncoder.Encoder;
5+
using BCnEncTests.Support;
6+
using Xunit;
7+
using BCnEncoder.ImageSharp;
8+
9+
namespace BCnEncTests
10+
{
11+
public class EncoderOptionsTests
12+
{
13+
14+
[Theory]
15+
[InlineData(1)]
16+
[InlineData(2)]
17+
[InlineData(5)]
18+
[InlineData(10)]
19+
public void MaxMipMaps(int requestedMipMaps)
20+
{
21+
var testImage = ImageLoader.TestBlur1;
22+
var encoder = new BcEncoder()
23+
{
24+
OutputOptions =
25+
{
26+
GenerateMipMaps = true,
27+
MaxMipMapLevel = requestedMipMaps
28+
}
29+
};
30+
31+
Assert.Equal(requestedMipMaps, encoder.CalculateNumberOfMipLevels(testImage));
32+
33+
var ktx = encoder.EncodeToKtx(testImage);
34+
35+
Assert.Equal(requestedMipMaps, (int)ktx.header.NumberOfMipmapLevels);
36+
Assert.Equal(requestedMipMaps, ktx.MipMaps.Count);
37+
38+
var dds = encoder.EncodeToDds(testImage);
39+
40+
Assert.Equal(requestedMipMaps, (int)dds.header.dwMipMapCount);
41+
Assert.Equal(requestedMipMaps, dds.Faces[0].MipMaps.Length);
42+
}
43+
44+
[Fact]
45+
[System.Diagnostics.CodeAnalysis.SuppressMessage("Assertions", "xUnit2013:Do not use equality check to check for collection size.", Justification = "<Pending>")]
46+
public void GenerateMipMaps()
47+
{
48+
var testImage = ImageLoader.TestBlur1;
49+
const int requestedMipMaps = 1;
50+
var encoder = new BcEncoder()
51+
{
52+
OutputOptions =
53+
{
54+
GenerateMipMaps = false
55+
}
56+
};
57+
58+
Assert.Equal(requestedMipMaps, encoder.CalculateNumberOfMipLevels(testImage));
59+
60+
var ktx = encoder.EncodeToKtx(testImage);
61+
62+
Assert.Equal(requestedMipMaps, (int)ktx.header.NumberOfMipmapLevels);
63+
Assert.Equal(requestedMipMaps, (int)ktx.MipMaps.Count);
64+
65+
var dds = encoder.EncodeToDds(testImage);
66+
67+
Assert.Equal(requestedMipMaps, (int)dds.header.dwMipMapCount);
68+
Assert.Equal(requestedMipMaps, dds.Faces[0].MipMaps.Length);
69+
}
70+
}
71+
}

BCnEncoder.NET.ImageSharp/BCnEncoder.NET.ImageSharp.csproj

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,16 @@
1717
<PackageProjectUrl>https://github.com/Nominom/BCnEncoder.NET</PackageProjectUrl>
1818
<RepositoryUrl>https://github.com/Nominom/BCnEncoder.NET</RepositoryUrl>
1919
<RepositoryType>git</RepositoryType>
20-
<PackageReleaseNotes>Updated version</PackageReleaseNotes>
21-
<Version>1.0.1</Version>
20+
<PackageReleaseNotes></PackageReleaseNotes>
21+
<Version>1.0.2</Version>
2222
</PropertyGroup>
2323

2424
<ItemGroup>
2525
<PackageReference Include="Microsoft.SourceLink.GitHub" Version="1.0.0">
2626
<PrivateAssets>all</PrivateAssets>
2727
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
2828
</PackageReference>
29-
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.2" />
29+
<PackageReference Include="SixLabors.ImageSharp" Version="1.0.3" />
3030
</ItemGroup>
3131

3232
<ItemGroup>

0 commit comments

Comments
 (0)