Exemplo n.º 1
0
            protected override void OnPaint(Alt.GUI.PaintEventArgs e)
            {
                Debug.Log("onpaint");
                Alt.Sketch.Graphics graphics = e.Graphics;
                if (!DoubleBuffered)
                {
                    graphics.FillRectangle(Alt.Sketch.Color.FromArgb((graphics is SoftwareGraphics) ? 128 : 192, Alt.Sketch.Color.DodgerBlue), ClientRectangle);
                }
                else
                {
                    graphics.Clear(Alt.Sketch.Color.FromArgb((graphics is SoftwareGraphics) ? 128 : 192, Alt.Sketch.Color.DodgerBlue));
                }

                int w = ClientWidth;
                int h = ClientHeight;

                m_Scale   = viewZoom * System.Math.Min(w, h) / 23;
                m_CenterX = w / 2 + m_OffsetX;
                m_CenterY = h * 0.83 + m_OffsetY;
                m_DebugDraw.SetViewTransform(m_CenterX, m_CenterY, m_Scale);


                //Paint
                base.OnPaint(e);
            }
            protected override void OnPaint(GUI.PaintEventArgs e)
            {
                Alt.Sketch.Graphics graphics = e.Graphics;
                if (!DoubleBuffered)
                {
                    graphics.FillRectangle(Alt.Sketch.Color.FromArgb((graphics is SoftwareGraphics) ? 128 : 192, Alt.Sketch.Color.DodgerBlue), ClientRectangle);
                }
                else
                {
                    graphics.Clear(Alt.Sketch.Color.FromArgb((graphics is SoftwareGraphics) ? 128 : 192, Alt.Sketch.Color.DodgerBlue));
                }


                //Paint
                base.OnPaint(e);
            }
Exemplo n.º 3
0
        internal bool DoRenderIfNeed(Camera camera, Renderer renderer)
        {
            SizeI size;

            if (!NeedsUpdate ||
                Unity_RenderManager.Instance == null ||
                (size = Size).IsEmpty)
            {
                return(false);
            }


            NeedsUpdate = false;

            m_LastRenderTime = Alt.IntervalTimer.Ticks;

            m_FPSCounter.Tick();


            if (RenderType == Alt.Sketch.Rendering.RenderType.Software)
            {
                if (!(m_Texture is Texture2D))
                {
                    KillTextures();
                }

                if (m_Texture != null &&
                    (m_Texture.width != size.Width ||
                     m_Texture.height != size.Height))
                {
                    m_Texture = null;
                }

                if (m_Texture == null)
                {
                    m_Texture = new Texture2D(
                        size.Width, size.Height,
                        Unity_RenderManager.ToTextureFormat(PixelFormat.Format32bppArgb),
                        false);
                    m_Texture.filterMode = FilterMode.Point;

                    RefreshMaterial();
                }

                Bitmap backBuffer            = SoftwareBackBuffer;
                Alt.Sketch.Graphics graphics = Alt.Sketch.Graphics.FromImage(backBuffer);

                //graphics.Clear(Alt.Sketch.Color.FromArgb(0, 128, 128, 128));
                graphics.Clear(Alt.Sketch.Color.FromArgb(0, 0, 0, 0));

                DoPaintInternal(new Alt.GUI.PaintEventArgs(graphics, new Alt.Sketch.Rect(0, 0, size)));

                Unity_RenderManager.SetTextureData(m_Texture as Texture2D, backBuffer, backBuffer.PixelRectangle, true);
            }
            else
            {
                if (m_RenderTexture != null &&
                    (m_RenderTexture.width != size.Width ||
                     m_RenderTexture.height != size.Height))
                {
                    KillTextures();
                }

                if (m_RenderTexture == null)
                {
                    m_RenderTexture = new RenderTexture(
                        size.Width, size.Height,
                        0,
                        Unity_RenderManager.ToRenderTextureFormat(PixelFormat.Format32bppArgb));
                    m_RenderTexture.filterMode = FilterMode.Point;

                    m_Texture = m_RenderTexture;

                    RefreshMaterial();
                }

                if (m_RenderTexture != null)
                {
                    RenderTexture oldRenderTexture = RenderTexture.active;
                    RenderTexture.active = m_RenderTexture;
                    try
                    {
                        GL.Clear(true, true, Unity_RenderManager.ToColor(Alt.Sketch.Color.Empty));

                        if (m_Renderer == null)
                        {
                            m_Renderer = new Unity_Renderer(Unity_RenderManager.Instance);
                            m_Renderer.DefaultSmoothingMode = Alt.Sketch.SmoothingMode.None;
                        }

                        m_Renderer.BeginRender(camera, renderer, size.Width, size.Height, true);
                        {
                            Alt.Sketch.Graphics graphics = Alt.Sketch.Graphics.FromRenderer(m_Renderer);
                            if (graphics != null)
                            {
                                DoPaintInternal(new Alt.GUI.PaintEventArgs(graphics, new Alt.Sketch.Rect(0, 0, size)));
                            }
                        }
                        m_Renderer.EndRender();
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.ToString());
                    }
                    finally
                    {
                        RenderTexture.active = oldRenderTexture;
                    }
                }
            }

            return(true);
        }
