public GLWindow() : base(1280, 720, new GraphicsMode(new ColorFormat(32), 0, 8, 0, ColorFormat.Empty), "Line Rider: Advanced", GameWindowFlags.Default, DisplayDevice.Default) { if (_instance != null) { throw new InvalidOperationException(); } SafeFrameBuffer.Initialize(); _instance = this; StaticRenderer.InitializeCircles(); _penciltool = new PencilTool(); _linetool = new LineTool(); _erasertool = new EraserTool(); _handtool = new HandTool(); _lineadjusttool = new LineAdjustTool(); SelectedTool = _penciltool; Track = new GLTrack(); VSync = VSyncMode.Off; Context.ErrorChecking = true; WindowBorder = WindowBorder.Resizable; RenderFrame += (o, e) => { Render(); }; UpdateFrame += (o, e) => { GameUpdate(); }; GameService.Initialize(this); }
public static void LoadModels() { BodyTexture = StaticRenderer.LoadTexture(GameResources.body_img); BodyDeadTexture = StaticRenderer.LoadTexture(GameResources.bodydead_img); SledTexture = StaticRenderer.LoadTexture(GameResources.sled_img); BrokenSledTexture = StaticRenderer.LoadTexture(GameResources.brokensled_img); ArmTexture = StaticRenderer.LoadTexture(GameResources.arm_img); LegTexture = StaticRenderer.LoadTexture(GameResources.leg_img); }
public static void LoadModels(Bitmap body_img, Bitmap bodydead_img, Bitmap sled_img, Bitmap brokensled_img, Bitmap arm_img, Bitmap leg_img) { BodyTexture = StaticRenderer.LoadTexture(body_img); BodyDeadTexture = StaticRenderer.LoadTexture(bodydead_img); SledTexture = StaticRenderer.LoadTexture(sled_img); BrokenSledTexture = StaticRenderer.LoadTexture(brokensled_img); ArmTexture = StaticRenderer.LoadTexture(arm_img); LegTexture = StaticRenderer.LoadTexture(leg_img); }
public static void LoadModels(string folder) { if (folder.Equals("*default*")) { LoadModels(); return; } string riderLocation = Program.UserDirectory + "\\Riders\\" + folder + "\\"; BodyTexture = StaticRenderer.LoadTexture(new Bitmap(riderLocation + "body.png")); BodyDeadTexture = StaticRenderer.LoadTexture(new Bitmap(riderLocation + "bodydead.png")); SledTexture = StaticRenderer.LoadTexture(new Bitmap(riderLocation + "sled.png")); BrokenSledTexture = StaticRenderer.LoadTexture(new Bitmap(riderLocation + "brokensled.png")); ArmTexture = StaticRenderer.LoadTexture(new Bitmap(riderLocation + "arm.png")); LegTexture = StaticRenderer.LoadTexture(new Bitmap(riderLocation + "leg.png")); }
public void Render(float blend = 1) { bool shouldrender = _invalidated || Canvas.NeedsRedraw || (Track.PlaybackMode) || Loading || Track.NeedsDraw || SelectedTool.NeedsRender; _invalidated = false; if (shouldrender) { BeginOrtho(); var slider = Canvas.Scrubber; if (blend == 1 && Settings.SmoothPlayback && Track.Playing && !slider.Held) { blend = Math.Min(1, (float)Scheduler.ElapsedPercent); if (ReversePlayback) { blend = 1 - blend; } Track.Camera.BeginFrame(blend, Track.Zoom); } else { Track.Camera.BeginFrame(blend, Track.Zoom); } GL.ClearColor(Settings.NightMode ? Constants.ColorNightMode : (Settings.WhiteBG ? Constants.ColorWhite : Constants.ColorOffwhite)); MSAABuffer.Use(RenderSize.Width, RenderSize.Height); GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); GL.Clear(ClearBufferMask.ColorBufferBit); GL.Enable(EnableCap.Blend); GL.Disable(EnableCap.Lighting); #if debuggrid if (this.Keyboard.GetState().IsKeyDown(Key.C)) { GameRenderer.DbgDrawGrid(); } #endif Track.Render(blend); #if debugcamera if (this.Keyboard.GetState().IsKeyDown(Key.C)) { GameRenderer.DbgDrawCamera(); } #endif SelectedTool.Render(); Canvas.RenderCanvas(); MSAABuffer.End(); if (Settings.NightMode) { StaticRenderer.RenderRect(new FloatRect(0, 0, RenderSize.Width, RenderSize.Height), Color.FromArgb(40, 0, 0, 0)); } SwapBuffers(); //there are machines and cases where a refresh may not hit the screen without calling glfinish... GL.Finish(); var seconds = Track.FramerateWatch.Elapsed.TotalSeconds; Track.FramerateCounter.AddFrame(seconds); Track.FramerateWatch.Restart(); } if (!Track.Playing && !Canvas.NeedsRedraw && !Track.NeedsDraw && !SelectedTool.Active)//if nothing is waiting on us we can let the os breathe { Thread.Sleep(10); } }
public void Render() { if (Canvas.NeedsRedraw || (Track.Animating && AllowTrackRender) || Loading || Track.RequiresUpdate) { BeginOrtho(); GL.ClearColor(Settings.Default.NightMode ? ColorNightMode : (Settings.Default.WhiteBG ? ColorWhite : ColorOffwhite)); GL.Clear(ClearBufferMask.ColorBufferBit); MSAABuffer.Use(RenderSize.Width, RenderSize.Height); AllowTrackRender = false; GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); GL.Clear(ClearBufferMask.ColorBufferBit); GL.Enable(EnableCap.Blend); var seconds = Track.Fpswatch.Elapsed.TotalSeconds; Track.FpsCounter.AddFrame(seconds); Track.Fpswatch.Restart(); #if debuggrid int sqsize = 128; GL.PushMatrix(); GL.Scale(Track.Zoom, Track.Zoom, 0); GL.Translate(new Vector3d(ScreenTranslation)); GL.Begin(PrimitiveType.Quads); for (var x = -sqsize; x < (RenderSize.Width / Track.Zoom); x += sqsize) { for (var y = -sqsize; y < (RenderSize.Height / Track.Zoom); y += sqsize) { var yv = new Vector2d(x + (ScreenPosition.X - (ScreenPosition.X % sqsize)), y + (ScreenPosition.Y - (ScreenPosition.Y % sqsize))); if (Track.FastGridCheck(yv.X, yv.Y)) { GL.Color3(Color.Yellow); GL.Vertex2(yv); yv.Y += sqsize; GL.Vertex2(yv); yv.X += sqsize; GL.Vertex2(yv); yv.Y -= sqsize; GL.Vertex2(yv); } } } GL.End(); GL.Begin(PrimitiveType.Lines); GL.Color3(Color.Red); for (var x = -sqsize; x < (RenderSize.Width / Track.Zoom); x += sqsize) { var yv = new Vector2d(x + (ScreenPosition.X - (ScreenPosition.X % sqsize)), ScreenPosition.Y); GL.Vertex2(yv); yv.Y += RenderSize.Height / Track.Zoom; GL.Vertex2(yv); } for (var y = -sqsize; y < (RenderSize.Height / Track.Zoom); y += sqsize) { var yv = new Vector2d(ScreenPosition.X, y + (ScreenPosition.Y - (ScreenPosition.Y % sqsize))); GL.Vertex2(yv); yv.X += RenderSize.Width / Track.Zoom; GL.Vertex2(yv); } GL.End(); GL.PopMatrix(); #endif Track.Render(); Canvas.RenderCanvas(); SelectedTool.Render(); MSAABuffer.End(); if (Settings.Default.NightMode) { StaticRenderer.RenderRect(new FloatRect(0, 0, RenderSize.Width, RenderSize.Height), Color.FromArgb(40, 0, 0, 0)); } if (!TrackRecorder.Recording) { SwapBuffers(); } } LimitFPS(); }
internal RenderedComponent(StaticRenderer renderer) { this.renderer = renderer; container = new(this.renderer); }
public ContainerComponent(StaticRenderer renderer) { this.renderer = renderer; id = renderer.AttachContainer(this); }
// Use this for initialization protected override void Initialize() { PointRenderer = new StaticRenderer(this, meshConfiguration); }
public Context(StaticRenderer renderer, TextWriter writer) { Renderer = renderer; this.writer = writer; }
/// <summary> /// Process mesh internals<para/> /// Обработка данных меша /// </summary> public void Process(bool needed) { if (needed) { if (GroupModel != null) { if (GroupTextures != null) { if (GroupModel.State == Model.ReadyState.Complete && GroupTextures.State == TextureDictionary.ReadyState.Complete) { // Surface is ready to render // Поверхность готова к отрисовке Ready = true; Model.SubMesh[] subs = GroupModel.GetAllSubMeshes(); Renderers = new StaticRenderer[subs.Length]; Coords.Position = Coords.Position; for (int i = 0; i < Renderers.Length; i++) { Renderers[i] = new StaticRenderer() { BaseMatrix = Coords.Matrix, SubmeshMatrix = subs[i].Parent.Matrix, SubMesh = subs[i], Textures = GroupTextures, Fading = false, FadingDelta = 1 }; } } else { // Check for model state // Проверка состояния модели if (GroupModel.State != Model.ReadyState.Complete) { if (GroupModel.File.State == Files.RenderWareFile.LoadState.Complete) { if (!ModelManager.IsProcessing(GroupModel)) { ModelManager.ModelProcessQueue.Enqueue(GroupModel); } } } // Check for texture dictionary state // Проверка состояния архива текстур if (GroupTextures.State != TextureDictionary.ReadyState.Complete) { if (GroupTextures.File.State == Files.RenderWareFile.LoadState.Complete) { if (!TextureManager.IsProcessing(GroupTextures)) { TextureManager.TextureProcessQueue.Enqueue(GroupTextures); } } } } } else { // Texture not found - get it // Текстура не найдена - получаем её string tname = ObjectManager.Definitions[Definition.ID].TexDictionary; if (TextureManager.Cached.ContainsKey(tname)) { GroupTextures = TextureManager.Cached[tname]; } else { TextureFile tf = null; if (TextureManager.CachedFiles.ContainsKey(tname)) { tf = TextureManager.CachedFiles[tname]; } else { tf = new TextureFile(ArchiveManager.Get(tname + ".txd"), false); TextureManager.CachedFiles.TryAdd(tname, tf); TextureManager.TextureFileProcessQueue.Enqueue(tf); } GroupTextures = new TextureDictionary(tf); TextureManager.Cached.TryAdd(tname, GroupTextures); } GroupTextures.UseCount++; } } else { // Model not found - get it // Модель не найдена - получаем её string mname = ObjectManager.Definitions[Definition.ID].ModelName; if (ModelManager.Cached.ContainsKey(mname)) { GroupModel = ModelManager.Cached[mname]; } else { ModelFile mf = null; if (ModelManager.CachedFiles.ContainsKey(mname)) { mf = ModelManager.CachedFiles[mname]; } else { mf = new ModelFile(ArchiveManager.Get(mname + ".dff"), false); ModelManager.CachedFiles.TryAdd(mname, mf); ModelManager.ModelFileProcessQueue.Enqueue(mf); } GroupModel = new Model(mf); ModelManager.Cached.TryAdd(mname, GroupModel); } GroupModel.UseCount++; } } else { // Cleaning all the usings // Очистка использований if (GroupModel != null) { if (!GroupModel.Important) { GroupModel.UseCount--; } GroupModel = null; } if (GroupTextures != null) { if (!GroupTextures.Important) { GroupTextures.UseCount--; } GroupTextures = null; } if (Renderers != null) { Renderers = null; } Ready = false; } }