public void Draw(PrimitivesRenderer2D primitivesRenderer, float depth, Matrix matrix, Color color)
        {
            TexturedBatch2D texturedBatch2D = primitivesRenderer.TexturedBatch(m_texture, useAlphaTest: false, 0, DepthStencilState.None, null, null, SamplerState.PointClamp);
            int             count           = texturedBatch2D.TriangleVertices.Count;

            foreach (Particle particle in m_particles)
            {
                if (particle.Active)
                {
                    DrawParticle(texturedBatch2D, particle, depth, color);
                }
            }
            texturedBatch2D.TransformTriangles(matrix, count);
        }
Exemplo n.º 2
0
 public void Flush(bool clearAfterFlush = true)
 {
     Flush(PrimitivesRenderer2D.ViewportMatrix(), clearAfterFlush);
 }
Exemplo n.º 3
0
 public static void Capture(int width, int height, string filename)
 {
     if (GameManager.Project != null)
     {
         using (RenderTarget2D renderTarget2D = new RenderTarget2D(width, height, 1, ColorFormat.Rgba8888, DepthFormat.Depth24Stencil8))
         {
             RenderTarget2D renderTarget = Display.RenderTarget;
             Dictionary <ComponentGui, bool> dictionary = new Dictionary <ComponentGui, bool>();
             ResolutionMode resolutionMode = ResolutionMode.High;
             try
             {
                 if (!SettingsManager.ShowGuiInScreenshots)
                 {
                     foreach (ComponentPlayer componentPlayer in GameManager.Project.FindSubsystem <SubsystemPlayers>(throwOnError: true).ComponentPlayers)
                     {
                         dictionary[componentPlayer.ComponentGui] = componentPlayer.ComponentGui.ControlsContainerWidget.IsVisible;
                         componentPlayer.ComponentGui.ControlsContainerWidget.IsVisible = false;
                     }
                 }
                 resolutionMode = SettingsManager.ResolutionMode;
                 SettingsManager.ResolutionMode = ResolutionMode.High;
                 Display.RenderTarget           = renderTarget2D;
                 ScreensManager.Draw();
                 if (SettingsManager.ShowLogoInScreenshots)
                 {
                     PrimitivesRenderer2D primitivesRenderer2D = new PrimitivesRenderer2D();
                     Texture2D            texture2D            = ContentManager.Get <Texture2D>("Textures/Gui/ScreenCaptureOverlay");
                     Vector2 vector = new Vector2((width - texture2D.Width) / 2, 0f);
                     Vector2 corner = vector + new Vector2(texture2D.Width, texture2D.Height);
                     primitivesRenderer2D.TexturedBatch(texture2D, useAlphaTest: false, 0, DepthStencilState.None).QueueQuad(vector, corner, 0f, new Vector2(0f, 0f), new Vector2(1f, 1f), Engine.Color.White);
                     primitivesRenderer2D.Flush();
                 }
             }
             finally
             {
                 Display.RenderTarget = renderTarget;
                 foreach (KeyValuePair <ComponentGui, bool> item in dictionary)
                 {
                     item.Key.ControlsContainerWidget.IsVisible = item.Value;
                 }
                 SettingsManager.ResolutionMode = resolutionMode;
             }
             if (!Storage.DirectoryExists(ModsManager.baseDir + "/ScreenCapture"))
             {
                 Storage.CreateDirectory(ModsManager.baseDir + "/ScreenCapture");
             }
             string path = Storage.CombinePaths(Storage.GetSystemPath(ModsManager.baseDir + "/ScreenCapture"), filename);
             using (FileStream stream = new FileStream(path, FileMode.Create))
             {
                 byte[] array = new byte[4 * renderTarget2D.Width * renderTarget2D.Height];
                 renderTarget2D.GetData(array, 0, new Rectangle(0, 0, renderTarget2D.Width, renderTarget2D.Height));
                 ByteBuffer src    = ByteBuffer.Wrap(array);
                 Bitmap     bitmap = Bitmap.CreateBitmap(renderTarget2D.Width, renderTarget2D.Height, Bitmap.Config.Argb8888);
                 bitmap.CopyPixelsFromBuffer(src);
                 bitmap.Compress(Bitmap.CompressFormat.Png, 100, stream);
             }
             Intent intent = new Intent("android.intent.action.MEDIA_SCANNER_SCAN_FILE");
             intent.SetData(Android.Net.Uri.FromFile(new Java.IO.File(path)));
             Window.Activity.SendBroadcast(intent);
         }
     }
 }
Exemplo n.º 4
0
 static PerformanceManager()
 {
     m_primitivesRenderer  = new PrimitivesRenderer2D();
     m_averageFrameTime    = new RunningAverage(1f);
     m_averageCpuFrameTime = new RunningAverage(1f);
     m_stateMachine        = new StateMachine();
     m_statsString         = string.Empty;
     m_stateMachine.AddState("PreMeasure", delegate
     {
         m_totalGameTime = 0.0;
     }, delegate
     {
         if (GameManager.Project != null)
         {
             m_totalGameTime += Time.FrameDuration;
             if (m_totalGameTime > 60.0)
             {
                 m_stateMachine.TransitionTo("Measuring");
             }
         }
     }, null);
     m_stateMachine.AddState("Measuring", delegate
     {
         m_totalFrameTime    = 0.0;
         m_totalCpuFrameTime = 0.0;
         m_frameCount        = 0;
     }, delegate
     {
         if (GameManager.Project != null)
         {
             if (ScreensManager.CurrentScreen != null && ScreensManager.CurrentScreen.GetType() == typeof(GameScreen))
             {
                 float lastFrameTime    = Program.LastFrameTime;
                 float lastCpuFrameTime = Program.LastCpuFrameTime;
                 if (lastFrameTime > 0f && lastFrameTime < 1f && lastCpuFrameTime > 0f && lastCpuFrameTime < 1f)
                 {
                     m_totalFrameTime    += lastFrameTime;
                     m_totalCpuFrameTime += lastCpuFrameTime;
                     m_frameCount++;
                 }
                 if (m_totalFrameTime > 180.0)
                 {
                     m_stateMachine.TransitionTo("PostMeasure");
                 }
             }
         }
         else
         {
             m_stateMachine.TransitionTo("PreMeasure");
         }
     }, null);
     m_stateMachine.AddState("PostMeasure", delegate
     {
         if (m_frameCount > 0)
         {
             m_longTermAverageFrameTime = (float)(m_totalFrameTime / (double)m_frameCount);
             float num  = (int)MathUtils.Round(MathUtils.Round(m_totalFrameTime / (double)m_frameCount / 0.004999999888241291) * 0.004999999888241291 * 1000.0);
             float num2 = (int)MathUtils.Round(MathUtils.Round(m_totalCpuFrameTime / (double)m_frameCount / 0.004999999888241291) * 0.004999999888241291 * 1000.0);
             AnalyticsManager.LogEvent("[PerformanceManager] Measurement", new AnalyticsParameter("FrameCount", m_frameCount.ToString()), new AnalyticsParameter("AverageFrameTime", num.ToString() + "ms"), new AnalyticsParameter("AverageFrameCpuTime", num2.ToString() + "ms"));
             Log.Information($"PerformanceManager Measurement: frames={m_frameCount.ToString()}, avgFrameTime={num.ToString()}ms, avgFrameCpuTime={num2.ToString()}ms");
         }
     }, delegate
     {
         if (GameManager.Project == null)
         {
             m_stateMachine.TransitionTo("PreMeasure");
         }
     }, null);
     m_stateMachine.TransitionTo("PreMeasure");
 }