public void LoadExample(DemoBase demoBase) { _gfxViewRoot.MakeCurrent(); GLPainterCore pcx = _gfxViewRoot.GLPainterCore(); GLPainter glPainter = _gfxViewRoot.GetGLPainter(); pcx.SmoothMode = SmoothMode.Smooth;//set anti-alias //create text printer for opengl demoBase.Init(); _demoBase = demoBase; _demoUI = new DemoUI(demoBase, _myWidth, _myHeight); _demoUI.SetCanvasPainter(pcx, glPainter); //----------------------------------------------- //demoBase.SetEssentialGLHandlers( // () => _glControl.SwapBuffers(), // () => _glControl.GetEglDisplay(), // () => _glControl.GetEglSurface() //); //----------------------------------------------- DemoBase.InvokeGLPainterReady(demoBase, pcx, glPainter); //Add to RenderTree _rootGfx.AddChild(_demoUI.GetPrimaryRenderElement()); }
public void LoadDemo(Mini.DemoBase demo) { _demo = demo; demo.Init(); int max = Math.Max(_w, _h); demo.Width = _w; demo.Height = _h; GLPainterCore pcx = null; GLPainter canvasPainter = null; //if demo not create canvas and painter //the we create for it //int max = Math.Max(w, h); //canvas2d = PixelFarm.Drawing.GLES2.GLES2Platform.CreateCanvasGL2d(max, max); //canvasPainter = new GLCanvasPainter(canvas2d, max, max); //canvas2d = PixelFarm.Drawing.GLES2.GLES2Platform.CreateCanvasGL2d(w, h); pcx = GLPainterCore.Create(max, max, _w, _h, true); pcx.OriginKind = PixelFarm.Drawing.RenderSurfaceOriginKind.LeftTop; canvasPainter = new GLPainter(); canvasPainter.BindToPainterCore(pcx); //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; _getTextPrinterDel?.Invoke(canvasPainter); demo.SetEssentialGLHandlers( null, () => IntPtr.Zero, () => IntPtr.Zero); DemoBase.InvokeGLPainterReady(demo, pcx, canvasPainter); DemoBase.InvokePainterReady(demo, canvasPainter); }
protected override void OnGLPainterReady(GLPainter painter) { _pcx = painter.Core; _painter = painter; UserText = ""; #if DEBUG ShowGlyphTexture = ShowMarkers = true; #endif }
public void BindToPainterCore(GLPainterCore pcx) { if (_pcx == pcx) { return; } // _pcx = pcx; _width = pcx.CanvasWidth; _height = pcx.CanvasHeight; _clipBox = new Rectangle(0, 0, _width, _height); }
protected virtual bool HasSomeExtension => false;//class that override public void CreatePrimaryRenderElement(GLPainterCore pcx, GLPainter painter, RootGraphic rootgfx) { if (_canvasRenderE == null) { var glBmp = new GLBitmap(_memBitmapBinder); glBmp.IsYFlipped = false; // var glRenderElem = new CpuBlitGLCanvasRenderElement(_width, _height, glBmp); glRenderElem.SetController(this); //connect to event system glRenderElem.SetOwnerDemoUI(this); _canvasRenderE = glRenderElem; } }
protected override void OnGLPainterReady(GLPainter painter) { _pcx = painter.Core; _painter = painter; _glBmp = DemoHelper.LoadTexture(RootDemoPath.Path + @"\logo-dark.jpg"); _glBmp2 = DemoHelper.LoadTexture(RootDemoPath.Path + @"\lion1_v2.png"); _textureBrush = new TextureBrush(_glBmp); _textureBrush2 = new TextureBrush(_glBmp2); _linearGradient = new LinearGradientBrush( new PointF(10, 50), new PointF(10, 100), Color.Red, Color.White); }
protected override void OnGLPainterReady(GLPainter painter) { //example; //test1_atlas=> atlas filename //the AtlasImageBinder will be resolved for actual image inside GLPainter's _bmpAtlasPainter. //it use StorageService.Provider. //----- _chk_checked = new AtlasImageBinder("test1_atlas", "\\chk_checked.png"); _chk_unchecked = new AtlasImageBinder("test1_atlas", "\\chk_unchecked.png"); _pcx = painter.Core; _painter = painter; // //string atlasInfoFile = "test1_atlas"; //see SampleFontAtlasBuilder below //_bmpAtlasPainter.ChangeBitmapAtlas(atlasInfoFile); }
protected override void OnGLPainterReady(GLPainter painter) { _pcx = painter.Core; _painter = painter; }
public void SetCanvasPainter(GLPainterCore pcx, GLPainter painter) { _pcx = pcx; _painter = painter; }
public void InitRootGraphics(RootGraphic rootgfx, ITopWindowEventRoot topWinEventRoot, InnerViewportKind innerViewportKind, IGpuOpenGLSurfaceView nativeWindow, AbstractTopWindowBridge bridge) { //create a proper bridge**** _rootgfx = rootgfx; _topWinEventRoot = topWinEventRoot; _innerViewportKind = innerViewportKind; _viewport = nativeWindow; _winBridge = bridge; nativeWindow.SetSize(rootgfx.Width, rootgfx.Height); switch (innerViewportKind) { case InnerViewportKind.GdiPlusOnGLES: case InnerViewportKind.AggOnGLES: case InnerViewportKind.GLES: { _winBridge.OnHostControlLoaded(); try { nativeWindow.MakeCurrent(); } catch (Exception ex) { } int w = nativeWindow.Width; int h = nativeWindow.Height; int max = Math.Max(w, h); _pcx = PixelFarm.DrawingGL.GLPainterCore.Create(max, max, w, h, true); _glPainter = new GLPainter(); _glPainter.BindToPainterCore(_pcx); if (PixelFarm.Drawing.GLES2.GLES2Platform.TextService != null) { var printer = new GLBitmapGlyphTextPrinter(_glPainter, PixelFarm.Drawing.GLES2.GLES2Platform.TextService); _glPainter.TextPrinter = printer; } else { //warn....! } //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 //_glPainter.TextPrinter = new CpuBlitTextSpanPrinter2(_glPainter, 400, 50, PixelFarm.Drawing.GLES2.GLES2Platform.TextService); //TODO: review this again! //3 var drawboard = new PixelFarm.Drawing.GLES2.MyGLDrawBoard(_glPainter); _glPainter.SetDrawboard(drawboard); _drawboard = drawboard; //{ //in mixed mode //GDI+ on GLES, Agg on GLES we provide a software rendering layer too PixelFarm.Drawing.DrawBoard cpuDrawBoard = null; // CreateSoftwareDrawBoard(view.Width, view.Height, innerViewportKind); drawboard.SetCpuBlitDrawBoardCreator(() => cpuDrawBoard ?? (cpuDrawBoard = CreateSoftwareDrawBoard(w, h, innerViewportKind))); //} ((OpenGL.MyTopWindowBridgeOpenGL)_winBridge).SetCanvas(drawboard); } break; } }
public void LoadExample(DemoBase demoBase) { _nativeWindow.MakeCurrent(); _demoBase = demoBase; demoBase.Init(); if (WithGdiPlusDrawBoard) { _bridgeUI = new GdiOnGLESUIElement(_myWidth, _myHeight); } else { //pure agg's cpu blit _bridgeUI = new CpuBlitGLESUIElement(_myWidth, _myHeight); } // _bridgeUI.SetUpdateCpuBlitSurfaceDelegate((p, updateArea) => _demoBase.Draw(p)); DemoBase.InvokePainterReady(_demoBase, _bridgeUI.GetAggPainter()); // //use existing GLRenderSurface and GLPainter //see=>UISurfaceViewportControl.InitRootGraphics() GLPainterCore pcx = _surfaceViewport.GLPainterCore(); GLPainter glPainter = _surfaceViewport.GetGLPainter(); _bridgeUI.CreatePrimaryRenderElement(pcx, glPainter, _rootGfx); //----------------------------------------------- demoBase.SetEssentialGLHandlers( _nativeWindow.SwapBuffers, _nativeWindow.GetEglDisplay, _nativeWindow.GetEglSurface ); //----------------------------------------------- DemoBase.InvokeGLPainterReady(demoBase, pcx, glPainter); //Add to RenderTree _rootGfx.AddChild(_bridgeUI.GetPrimaryRenderElement()); //----------------------------------------------- //*** GeneralEventListener genEvListener = new GeneralEventListener(); genEvListener.MouseDown += (s, e) => { _demoBase.MouseDown(e.X, e.Y, e.Buttons == UIMouseButtons.Right); _bridgeUI.InvalidateGraphics(); }; genEvListener.MouseMove += (s, e) => { if (e.IsDragging) { _bridgeUI.InvalidateGraphics(); _demoBase.MouseDrag(e.X, e.Y); _bridgeUI.InvalidateGraphics(); } }; genEvListener.MouseUp += (s, e) => { _demoBase.MouseUp(e.X, e.Y); }; //----------------------------------------------- _bridgeUI.AttachExternalEventListener(genEvListener); }
/// <summary> /// use vertex buffer object /// </summary> public GLBitmapGlyphTextPrinter(GLPainter painter, OpenFontTextService textServices) { //create text printer for use with canvas painter _painter = painter; _pcx = painter.Core; _txtClient = textServices.CreateNewServiceClient(); //_currentTextureKind = TextureKind.Msdf; //_currentTextureKind = TextureKind.StencilGreyScale; _myGLBitmapFontMx = new MySimpleGLBitmapFontManager(textServices); //-------- //load preview of pre-built texture font //temp fix, TODO: review this again string[] maybeTextureInfoFiles = Directory.GetFiles(Directory.GetCurrentDirectory(), "*.tx_info"); if (maybeTextureInfoFiles.Length > 0) { for (int i = 0; i < maybeTextureInfoFiles.Length; ++i) { //try read using (FileStream fs = new FileStream(maybeTextureInfoFiles[i], FileMode.Open)) { try { _myGLBitmapFontMx.LoadBitmapAtlasPreview(fs); } catch (Exception ex) { } } } } //LoadFontAtlas("tahoma_set1.multisize_fontAtlas", "tahoma_set1.multisize_fontAtlas.png"); //test textures... //GlyphPosPixelSnapX = GlyphPosPixelSnapKind.Integer; //GlyphPosPixelSnapY = GlyphPosPixelSnapKind.Integer; //** //ChangeFont(painter.CurrentFont); // //TextDrawingTechnique = GlyphTexturePrinterDrawingTechnique.LcdSubPixelRendering; //default TextDrawingTechnique = GlyphTexturePrinterDrawingTechnique.Stencil; //default UseVBO = true; TextBaseline = PixelFarm.Drawing.TextBaseline.Top; //TextBaseline = TextBaseline.Alphabetic; //TextBaseline = TextBaseline.Bottom; //TODO: temp fix, //... var myAlternativeTypefaceSelector = new AlternativeTypefaceSelector(); { var preferTypefaces = new Typography.FontCollections.PreferredTypefaceList(); preferTypefaces.AddTypefaceName("Source Sans Pro"); preferTypefaces.AddTypefaceName("Sarabun"); myAlternativeTypefaceSelector.SetPreferredTypefaces( new[] { Typography.TextBreak.Unicode13RangeInfoList.C0_Controls_and_Basic_Latin, Typography.TextBreak.Unicode13RangeInfoList.C1_Controls_and_Latin_1_Supplement, Typography.TextBreak.Unicode13RangeInfoList.Latin_Extended_A, Typography.TextBreak.Unicode13RangeInfoList.Latin_Extended_B, }, preferTypefaces); } { var preferTypefaces = new Typography.FontCollections.PreferredTypefaceList(); preferTypefaces.AddTypefaceName("Twitter Color Emoji"); myAlternativeTypefaceSelector.SetPerferredEmoji(preferTypefaces); } AlternativeTypefaceSelector = myAlternativeTypefaceSelector; }
protected override void OnGLPainterReady(GLPainter painter) { _pcx = painter.Core; _painter = painter; SelectedGlyphImage = T107_2_GlyphImages.Img1; }