void CheckTexture() { if (!IsImageAlive) { KillTexture(); return; } Alt.Sketch.RenderImage renderImage = ImageSourceAsRenderImage; if (renderImage == null || ModificationTime == renderImage.ModificationTime) { return; } if (SrcWidth != renderImage.PixelWidth || SrcHeight != renderImage.PixelHeight || PixelFormat != renderImage.PixelFormat) { KillTexture(); } if (SrcWidth < 1 || SrcHeight < 1 || PixelFormat == Alt.Sketch.PixelFormat.Unknown) { return; } //int bpp = renderImage.ByteDepth; if (!m_RenderManager.NonPowerOf2TexturesSupported) { TextureWidth = NextPowerOfTwo(SrcWidth); TextureHeight = NextPowerOfTwo(SrcHeight); } else { TextureWidth = SrcWidth; TextureHeight = SrcHeight; } if (m_Texture == null) { // Create a new texture m_Texture = new RenderTexture(TextureWidth, TextureHeight, 0, Unity_RenderManager.ToRenderTextureFormat(PixelFormat)); if (m_Texture != null) { TextureWidth = m_Texture.width; TextureHeight = m_Texture.height; m_Texture.filterMode = FilterMode.Point; } } }
protected override void UpdateIfNeed(Int64 currentTime) { if (!IsImageAlive) { KillTexture(); return; } Alt.Sketch.RenderImage renderImage = ImageSourceAsRenderImage; if (renderImage == null) { return; } CheckTexture(); if (ModificationTime != renderImage.ModificationTime) { //UpdateTexture(); RenderTexture renderTexture = m_Texture as RenderTexture; if (renderTexture != null) { if (m_Renderer == null) { m_Renderer = new Unity_Renderer(m_RenderManager, renderTexture); m_Renderer.DefaultSmoothingMode = Alt.Sketch.SmoothingMode.None; } RenderTexture oldRenderTexture = RenderTexture.active; RenderTexture.active = renderTexture; try { m_Renderer.BeginRender(null, null, renderTexture.width, renderTexture.height); GL.Clear(true, true, new Color(0.5f, 0.5f, 0.5f, 0)); //Color.clear); { renderImage.Render(Alt.Sketch.Graphics.FromRenderer(m_Renderer)); } m_Renderer.EndRender(); } catch (Exception ex) { Console.WriteLine(ex.ToString()); } finally { RenderTexture.active = oldRenderTexture; } } ModificationTime = renderImage.ModificationTime; } }