//======= Copyright (c) Stereolabs Corporation, All rights reserved. =============== using System; using System.Runtime.InteropServices; using UnityEngine; /// /// This file holds the ZEDMat class along with low-level structures used for passing data between /// the C# ZEDMat and its equivalent in the SDK. /// namespace sl { /// /// Represents a 2D vector of uchars for use on both the CPU and GPU. /// [StructLayout(LayoutKind.Sequential)] public struct char2 { public byte r; public byte g; } /// /// Represents a 3D vector of uchars for use on both the CPU and GPU. /// [StructLayout(LayoutKind.Sequential)] public struct char3 { public byte r; public byte g; public byte b; } /// /// Represents a 4D vector of uchars for use on both the CPU and GPU. /// [StructLayout(LayoutKind.Sequential)] public struct char4 { [MarshalAs(UnmanagedType.U1)] public byte r; [MarshalAs(UnmanagedType.U1)] public byte g; [MarshalAs(UnmanagedType.U1)] public byte b; [MarshalAs(UnmanagedType.U1)] public byte a; } /// /// Represents a 2D vector of floats for use on both the CPU and GPU. /// [StructLayout(LayoutKind.Sequential)] public struct float2 { public float r; public float g; } /// /// Represents a 3D vector of floats for use on both the CPU and GPU. /// [StructLayout(LayoutKind.Sequential)] public struct float3 { public float r; public float g; public float b; } /// /// Represents a 4D vector of floats for use on both the CPU and GPU. /// [StructLayout(LayoutKind.Sequential)] public struct float4 { public float r; public float g; public float b; public float a; } /// /// Mirrors the sl::Mat class used in the ZED C++ SDK to store images. /// Can be used to retrieve individual images from GPU or CPU memory: see ZEDCamera.RetrieveImage() /// and ZEDCamera.RetrieveMeasure(). /// /// For more information on the Mat class it mirrors, see: /// https://www.stereolabs.com/developers/documentation/API/v2.5.1/classsl_1_1Mat.html /// public class ZEDMat { /// /// Type of mat, indicating the data type and the number of channels it holds. /// Proper mat type depends on the image type. See sl.VIEW and sl.MEASURE (in ZEDCommon.cs) /// public enum MAT_TYPE { /// /// Float, one channel. Used for depth and disparity Measure-type textures. /// MAT_32F_C1, /// /// Float, two channels. /// MAT_32F_C2, /// /// Float, three channels. /// MAT_32F_C3, /*!< float 3 channels.*/ /// /// Float, four channels. Used for normals and XYZ (point cloud) measure-type textures /// MAT_32F_C4, /// /// Unsigned char, one channel. Used for greyscale image-type textures like depth and confidence displays. /// MAT_8U_C1, /// /// Unsigned char, two channels. /// MAT_8U_C2, /// /// Unsigned char, three channels. /// MAT_8U_C3, /// /// Unsigned char, four channels. Used for color images, like the main RGB image from each sensor. /// MAT_8U_C4, /// /// Unsigned short 1 channel. /// MAT_16U_C1 }; /// /// Categories for copying data within or between the CPU (processor) memory and GPU (graphics card) memory. /// public enum COPY_TYPE { /// /// Copies data from one place in CPU memory to another. /// COPY_TYPE_CPU_CPU, /*!< copy data from CPU to CPU.*/ /// /// Copies data from CPU memory to GPU memory. /// COPY_TYPE_CPU_GPU, /*!< copy data from CPU to GPU.*/ /// /// Copies data from one place in GPU memory to another. /// COPY_TYPE_GPU_GPU, /*!< copy data from GPU to GPU.*/ /// /// Copies data from GPU memory to CPU memory. /// COPY_TYPE_GPU_CPU /*!< copy data from GPU to CPU.*/ }; /// /// Which memory to store an image/mat: CPU/processor memory or GPU (graphics card) memory. /// public enum MEM { /// /// Store on memory accessible by the CPU. /// MEM_CPU = 0, /// /// Store on memory accessible by the GPU. /// MEM_GPU = 1 , LAST = 2 }; #region DLL Calls const string nameDll = sl.ZEDCommon.NameDLL; [DllImport(nameDll, EntryPoint = "sl_mat_create_new")] private static extern IntPtr dllz_mat_create_new(int width, int height, int type, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_create_new_empty")] private static extern IntPtr dllz_mat_create_new_empty(); [DllImport(nameDll, EntryPoint = "sl_mat_is_init")] private static extern bool dllz_mat_is_init(System.IntPtr ptr); [DllImport(nameDll, EntryPoint = "sl_mat_free")] private static extern bool dllz_mat_free(System.IntPtr ptr, int type); [DllImport(nameDll, EntryPoint = "sl_mat_get_infos")] private static extern bool dllz_mat_get_infos(System.IntPtr ptr, byte[] buffer); [DllImport(nameDll, EntryPoint = "sl_mat_get_value_float")] private static extern int dllz_mat_get_value_float(System.IntPtr ptr, int x, int y, out float value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_get_value_float2")] private static extern int dllz_mat_get_value_float2(System.IntPtr ptr, int x, int y, out float2 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_get_value_float3")] private static extern int dllz_mat_get_value_float3(System.IntPtr ptr, int x, int y, out float3 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_get_value_float4")] private static extern int dllz_mat_get_value_float4(System.IntPtr ptr, int x, int y, out float4 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_get_value_uchar")] private static extern int dllz_mat_get_value_uchar(System.IntPtr ptr, int x, int y, out byte value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_get_value_uchar2")] private static extern int dllz_mat_get_value_uchar2(System.IntPtr ptr, int x, int y, out char2 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_get_value_uchar3")] private static extern int dllz_mat_get_value_uchar3(System.IntPtr ptr, int x, int y, out char3 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_get_value_uchar4")] private static extern int dllz_mat_get_value_uchar4(System.IntPtr ptr, int x, int y, out char4 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_value_float")] private static extern int dllz_mat_set_value_float(System.IntPtr ptr, int x, int y, ref float value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_value_float2")] private static extern int dllz_mat_set_value_float2(System.IntPtr ptr, int x, int y, ref float2 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_value_float3")] private static extern int dllz_mat_set_value_float3(System.IntPtr ptr, int x, int y, ref float3 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_value_float4")] private static extern int dllz_mat_set_value_float4(System.IntPtr ptr, int x, int y, ref float4 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_value_uchar")] private static extern int dllz_mat_set_value_uchar(System.IntPtr ptr, int x, int y, ref byte value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_value_uchar2")] private static extern int dllz_mat_set_value_uchar2(System.IntPtr ptr, int x, int y, ref char2 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_value_uchar3")] private static extern int dllz_mat_set_value_uchar3(System.IntPtr ptr, int x, int y, ref char3 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_value_uchar4")] private static extern int dllz_mat_set_value_uchar4(System.IntPtr ptr, int x, int y, ref char4 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_to_float")] private static extern int dllz_mat_set_to_float(System.IntPtr ptr, ref float value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_to_float2")] private static extern int dllz_mat_set_to_float2(System.IntPtr ptr, ref float2 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_to_float3")] private static extern int dllz_mat_set_to_float3(System.IntPtr ptr, ref float3 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_to_float4")] private static extern int dllz_mat_set_to_float4(System.IntPtr ptr, ref float4 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_to_uchar")] private static extern int dllz_mat_set_to_uchar(System.IntPtr ptr, ref byte value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_to_uchar2")] private static extern int dllz_mat_set_to_uchar2(System.IntPtr ptr, ref char2 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_to_uchar3")] private static extern int dllz_mat_set_to_uchar3(System.IntPtr ptr, ref char3 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_to_uchar4")] private static extern int dllz_mat_set_to_uchar4(System.IntPtr ptr, ref char4 value, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_update_cpu_from_gpu")] private static extern int dllz_mat_update_cpu_from_gpu(System.IntPtr ptr); [DllImport(nameDll, EntryPoint = "sl_mat_update_gpu_from_cpu")] private static extern int dllz_mat_update_gpu_from_cpu(System.IntPtr ptr); [DllImport(nameDll, EntryPoint = "sl_mat_read")] private static extern int dllz_mat_read(System.IntPtr ptr, string filePath); [DllImport(nameDll, EntryPoint = "sl_mat_write")] private static extern int dllz_mat_write(System.IntPtr ptr, string filePath,int compression_level); [DllImport(nameDll, EntryPoint = "sl_mat_copy_to")] private static extern int dllz_mat_copy_to(System.IntPtr ptr, System.IntPtr dest, int cpyType); [DllImport(nameDll, EntryPoint = "sl_mat_get_width")] private static extern int dllz_mat_get_width(System.IntPtr ptr); [DllImport(nameDll, EntryPoint = "sl_mat_get_height")] private static extern int dllz_mat_get_height(System.IntPtr ptr); [DllImport(nameDll, EntryPoint = "sl_mat_get_channels")] private static extern int dllz_mat_get_channels(System.IntPtr ptr); [DllImport(nameDll, EntryPoint = "sl_mat_get_memory_type")] private static extern int dllz_mat_get_memory_type(System.IntPtr ptr); [DllImport(nameDll, EntryPoint = "sl_mat_get_pixel_bytes")] private static extern int dllz_mat_get_pixel_bytes(System.IntPtr ptr); [DllImport(nameDll, EntryPoint = "sl_mat_get_step")] private static extern int dllz_mat_get_step(System.IntPtr ptr); [DllImport(nameDll, EntryPoint = "sl_mat_get_step_bytes")] private static extern int dllz_mat_get_step_bytes(System.IntPtr ptr); [DllImport(nameDll, EntryPoint = "sl_mat_get_width_bytes")] private static extern int dllz_mat_get_width_bytes(System.IntPtr ptr); [DllImport(nameDll, EntryPoint = "sl_mat_is_memory_owner")] private static extern bool dllz_mat_is_memory_owner(System.IntPtr ptr); [DllImport(nameDll, EntryPoint = "sl_mat_get_resolution")] private static extern sl.Resolution dllz_mat_get_resolution(System.IntPtr ptr); [DllImport(nameDll, EntryPoint = "sl_mat_alloc")] private static extern void dllz_mat_alloc(System.IntPtr ptr, int width, int height, int type, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_set_from")] private static extern int dllz_mat_set_from(System.IntPtr ptr, System.IntPtr source, int copyType); [DllImport(nameDll, EntryPoint = "sl_mat_get_ptr")] private static extern System.IntPtr dllz_mat_get_ptr(System.IntPtr ptr, int mem); [DllImport(nameDll, EntryPoint = "sl_mat_clone")] private static extern void dllz_mat_clone(System.IntPtr ptr, System.IntPtr ptrSource); #endregion /// /// Returns the internal ptr of a Mat. /// private System.IntPtr _matInternalPtr; /// /// Returns the internal ptr of a Mat. /// public IntPtr MatPtr { get { return _matInternalPtr; } } /// /// Creates an empty Mat. /// public ZEDMat() { _matInternalPtr = IntPtr.Zero; } /// /// Creates a mat from an existing internal ptr. /// /// IntPtr to create the material with. public ZEDMat(System.IntPtr ptr) { if(ptr == IntPtr.Zero) { throw new Exception("ZED Mat not initialized."); } _matInternalPtr = ptr; } /// /// Creates a Mat with a given resolution. /// /// Resolution for the new Mat. /// Data type and number of channels the Mat will hold. /// Depends on texture type: see sl.VIEW and sl.MEASURE in ZEDCommon.cs. /// Whether Mat should exist on CPU or GPU memory. /// Choose depending on where you'll need to access it from. public void Create(sl.Resolution resolution, MAT_TYPE type, MEM mem = MEM.MEM_CPU) { _matInternalPtr = dllz_mat_create_new((int)resolution.width, (int)resolution.height, (int)(type), (int)(mem)); } /// /// Creates a Mat with a given width and height. /// /// Width of the new Mat. /// Height of the new Mat. /// Data type and number of channels the Mat will hold. /// Depends on texture type: see sl.VIEW and sl.MEASURE in ZEDCommon.cs. /// Whether Mat should exist on CPU or GPU memory. /// Choose depending on where you'll need to access it from. public void Create(uint width, uint height, MAT_TYPE type, MEM mem = MEM.MEM_CPU) { _matInternalPtr = dllz_mat_create_new((int)width, (int)height, (int)(type), (int)(mem)); } /// /// True if the Mat has been initialized. /// /// public bool IsInit() { return dllz_mat_is_init(_matInternalPtr); } /// /// Frees the memory of the Mat. /// /// Whether the Mat is on CPU or GPU memory. public void Free(MEM mem = MEM.LAST) { dllz_mat_free(_matInternalPtr, (int)mem); _matInternalPtr = IntPtr.Zero; } /// /// Copies data from the GPU to the CPU, if possible. /// /// public sl.ERROR_CODE UpdateCPUFromGPU() { return (sl.ERROR_CODE)dllz_mat_update_cpu_from_gpu(_matInternalPtr); } /// /// Copies data from the CPU to the GPU, if possible. /// /// public sl.ERROR_CODE UpdateGPUFromCPU() { return (sl.ERROR_CODE)dllz_mat_update_gpu_from_cpu(_matInternalPtr); } /// /// Returns information about the Mat. /// /// String providing Mat information. public string GetInfos() { byte[] buf = new byte[300]; dllz_mat_get_infos(_matInternalPtr, buf); return System.Text.Encoding.ASCII.GetString(buf); } /// /// Copies data from this Mat to another Mat (deep copy). /// /// Mat that the data will be copied to. /// The To and From memory types. /// Error code indicating if the copy was successful, or why it wasn't. public sl.ERROR_CODE CopyTo(sl.ZEDMat dest, sl.ZEDMat.COPY_TYPE copyType = COPY_TYPE.COPY_TYPE_CPU_CPU) { return (sl.ERROR_CODE)dllz_mat_copy_to(_matInternalPtr, dest._matInternalPtr, (int)(copyType)); } /// /// Reads an image from a file. Supports .png and .jpeg. Only works if Mat has access to MEM_CPU. /// /// File path, including file name and extension. /// Error code indicating if the read was successful, or why it wasn't. public sl.ERROR_CODE Read(string filePath) { return (sl.ERROR_CODE)dllz_mat_read(_matInternalPtr, filePath); } /// /// Writes the Mat into a file as an image. Only works if Mat has access to MEM_CPU. /// /// File path, including file name and extension. /// Compression level used. Highest value means highest compression (smaller size). Range : [0 - 100]. /// Error code indicating if the write was successful, or why it wasn't. public sl.ERROR_CODE Write(string filePath,int compressionLevel = -1) { return (sl.ERROR_CODE)dllz_mat_write(_matInternalPtr, filePath, compressionLevel); } /// /// Returns the width of the matrix. /// /// public int GetWidth() { return dllz_mat_get_width(_matInternalPtr); } /// /// Returns the height of the matrix. /// /// public int GetHeight() { return dllz_mat_get_height(_matInternalPtr); } /// /// Returns the number of values/channels stored in each pixel. /// /// Number of values/channels. public int GetChannels() { return dllz_mat_get_channels(_matInternalPtr); } /// /// Returns the size in bytes of one pixel. /// /// Size in bytes. public int GetPixelBytes() { return dllz_mat_get_pixel_bytes(_matInternalPtr); } /// /// Returns the memory 'step' in number/length of elements - how many values make up each row of pixels. /// /// Step length. public int GetStep() { return dllz_mat_get_step(_matInternalPtr); } /// /// Returns the memory 'step' in bytes - how many bytes make up each row of pixels. /// /// public int GetStepBytes() { return dllz_mat_get_step_bytes(_matInternalPtr); } /// /// Returns the size of each row in bytes. /// /// public int GetWidthBytes() { return dllz_mat_get_width_bytes(_matInternalPtr); } /// /// Returns the type of memory (CPU and/or GPU). /// /// public MEM GetMemoryType() { return (MEM)dllz_mat_get_memory_type(_matInternalPtr); } /// /// Returns whether the Mat is the owner of the memory it's accessing. /// /// public bool IsMemoryOwner() { return dllz_mat_is_memory_owner(_matInternalPtr); } /// /// Returns the resolution of the image that this Mat holds. /// /// public sl.Resolution GetResolution() { return dllz_mat_get_resolution(_matInternalPtr); } /// /// Allocates memory for the Mat. /// /// Width of the image/matrix in pixels. /// Height of the image/matrix in pixels. /// Type of matrix (data type and channels; see sl.MAT_TYPE) /// Where the buffer will be stored - CPU memory or GPU memory. public void Alloc(uint width, uint height, MAT_TYPE matType, MEM mem = MEM.MEM_CPU) { dllz_mat_alloc(_matInternalPtr, (int)width, (int)height, (int)matType, (int)mem); } /// /// Allocates memory for the Mat. /// /// Size of the image/matrix in pixels. /// Type of matrix (data type and channels; see sl.MAT_TYPE) /// Where the buffer will be stored - CPU memory or GPU memory. public void Alloc(sl.Resolution resolution, MAT_TYPE matType, MEM mem = MEM.MEM_CPU) { dllz_mat_alloc(_matInternalPtr, (int)resolution.width, (int)resolution.height, (int)matType, (int)mem); } /// /// Copies data from another Mat into this one(deep copy). /// /// Source Mat from which to copy. /// The To and From memory types. /// ERROR_CODE (as an int) indicating if the copy was successful, or why it wasn't. public int SetFrom(ZEDMat src, COPY_TYPE copyType = COPY_TYPE.COPY_TYPE_CPU_CPU) { return dllz_mat_set_from(_matInternalPtr, src._matInternalPtr, (int)copyType); } public System.IntPtr GetPtr(MEM mem = MEM.MEM_CPU) { return dllz_mat_get_ptr(_matInternalPtr, (int)mem); } /// /// Duplicates a Mat by copying all its data into a new one (deep copy). /// /// public void Clone(ZEDMat source) { dllz_mat_clone(_matInternalPtr, source._matInternalPtr); } /************ GET VALUES *********************/ //Cannot send values by template due to a covariant issue with an out needed. /// /// Returns the value of a specific point in the matrix. (MAT_32F_C1) /// /// Row the point is in. /// Column the point is in. /// Gets filled with the current value. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the get was successful, or why it wasn't. public sl.ERROR_CODE GetValue(int x, int y, out float value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_get_value_float(_matInternalPtr, x, y, out value, (int)(mem))); } /// /// Returns the value of a specific point in the matrix. (MAT_32F_C2) /// /// Row the point is in. /// Column the point is in. /// Gets filled with the current value. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the get was successful, or why it wasn't. public sl.ERROR_CODE GetValue(int x, int y, out float2 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_get_value_float2(_matInternalPtr, x, y, out value, (int)(mem))); } /// /// Returns the value of a specific point in the matrix. (MAT_32F_C3) /// /// Row the point is in. /// Column the point is in. /// Gets filled with the current value. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the get was successful, or why it wasn't. public sl.ERROR_CODE GetValue(int x, int y, out float3 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_get_value_float3(_matInternalPtr, x, y, out value, (int)(mem))); } /// /// Returns the value of a specific point in the matrix. (MAT_32F_C4) /// /// Row the point is in. /// Column the point is in. /// Gets filled with the current value. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the get was successful, or why it wasn't. public sl.ERROR_CODE GetValue(int x, int y, out float4 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_get_value_float4(_matInternalPtr, x, y, out value, (int)(mem))); } /// /// Returns the value of a specific point in the matrix. (MAT_TYPE_8U_C1) /// /// Row the point is in. /// Column the point is in. /// Gets filled with the current value. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the get was successful, or why it wasn't. public sl.ERROR_CODE GetValue(int x, int y, out byte value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_get_value_uchar(_matInternalPtr, x, y, out value, (int)(mem))); } /// /// Returns the value of a specific point in the matrix. (MAT_TYPE_8U_C2) /// /// Row the point is in. /// Column the point is in. /// Gets filled with the current value. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the get was successful, or why it wasn't. public sl.ERROR_CODE GetValue(int x, int y, out char2 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_get_value_uchar2(_matInternalPtr, x, y, out value, (int)(mem))); } /// /// Returns the value of a specific point in the matrix. (MAT_TYPE_8U_C3) /// /// Row the point is in. /// Column the point is in. /// Gets filled with the current value. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the get was successful, or why it wasn't. public sl.ERROR_CODE GetValue(int x, int y, out char3 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_get_value_uchar3(_matInternalPtr, x, y, out value, (int)(mem))); } /// /// Returns the value of a specific point in the matrix. (MAT_TYPE_8U_C4) /// /// Row the point is in. /// Column the point is in. /// Gets filled with the current value. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the get was successful, or why it wasn't. public sl.ERROR_CODE GetValue(int x, int y, out char4 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_get_value_uchar4(_matInternalPtr, x, y, out value, (int)(mem))); } /***************************************************************************************/ /************ SET VALUES *********************/ //Cannot send values by template due to a covariant issue with an out needed. /// /// Sets a value to a specific point in the matrix. (MAT_32F_C1) /// /// Row the point is in. /// Column the point is in. /// Value to which the point will be set. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the set was successful, or why it wasn't. public sl.ERROR_CODE SetValue(int x, int y, ref float value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_value_float(_matInternalPtr, x, y, ref value, (int)(mem))); } /// /// Sets a value to a specific point in the matrix. (MAT_32F_C2) /// /// Row the point is in. /// Column the point is in. /// Value to which the point will be set. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the set was successful, or why it wasn't. public sl.ERROR_CODE SetValue(int x, int y, ref float2 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_value_float2(_matInternalPtr, x, y, ref value, (int)(mem))); } /// /// Sets a value to a specific point in the matrix. (MAT_32F_C3) /// /// Row the point is in. /// Column the point is in. /// Value to which the point will be set. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the set was successful, or why it wasn't. public sl.ERROR_CODE SetValue(int x, int y, ref float3 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_value_float3(_matInternalPtr, x, y, ref value, (int)(mem))); } /// /// Sets a value to a specific point in the matrix. (MAT_32F_C4) /// /// Row the point is in. /// Column the point is in. /// Value to which the point will be set. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the set was successful, or why it wasn't. public sl.ERROR_CODE SetValue(int x, int y, float4 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_value_float4(_matInternalPtr, x, y, ref value, (int)(mem))); } /// /// Sets a value to a specific point in the matrix. (MAT_TYPE_8U_C1) /// /// Row the point is in. /// Column the point is in. /// Value to which the point will be set. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the set was successful, or why it wasn't. public sl.ERROR_CODE SetValue(int x, int y, ref byte value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_value_uchar(_matInternalPtr, x, y, ref value, (int)(mem))); } /// /// Sets a value to a specific point in the matrix. (MAT_TYPE_8U_C2) /// /// Row the point is in. /// Column the point is in. /// Value to which the point will be set. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the set was successful, or why it wasn't. public sl.ERROR_CODE SetValue(int x, int y, ref char2 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_value_uchar2(_matInternalPtr, x, y, ref value, (int)(mem))); } /// /// Sets a value to a specific point in the matrix. (MAT_TYPE_8U_C3) /// /// Row the point is in. /// Column the point is in. /// Value to which the point will be set. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the set was successful, or why it wasn't. public sl.ERROR_CODE SetValue(int x, int y, ref char3 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_value_uchar3(_matInternalPtr, x, y, ref value, (int)(mem))); } /// /// Sets a value to a specific point in the matrix. (MAT_TYPE_8U_C4) /// /// Row the point is in. /// Column the point is in. /// Value to which the point will be set. /// Whether point is on CPU memory or GPU memory. /// Error code indicating if the set was successful, or why it wasn't. public sl.ERROR_CODE SetValue(int x, int y, ref char4 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_value_uchar4(_matInternalPtr, x, y, ref value, (int)(mem))); } /***************************************************************************************/ /************ SET TO *********************/ //Cannot send values by template due to a covariant issue with an out needed. /// /// Fills the entire Mat with the given value. (MAT_32F_C1) /// /// Value with which to fill the Mat. /// Which buffer to fill - CPU or GPU memory. /// Whether the set was successful, or why it wasn't. public sl.ERROR_CODE SetTo(ref float value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_to_float(_matInternalPtr, ref value, (int)(mem))); } /// /// Fills the entire Mat with the given value. (MAT_32F_C2) /// /// Value with which to fill the Mat. /// Which buffer to fill - CPU or GPU memory. /// Whether the set was successful, or why it wasn't. public sl.ERROR_CODE SetTo(ref float2 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_to_float2(_matInternalPtr, ref value, (int)(mem))); } /// /// Fills the entire Mat with the given value. (MAT_32F_C3) /// /// Value with which to fill the Mat. /// Which buffer to fill - CPU or GPU memory. /// Whether the set was successful, or why it wasn't. public sl.ERROR_CODE SetTo(ref float3 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_to_float3(_matInternalPtr, ref value, (int)(mem))); } /// /// Fills the entire Mat with the given value. (MAT_32F_C4) /// /// Value with which to fill the Mat. /// Which buffer to fill - CPU or GPU memory. /// Whether the set was successful, or why it wasn't. public sl.ERROR_CODE SetTo(ref float4 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_to_float4(_matInternalPtr, ref value, (int)(mem))); } /// /// Fills the entire Mat with the given value. (MAT_TYPE_8U_C1) /// /// Value with which to fill the Mat. /// Which buffer to fill - CPU or GPU memory. /// Whether the set was successful, or why it wasn't. public sl.ERROR_CODE SetTo(ref byte value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_to_uchar(_matInternalPtr, ref value, (int)(mem))); } /// /// Fills the entire Mat with the given value. (MAT_TYPE_8U_C2) /// /// Value with which to fill the Mat. /// Which buffer to fill - CPU or GPU memory. /// Whether the set was successful, or why it wasn't. public sl.ERROR_CODE SetTo(ref char2 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_to_uchar2(_matInternalPtr, ref value, (int)(mem))); } /// /// Fills the entire Mat with the given value. (MAT_TYPE_8U_C3) /// /// Value with which to fill the Mat. /// Which buffer to fill - CPU or GPU memory. /// Whether the set was successful, or why it wasn't. public sl.ERROR_CODE SetTo(ref char3 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_to_uchar3(_matInternalPtr, ref value, (int)(mem))); } /// /// Fills the entire Mat with the given value. (MAT_TYPE_8U_C4) /// /// Value with which to fill the Mat. /// Which buffer to fill - CPU or GPU memory. /// Whether the set was successful, or why it wasn't. public sl.ERROR_CODE SetTo( ref char4 value, sl.ZEDMat.MEM mem) { return (sl.ERROR_CODE)(dllz_mat_set_to_uchar4(_matInternalPtr, ref value, (int)(mem))); } /***************************************************************************************/ } }