Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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);
            }
        }
Esempio n. 6
0
        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();
        }
Esempio n. 7
0
 internal RenderedComponent(StaticRenderer renderer)
 {
     this.renderer = renderer;
     container     = new(this.renderer);
 }
Esempio n. 8
0
	public ContainerComponent(StaticRenderer renderer)
	{
		this.renderer = renderer;
        
		id = renderer.AttachContainer(this);
	}
 // Use this for initialization
 protected override void Initialize()
 {
     PointRenderer = new StaticRenderer(this, meshConfiguration);
 }
Esempio n. 10
0
        public Context(StaticRenderer renderer, TextWriter writer)
        {
            Renderer = renderer;

            this.writer = writer;
        }
Esempio n. 11
0
 /// <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;
     }
 }