Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using OpenTK;
- using OpenTK.Platform.Android;
- using Android.Views;
- using Android.Content;
- using Android.Util;
- using Android.Runtime;
- using Noesis;
- using System.IO;
- namespace App1
- {
- public class AndroidXamlProvider : XamlProvider
- {
- public override Stream LoadXaml(string filename)
- {
- var memory = new MemoryStream();
- using (var res = Android.App.Application.Context.Assets.Open(filename))
- {
- res.CopyTo(memory);
- memory.Position = 0;
- }
- return memory;
- }
- }
- public class AndroidFontProvider : FontProvider
- {
- public override void ScanFolder(string folder)
- {
- var strs = Android.App.Application.Context.Assets.List(folder);
- foreach(string s in strs)
- {
- RegisterFont(folder, s);
- }
- }
- public override Stream OpenFont(string folder, string id)
- {
- var memory = new MemoryStream();
- using (var res = Android.App.Application.Context.Assets.Open(folder + "/" + id))
- {
- res.CopyTo(memory); // ReadByte(); //Read(buf, 0, (int)res.Length);
- memory.Position = 0;
- }
- return memory;
- }
- }
- class GLView1 : AndroidGameView
- {
- static Noesis.View _view = null;
- static Noesis.Renderer _renderer = null;
- static bool _eventsAttached = false;
- bool inited = false;
- public GLView1(Context context) : base(context)
- {
- AutoSetContextOnRenderFrame = true;
- RenderOnUIThread = true;
- }
- protected override void OnLoad(System.EventArgs e)
- {
- base.OnLoad(e);
- Run();
- }
- public override bool OnTouchEvent(MotionEvent e)
- {
- base.OnTouchEvent(e);
- var e_x = (int)e.GetX();
- var e_y = (int)e.GetY();
- //this doesn't really work, but sometimes it does
- if (e.Action == MotionEventActions.Down)
- _view.TouchDown(e_x, e_y, 0); //I don't know what touch id is, sorry
- if (e.Action == MotionEventActions.Move)
- _view.TouchMove(e_x, e_y, 0);
- if (e.Action == MotionEventActions.Up)
- _view.TouchUp(e_x, e_y, 0);
- return true;
- }
- protected override void CreateFrameBuffer()
- {
- ContextRenderingApi = OpenTK.Graphics.GLVersion.ES2;
- // the default GraphicsMode that is set consists of (16, 16, 0, 0, 2, false)
- try
- {
- Android.Util.Log.Verbose("GLCube", "Loading with default settings");
- base.CreateFrameBuffer();
- return;
- }
- catch (Exception ex)
- {
- Android.Util.Log.Verbose("GLCube", $"{ex}");
- }
- try
- {
- Android.Util.Log.Verbose("GLCube", "Loading with custom Android settings (low mode)");
- GraphicsMode = new AndroidGraphicsMode(0, 0, 0, 0, 0, false);
- base.CreateFrameBuffer();
- return;
- }
- catch (Exception ex)
- {
- Android.Util.Log.Verbose("GLCube", $"{ex}");
- }
- throw new Exception("Can't load egl, aborting");
- }
- DateTime start = DateTime.Now;
- protected override void OnRenderFrame(FrameEventArgs e)
- {
- base.OnRenderFrame(e);
- if(!inited)
- {
- Noesis.GUI.Init();
- Noesis.GUI.SetResourceProvider(new Provider() { XamlProvider = new AndroidXamlProvider(), FontProvider = new AndroidFontProvider() });
- // Global theme
- {
- var theme = (Noesis.ResourceDictionary)Noesis.GUI.LoadXaml("NoesisStyle.xaml");
- Noesis.GUI.SetTheme(theme);
- }
- // Data loading
- {
- var content = (Noesis.Grid)Noesis.GUI.LoadXaml("TextBox.xaml");
- _view = Noesis.GUI.CreateView(content);
- IWindowManager windowManager = Context.GetSystemService(Context.WindowService).JavaCast<IWindowManager>();
- var device = windowManager.DefaultDisplay;
- Android.Graphics.Point size = new Android.Graphics.Point();
- device.GetSize(size);
- _view.SetSize(size.X, size.Y);
- _renderer = _view.Renderer;
- _renderer.InitGL(new Noesis.VGOptions() { });
- }
- inited = true;
- }
- _view.Update((DateTime.Now - start).TotalSeconds);
- _renderer.UpdateRenderTree();
- if (_renderer.NeedsOffscreen())
- {
- _renderer.RenderOffscreen();
- }
- _renderer.Render();
- SwapBuffers();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement