Beispiel #1
0
        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;
                }
            }
        }
Beispiel #2
0
        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;
            }
        }