public override void WriteToStream(BinaryWriter writer, GameAsset asset) { Texture texture = (Texture)asset; int sizeInBytes = TextureHelper.GetSinglePixelSize(texture.PixelInternalFormat, texture.PixelType) * texture.Size.X * texture.Size.Y; GL.BindTexture(TextureTarget.Texture2D, texture.Handle); byte[] textureData = new byte[sizeInBytes]; GL.GetTexImage(TextureTarget.Texture2D, 0, texture.PixelFormat, texture.PixelType, textureData); GL.BindTexture(TextureTarget.Texture2D, 0); //write to stream writer.Write(texture.Name); writer.Write((int)texture.MinFilter); writer.Write((int)texture.MagFilter); writer.Write((int)texture.WrapModeS); writer.Write((int)texture.WrapModeT); writer.Write((int)texture.PixelInternalFormat); writer.Write((int)texture.PixelFormat); writer.Write((int)texture.PixelType); writer.Write(texture.Size.X); writer.Write(texture.Size.Y); writer.Write(texture.IsResident); //buffer writer.Write(sizeInBytes); writer.Write(textureData); }
internal static void Init() { string baseDir = Path.Combine(AppContext.BaseDirectory, "EngineAssets/Shaders/"); GameAsset.SetNextID("single-color-shader"); SingleColor = Shader.FromSourceFile("single-color", Path.Combine(baseDir, "single-color.vert"), Path.Combine(baseDir, "single-color.frag")); GameAsset.SetNextID("shadowmap-shader"); ShadowMap = Shader.FromSourceFile("shadowmap", Path.Combine(baseDir, "shadowmap.vert"), Path.Combine(baseDir, "shadowmap.frag")); GameAsset.SetNextID("text-shader"); Text = Shader.FromSourceFile("text", Path.Combine(baseDir, "text.vert"), Path.Combine(baseDir, "text.frag")); GameAsset.SetNextID("lit-shader"); Lit = Shader.FromSourceFile("lit", Path.Combine(baseDir, "lit.vert"), Path.Combine(baseDir, "lit.frag")); GameAsset.SetNextID("skybox-shader"); Skybox = Shader.FromSourceFile("skybox", Path.Combine(baseDir, "skybox.vert"), Path.Combine(baseDir, "skybox.frag")); }
public override void WriteToStream(BinaryWriter writer, GameAsset asset) { Prefab prefab = (Prefab)asset; writer.Write(prefab.Name); RecursivelyWritePrefabEntity(writer, prefab.RootEntity); }
public override void WriteToStream(BinaryWriter writer, GameAsset asset) { Material material = (Material)asset; writer.Write(material.Name); writer.Write(material.Shader.ID); Span <MaterialProperty> properties = material.MaterialProperties; writer.Write(properties.Length); foreach (MaterialProperty property in properties) { writer.Write(property.Name); writer.Write((int)property.PropertyType); switch (property.PropertyType) { case MaterialPropertyType.Int: writer.Write(material.GetInt(property.Name)); break; case MaterialPropertyType.Float: writer.Write(material.GetFloat(property.Name)); break; case MaterialPropertyType.Vector2: WriteStruct(writer, material.GetVector2(property.Name)); break; case MaterialPropertyType.Vector3: WriteStruct(writer, material.GetVector3(property.Name)); break; case MaterialPropertyType.Vector4: WriteStruct(writer, material.GetVector4(property.Name)); break; case MaterialPropertyType.Matrix2: WriteStruct(writer, material.GetMatrix2(property.Name)); break; case MaterialPropertyType.Matrix3: WriteStruct(writer, material.GetMatrix3(property.Name)); break; case MaterialPropertyType.Matrix4: WriteStruct(writer, material.GetMatrix4(property.Name)); break; case MaterialPropertyType.Texture: Texture texture = material.GetTexture(property.Name); writer.Write(texture != null ? texture.ID : string.Empty); break; } } }
public override void WriteToStream(BinaryWriter writer, GameAsset asset) { Mesh mesh = (Mesh)asset; //get arrays Vector3[] vertices = mesh.Vertices.ToArray(); uint[] indices = mesh.Indices.ToArray(); //get per vertex data GL.BindBuffer(BufferTarget.ArrayBuffer, mesh.VBO1); GL.GetBufferParameter(BufferTarget.ArrayBuffer, BufferParameterName.BufferSize, out int perVertexBufferSize); byte[] perVertexBuffer = new byte[perVertexBufferSize]; GL.GetBufferSubData(BufferTarget.ArrayBuffer, IntPtr.Zero, perVertexBufferSize, perVertexBuffer); GL.BindBuffer(BufferTarget.ArrayBuffer, 0); //write to stream writer.Write(mesh.Name); //name writer.Write(vertices.Length); //vertices count byte[] vertexBytesBuffer = Helper.StructArrayToByteArray(vertices); writer.Write(vertexBytesBuffer); //vertices writer.Write(indices.Length); //indices count byte[] indexBytesBuffer = Helper.StructArrayToByteArray(indices); writer.Write(indexBytesBuffer); //indices writer.Write(perVertexBufferSize); //per vertex buffer size writer.Write(perVertexBuffer); //per vertex buffer //vertex attribs VertexAttrib[] attribs = mesh.VertexAttribs.ToArray(); writer.Write(attribs.Length); //attribs count for (int i = 0; i < attribs.Length; i++) { VertexAttrib attrib = attribs[i]; writer.Write((int)attrib.PointerType); //pointer type writer.Write(attrib.Size); //size writer.Write(attrib.Normalized); //normalized } }
public static void SaveAssetsToFile(string path) { AssetSerializerPair[] serializableAssets = GetSerializableAssets(); using (FileStream stream = new FileStream(path, FileMode.Create)) { BinaryWriter writer = new BinaryWriter(stream); writer.Write(serializableAssets.Length); //assets count for (int i = 0; i < serializableAssets.Length; i++) { AssetSerializerPair assetSerializerPair = serializableAssets[i]; GameAsset asset = assetSerializerPair.Asset; writer.Write(asset.ID); writer.Write((int)asset.AssetType); //asset type assetSerializerPair.Serializer.WriteToStream(writer, asset); //asset data } } }
public static void LoadAssetsFromFile(string path) { using (FileStream stream = new FileStream(path, FileMode.Open)) { BinaryReader reader = new BinaryReader(stream); int assetsCount = reader.ReadInt32(); for (int i = 0; i < assetsCount; i++) { string id = reader.ReadString(); GameAssetType assetType = (GameAssetType)reader.ReadInt32(); GameAssetSerializer serializer = GetSuitableSerializer(assetType); if (serializer == null) { throw new Exception("No suitable serializer found!"); } GameAsset.SetNextID(id); serializer.ReadFromStream(reader); } } }
private static void SerializeFields(FieldInfo[] fields, object obj, BinaryWriter writer) { writer.Write(fields.Length); foreach (FieldInfo field in fields) { writer.Write(field.Name); writer.Write(field.FieldType.AssemblyQualifiedName); //yandere dev moment if (field.FieldType == typeof(int)) { writer.Write((int)field.GetValue(obj)); } else if (field.FieldType == typeof(float)) { writer.Write((float)field.GetValue(obj)); } else if (!field.FieldType.IsClass) { typeof(DataManager) .GetMethod("WriteStruct", BindingFlags.Static | BindingFlags.NonPublic) .MakeGenericMethod(field.FieldType) .Invoke(null, new object[] { writer, field.GetValue(obj) }); } else if (typeof(GameAsset).IsAssignableFrom(field.FieldType)) { GameAsset asset = (GameAsset)field.GetValue(obj); writer.Write(asset.ID); } else if (field.FieldType.IsClass) { throw new NotImplementedException(); } } }
public abstract void WriteToStream(BinaryWriter writer, GameAsset asset);
public AssetSerializerPair(GameAsset asset, GameAssetSerializer serializer) { Asset = asset; Serializer = serializer; }