internal MyGLCanvas( CanvasGL2d canvasGL2d, int left, int top, int width, int height) { this.canvasGL2 = canvasGL2d; painter1 = new GLCanvasPainter(canvasGL2d, width, height); this.left = left; this.top = top; this.right = left + width; this.bottom = top + height; currentClipRect = new Rectangle(0, 0, width, height); this.CurrentFont = new RequestFont("tahoma", 10); this.CurrentTextColor = Color.Black; internalPen = new InternalPen(Color.Black); internalBrush = new InternalBrush(Color.Black); #if DEBUG debug_canvas_id = dbug_canvasCount + 1; dbug_canvasCount += 1; #endif this.StrokeWidth = 1; }
SmoothingMode _smoothingMode; //smoothing mode of this painter public GLCanvasPainter(CanvasGL2d canvas, int w, int h) { _canvas = canvas; _width = w; _height = h; _rectInt = new RectInt(0, 0, w, h); arcTool = new Arc(); CurrentFont = new RequestFont("tahoma", 14); }
public GLBmpGlyphTextPrinter(GLCanvasPainter painter, IFontLoader fontLoader) { //create text printer for use with canvas painter this.painter = painter; this.canvas2d = painter.Canvas; _fontLoader = fontLoader; //------ ChangeFont(painter.CurrentFont); }
SmoothingMode _smoothingMode; //smoothing mode of this painter public GLCanvasPainterBase(CanvasGL2d canvas, int w, int h) { _canvas = canvas; _width = w; _height = h; _rectInt = new RectInt(0, 0, w, h); arcTool = new Arc(); CurrentFont = new RequestFont("tahoma", 14); }
public WinGdiFontPrinter(CanvasGL2d canvas, int w, int h) { this.canvas = canvas; _width = w; _height = h; bmpWidth = w; bmpHeight = h; memdc = new Win32.NativeWin32MemoryDc(bmpWidth, bmpHeight); //TODO: review here //use default font from current platform InitFont("tahoma", 14); memdc.SetTextColor(0); }
public GLBmpGlyphTextPrinter(GLCanvasPainter painter, IFontLoader fontLoader) { //create text printer for use with canvas painter this.painter = painter; this.canvas2d = painter.Canvas; GlyphPosPixelSnapX = GlyphPosPixelSnapKind.Integer; GlyphPosPixelSnapY = GlyphPosPixelSnapKind.Integer; _fontLoader = fontLoader; ChangeFont(painter.CurrentFont); this._glyphLayout.ScriptLang = painter.CurrentFont.GetOpenFontScriptLang(); _loadedGlyphs = new GLBitmapCache <SimpleFontAtlas>(atlas => { //create new one Typography.Rendering.GlyphImage totalGlyphImg = atlas.TotalGlyph; //load to glbmp GLBitmap found = new GLBitmap(totalGlyphImg.Width, totalGlyphImg.Height, totalGlyphImg.GetImageBuffer(), false); found.IsInvert = false; return(found); }); }
public AggTextSpanPrinter(GLCanvasPainter canvasPainter, int w, int h) { //this class print long text into agg canvas //then copy pixel buffer from aff canvas to gl-bmp //then draw the gl-bmp into target gl canvas //TODO: review here this.canvasPainter = canvasPainter; this.canvas = canvasPainter.Canvas; bmpWidth = w; bmpHeight = h; actualImage = new ActualImage(bmpWidth, bmpHeight, PixelFormat.ARGB32); imgGfx2d = new ImageGraphics2D(actualImage); _aggPainter = new AggCanvasPainter(imgGfx2d); _aggPainter.FillColor = Color.Black; _aggPainter.StrokeColor = Color.Black; //set default1 _aggPainter.CurrentFont = canvasPainter.CurrentFont; textPrinter = new VxsTextPrinter(_aggPainter, YourImplementation.BootStrapOpenGLES2.myFontLoader); _aggPainter.TextPrinter = textPrinter; }
public GLTextPrinter(CanvasGL2d canvas2d) { this.canvas2d = canvas2d; }
public void DrawString(CanvasGL2d canvas, string text, float x, float y) { char[] textBuffer = text.ToCharArray(); Win32.MyWin32.PatBlt(memdc.DC, 0, 0, bmpWidth, bmpHeight, Win32.MyWin32.WHITENESS); Win32.NativeTextWin32.TextOut(memdc.DC, 0, 0, textBuffer, textBuffer.Length); // Win32.Win32Utils.BitBlt(hdc, 0, 0, bmpWidth, 50, memHdc, 0, 0, Win32.MyWin32.SRCCOPY); //--------------- int stride = 4 * ((bmpWidth * 32 + 31) / 32); //Bitmap newBmp = new Bitmap(bmpWidth, 50, System.Drawing.Imaging.PixelFormat.Format32bppArgb); //var bmpData = newBmp.LockBits(new Rectangle(0, 0, bmpWidth, 50), System.Drawing.Imaging.ImageLockMode.ReadWrite, System.Drawing.Imaging.PixelFormat.Format32bppArgb); byte[] tmp1 = new byte[stride * 50]; System.Runtime.InteropServices.Marshal.Copy(memdc.PPVBits, tmp1, 0, tmp1.Length); //--------------- int pos = 3; for (int r = 0; r < 50; ++r) { for (int c = 0; c < stride; ++c) { tmp1[pos] = 255; pos += 4; c += 4; } } Win32.NativeTextWin32.WIN32SIZE win32Size; unsafe { fixed (char* bufferHead = &textBuffer[0]) { Win32.NativeTextWin32.GetTextExtentPoint32Char(memdc.DC, bufferHead, textBuffer.Length, out win32Size); } } bmpWidth = win32Size.Width; bmpHeight = win32Size.Height; var actualImg = new Agg.ActualImage(bmpWidth, bmpHeight, Agg.PixelFormat.ARGB32); //------------------------------------------------------ //copy bmp from specific bmp area //and convert to GLBmp byte[] buffer = PixelFarm.Agg.ActualImage.GetBuffer(actualImg); unsafe { byte* header = (byte*)memdc.PPVBits; fixed (byte* dest0 = &buffer[0]) { byte* dest = dest0; byte* rowHead = header; int rowLen = bmpWidth * 4; for (int h = 0; h < bmpHeight; ++h) { header = rowHead; for (int n = 0; n < rowLen; ) { //move next *(dest + 0) = *(header + 0); *(dest + 1) = *(header + 1); *(dest + 2) = *(header + 2); //*(dest + 3) = *(header + 3); *(dest + 3) = 255; header += 4; dest += 4; n += 4; } //finish one row rowHead += stride; } } } //------------------------------------------------------ GLBitmap glBmp = new GLBitmap(bmpWidth, bmpHeight, buffer, false); canvas.DrawImage(glBmp, (float)x, (float)y); glBmp.Dispose(); }
public static void Start() { if (!Glfw.Init()) { Console.WriteLine("can't init glfw"); return; } //--------------------------------------------------- //specific OpenGLES *** Glfw.WindowHint(WindowHint.GLFW_CLIENT_API, (int)OpenGLAPI.OpenGLESAPI); Glfw.WindowHint(WindowHint.GLFW_CONTEXT_CREATION_API, (int)OpenGLContextCreationAPI.GLFW_EGL_CONTEXT_API); Glfw.WindowHint(WindowHint.GLFW_CONTEXT_VERSION_MAJOR, 2); Glfw.WindowHint(WindowHint.GLFW_CONTEXT_VERSION_MINOR, 0); //--------------------------------------------------- Glfw.SwapInterval(1); GlFwForm form1 = GlfwApp.CreateGlfwForm( 800, 600, "PixelFarm + Skia on GLfw and OpenGLES2"); form1.MakeCurrent(); //------------------------------------ //*** GLFWPlatforms.CreateGLESContext(); //------------------------------------ form1.Activate(); int ww_w = 800; int ww_h = 600; int max = Math.Max(ww_w, ww_h); canvasGL2d = PixelFarm.Drawing.GLES2.GLES2Platform.CreateCanvasGL2d(max, max); //------------------------------------ GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); GL.ClearColor(1, 1, 1, 1); //-------------------------------------------------------------------------------- //setup viewport size //set up canvas needUpdateContent = true; //GL.Viewport(0, 0, 800, 600); GL.Viewport(0, 0, max, max); FormRenderUpdateEventArgs formRenderUpdateEventArgs = new FormRenderUpdateEventArgs(); formRenderUpdateEventArgs.form = form1; form1.SetDrawFrameDelegate(() => { if (needUpdateContent) { UpdateViewContent(formRenderUpdateEventArgs); } canvasGL2d.Clear(Color.Blue); canvasGL2d.DrawImage(glBmp, 0, 600); }); while (!GlfwApp.ShouldClose()) { //--------------- //render phase and swap GlfwApp.UpdateWindowsFrame(); /* Poll for and process events */ Glfw.PollEvents(); } Glfw.Terminate(); }
public GLCanvasPainter(CanvasGL2d canvas, int w, int h) : base(canvas, w, h) { _win32GdiPrinter = new WinGdiFontPrinter(w, h); }
public static void Start() { if (!Glfw.Init()) { Console.WriteLine("can't init glfw"); return; } //--------------------------------------------------- //specific OpenGLES *** Glfw.WindowHint(WindowHint.GLFW_CLIENT_API, (int)OpenGLAPI.OpenGLESAPI); Glfw.WindowHint(WindowHint.GLFW_CONTEXT_CREATION_API, (int)OpenGLContextCreationAPI.GLFW_EGL_CONTEXT_API); Glfw.WindowHint(WindowHint.GLFW_CONTEXT_VERSION_MAJOR, 2); Glfw.WindowHint(WindowHint.GLFW_CONTEXT_VERSION_MINOR, 0); //--------------------------------------------------- Glfw.SwapInterval(1); GlFwForm form1 = GlfwApp.CreateGlfwForm( 800, 600, "PixelFarm + Skia on GLfw and OpenGLES2"); form1.MakeCurrent(); //------------------------------------ //*** GLFWPlatforms.CreateGLESContext(); //------------------------------------ form1.Activate(); int ww_w = 800; int ww_h = 600; int max = Math.Max(ww_w, ww_h); canvasGL2d = PixelFarm.Drawing.GLES2.GLES2Platform.CreateCanvasGL2d(max, max); //------------------------------------ GL.Enable(EnableCap.Blend); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); GL.ClearColor(1, 1, 1, 1); //-------------------------------------------------------------------------------- //setup viewport size //set up canvas needUpdateContent = true; //GL.Viewport(0, 0, 800, 600); GL.Viewport(0, 0, max, max); FormRenderUpdateEventArgs formRenderUpdateEventArgs = new FormRenderUpdateEventArgs(); formRenderUpdateEventArgs.form = form1; LayoutFarm.Ease.EaseHost.StartGraphicsHost(); var rootgfx = new MyRootGraphic( LayoutFarm.UI.UIPlatformWinNeutral.platform, LayoutFarm.UI.UIPlatformWinNeutral.platform.GetIFonts(), ww_w, ww_h); var surfaceViewportControl = new LayoutFarm.UI.WinNeutral.UISurfaceViewportControl(); surfaceViewportControl.InitRootGraphics(rootgfx, rootgfx.TopWinEventPortal, InnerViewportKind.GL); //lion fill sample OpenTkEssTest.T108_LionFill lionFill = new OpenTkEssTest.T108_LionFill(); lionFill.Init2(canvasGL2d); GLCanvasPainter painter1 = lionFill.Painter; var myCanvasGL = new PixelFarm.Drawing.GLES2.MyGLCanvas(painter1, 0, 0, 800, 600); //(PixelFarm.Drawing.GLES2.GLES2Platform.CreateCanvas(0, 0, 800, 600, canvasGL2d, painter1); surfaceViewportControl.SetupCanvas(myCanvasGL); SampleViewport viewport = new LayoutFarm.SampleViewport(surfaceViewportControl); HtmlHost htmlHost; htmlHost = HtmlHostCreatorHelper.CreateHtmlHost(viewport, null, null); ////================================================== //html box HtmlBox lightHtmlBox = new HtmlBox(htmlHost, 800, 50); { lightHtmlBox.SetLocation(50, 450); viewport.AddContent(lightHtmlBox); //light box can't load full html //all light boxs of the same lightbox host share resource with the host string html = @"<div>OK1</div><div>OK2</div>"; //if you want to use full html-> use HtmlBox instead lightHtmlBox.LoadHtmlString(html); } form1.SetDrawFrameDelegate(() => { //render each frame if (needUpdateContent) { UpdateViewContent(formRenderUpdateEventArgs); } canvasGL2d.Clear(Color.White); //canvasGL2d.DrawRect(0, 0, 200, 200); ////canvasGL2d.DrawImage(glBmp, 0, 600); //int tmp_x = lightHtmlBox.Left; //int tmp_y = lightHtmlBox.Top; //myCanvasGL.SetCanvasOrigin(tmp_x, tmp_y); canvasGL2d.SmoothMode = CanvasSmoothMode.No; //--------- //flip y axis for html box (and other UI) canvasGL2d.FlipY = true; lightHtmlBox.CurrentPrimaryRenderElement.DrawToThisCanvas( myCanvasGL, new Rectangle(0, 0, 800, 600)); canvasGL2d.FlipY = false; //myCanvasGL.SetCanvasOrigin(tmp_x, -tmp_y); //lion use canvas coordinate system lionFill.TestRender(); //surfaceViewportControl.PaintMe(canvasGL2d); }); while (!GlfwApp.ShouldClose()) { //--------------- //render phase and swap GlfwApp.UpdateWindowsFrame(); /* Poll for and process events */ Glfw.PollEvents(); } Glfw.Terminate(); }