protected override void OnInitGLProgram(object sender, EventArgs args) { int max = Math.Max(this.Width, this.Height); canvas2d = PixelFarm.Drawing.GLES2.GLES2Platform.CreateCanvasGL2d(max, max); painter = new GLCanvasPainter(canvas2d, max, max); //--------------------- string fontfilename = "d:\\WImageTest\\a_total.xml"; var atlasBuilder = new Typography.Rendering.SimpleFontAtlasBuilder(); fontAtlas = atlasBuilder.LoadFontInfo(fontfilename); totalImg = new System.Drawing.Bitmap("d:\\WImageTest\\a_total.png"); var bmpdata = totalImg.LockBits(new System.Drawing.Rectangle(0, 0, totalImg.Width, totalImg.Height), System.Drawing.Imaging.ImageLockMode.ReadWrite, totalImg.PixelFormat); var buffer = new int[totalImg.Width * totalImg.Height]; System.Runtime.InteropServices.Marshal.Copy(bmpdata.Scan0, buffer, 0, buffer.Length); totalImg.UnlockBits(bmpdata); var glyph = new Typography.Rendering.GlyphImage(totalImg.Width, totalImg.Height); glyph.SetImageBuffer(buffer, false); fontAtlas.TotalGlyph = glyph; //--------------------- }
protected override void OnInitGLProgram(object sender, EventArgs args) { int max = Math.Max(this.Width, this.Height); canvas2d = CreateCanvasGL2d(max, max); painter = new GLCanvasPainter(canvas2d, max, max); polygon1 = painter.CreatePolygonRenderVx(new float[] { 0, 50, 50, 50, 10, 100 }); polygon2 = painter.CreatePolygonRenderVx(new float[] { 200, 50, 250, 50, 210, 100 }); polygon3 = painter.CreatePolygonRenderVx(new float[] { 400, 50, 450, 50, 410, 100 }); }
public MyGLCanvas( GLCanvasPainter painter, //*** we wrap around GLCanvasPainter *** int left, int top, int width, int height) { //---------------- //set painter first this.painter1 = painter; //---------------- 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; #if DEBUG debug_canvas_id = dbug_canvasCount + 1; dbug_canvasCount += 1; #endif this.StrokeWidth = 1; }
public static Canvas CreateCanvas2(int left, int top, int width, int height, CanvasGL2d canvas, GLCanvasPainter painter1, CanvasInitParameters reqPars = new CanvasInitParameters()) { return(new MyGLCanvas(painter1, 0, 0, width, height)); }
protected override void OnInitGLProgram(object sender, EventArgs args) { int max = Math.Max(this.Width, this.Height); canvas2d = PixelFarm.Drawing.GLES2.GLES2Platform.CreateCanvasGL2d(max, max); painter = new GLCanvasPainter(canvas2d, max, max); //convert lion vxs to renderVx }
protected override void OnInitGLProgram(object sender, EventArgs args) { int max = Math.Max(this.Width, this.Height); canvas2d = CreateCanvasGL2d(max, max); painter = new GLCanvasPainter(canvas2d, max, max); frameBuffer = canvas2d.CreateFrameBuffer(max, max); //------------ }
public override Canvas CreateCanvas(int left, int top, int width, int height, CanvasInitParameters reqPars = new CanvasInitParameters()) { var painter1 = new GLCanvasPainter(CreateCanvasGL2d(width, height), width, height); return(new MyGLCanvas( painter1, 0, 0, width, height)); }
protected override void OnInitGLProgram(object sender, EventArgs args) { int max = Math.Max(this.Width, this.Height); canvas2d = PixelFarm.Drawing.GLES2.GLES2Platform.CreateCanvasGL2d(max, max); painter = new GLCanvasPainter(canvas2d, max, max); frameBuffer = canvas2d.CreateFrameBuffer(this.Width, this.Height); frameBufferNeedUpdate = true; //------------ }
protected override void OnInitGLProgram(object sender, EventArgs args) { int max = Math.Max(this.Width, this.Height); canvas2d = CreateCanvasGL2d(max, max); lionShape = new SpriteShape(); lionShape.ParseLion(); //flip this lion vertically before use with openGL PixelFarm.Agg.Transform.Affine aff = PixelFarm.Agg.Transform.Affine.NewMatix( PixelFarm.Agg.Transform.AffinePlan.Scale(1, -1), PixelFarm.Agg.Transform.AffinePlan.Translate(0, 600)); lionVxs = new VertexStore(); aff.TransformToVxs(lionShape.Path.Vxs, lionVxs); painter = new GLCanvasPainter(canvas2d, max, max); }
public void Init2(CanvasGL2d canvas2d) { int max = 800; this.canvas2d = canvas2d; lionShape = new SpriteShape(); lionShape.ParseLion(); //flip this lion vertically before use with openGL PixelFarm.Agg.Transform.Affine aff = PixelFarm.Agg.Transform.Affine.NewMatix( PixelFarm.Agg.Transform.AffinePlan.Scale(1, -1), PixelFarm.Agg.Transform.AffinePlan.Translate(0, 600)); lionVxs = new VertexStore(); aff.TransformToVxs(lionShape.Path.Vxs, lionVxs); painter = new GLCanvasPainter(canvas2d, max, max); SetPrinter(painter); }
// PixelFarm.Drawing.Fonts.SvgFontStore svgFontStore = new PixelFarm.Drawing.Fonts.SvgFontStore(); protected override void OnInitGLProgram(object sender, EventArgs args) { //temp*** int max = Math.Max(this.Width, this.Height); canvas2d = PixelFarm.Drawing.GLES2.GLES2Platform.CreateCanvasGL2d(max, max); painter = new GLCanvasPainter(canvas2d, max, max); //---------------------- var win32InstallFontProvider = new PixelFarm.Drawing.InstallFontsProviderWin32(); InstalledFontCollection collection = new InstalledFontCollection(); collection.LoadInstalledFont(win32InstallFontProvider.GetInstalledFontIter()); InstalledFont tahomaFont = collection.GetFont("tahoma", InstalledFontStyle.Regular); FontFace tahomaFace = OpenFontLoader.LoadFont(tahomaFont.FontPath, ScriptLangs.Latin); ActualFont actualFont = tahomaFace.GetFontAtPointsSize(72); FontGlyph glyph = actualFont.GetGlyph('K'); //var svgFont = svgFontStore.LoadFont("svg-LiberationSansFont", 300); ////PathWriter p01 = new PathWriter(); ////p01.MoveTo(0, 0); ////p01.LineTo(50, 100); ////p01.LineTo(100, 0); //////- ////p01.MoveTo(220, 10); ////p01.LineTo(50, 75); ////p01.LineTo(25, 15); ////p01.CloseFigure(); ////p01.Stop(); ////m_pathVxs = p01.Vxs; //var m_pathVxs = svgFont.GetGlyph('K').originalVxs;// typeFaceForLargeA.GetGlyphForCharacter('a'); ////m_pathVxs = MergeFontSubFigures(m_pathVxs); //Affine shape_mtx = Affine.NewMatix(AffinePlan.Translate(150, 100)); //m_pathVxs = shape_mtx.TransformToVxs(m_pathVxs); //var curveFlattener = new CurveFlattener(); //var m_pathVxs2 = curveFlattener.MakeVxs(m_pathVxs); glyph_vx = painter.CreateRenderVx(tempSnap1 = new PixelFarm.Agg.VertexStoreSnap(glyph.flattenVxs)); linearGrBrush2 = new LinearGradientBrush( new PointF(0, 0), Color.Red, new PointF(100, 100), Color.Black); //---------------------- }
protected override void OnInitGLProgram(object sender, EventArgs args) { int max = Math.Max(this.Width, this.Height); canvas2d = PixelFarm.Drawing.GLES2.GLES2Platform.CreateCanvasGL2d(max, max); painter = new GLCanvasPainter(canvas2d, max, max); polygon1 = painter.CreatePolygonRenderVx(new float[] { 50, 200, 250, 200, 125, 350 }); polygon2 = painter.CreatePolygonRenderVx(new float[] { 250, 400, 450, 400, 325, 550 }); }
protected override void OnInitGLProgram(object sender, EventArgs args) { int max = Math.Max(this.Width, this.Height); canvas2d = CreateCanvasGL2d(max, max); painter = new GLCanvasPainter(canvas2d, max, max); stencilPolygon = painter.CreatePolygonRenderVx(new float[] { 20, 20, 100, 20, 60, 80 }); rectPolygon = painter.CreatePolygonRenderVx(new float[] { 5, 5, 100, 5, 100, 100, 5, 100 }); }
protected override void OnInitGLProgram(object sender, EventArgs args) { lionShape = new SpriteShape(); lionShape.ParseLion(); RectD lionBounds = lionShape.Bounds; //------------- aggImage = new ActualImage((int)lionBounds.Width, (int)lionBounds.Height, PixelFarm.Agg.PixelFormat.ARGB32); imgGfx2d = new ImageGraphics2D(aggImage); aggPainter = new AggCanvasPainter(imgGfx2d); DrawLion(aggPainter, lionShape, lionShape.Path.Vxs); //convert affImage to texture glBmp = LoadTexture(aggImage); int max = Math.Max(this.Width, this.Height); canvas2d = PixelFarm.Drawing.GLES2.GLES2Platform.CreateCanvasGL2d(max, max); //------------------------- painter = new GLCanvasPainter(canvas2d, max, max); }
MyMiniGLES2Control InitMiniGLControl(int w, int h) { if (miniGLControl == null) { miniGLControl = new MyMiniGLES2Control(); miniGLControl.Width = w; miniGLControl.Height = h; miniGLControl.ClearColor = PixelFarm.Drawing.Color.Blue; this.Controls.Add(miniGLControl); miniGLControl.SetGLPaintHandler(HandleGLPaint); hh1 = miniGLControl.Handle; miniGLControl.MakeCurrent(); int max = Math.Max(this.Width, this.Height); canvas2d = PixelFarm.Drawing.GLES2.GLES2Platform.CreateCanvasGL2d(max, max); canvasPainter = new GLCanvasPainter(canvas2d, max, max); //create text printer for opengl //---------------------- //1. win gdi based //var printer = new WinGdiFontPrinter(canvas2d, w, h); //canvasPainter.TextPrinter = printer; //---------------------- //2. raw vxs //var printer = new PixelFarm.Drawing.Fonts.VxsTextPrinter(canvasPainter); //canvasPainter.TextPrinter = printer; //---------------------- //3. agg texture based font texture //var printer = new AggFontPrinter(canvasPainter, w, h); //canvasPainter.TextPrinter = printer; //---------------------- //4. texture atlas based font texture //------------ //resolve request font var printer = new GLBmpGlyphTextPrinter(canvasPainter, YourImplementation.BootStrapWinGdi.myFontLoader); canvasPainter.TextPrinter = printer; } return(miniGLControl); }
protected override void OnInitGLProgram(object sender, EventArgs args) { int max = Math.Max(this.Width, this.Height); canvas2d = PixelFarm.Drawing.GLES2.GLES2Platform.CreateCanvasGL2d(max, max); PixelFarm.Drawing.GLES2.GLES2Platform.AddTextureFont("tahoma", "d:\\WImageTest\\a_total.xml", "d:\\WImageTest\\a_total.png"); //temp comment ////------------------------------------------------ hbShapingService = new HarfBuzzShapingService(); hbShapingService.SetAsCurrentImplementation(); painter = new GLCanvasPainter(canvas2d, max, max); painter.CurrentFont = new PixelFarm.Drawing.RequestFont("tahoma", 24); //------------------------------------------------ //string fontName = "tahoma"; //float fontSize = 24; //GlyphImage glypImage = null; //using (var nativeImg = new PixelFarm.Drawing.Imaging.NativeImage("d:\\WImageTest\\a_total.png")) //{ // glypImage = new GlyphImage(nativeImg.Width, nativeImg.Height); // var buffer = new int[nativeImg.Width * nativeImg.Height]; // System.Runtime.InteropServices.Marshal.Copy(nativeImg.GetNativeImageHandle(), buffer, 0, buffer.Length); // glypImage.SetImageBuffer(buffer, true); //} //textureFont = TextureFont.CreateFont(fontName, fontSize, // "d:\\WImageTest\\a_total.xml", // glypImage); ////PixelFarm.Drawing.RequestFont f = new PixelFarm.Drawing.RequestFont(fontName, fontSize); ////canvas2d.TextureFontStore = textureFonts; ////painter.CurrentFont = textureFont; //painter.ActualFont = textureFont; }
protected override void OnInitGLProgram(object sender, EventArgs args) { int max = Math.Max(this.Width, this.Height); canvas2d = CreateCanvasGL2d(max, max); lionShape = new SpriteShape(); lionShape.ParseLion(); //flip this lion vertically before use with openGL PixelFarm.Agg.Transform.Affine aff = PixelFarm.Agg.Transform.Affine.NewMatix( PixelFarm.Agg.Transform.AffinePlan.Scale(1, -1), PixelFarm.Agg.Transform.AffinePlan.Translate(0, 600)); lionVxs = new VertexStore(); aff.TransformToVxs(lionShape.Path.Vxs, lionVxs); painter = new GLCanvasPainter(canvas2d, max, max); //convert lion vxs to renderVx int j = lionShape.NumPaths; int[] pathList = lionShape.PathIndexList; for (int i = 0; i < j; ++i) { lionRenderVxList.Add(painter.CreateRenderVx(new VertexStoreSnap(lionVxs, pathList[i]))); } }
public void InitRootGraphics( RootGraphic rootgfx, ITopWindowEventRoot topWinEventRoot, InnerViewportKind innerViewportKind) { //create a proper bridge**** this.rootgfx = rootgfx; this.topWinEventRoot = topWinEventRoot; this.innerViewportKind = innerViewportKind; switch (innerViewportKind) { case InnerViewportKind.GL: { //temp not suppport //TODO: review here //PixelFarm.Drawing.DrawingGL.CanvasGLPortal.Start(); var bridge = new OpenGL.MyTopWindowBridgeOpenGL(rootgfx, topWinEventRoot); var view = new OpenGL.GpuOpenGLSurfaceView(); view.Width = 800; view.Height = 600; openGLSurfaceView = view; //view.Dock = DockStyle.Fill; this.Controls.Add(view); //--------------------------------------- view.Bind(bridge); this.winBridge = bridge; //--------------------------------------- view.SetGLPaintHandler(HandleGLPaint); hh1 = view.Handle; //force real window handle creation view.MakeCurrent(); //int max = Math.Max(this.Width, this.Height); int max = Math.Max(view.Width, view.Height); canvas2d = PixelFarm.Drawing.GLES2.GLES2Platform.CreateCanvasGL2d(max, max); //--------------- //canvas2d.FlipY = true;// //--------------- canvasPainter = new GLCanvasPainter(canvas2d, max, max); //canvasPainter.SmoothingMode = PixelFarm.Drawing.SmoothingMode.HighQuality; //---------------------- //1. win gdi based //var printer = new WinGdiFontPrinter(canvas2d, view.Width, view.Height); //canvasPainter.TextPrinter = printer; //---------------------- //2. raw vxs //var printer = new PixelFarm.Drawing.Fonts.VxsTextPrinter(canvasPainter); //canvasPainter.TextPrinter = printer; //---------------------- //3. agg texture based font texture //var printer = new AggTextSpanPrinter(canvasPainter, 400, 50); //printer.HintTechnique = Typography.Rendering.HintTechnique.TrueTypeInstruction_VerticalOnly; //printer.UseSubPixelRendering = true; //canvasPainter.TextPrinter = printer; var printer = new GLBmpGlyphTextPrinter(canvasPainter, YourImplementation.BootStrapOpenGLES2.myFontLoader); canvasPainter.TextPrinter = printer; // //var myGLCanvas1 = new PixelFarm.Drawing.GLES2.MyGLCanvas(canvasPainter, 0, 0, view.Width, view.Height); var myGLCanvas1 = new PixelFarm.Drawing.GLES2.MyGLCanvas(canvasPainter, 0, 0, view.Width, view.Height); bridge.SetCanvas(myGLCanvas1); } break; #if __SKIA__ case InnerViewportKind.Skia: { //skiasharp *** var bridge = new Skia.MyTopWindowBridgeSkia(rootgfx, topWinEventRoot); var view = new CpuSurfaceView(); view.Dock = DockStyle.Fill; this.Controls.Add(view); //--------------------------------------- view.Bind(bridge); this.winBridge = bridge; } break; #endif case InnerViewportKind.GdiPlus: default: { var bridge = new GdiPlus.MyTopWindowBridgeGdiPlus(rootgfx, topWinEventRoot); var view = new CpuSurfaceView(); view.Dock = DockStyle.Fill; this.Controls.Add(view); //--------------------------------------- view.Bind(bridge); this.winBridge = bridge; } break; } }
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(); }