fna-workbench

fna-workbench Git Source Tree


Root/src/Content/ContentReaders/Texture3DReader.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#region License
/* FNA - XNA4 Reimplementation for Desktop Platforms
 * Copyright 2009-2016 Ethan Lee and the MonoGame Team
 *
 * Released under the Microsoft Public License.
 * See LICENSE for details.
 */
#endregion
 
#region Using Statements
using System;
 
using Microsoft.Xna.Framework.Graphics;
#endregion
 
namespace Microsoft.Xna.Framework.Content
{
    internal class Texture3DReader : ContentTypeReader<Texture3D>
    {
        #region Protected Read Method
 
        protected internal override Texture3D Read(
            ContentReader reader,
            Texture3D existingInstance
        ) {
            Texture3D texture = null;
 
            SurfaceFormat format = (SurfaceFormat) reader.ReadInt32();
            int width = reader.ReadInt32();
            int height = reader.ReadInt32();
            int depth = reader.ReadInt32();
            int levelCount = reader.ReadInt32();
 
            if (existingInstance == null)
            {
                texture = new Texture3D(
                    reader.GraphicsDevice,
                    width,
                    height,
                    depth,
                    levelCount > 1,
                    format
                );
            }
            else
            {
                texture = existingInstance;
            }
 
            for (int i = 0; i < levelCount; i += 1)
            {
                int dataSize = reader.ReadInt32();
                byte[] data = reader.ReadBytes(dataSize);
                texture.SetData(
                    i,
                    0,
                    0,
                    width,
                    height,
                    0,
                    depth,
                    data,
                    0,
                    dataSize
                );
 
                // Calculate dimensions of next mip level.
                width = Math.Max(width >> 1, 1);
                height = Math.Max(height >> 1, 1);
                depth = Math.Max(depth >> 1, 1);
            }
 
            return texture;
        }
 
        #endregion
    }
}

Archive Download this file

Branches

Number of commits:
Page rendered in 0.08581s using 11 queries.