MeshGenerationContext
Provides methods for generating a visual element's visual content during the VisualElement.generateVisualContent callback.
Read time 3 minutesLast updated 2 days ago
Definition
- Type: Class
- Namespace: UnityEngine.UIElements
- Assembly: UnityEngine.UIElementsModule
public class MeshGenerationContext
Remarks
Visual content is generated by using the Painter2D object, or manually by allocating a mesh using the MeshGenerationContext.Allocate method and then filling the vertices and indices.
To use the painter object, access the _painter2D property, and then use it to issue drawing commands. You can find an example in the Painter2D documentation.
If you manually provide content with MeshGenerationContext.Allocate and also provide a texture during the allocation, you can use the _uv vertex values to map it to the resulting mesh. UI Toolkit might store the texture in an internal atlas.
Examples
//This example creates a custom element that dynamically renders a textured rectangle //based on the element’s size. using UnityEngine;using UnityEngine.UIElements;public class TexturedElement : VisualElement{ static readonly Vertex[] k_Vertices = new Vertex[4]; static readonly ushort[] k_Indices = { 0, 1, 2, 2, 3, 0 }; static TexturedElement() { k_Vertices[0].tint = Color.white; k_Vertices[1].tint = Color.white; k_Vertices[2].tint = Color.white; k_Vertices[3].tint = Color.white; k_Vertices[0].uv = new Vector2(0, 0); k_Vertices[1].uv = new Vector2(0, 1); k_Vertices[2].uv = new Vector2(1, 1); k_Vertices[3].uv = new Vector2(1, 0); } Texture2D m_Texture; public TexturedElement() { //This element grows to fill the available space. style.flexGrow = 1.0f; //Subscribes the OnGenerateVisualContent method to the generateVisualContent delegate. generateVisualContent += OnGenerateVisualContent; //Create a simple 2x2 checkerboard texture. m_Texture = new Texture2D(2, 2); m_Texture.SetPixels(new Color[] { Color.white, Color.black, Color.black, Color.white }); m_Texture.Apply(); //You can also load a texture from a file. //m_Texture = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/tex.png"); } //This method is called when the element needs to render its content. void OnGenerateVisualContent(MeshGenerationContext mgc) { Rect r = contentRect; if (r.width < 0.01f || r.height < 0.01f) return; // Skip rendering when too small. float left = 0; float right = r.width; float top = 0; float bottom = r.height; k_Vertices[0].position = new Vector3(left, bottom, Vertex.nearZ); k_Vertices[1].position = new Vector3(left, top, Vertex.nearZ); k_Vertices[2].position = new Vector3(right, top, Vertex.nearZ); k_Vertices[3].position = new Vector3(right, bottom, Vertex.nearZ); MeshWriteData mwd = mgc.Allocate(k_Vertices.Length, k_Indices.Length, m_Texture); mwd.SetAllVertices(k_Vertices); mwd.SetAllIndices(k_Indices); }}
Properties
Property | Description |
|---|---|
| painter2D | The painter object used to issue 2D drawing commands. Use this object to draw vector shapes such as lines, arcs and Bezier curves. |
| visualElement | The element for which _generateVisualContent was invoked. |
Methods
Method | Description |
|---|---|
| AddMeshGenerationJob | Instructs the renderer to wait for the completion of the provided JobHandle before beginning processing the meshes. |
| Allocate | Allocates and draws the specified number of vertices and indices required to express geometry for drawing the content of a VisualElement. |
| AllocateTempMesh | Allocates the specified number of vertices and indices from a temporary allocator. |
| DrawMesh | Records a draw command with the provided triangle-list indexed mesh. |
| DrawText | Draw a string of text. |
| DrawVectorImage | Draws a VectorImage asset. |
| GetTempMeshAllocator | Returns an allocator that can be used to safely allocate temporary meshes from the job system. The meshes have the same scope as those allocated by MeshGenerationContext.AllocateTempMesh. |
| InsertMeshGenerationNode | Inserts a node into the rendering tree that can be populated from the job system. |