public void LoadGLControl(OpenTK.MyGLControl glControl) { //---------------------- this.glControl = glControl; glControl.SetGLPaintHandler(HandleGLPaint); hh1 = glControl.Handle; //ensure that contrl handler is created glControl.MakeCurrent(); }
void SetUpGLSurface(OpenTK.MyGLControl glControl) { if (glControl == null) { return; } //TODO: review here //Temp: _glControl = glControl; _glControl.SetGLPaintHandler(null); // IntPtr hh1 = _glControl.Handle; //ensure that contrl handler is created _glControl.MakeCurrent(); if (_vw.InnerViewportKind == InnerViewportKind.GdiPlusOnGLES) { _bridgeUI = new GdiOnGLESUIElement(glControl.Width, glControl.Height); } else { //pure agg's cpu blit _bridgeUI = new CpuBlitGLESUIElement(glControl.Width, glControl.Height); } //optional*** //_bridgeUI.SetUpdateCpuBlitSurfaceDelegate((p, area) => //{ // _client.DrawToThisCanvas(_bridgeUI.GetDrawBoard(), area); //}); GLPainterContext pcx = _vw.GetGLRenderSurface(); GLPainter glPainter = _vw.GetGLPainter(); RootGraphic rootGfx = _vw.RootGfx; _bridgeUI.CreatePrimaryRenderElement(pcx, glPainter, rootGfx); //***** RenderBoxBase renderE = (RenderBoxBase)_bridgeUI.GetPrimaryRenderElement(rootGfx); rootGfx.AddChild(renderE); rootGfx.SetPrimaryContainerElement(renderE); //*** }
public void BindSurface(LayoutFarm.UI.UISurfaceViewportControl surfaceViewport) { _surfaceViewport = surfaceViewport; _rootGfx = surfaceViewport.RootGfx; //---------------------- _glControl = surfaceViewport.GetOpenTKControl(); _myWidth = _glControl.Width; _myHeight = _glControl.Height; IntPtr hh1 = _glControl.Handle; //ensure that contrl handler is created _glControl.MakeCurrent(); }
public void LoadExample(DemoBase demoBase) { _glControl.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() GLPainterContext pcx = _surfaceViewport.GetGLRenderSurface(); GLPainter glPainter = _surfaceViewport.GetGLPainter(); _bridgeUI.CreatePrimaryRenderElement(pcx, glPainter, _rootGfx); //----------------------------------------------- demoBase.SetEssentialGLHandlers( () => _glControl.SwapBuffers(), () => _glControl.GetEglDisplay(), () => _glControl.GetEglSurface() ); //----------------------------------------------- DemoBase.InvokeGLPainterReady(demoBase, pcx, glPainter); //Add to RenderTree _rootGfx.AddChild(_bridgeUI.GetPrimaryRenderElement(_rootGfx)); //----------------------------------------------- //*** GeneralEventListener genEvListener = new GeneralEventListener(); genEvListener.MouseDown += e => { _demoBase.MouseDown(e.X, e.Y, e.Button == UIMouseButtons.Right); _bridgeUI.InvalidateGraphics(); }; genEvListener.MouseMove += e => { if (e.IsDragging) { _bridgeUI.InvalidateGraphics(); _demoBase.MouseDrag(e.X, e.Y); _bridgeUI.InvalidateGraphics(); } }; genEvListener.MouseUp += e => { _demoBase.MouseUp(e.X, e.Y); }; //----------------------------------------------- _bridgeUI.AttachExternalEventListener(genEvListener); }
public void LoadSample(DemoBase demobase) { this.demobase = demobase; //1. //note:when we init, //no glcanvas/ painter are created demobase.Init(); //----------------------------------------------- //2. check if demo will create canvas/painter context //or let this GLDemoContext create for it hh1 = glControl.Handle; //ensure that contrl handler is created glControl.MakeCurrent(); demobase.BuildCustomDemoGLContext(out this._glsx, out this.canvasPainter); // if (this._glsx == null) { //if demo not create canvas and painter //the we create for it int max = Math.Max(glControl.Width, glControl.Height); _glsx = PixelFarm.Drawing.GLES2.GLES2Platform.CreateGLRenderSurface(max, max, glControl.Width, glControl.Height); _glsx.SmoothMode = SmoothMode.Smooth;//set anti-alias canvasPainter = new GLPainter(_glsx); //create text printer for opengl //---------------------- //1. win gdi based //var printer = new WinGdiFontPrinter(_glsx, glControl.Width, glControl.Height); //canvasPainter.TextPrinter = printer; //---------------------- //2. raw vxs //var openFontStore = new Typography.TextServices.OpenFontStore(); //var printer = new PixelFarm.Drawing.Fonts.VxsTextPrinter(canvasPainter,openFontStore); //canvasPainter.TextPrinter = printer; //---------------------- //3. agg texture based font texture //var printer = new AggTextSpanPrinter(canvasPainter, glControl.Width, 30); //canvasPainter.TextPrinter = printer; //---------------------- //4. texture atlas based font texture //------------ //resolve request font var printer = new GLBitmapGlyphTextPrinter(canvasPainter, PixelFarm.Drawing.GLES2.GLES2Platform.TextService); canvasPainter.TextPrinter = printer; //var openFontStore = new Typography.TextServices.OpenFontStore(); //var printer = new GLBmpGlyphTextPrinter(canvasPainter, openFontStore); //canvasPainter.TextPrinter = printer; } //----------------------------------------------- demobase.SetEssentialGLHandlers( () => this.glControl.SwapBuffers(), () => this.glControl.GetEglDisplay(), () => this.glControl.GetEglSurface() ); //----------------------------------------------- this.glControl.SetGLPaintHandler((s, e) => { demobase.InvokeGLPaint(); }); DemoBase.InvokeGLContextReady(demobase, this._glsx, this.canvasPainter); DemoBase.InvokePainterReady(demobase, this.canvasPainter); }