// Copyright (c) 2010-2014 SharpDX - Alexandre Mutel
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
// in the Software without restriction, including without limitation the rights
// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
// copies of the Software, and to permit persons to whom the Software is
// furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in
// all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
// THE SOFTWARE.
using System;
using System.Runtime.InteropServices;
namespace SharpDX.DirectInput
{
public partial class EffectFile
{
///
/// Initializes a new instance of the class.
///
public EffectFile()
{
unsafe
{
Size = sizeof(__Native);
}
}
///
/// Gets or sets the parameters.
///
/// The parameters.
public EffectParameters Parameters { get; set; }
internal static __Native __NewNative()
{
unsafe
{
__Native temp = default(__Native);
temp.Size = sizeof(__Native);
return temp;
}
}
// Internal native struct used for marshalling
[StructLayout(LayoutKind.Sequential, Pack = 0)]
internal partial struct __Native
{
public int Size;
public System.Guid Guid;
public System.IntPtr EffectParametersPointer;
public byte Name;
public byte _Name2;
public byte _Name3;
public byte _Name4;
public byte _Name5;
public byte _Name6;
public byte _Name7;
public byte _Name8;
public byte _Name9;
public byte _Name10;
public byte _Name11;
public byte _Name12;
public byte _Name13;
public byte _Name14;
public byte _Name15;
public byte _Name16;
public byte _Name17;
public byte _Name18;
public byte _Name19;
public byte _Name20;
public byte _Name21;
public byte _Name22;
public byte _Name23;
public byte _Name24;
public byte _Name25;
public byte _Name26;
public byte _Name27;
public byte _Name28;
public byte _Name29;
public byte _Name30;
public byte _Name31;
public byte _Name32;
public byte _Name33;
public byte _Name34;
public byte _Name35;
public byte _Name36;
public byte _Name37;
public byte _Name38;
public byte _Name39;
public byte _Name40;
public byte _Name41;
public byte _Name42;
public byte _Name43;
public byte _Name44;
public byte _Name45;
public byte _Name46;
public byte _Name47;
public byte _Name48;
public byte _Name49;
public byte _Name50;
public byte _Name51;
public byte _Name52;
public byte _Name53;
public byte _Name54;
public byte _Name55;
public byte _Name56;
public byte _Name57;
public byte _Name58;
public byte _Name59;
public byte _Name60;
public byte _Name61;
public byte _Name62;
public byte _Name63;
public byte _Name64;
public byte _Name65;
public byte _Name66;
public byte _Name67;
public byte _Name68;
public byte _Name69;
public byte _Name70;
public byte _Name71;
public byte _Name72;
public byte _Name73;
public byte _Name74;
public byte _Name75;
public byte _Name76;
public byte _Name77;
public byte _Name78;
public byte _Name79;
public byte _Name80;
public byte _Name81;
public byte _Name82;
public byte _Name83;
public byte _Name84;
public byte _Name85;
public byte _Name86;
public byte _Name87;
public byte _Name88;
public byte _Name89;
public byte _Name90;
public byte _Name91;
public byte _Name92;
public byte _Name93;
public byte _Name94;
public byte _Name95;
public byte _Name96;
public byte _Name97;
public byte _Name98;
public byte _Name99;
public byte _Name100;
public byte _Name101;
public byte _Name102;
public byte _Name103;
public byte _Name104;
public byte _Name105;
public byte _Name106;
public byte _Name107;
public byte _Name108;
public byte _Name109;
public byte _Name110;
public byte _Name111;
public byte _Name112;
public byte _Name113;
public byte _Name114;
public byte _Name115;
public byte _Name116;
public byte _Name117;
public byte _Name118;
public byte _Name119;
public byte _Name120;
public byte _Name121;
public byte _Name122;
public byte _Name123;
public byte _Name124;
public byte _Name125;
public byte _Name126;
public byte _Name127;
public byte _Name128;
public byte _Name129;
public byte _Name130;
public byte _Name131;
public byte _Name132;
public byte _Name133;
public byte _Name134;
public byte _Name135;
public byte _Name136;
public byte _Name137;
public byte _Name138;
public byte _Name139;
public byte _Name140;
public byte _Name141;
public byte _Name142;
public byte _Name143;
public byte _Name144;
public byte _Name145;
public byte _Name146;
public byte _Name147;
public byte _Name148;
public byte _Name149;
public byte _Name150;
public byte _Name151;
public byte _Name152;
public byte _Name153;
public byte _Name154;
public byte _Name155;
public byte _Name156;
public byte _Name157;
public byte _Name158;
public byte _Name159;
public byte _Name160;
public byte _Name161;
public byte _Name162;
public byte _Name163;
public byte _Name164;
public byte _Name165;
public byte _Name166;
public byte _Name167;
public byte _Name168;
public byte _Name169;
public byte _Name170;
public byte _Name171;
public byte _Name172;
public byte _Name173;
public byte _Name174;
public byte _Name175;
public byte _Name176;
public byte _Name177;
public byte _Name178;
public byte _Name179;
public byte _Name180;
public byte _Name181;
public byte _Name182;
public byte _Name183;
public byte _Name184;
public byte _Name185;
public byte _Name186;
public byte _Name187;
public byte _Name188;
public byte _Name189;
public byte _Name190;
public byte _Name191;
public byte _Name192;
public byte _Name193;
public byte _Name194;
public byte _Name195;
public byte _Name196;
public byte _Name197;
public byte _Name198;
public byte _Name199;
public byte _Name200;
public byte _Name201;
public byte _Name202;
public byte _Name203;
public byte _Name204;
public byte _Name205;
public byte _Name206;
public byte _Name207;
public byte _Name208;
public byte _Name209;
public byte _Name210;
public byte _Name211;
public byte _Name212;
public byte _Name213;
public byte _Name214;
public byte _Name215;
public byte _Name216;
public byte _Name217;
public byte _Name218;
public byte _Name219;
public byte _Name220;
public byte _Name221;
public byte _Name222;
public byte _Name223;
public byte _Name224;
public byte _Name225;
public byte _Name226;
public byte _Name227;
public byte _Name228;
public byte _Name229;
public byte _Name230;
public byte _Name231;
public byte _Name232;
public byte _Name233;
public byte _Name234;
public byte _Name235;
public byte _Name236;
public byte _Name237;
public byte _Name238;
public byte _Name239;
public byte _Name240;
public byte _Name241;
public byte _Name242;
public byte _Name243;
public byte _Name244;
public byte _Name245;
public byte _Name246;
public byte _Name247;
public byte _Name248;
public byte _Name249;
public byte _Name250;
public byte _Name251;
public byte _Name252;
public byte _Name253;
public byte _Name254;
public byte _Name255;
public byte _Name256;
public byte _Name257;
public byte _Name258;
public byte _Name259;
public byte _Name260;
// Method to free native struct
internal unsafe void __MarshalFree()
{
if (EffectParametersPointer != IntPtr.Zero)
Marshal.FreeHGlobal(EffectParametersPointer);
}
}
internal unsafe void __MarshalFree(ref __Native @ref)
{
// Free Parameters
if (Parameters != null && @ref.EffectParametersPointer != IntPtr.Zero)
Parameters.__MarshalFree(ref *((EffectParameters.__Native*)@ref.EffectParametersPointer));
@ref.__MarshalFree();
}
// Method to marshal from native to managed struct
internal unsafe void __MarshalFrom(ref __Native @ref)
{
this.Size = @ref.Size;
this.Guid = @ref.Guid;
this.EffectParametersPointer = @ref.EffectParametersPointer;
fixed (void* __ptr = &@ref.Name) this.Name = Utilities.PtrToStringAnsi((IntPtr)__ptr, 260);
if (this.EffectParametersPointer != IntPtr.Zero)
{
Parameters = new EffectParameters();
Parameters.__MarshalFrom(ref *(EffectParameters.__Native*)EffectParametersPointer);
EffectParametersPointer = IntPtr.Zero;
}
}
// Method to marshal from managed struct tot native
internal unsafe void __MarshalTo(ref __Native @ref)
{
@ref.Size = this.Size;
@ref.Guid = this.Guid;
IntPtr effectParameters = IntPtr.Zero;
if ( Parameters != null)
{
effectParameters = Marshal.AllocHGlobal(sizeof (EffectParameters.__Native));
var nativeParameters = default(EffectParameters.__Native);
Parameters.__MarshalTo(ref nativeParameters);
*((EffectParameters.__Native*) effectParameters) = nativeParameters;
}
@ref.EffectParametersPointer = effectParameters;
IntPtr Name_ = Marshal.StringToHGlobalAnsi(this.Name);
fixed (void* __ptr = &@ref.Name) Utilities.CopyMemory((IntPtr)__ptr, Name_, this.Name.Length);
Marshal.FreeHGlobal(Name_);
}
}
}