コード例 #1
0
        protected internal override void PostProcess(VoidPtr mdlAddress, VoidPtr dataAddress, StringTable stringTable)
        {
            MDL0TextureRef *header = (MDL0TextureRef *)dataAddress;

            header->_texOffset = (int)stringTable[Name] + 4 - (int)dataAddress;

            if (_palette != null)
            {
                header->_pltOffset = (int)stringTable[_palette.Name] + 4 - (int)dataAddress;
            }
            else
            {
                header->_pltOffset = 0;
            }

            header->_texPtr      = 0;
            header->_pltPtr      = 0;
            header->_index1      = Index;
            header->_index2      = Index;
            header->_uWrap       = _uWrap;
            header->_vWrap       = _vWrap;
            header->_minFltr     = _minFltr;
            header->_magFltr     = _magFltr;
            header->_lodBias     = _lodBias;
            header->_maxAniso    = _maxAniso;
            header->_clampBias   = (byte)(_clampBias ? 1 : 0);
            header->_texelInterp = (byte)(_texelInterp ? 1 : 0);
            header->_pad         = (short)0;
        }
コード例 #2
0
        protected internal override void PostProcess(VoidPtr mdlAddress, VoidPtr dataAddress, StringTable stringTable)
        {
            MDL0TextureRef *header = (MDL0TextureRef *)dataAddress;

            header->_stringOffset = (int)stringTable[Name] + 4 - (int)dataAddress;

            if (_palette != null)
            {
                header->_secondaryOffset = (int)stringTable[_palette.Name] + 4 - (int)dataAddress;
            }
            else
            {
                header->_secondaryOffset = 0;
            }

            header->_unk2    = _unk2;
            header->_unk3    = _unk3;
            header->_index1  = _index1;
            header->_index2  = _index2;
            header->_uWrap   = _uWrap;
            header->_vWrap   = _vWrap;
            header->_minFltr = _minFltr;
            header->_magFltr = _magFltr;
            header->_unk10   = _unk10;
            header->_unk11   = (byte)(_unk11 ? 1 : 0);
            header->_unk12   = (byte)(_unk12 ? 1 : 0);
            header->_unk13   = (short)_unk13;
            header->_lodBias = _float;
        }
コード例 #3
0
        protected internal override void OnRebuild(VoidPtr address, int length, bool force)
        {
            MDL0TextureRef *header = (MDL0TextureRef *)address;

            header->_unk2    = _unk2;
            header->_unk3    = _unk3;
            header->_index1  = _index1;
            header->_index2  = _index2;
            header->_uWrap   = _uWrap;
            header->_vWrap   = _vWrap;
            header->_minFltr = _minFltr;
            header->_magFltr = _magFltr;
            header->_unk10   = _unk10;
            header->_unk11   = (byte)(_unk11 ? 1 : 0);
            header->_unk12   = (byte)(_unk12 ? 1 : 0);
            header->_unk13   = (short)_unk13;
            header->_lodBias = _float;
        }
コード例 #4
0
        public override void OnRebuild(VoidPtr address, int length, bool force)
        {
            MDL0TextureRef *header = (MDL0TextureRef *)address;

            header->_texPtr      = 0;
            header->_pltPtr      = 0;
            header->_index1      = Index;
            header->_index2      = Index;
            header->_uWrap       = _uWrap;
            header->_vWrap       = _vWrap;
            header->_minFltr     = _minFltr;
            header->_magFltr     = _magFltr;
            header->_lodBias     = _lodBias;
            header->_maxAniso    = _maxAniso;
            header->_clampBias   = (byte)(_clampBias ? 1 : 0);
            header->_texelInterp = (byte)(_texelInterp ? 1 : 0);
            header->_pad         = 0;
        }