Exemplo n.º 4
0
        /*
         * Render the given  string using the given font.   Transfer the image
         * to a  surface of  power-of-2 size large  enough to fit  the string.
         * Return an OpenGL texture object.
         */
        //  Image
        public static int make_image_from_font(
            ref int w, ref int h,
            string text, Alt.Sketch.Font font)
        {
            int o = 0;

            /* Render the text. */

            if (!string.IsNullOrEmpty(text))
            {
                Alt.Sketch.SizeI size = gui.gui_measure(text, font);

                Alt.Sketch.Bitmap bitmap = new Alt.Sketch.Bitmap(size, Alt.Sketch.PixelFormat.Format32bppArgb);
                using (Alt.Sketch.Graphics graphics = Alt.Sketch.Graphics.FromImage(bitmap))
                {
                    graphics.Clear(Alt.Sketch.Color.Empty);
                    graphics.DrawString(text, font, Alt.Sketch.Brushes.White, Alt.Sketch.Point.Zero);
                }
                {
                    w = bitmap.PixelWidth;
                    h = bitmap.PixelHeight;

                    int  trw = 0;
                    bool f   = false;
                    //  left
                    for (int x = 0; x < w; x++)
                    {
                        for (int y = 0; y < h; y++)
                        {
                            if (bitmap.GetPixel(x, y).A != 0)
                            {
                                f = true;
                                break;
                            }
                        }

                        if (f)
                        {
                            break;
                        }

                        trw++;
                    }

                    //  right
                    f = false;
                    for (int x = w - 1; x >= 0; x--)
                    {
                        for (int y = 0; y < h; y++)
                        {
                            if (bitmap.GetPixel(x, y).A != 0)
                            {
                                f = true;
                                break;
                            }
                        }

                        if (f)
                        {
                            break;
                        }

                        trw++;
                    }

                    //  Pad the text to power-of-two

                    Alt.Sketch.BitmapData bdata = bitmap.LockBits(Alt.Sketch.ImageLockMode.ReadOnly);

                    int    w2 = 0;
                    int    h2 = 0;
                    byte[] p  = image_next2(bdata.Scan0, bdata.PixelWidth, bdata.PixelHeight, bdata.ByteDepth, trw, ref w2, ref h2);

                    bitmap.UnlockBits(bdata);


                    /* Saturate the color channels.  Modulate ONLY in alpha. */

                    Image.image_white(p, w2, h2, bitmap.ByteDepth);

                    /* Create the OpenGL texture object. */

                    o = Image.make_texture(p, w2, h2, bitmap.ByteDepth);
                }
            }
            else
            {
                /* Empty string. */

                //if (w) *
                w = 0;
                //if (h) *
                h = 0;
                //if (W) *W = 0;
                //if (H) *H = 0;
            }

            return(o);
        }