[NUI](Rendering) Construct shader with name
authorEunki, Hong <eunkiki.hong@samsung.com>
Fri, 7 Mar 2025 02:27:35 +0000 (11:27 +0900)
committerWonsik Jung <sidein@samsung.com>
Wed, 12 Mar 2025 04:26:52 +0000 (13:26 +0900)
Let we make the name of shader class at C# side.

Signed-off-by: Eunki, Hong <eunkiki.hong@samsung.com>
src/Tizen.NUI/src/internal/Interop/Interop.Shader.cs
src/Tizen.NUI/src/public/Common/PropertyMap.cs
src/Tizen.NUI/src/public/Rendering/Shader.cs
test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/CircularTextSample.cs
test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/ContactCard/ClippedImage.cs
test/Tizen.NUI.Samples/Tizen.NUI.Samples/Samples/DisposeTest.cs

index 8c341810c60bda05f9555fa5fdeb8a1e64a04e0e..4e411f4bf6459d3353b7da53cdc67dea410acd9e 100755 (executable)
@@ -31,6 +31,9 @@ namespace Tizen.NUI
             [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_Shader_New__SWIG_1")]
             public static extern global::System.IntPtr New(string jarg1, string jarg2);
 
+            [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_Shader_New__SWIG_2")]
+            public static extern global::System.IntPtr New(string vertexShaderCode, string fragmentShaderCode, int hints, string shaderName);
+
             [global::System.Runtime.InteropServices.DllImport(NDalicPINVOKE.Lib, EntryPoint = "CSharp_Dali_delete_Shader")]
             public static extern void DeleteShader(global::System.Runtime.InteropServices.HandleRef jarg1);
         }
index 695150912c77e3d95456f30fed7da7e4951e1138..fa107c80d4e1d568cc24f4edaff9184c4df7837f 100755 (executable)
@@ -518,6 +518,20 @@ namespace Tizen.NUI
             return ret;
         }
 
+        /// <summary>
+        /// Finds the value for the specified string key if it exists.
+        /// </summary>
+        /// <param name="stringKey">The string key to find.</param>
+        /// <returns>The value if it exists, an empty object otherwise.</returns>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public PropertyValue Find(string stringKey)
+        {
+            global::System.IntPtr cPtr = Interop.PropertyMap.Find(SwigCPtr, stringKey);
+            PropertyValue ret = (cPtr == global::System.IntPtr.Zero) ? null : new PropertyValue(cPtr, false);
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+            return ret;
+        }
+
         /// <summary>
         /// Finds the value for the specified key if it exists.
         /// </summary>
index b3e090a920a8473782649e83561940d4be7e40df..d55c18166faa21959ba8b970379e8ef498431dcb 100755 (executable)
@@ -33,9 +33,8 @@ namespace Tizen.NUI
         /// <param name="fragmentShader">The fragment Shader code for the effect.</param>
         /// <param name="hints">The hints to define the geometry of the rendered object.</param>
         /// <since_tizen> 3 </since_tizen>
-        public Shader(string vertexShader, string fragmentShader, Shader.Hint.Value hints) : this(Interop.Shader.New(vertexShader, fragmentShader, (int)hints), true)
+        public Shader(string vertexShader, string fragmentShader, Shader.Hint.Value hints) : this(vertexShader, fragmentShader, hints, "")
         {
-            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
         /// <summary>
@@ -44,9 +43,19 @@ namespace Tizen.NUI
         /// <param name="vertexShader">The vertex shader code for the effect.</param>
         /// <param name="fragmentShader">The fragment Shader code for the effect.</param>
         /// <since_tizen> 3 </since_tizen>
-        public Shader(string vertexShader, string fragmentShader) : this(Interop.Shader.New(vertexShader, fragmentShader), true)
+        public Shader(string vertexShader, string fragmentShader) : this(vertexShader, fragmentShader, Shader.Hint.Value.NONE, "")
+        {
+        }
+
+        /// <summary>
+        /// Creates Shader object with name
+        /// </summary>
+        /// <param name="vertexShader">The vertex shader code for the effect.</param>
+        /// <param name="fragmentShader">The fragment Shader code for the effect.</param>
+        /// <param name="shaderName">The name of this shader object.</param>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public Shader(string vertexShader, string fragmentShader, string shaderName) : this(vertexShader, fragmentShader, Shader.Hint.Value.NONE, shaderName)
         {
-            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
         }
 
         /// <summary>
@@ -67,10 +76,33 @@ namespace Tizen.NUI
             {
                 var temp = new Tizen.NUI.PropertyValue(value);
                 Tizen.NUI.Object.SetProperty(SwigCPtr, Shader.Property.PROGRAM, temp);
+
+                // Update shader name
+                Name = "";
+                if (value != null)
+                {
+                    using var nameValue = value.Find("name");
+                    if (nameValue?.Get(out string name) ?? false)
+                    {
+                        Name = name ?? "";
+                    }
+                }
                 temp.Dispose();
             }
         }
 
+        /// <summary>
+        /// Gets the name of program.
+        /// </summary>
+        [EditorBrowsable(EditorBrowsableState.Never)]
+        public string Name { get; private set; }
+
+        internal Shader(string vertexShader, string fragmentShader, Shader.Hint.Value hints, string shaderName) : this(Interop.Shader.New(vertexShader, fragmentShader, (int)hints, shaderName ?? ""), true)
+        {
+            Name = shaderName ?? "";
+            if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
+        }
+
         internal Shader(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
         {
         }
index 16ccdcafff9fd86d2e54cc9de8ea3bf0134d21ce..f815beb6d709c0caeb5d54e81cd193a4ffbe9276 100755 (executable)
@@ -104,7 +104,7 @@ namespace Tizen.NUI.Samples
             geometry.SetType(Geometry.Type.TRIANGLE_STRIP);
 
             // Create the shader
-            Shader shader = new Shader( VERTEX_SHADER, FRAGMENT_SHADER );
+            Shader shader = new Shader( VERTEX_SHADER, FRAGMENT_SHADER, "CircularTextShader" );
 
             // Create the renderer
             Renderer renderer = new Renderer( geometry, shader );
index f87604f64a16e005c55498341e188d6ee226847b..3e4432525921fb79f853cac41f331639747cac58 100755 (executable)
@@ -80,7 +80,7 @@ namespace Tizen.NUI.Samples
 
         private static Shader CreateShader()
         {
-            Shader shader = new Shader(VERTEX_SHADER, FRAGMENT_SHADER);
+            Shader shader = new Shader(VERTEX_SHADER, FRAGMENT_SHADER, "ClippedImageShader");
 
             return shader;
         }
index ea04b0b1ece407ace075d985eaaa6ab12204f2fa..d301e036fc2cba46ba9928b0e58e314848767321 100644 (file)
@@ -325,7 +325,7 @@ namespace Tizen.NUI.Samples
 
         private Shader GenerateShader()
         {
-            Shader shader = new Shader(VERTEX_SHADER, FRAGMENT_SHADER);
+            Shader shader = new Shader(VERTEX_SHADER, FRAGMENT_SHADER, "DisposeTestShader");
             return shader;
         }