コード例 #5
0
        protected override bool OnInitialize()
        {
            MDL0TextureRef *header = Header;

            _unk2    = header->_unk2;
            _unk3    = header->_unk3;
            _index1  = header->_index1;
            _index2  = header->_index2;
            _uWrap   = header->_uWrap;
            _vWrap   = header->_vWrap;
            _minFltr = header->_minFltr;
            _magFltr = header->_magFltr;
            _float   = header->_lodBias;
            _unk10   = header->_unk10;
            _unk11   = header->_unk11 == 1;
            _unk12   = header->_unk12 == 1;
            _unk13   = header->_unk13;

            if (header->_stringOffset != 0)
            {
                if (!Material._replaced)
                {
                    _name = header->ResourceString;
                }
                else
                {
                    _name = Material._name + "_Texture" + Index;
                }

                _texture = Model.FindOrCreateTexture(_name);
                _texture._references.Add(this);
            }
            if (header->_secondaryOffset != 0)
            {
                string name;
                if (!Material._replaced)
                {
                    name = header->SecondaryTexture;
                }
                else
                {
                    name = Material._name + "_Texture" + Index;
                }

                _palette = Model.FindOrCreatePalette(name);
                _palette._references.Add(this);
            }

            if (((MDL0MaterialNode)Parent).XFCommands.Length != 0)
            {
                TexMtxFlags  = new XFTexMtxInfo(((MDL0MaterialNode)Parent).XFCommands[Index * 2].values[0]);
                DualTexFlags = new XFDualTex(((MDL0MaterialNode)Parent).XFCommands[Index * 2 + 1].values[0]);
                getValues();
            }

            //if (PaletteNode == null && TextureNode != null)
            //{
            //    if (TextureNode.Source == null)
            //        TextureNode.GetSource();

            //    if (TextureNode.Source is TEX0Node && ((TEX0Node)TextureNode.Source).HasPalette)
            //    {
            //        Model._errors.Add("A palette was not set to texture reference " + Index + " in material " + Parent.Index + " (" + Parent.Name + ").");
            //        PaletteNode = Model.FindOrCreatePalette(TextureNode.Name);

            //        SignalPropertyChange();
            //    }
            //}

            MDL0MtlTexSettings *TexSettings = ((MDL0MaterialNode)Parent).Header->TexMatrices(Model._version);

            _texFlags  = TexSettings->GetTexFlags(Index);
            _texMatrix = TexSettings->GetTexMatrices(Index);

            _flags = (TexFlags)((((MDL0MaterialNode)Parent)._layerFlags >> (4 * Index)) & 0xF);

            _bindState = new FrameState(
                new Vector3(_texFlags.TexScale._x, _texFlags.TexScale._y, 1),
                new Vector3(_texFlags.TexRotation, 0, 0),
                new Vector3(_texFlags.TexTranslation._x, _texFlags.TexTranslation._y, 0));

            return(false);
        }
コード例 #6
0
        public override bool OnInitialize()
        {
            MDL0TextureRef *header = Header;

            _uWrap       = header->_uWrap;
            _vWrap       = header->_vWrap;
            _minFltr     = header->_minFltr;
            _magFltr     = header->_magFltr;
            _lodBias     = header->_lodBias;
            _maxAniso    = header->_maxAniso;
            _clampBias   = header->_clampBias == 1;
            _texelInterp = header->_texelInterp == 1;

            if (header->_texOffset != 0)
            {
                if (_replaced && header->_texOffset >= Parent.WorkingUncompressed.Length)
                {
                    Name = null;
                }
                else
                {
                    if (_replaced)
                    {
                        Name = header->TextureName;
                    }
                    else
                    {
                        _name = header->TextureName;
                    }
                    _texture = Model.FindOrCreateTexture(_name);
                    _texture._references.Add(this);
                }
            }
            if (header->_pltOffset != 0)
            {
                if (_replaced && header->_pltOffset >= Parent.WorkingUncompressed.Length)
                {
                    _palette = null;
                }
                else
                {
                    string name = header->PaletteName;
                    _palette = Model.FindOrCreatePalette(name);
                    _palette._references.Add(this);
                }
            }

            int len = Material.XFCmds.Count;

            if (len != 0 && Index * 2 + 1 < len)
            {
                _texMtxFlags  = new XFTexMtxInfo(Material.XFCmds[Index * 2]._values[0]);
                _dualTexFlags = new XFDualTex(Material.XFCmds[Index * 2 + 1]._values[0]);
            }

            //if (PaletteNode == null && TextureNode != null)
            //{
            //    if (TextureNode.Source == null)
            //        TextureNode.GetSource();

            //    if (TextureNode.Source is TEX0Node && ((TEX0Node)TextureNode.Source).HasPalette)
            //    {
            //        Model._errors.Add("A palette was not set to texture reference " + Index + " in material " + Parent.Index + " (" + Parent.Name + ").");
            //        PaletteNode = Model.FindOrCreatePalette(TextureNode.Name);

            //        SignalPropertyChange();
            //    }
            //}

            MDL0TexSRTData *TexSettings = Material.Header->TexMatrices(Material._initVersion);

            _texMatrixEffect      = TexSettings->GetTexMatrices(Index);
            _bindState            = TexSettings->GetTexSRT(Index);
            _bindState.MatrixMode = Material.TextureMatrixMode;

            return(false);
        }
