2 * Copyright(c) 2021 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
18 using System.ComponentModel;
19 using System.Diagnostics.CodeAnalysis;
20 using System.Runtime.InteropServices;
25 /// Renderer is a handle to an object used to show content by combining a Geometry, a TextureSet and a shader.
27 /// <since_tizen> 3 </since_tizen>
28 public class Renderer : Animatable
30 private Geometry CurrentGeometry = null;
31 private Shader CurrentShader = null;
34 /// Create an instance of Renderer.
36 /// <since_tizen> 3 </since_tizen>
37 public Renderer(Geometry geometry, Shader shader) : this(Interop.Renderer.New(Geometry.getCPtr(geometry), Shader.getCPtr(shader)), true)
39 CurrentGeometry = geometry;
40 CurrentShader = shader;
42 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
46 /// Gets and Sets DepthIndex property.
48 /// <since_tizen> 3 </since_tizen>
54 Tizen.NUI.PropertyValue pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.DepthIndex);
61 var temp = new Tizen.NUI.PropertyValue(value);
62 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.DepthIndex, temp);
68 /// Gets and Sets FaceCullingMode.
70 /// <since_tizen> 3 </since_tizen>
71 public int FaceCullingMode
76 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.FaceCullingMode);
83 var temp = new Tizen.NUI.PropertyValue(value);
84 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.FaceCullingMode, temp);
90 /// Gets and Sets BlendMode.
92 /// <since_tizen> 3 </since_tizen>
98 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.BlendMode);
105 var temp = new Tizen.NUI.PropertyValue(value);
106 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.BlendMode, temp);
112 /// Gets and Sets BlendEquationRgb.
114 /// <since_tizen> 3 </since_tizen>
115 public int BlendEquationRgb
120 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.BlendEquationRgb);
121 pValue.Get(out temp);
127 var temp = new Tizen.NUI.PropertyValue(value);
128 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.BlendEquationRgb, temp);
134 /// Gets and Sets BlendEquationAlpha.
136 /// <since_tizen> 3 </since_tizen>
137 public int BlendEquationAlpha
142 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.BlendEquationAlpha);
143 pValue.Get(out temp);
149 var temp = new Tizen.NUI.PropertyValue(value);
150 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.BlendEquationAlpha, temp);
156 /// Gets and Sets BlendFactorSrcRgb.
158 /// <since_tizen> 3 </since_tizen>
159 public int BlendFactorSrcRgb
164 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.BlendFactorSrcRgb);
165 pValue.Get(out temp);
171 var temp = new Tizen.NUI.PropertyValue(value);
172 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.BlendFactorSrcRgb, temp);
178 /// Gets and Sets BlendFactorDestRgb.
180 /// <since_tizen> 3 </since_tizen>
181 public int BlendFactorDestRgb
186 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.BlendFactorDestRgb);
187 pValue.Get(out temp);
193 var temp = new Tizen.NUI.PropertyValue(value);
194 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.BlendFactorDestRgb, temp);
200 /// Gets and Sets BlendFactorSrcAlpha.
202 /// <since_tizen> 3 </since_tizen>
203 public int BlendFactorSrcAlpha
208 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.BlendFactorSrcAlpha);
209 pValue.Get(out temp);
215 var temp = new Tizen.NUI.PropertyValue(value);
216 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.BlendFactorSrcAlpha, temp);
222 /// Gets and Sets BlendFactorDestAlpha.
224 /// <since_tizen> 3 </since_tizen>
225 public int BlendFactorDestAlpha
230 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.BlendFactorDestAlpha);
231 pValue.Get(out temp);
237 var temp = new Tizen.NUI.PropertyValue(value);
238 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.BlendFactorDestAlpha, temp);
244 /// Gets and Sets BlendColor.
246 /// <since_tizen> 3 </since_tizen>
247 public Vector4 BlendColor
251 Vector4 temp = new Vector4(0.0f, 0.0f, 0.0f, 0.0f);
252 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.BlendColor);
259 var temp = new Tizen.NUI.PropertyValue(value);
260 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.BlendColor, temp);
266 /// Gets and Sets BlendPreMultipliedAlpha.
268 /// <since_tizen> 3 </since_tizen>
269 public bool BlendPreMultipliedAlpha
274 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.BlendPreMultipliedAlpha);
275 pValue.Get(out temp);
281 var temp = new Tizen.NUI.PropertyValue(value);
282 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.BlendPreMultipliedAlpha, temp);
288 /// Gets and Sets IndexRangeFirst.
290 /// <since_tizen> 3 </since_tizen>
291 public int IndexRangeFirst
296 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.IndexRangeFirst);
297 pValue.Get(out temp);
303 var temp = new Tizen.NUI.PropertyValue(value);
304 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.IndexRangeFirst, temp);
310 /// Gets and Sets IndexRangeCount.
312 /// <since_tizen> 3 </since_tizen>
313 public int IndexRangeCount
318 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.IndexRangeCount);
319 pValue.Get(out temp);
325 var temp = new Tizen.NUI.PropertyValue(value);
326 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.IndexRangeCount, temp);
332 /// Gets and Sets DepthWriteMode.
334 /// <since_tizen> 3 </since_tizen>
335 public int DepthWriteMode
340 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.DepthWriteMode);
341 pValue.Get(out temp);
347 var temp = new Tizen.NUI.PropertyValue(value);
348 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.DepthWriteMode, temp);
354 /// Gets and Sets DepthFunction.
356 /// <since_tizen> 3 </since_tizen>
357 public int DepthFunction
362 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.DepthFunction);
363 pValue.Get(out temp);
369 var temp = new Tizen.NUI.PropertyValue(value);
370 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.DepthFunction, temp);
376 /// Gets and Sets DepthTestMode.
378 /// <since_tizen> 3 </since_tizen>
379 public int DepthTestMode
384 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.DepthTestMode);
385 pValue.Get(out temp);
391 var temp = new Tizen.NUI.PropertyValue(value);
392 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.DepthTestMode, temp);
398 /// Gets and Sets RenderMode.
400 /// <since_tizen> 3 </since_tizen>
401 public int RenderMode
406 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.RenderMode);
407 pValue.Get(out temp);
413 var temp = new Tizen.NUI.PropertyValue(value);
414 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.RenderMode, temp);
420 /// Gets and Sets StencilFunction.
422 /// <since_tizen> 3 </since_tizen>
423 public int StencilFunction
428 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.StencilFunction);
429 pValue.Get(out temp);
435 var temp = new Tizen.NUI.PropertyValue(value);
436 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.StencilFunction, temp);
442 /// Gets and Sets StencilFunctionMask.
444 /// <since_tizen> 3 </since_tizen>
445 public int StencilFunctionMask
450 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.StencilFunctionMask);
451 pValue.Get(out temp);
457 var temp = new Tizen.NUI.PropertyValue(value);
458 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.StencilFunctionMask, temp);
464 /// Gets and Sets StencilFunctionReference.
466 /// <since_tizen> 3 </since_tizen>
467 public int StencilFunctionReference
472 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.StencilFunctionReference);
473 pValue.Get(out temp);
479 var temp = new Tizen.NUI.PropertyValue(value);
480 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.StencilFunctionReference, temp);
486 /// Gets and Sets StencilMask.
488 /// <since_tizen> 3 </since_tizen>
489 public int StencilMask
494 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.StencilMask);
495 pValue.Get(out temp);
501 var temp = new Tizen.NUI.PropertyValue(value);
502 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.StencilMask, temp);
508 /// Gets and Sets StencilOperationOnFail.
510 /// <since_tizen> 3 </since_tizen>
511 public int StencilOperationOnFail
516 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.StencilOperationOnFail);
517 pValue.Get(out temp);
523 var temp = new Tizen.NUI.PropertyValue(value);
524 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.StencilOperationOnFail, temp);
530 /// Gets and Sets StencilOperationOnZFail.
532 /// <since_tizen> 3 </since_tizen>
533 public int StencilOperationOnZFail
538 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.StencilOperationOnZFail);
539 pValue.Get(out temp);
545 var temp = new Tizen.NUI.PropertyValue(value);
546 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.StencilOperationOnZFail, temp);
552 /// Gets and Sets StencilOperationOnZPass property.
554 /// <since_tizen> 3 </since_tizen>
555 public int StencilOperationOnZPass
560 var pValue = Tizen.NUI.Object.GetProperty(SwigCPtr, Renderer.Property.StencilOperationOnZPass);
561 pValue.Get(out temp);
567 var temp = new Tizen.NUI.PropertyValue(value);
568 Tizen.NUI.Object.SetProperty(SwigCPtr, Renderer.Property.StencilOperationOnZPass, temp);
574 /// Sets the geometry to be used by this renderer.
576 /// <param name="geometry">The geometry to be used by this renderer.</param>
577 /// <since_tizen> 3 </since_tizen>
578 public void SetGeometry(Geometry geometry)
580 Interop.Renderer.SetGeometry(SwigCPtr, Geometry.getCPtr(CurrentGeometry = geometry));
581 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
585 /// Gets the geometry used by this renderer.
587 /// <returns>The geometry used by the renderer.</returns>
588 /// <since_tizen> 3 </since_tizen>
589 public Geometry GetGeometry()
591 return CurrentGeometry;
595 /// Sets effective range of indices to draw from bound index buffer.
597 /// <param name="firstElement">The First element to draw.</param>
598 /// <param name="elementsCount">The number of elements to draw.</param>
599 /// <since_tizen> 3 </since_tizen>
600 public void SetIndexRange(int firstElement, int elementsCount)
602 Interop.Renderer.SetIndexRange(SwigCPtr, firstElement, elementsCount);
603 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
607 /// Sets the texture set to be used by this renderer.
609 /// <param name="textureSet">The texture set to be used by this renderer.</param>
610 /// <since_tizen> 3 </since_tizen>
611 public void SetTextures(TextureSet textureSet)
613 Interop.Renderer.SetTextures(SwigCPtr, TextureSet.getCPtr(textureSet));
614 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
618 /// Gets the texture set used by this renderer.
620 /// <returns>The texture set used by the renderer.</returns>
621 /// <since_tizen> 3 </since_tizen>
622 public TextureSet GetTextures()
624 //to fix memory leak issue, match the handle count with native side.
625 System.IntPtr cPtr = Interop.Renderer.GetTextures(SwigCPtr);
626 HandleRef CPtr = new global::System.Runtime.InteropServices.HandleRef(this, cPtr);
627 TextureSet ret = Registry.GetManagedBaseHandleFromNativePtr(CPtr.Handle) as TextureSet;
628 if (cPtr != null && ret == null)
630 ret = new TextureSet(cPtr, false);
631 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
634 Interop.BaseHandle.DeleteBaseHandle(CPtr);
635 CPtr = new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero);
637 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
642 /// Sets the shader used by this renderer.
644 /// <param name="shader">The shader to be used by this renderer.</param>
645 /// <since_tizen> 3 </since_tizen>
646 public void SetShader(Shader shader)
648 Interop.Renderer.SetShader(SwigCPtr, Shader.getCPtr(CurrentShader = shader));
649 if (NDalicPINVOKE.SWIGPendingException.Pending) throw NDalicPINVOKE.SWIGPendingException.Retrieve();
653 /// Gets the shader used by this renderer.
655 /// <returns>The shader used by the renderer.</returns>
656 /// <since_tizen> 3 </since_tizen>
657 public Shader GetShader()
659 return CurrentShader;
662 internal Renderer(global::System.IntPtr cPtr, bool cMemoryOwn) : base(cPtr, cMemoryOwn)
666 /// This will not be public opened.
667 [EditorBrowsable(EditorBrowsableState.Never)]
668 protected override void ReleaseSwigCPtr(System.Runtime.InteropServices.HandleRef swigCPtr)
670 Interop.Renderer.DeleteRenderer(swigCPtr);
673 /// <since_tizen> 6.0 </since_tizen>
674 /// This will be changed internal API after ACR done. Before ACR, need to be hidden as inhouse API.
675 [EditorBrowsable(EditorBrowsableState.Never)]
676 public sealed class Ranges
678 /// <since_tizen> 6.0 </since_tizen>
679 /// This will be changed internal API after ACR done. Before ACR, need to be hidden as inhouse API.
680 [EditorBrowsable(EditorBrowsableState.Never)]
681 public static readonly int BackgroundEffect = Interop.Renderer.RangesBackgroundEffectGet();
683 /// <since_tizen> 6.0 </since_tizen>
684 /// This will be changed internal API after ACR done. Before ACR, need to be hidden as inhouse API.
685 [EditorBrowsable(EditorBrowsableState.Never)]
686 public static readonly int BACKGROUND = Interop.Renderer.RangesBackgroundGet();
688 /// <since_tizen> 6.0 </since_tizen>
689 /// This will be changed internal API after ACR done. Before ACR, need to be hidden as inhouse API.
690 [EditorBrowsable(EditorBrowsableState.Never)]
691 public static readonly int CONTENT = Interop.Renderer.RangesContentGet();
693 /// <since_tizen> 6.0 </since_tizen>
694 /// This will be changed internal API after ACR done. Before ACR, need to be hidden as inhouse API.
695 [EditorBrowsable(EditorBrowsableState.Never)]
696 public static readonly int DECORATION = Interop.Renderer.RangesDecorationGet();
698 /// <since_tizen> 6.0 </since_tizen>
699 /// This will be changed internal API after ACR done. Before ACR, need to be hidden as inhouse API.
700 [EditorBrowsable(EditorBrowsableState.Never)]
701 public static readonly int ForegroundEffect = Interop.Renderer.RangesForegroundEffectGet();
705 [Obsolete("Please do not use this! Deprecated in API9, will be removed in API11! Please use ForegroundEffect instead!")]
706 [EditorBrowsable(EditorBrowsableState.Never)]
707 [SuppressMessage("Naming", "CA1707:Identifiers should not contain underscores", Justification = "<Pending>")]
708 public static readonly int FOREGROUND_EFFECT = Interop.Renderer.RangesForegroundEffectGet();
710 [Obsolete("Please do not use this! Deprecated in API9, will be removed in API11! Please use BackgroundEffect instead!")]
711 [EditorBrowsable(EditorBrowsableState.Never)]
712 [SuppressMessage("Naming", "CA1707:Identifiers should not contain underscores", Justification = "<Pending>")]
713 public static readonly int BACKGROUND_EFFECT = Interop.Renderer.RangesBackgroundEffectGet();
717 /// Enumeration for instances of properties belonging to the Renderer class.
719 internal class Property
721 internal static readonly int DepthIndex = Interop.Renderer.DepthIndexGet();
722 internal static readonly int FaceCullingMode = Interop.Renderer.FaceCullingModeGet();
723 internal static readonly int BlendMode = Interop.Renderer.BlendModeGet();
724 internal static readonly int BlendEquationRgb = Interop.Renderer.BlendEquationRgbGet();
725 internal static readonly int BlendEquationAlpha = Interop.Renderer.BlendEquationAlphaGet();
726 internal static readonly int BlendFactorSrcRgb = Interop.Renderer.BlendFactorSrcRgbGet();
727 internal static readonly int BlendFactorDestRgb = Interop.Renderer.BlendFactorDestRgbGet();
728 internal static readonly int BlendFactorSrcAlpha = Interop.Renderer.BlendFactorSrcAlphaGet();
729 internal static readonly int BlendFactorDestAlpha = Interop.Renderer.BlendFactorDestAlphaGet();
730 internal static readonly int BlendColor = Interop.Renderer.BlendColorGet();
731 internal static readonly int BlendPreMultipliedAlpha = Interop.Renderer.BlendPreMultipliedAlphaGet();
732 internal static readonly int IndexRangeFirst = Interop.Renderer.IndexRangeFirstGet();
733 internal static readonly int IndexRangeCount = Interop.Renderer.IndexRangeCountGet();
734 internal static readonly int DepthWriteMode = Interop.Renderer.DepthWriteModeGet();
735 internal static readonly int DepthFunction = Interop.Renderer.DepthFunctionGet();
736 internal static readonly int DepthTestMode = Interop.Renderer.DepthTestModeGet();
737 internal static readonly int RenderMode = Interop.Renderer.RenderModeGet();
738 internal static readonly int StencilFunction = Interop.Renderer.StencilFunctionGet();
739 internal static readonly int StencilFunctionMask = Interop.Renderer.StencilFunctionMaskGet();
740 internal static readonly int StencilFunctionReference = Interop.Renderer.StencilFunctionReferenceGet();
741 internal static readonly int StencilMask = Interop.Renderer.StencilMaskGet();
742 internal static readonly int StencilOperationOnFail = Interop.Renderer.StencilOperationOnFailGet();
743 internal static readonly int StencilOperationOnZFail = Interop.Renderer.StencilOperationOnZFailGet();
744 internal static readonly int StencilOperationOnZPass = Interop.Renderer.StencilOperationOnZPassGet();