TextureSlot[] ReadTextureStack(BinaryReader reader, Dictionary <string, Texture> textures) { var count = reader.ReadInt32(); if (count == 0) { return(null); } var slots = new TextureSlot[count]; for (var i = 0; i < count; i++) { var name = reader.ReadString(); if (!textures.ContainsKey(name)) { throw new ContentException("Referenced texture not found: " + name); } slots[i] = new TextureSlot( textures[name], reader.ReadInt32(), reader.ReadSingle(), (TextureOperation)reader.ReadInt32(), reader.ReadBoolean() ? TextureWrap.Repeat : TextureWrap.Clamp, reader.ReadBoolean() ? TextureWrap.Repeat : TextureWrap.Clamp); } return(slots); }
TextureSlot[] ReadTextureStack (BinaryReader reader, Dictionary<string, Texture> textures) { var count = reader.ReadInt32(); if (count == 0) return null; var slots = new TextureSlot[count]; for (var i = 0; i < count; i++) { var name = reader.ReadString(); if (!textures.ContainsKey(name)) throw new ContentException("Referenced texture not found: " + name); slots[i] = new TextureSlot( textures[name], reader.ReadInt32(), reader.ReadSingle(), (TextureOperation)reader.ReadInt32(), reader.ReadBoolean() ? TextureWrap.Repeat : TextureWrap.Clamp, reader.ReadBoolean() ? TextureWrap.Repeat : TextureWrap.Clamp); } return slots; }
static void SetTextures(Shader shader, ref int unit, TextureSlot[] stack, string[] names, string[] blendNames) { for (var i = 0; i < stack.Length; i++) { var slot = stack[i]; GL.ActiveTexture(TextureUnit.Texture0 + unit); GL.BindTexture(TextureTarget.Texture2D, slot.Texture.Handle); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (int)slot.WrapS); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (int)slot.WrapT); shader.Uniform(names[i], unit++); shader.Uniform(blendNames[i], slot.BlendFactor); } }
static MeshTextureSlot[] GetMeshTextureStack(TextureSlot[] slots) { return slots == null ? null : slots.Select(s => new MeshTextureSlot(s.UVIndex, s.BlendFactor, s.Operation)).ToArray(); }