コード例 #7
0
        public override bool OnInitialize()
        {
            MDL0TextureRef *header = Header;

            _texPtr      = header->_texPtr;
            _pltPtr      = header->_pltPtr;
            _index1      = header->_index1;
            _index2      = header->_index2;
            _uWrap       = header->_uWrap;
            _vWrap       = header->_vWrap;
            _minFltr     = header->_minFltr;
            _magFltr     = header->_magFltr;
            _lodBias     = header->_lodBias;
            _maxAniso    = header->_maxAniso;
            _clampBias   = header->_clampBias == 1;
            _texelInterp = header->_texelInterp == 1;
            _pad         = header->_pad;

            if (header->_texOffset != 0)
            {
                if (_replaced && header->_texOffset >= Parent.WorkingUncompressed.Length)
                {
                    Name = null;
                }
                else
                {
                    if (_replaced)
                    {
                        Name = header->TextureName;
                    }
                    else
                    {
                        _name = header->TextureName;
                    }
                    _texture = Model.FindOrCreateTexture(_name);
                    _texture._references.Add(this);
                }
            }
            if (header->_pltOffset != 0)
            {
                if (_replaced && header->_pltOffset >= Parent.WorkingUncompressed.Length)
                {
                    _palette = null;
                }
                else
                {
                    string name = header->PaletteName;
                    _palette = Model.FindOrCreatePalette(name);
                    _palette._references.Add(this);
                }
            }

            int len = ((MDL0MaterialNode)Parent).XFCommands.Length;

            if (len != 0 && Index * 2 < len)
            {
                TexMtxFlags  = new XFTexMtxInfo(((MDL0MaterialNode)Parent).XFCommands[Index * 2].values[0]);
                DualTexFlags = new XFDualTex(((MDL0MaterialNode)Parent).XFCommands[Index * 2 + 1].values[0]);
                getValues();
            }

            //if (PaletteNode == null && TextureNode != null)
            //{
            //    if (TextureNode.Source == null)
            //        TextureNode.GetSource();

            //    if (TextureNode.Source is TEX0Node && ((TEX0Node)TextureNode.Source).HasPalette)
            //    {
            //        Model._errors.Add("A palette was not set to texture reference " + Index + " in material " + Parent.Index + " (" + Parent.Name + ").");
            //        PaletteNode = Model.FindOrCreatePalette(TextureNode.Name);

            //        SignalPropertyChange();
            //    }
            //}

            MDL0TexSRTData *TexSettings = ((MDL0MaterialNode)Parent).Header->TexMatrices(((MDL0MaterialNode)Parent)._initVersion);

            _texFlags  = TexSettings->GetTexFlags(Index);
            _texMatrix = TexSettings->GetTexMatrices(Index);

            _flags = (TexFlags)((((MDL0MaterialNode)Parent)._layerFlags >> (4 * Index)) & 0xF);

            _bindState = new FrameState(
                new Vector3(_texFlags.TexScale._x, _texFlags.TexScale._y, 1),
                new Vector3(_texFlags.TexRotation, 0, 0),
                new Vector3(_texFlags.TexTranslation._x, _texFlags.TexTranslation._y, 0));

            return(false);
        }