diff --git a/BMapBindings/BMapSharp/BMapSharp/BMapWrapper.cs b/BMapBindings/BMapSharp/BMapSharp/BMapWrapper.cs index 60d25f2..2a4bbca 100644 --- a/BMapBindings/BMapSharp/BMapSharp/BMapWrapper.cs +++ b/BMapBindings/BMapSharp/BMapSharp/BMapWrapper.cs @@ -57,8 +57,8 @@ namespace BMapSharp.BMapWrapper { internal static void CKFaceIndicesAssigner(IntPtr pstruct, uint count, IEnumerable iem) => StructAssigner(pstruct, count, iem); internal static void CKShortFaceIndicesAssigner(IntPtr pstruct, uint count, IEnumerable iem) - => StructAssigner(pstruct, count, iem); // TODO: There is a padding bug!!! - + => StructAssigner(pstruct, count, iem); + private static IEnumerable StructIterator(IntPtr pstruct, uint count) { var stride = Marshal.SizeOf(); for (uint i = 0; i < count; ++i) { @@ -73,7 +73,7 @@ namespace BMapSharp.BMapWrapper { internal static IEnumerable CKFaceIndicesIterator(IntPtr pstruct, uint count) => StructIterator(pstruct, count); internal static IEnumerable CKShortFaceIndicesIterator(IntPtr pstruct, uint count) - => StructIterator(pstruct, count); // TODO: There is a padding bug!!! + => StructIterator(pstruct, count); #endregion @@ -210,10 +210,69 @@ namespace BMapSharp.BMapWrapper { public class BMTexture : BMObject { internal BMTexture(IntPtr raw_pointer, uint ckid) : base(raw_pointer, ckid) { } + + public string GetFileName() { + BMapException.ThrowIfFailed(BMap.BMTexture_GetFileName(getPointer(), getCKID(), out string out_filename)); + return out_filename; + } + + public void LoadImage(string filepath) { + BMapException.ThrowIfFailed(BMap.BMTexture_LoadImage(getPointer(), getCKID(), filepath)); + } + + public void SaveImage(string filepath) { + BMapException.ThrowIfFailed(BMap.BMTexture_SaveImage(getPointer(), getCKID(), filepath)); + } + + public CK_TEXTURE_SAVEOPTIONS GetSaveOptions() { + BMapException.ThrowIfFailed(BMap.BMTexture_GetSaveOptions(getPointer(), getCKID(), out uint out_saveopt)); + return (CK_TEXTURE_SAVEOPTIONS)out_saveopt; + } + + public void SetSaveOptions(CK_TEXTURE_SAVEOPTIONS opt) { + BMapException.ThrowIfFailed(BMap.BMTexture_SetSaveOptions(getPointer(), getCKID(), (uint)opt)); + } + + public VX_PIXELFORMAT GetVideoFormat() { + BMapException.ThrowIfFailed(BMap.BMTexture_GetVideoFormat(getPointer(), getCKID(), out uint out_vfmt)); + return (VX_PIXELFORMAT)out_vfmt; + } + + public void SetVideoFormat(VX_PIXELFORMAT vfmt) { + BMapException.ThrowIfFailed(BMap.BMTexture_SetVideoFormat(getPointer(), getCKID(), (uint)vfmt)); + } } public class BMMaterial : BMObject { internal BMMaterial(IntPtr raw_pointer, uint ckid) : base(raw_pointer, ckid) { } + + private delegate bool FctVxColorSetter(IntPtr bmf, uint id, VxColor col); + private delegate bool FctVxColorGetter(IntPtr bmf, uint id, out VxColor col); + private VxColor getVxColor(FctVxColorGetter fct) { + BMapException.ThrowIfFailed(fct(getPointer(), getCKID(), out VxColor out_col)); + return out_col; + } + private void setVxColor(FctVxColorSetter fct, VxColor col) { + BMapException.ThrowIfFailed(fct(getPointer(), getCKID(), col)); + } + + public VxColor GetDiffuse() => getVxColor(BMap.BMMaterial_GetDiffuse); + public void SetDiffuse(VxColor col) => setVxColor(BMap.BMMaterial_SetDiffuse, col); + public VxColor GetAmbient() => getVxColor(BMap.BMMaterial_GetAmbient); + public void SetAmbient(VxColor col) => setVxColor(BMap.BMMaterial_SetAmbient, col); + public VxColor GetSpecular() => getVxColor(BMap.BMMaterial_GetSpecular); + public void SetSpecular(VxColor col) => setVxColor(BMap.BMMaterial_SetSpecular, col); + public VxColor GetEmissive() => getVxColor(BMap.BMMaterial_GetEmissive); + public void SetEmissive(VxColor col) => setVxColor(BMap.BMMaterial_SetEmissive, col); + + public float GetSpecularPower() { + BMapException.ThrowIfFailed(BMap.BMMaterial_GetSpecularPower(getPointer(), getCKID(), out float out_val)); + return out_val; + } + public void SetSpecularPower(float val) { + BMapException.ThrowIfFailed(BMap.BMMaterial_SetSpecularPower(getPointer(), getCKID(), val)); + } + } public class BMMesh : BMObject { diff --git a/BMapBindings/BMapSharp/BMapSharpTestbench/Program.cs b/BMapBindings/BMapSharp/BMapSharpTestbench/Program.cs index e92efcf..e9323af 100644 --- a/BMapBindings/BMapSharp/BMapSharpTestbench/Program.cs +++ b/BMapBindings/BMapSharp/BMapSharpTestbench/Program.cs @@ -31,30 +31,40 @@ namespace BMapSharpTestbench { // } // } - Console.WriteLine("===== 3dObjects ====="); - foreach (var obj in reader.Get3dObjects()) { - Console.WriteLine(obj.GetName()); + // Console.WriteLine("===== 3dObjects ====="); + // foreach (var obj in reader.Get3dObjects()) { + // Console.WriteLine(obj.GetName()); - var current_mesh = obj.GetCurrentMesh(); - var mesh_name = current_mesh is null ? "" : current_mesh.GetName(); - Console.WriteLine($"\tMesh: {mesh_name}"); - Console.WriteLine($"\tVisibility: {obj.GetVisibility()}"); - Console.WriteLine($"\tMatrix: {obj.GetWorldMatrix().ToManaged()}"); - } + // var current_mesh = obj.GetCurrentMesh(); + // var mesh_name = current_mesh is null ? "" : current_mesh.GetName(); + // Console.WriteLine($"\tMesh: {mesh_name}"); + // Console.WriteLine($"\tVisibility: {obj.GetVisibility()}"); + // Console.WriteLine($"\tMatrix: {obj.GetWorldMatrix().ToManaged()}"); + // } // Console.WriteLine("===== Meshes ====="); // foreach (var mesh in reader.GetMeshes()) { // Console.WriteLine(mesh.GetName()); // } - // Console.WriteLine("===== Materials ====="); - // foreach (var mtl in reader.GetMaterials()) { - // Console.WriteLine(mtl.GetName()); - // } + Console.WriteLine("===== Materials ====="); + foreach (var mtl in reader.GetMaterials()) { + Console.WriteLine(mtl.GetName()); + + Console.WriteLine($"\tDiffuse: {mtl.GetDiffuse().ToManagedRGBA()}"); + Console.WriteLine($"\tAmbient: {mtl.GetAmbient().ToManagedRGBA()}"); + Console.WriteLine($"\tSpecular: {mtl.GetSpecular().ToManagedRGBA()}"); + Console.WriteLine($"\tEmissive: {mtl.GetEmissive().ToManagedRGBA()}"); + Console.WriteLine($"\tSpecular Power: {mtl.GetSpecularPower()}"); + } // Console.WriteLine("===== Textures ====="); // foreach (var tex in reader.GetTextures()) { // Console.WriteLine(tex.GetName()); + + // Console.WriteLine($"\tFile Name: {tex.GetFileName()}"); + // Console.WriteLine($"\tSave Options: {tex.GetSaveOptions()}"); + // Console.WriteLine($"\tVideo Format: {tex.GetVideoFormat()}"); // } } diff --git a/COMPILE.md b/COMPILE.md index f622a47..d8bd03c 100644 --- a/COMPILE.md +++ b/COMPILE.md @@ -59,7 +59,7 @@ The arguments in command should be replaced by: The switches in command can be switched as you wish: -* `NEMO_BUILD_UNVIRT`: Build `unvirt`, a command line application debugging Virtools files. +* `NEMO_BUILD_UNVIRT`: Build `Unvirt`, a command line application debugging Virtools files. * `NEMO_BUILD_BMAP`: Build `BMap`, a dynamic library specific used for loading Ballance map file. * `NEMO_BUILD_DOC`: Build the document of libcmo21.