private TextureSamplerState GetState(GraphicsDevice device, Native.DeviceInterop io, int index, bool PS, List<Texture> textures, out int textureIndex)
		{
			TextureSamplerState tss = new TextureSamplerState();
			textureIndex = -1;

			try
			{
				Texture texture = null;

				if (PS)
				{
					texture = device.Textures[index];

					var state = io.GetSamplerState(index, false);

					tss = TextureSamplerState.BilinearFiltering;
					tss.AddressU = Translate(state.U);
					tss.AddressV = Translate(state.V);
					tss.AddressW = Translate(state.W);
					tss.Filter = Translate(state.Min, state.Mag, state.Mip);
					tss.MaxAnisotropy = (int)state.MaxAni;
				}
				else
				{
					texture = device.VertexTextures[index];

					var state = io.GetSamplerState(index, true);

					tss = TextureSamplerState.PointFiltering;
					tss.AddressU = Translate(state.U);
					tss.AddressV = Translate(state.V);
					tss.AddressW = Translate(state.W);
				}

				//special case, force texture cubes to always be clamped. (xbox helper)
				if (texture is TextureCube)
				{
					tss.AddressU = TextureAddressMode.Clamp;
					tss.AddressV = TextureAddressMode.Clamp;
					tss.AddressW = TextureAddressMode.Clamp;
				}

				for (int i = 0; i < textures.Count; i++)
				{
					if (texture == textures[i] &&
						texture != null && textures[i] != null)
					{
						textureIndex = i;
					}
				}
			}
			catch
			{
				//hmph...
			}
			return tss;
		}