/// <summary> /// Create an image from an existing texture. /// </summary> /// <param name="rect">position and size</param> /// <param name="texture">texture, call<see cref="CreateTexture"/>to create it.</param> public static void Image(Rect rect, ITexture texture) { var window = GetCurrentWindow(); if (window.SkipItems) { return; } var id = window.GetID(texture.GetHashCode()); var container = window.AbsoluteVisualList; var node = (Node)container.Find(visual => visual.Id == id); if (node == null) { //create node node = new Node(id, $"{nameof(Image)}<Native_{texture.GetNativeTextureId()}>"); node.UseBoxModel = true; node.RuleSet.Replace(GUISkin.Current[GUIControlName.Image]); container.Add(node); } node.ActiveSelf = true; // rect node.Rect = window.GetRect(rect); // draw using (var dc = node.RenderOpen()) { dc.DrawBoxModel(texture, node.RuleSet, node.Rect); } }
public static void Image(ITexture texture) { var window = GetCurrentWindow(); if (window.SkipItems) { return; } var id = window.GetID(texture.GetHashCode()); var container = window.RenderTree.CurrentContainer; var node = container.GetNodeById(id); if (node == null) { //create node node = new Node(id, $"{nameof(Image)}<Native_{texture.GetNativeTextureId()}>"); node.UseBoxModel = true; node.RuleSet.Replace(GUISkin.Current[GUIControlName.Image]); node.AttachLayoutEntry(texture.Size); } container.AppendChild(node); node.ActiveSelf = true; // rect node.Rect = window.GetRect(id); // draw using (var dc = node.RenderOpen()) { dc.DrawBoxModel(texture, node.RuleSet, node.Rect); } }
public void StartDrawMeshToImage(int width, int height) { //create texture textureForDrawMesh = new OpenGLTexture(); textureForDrawMesh.LoadImage(new Rgba32[width * height], width, height); //create frame buffer GL.GenFramebuffers(1, frameBuffersForDrawMesh); frameBufferForDrawMesh = frameBuffersForDrawMesh[0]; GL.BindFramebuffer(GL.GL_FRAMEBUFFER_EXT, frameBufferForDrawMesh); GL.BindTexture(GL.GL_TEXTURE_2D, framebufferColorTexture); GL.FramebufferTexture2D(GL.GL_FRAMEBUFFER_EXT, GL.GL_COLOR_ATTACHMENT0_EXT, GL.GL_TEXTURE_2D, (uint) textureForDrawMesh.GetNativeTextureId(), 0); if (GL.CheckFramebufferStatus(GL.GL_FRAMEBUFFER_EXT) != GL.GL_FRAMEBUFFER_COMPLETE_EXT) { throw new Exception("Framebuffer is not complete."); } }