mirror of
				https://github.com/GayPizzaSpecifications/voxelotl-engine.git
				synced 2025-11-04 10:59:39 +00:00 
			
		
		
		
	add fps counter
This commit is contained in:
		@ -9,6 +9,7 @@ public class Application {
 | 
				
			|||||||
  private var view: SDL_MetalView? = nil
 | 
					  private var view: SDL_MetalView? = nil
 | 
				
			||||||
  private var renderer: Renderer? = nil
 | 
					  private var renderer: Renderer? = nil
 | 
				
			||||||
  private var lastCounter: UInt64 = 0
 | 
					  private var lastCounter: UInt64 = 0
 | 
				
			||||||
 | 
					  private var fpsCalculator = FPSCalculator()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private var stderr = FileHandle.standardError
 | 
					  private var stderr = FileHandle.standardError
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -40,6 +41,7 @@ public class Application {
 | 
				
			|||||||
    view = SDL_Metal_CreateView(window)
 | 
					    view = SDL_Metal_CreateView(window)
 | 
				
			||||||
    do {
 | 
					    do {
 | 
				
			||||||
      let layer = unsafeBitCast(SDL_Metal_GetLayer(view), to: CAMetalLayer.self)
 | 
					      let layer = unsafeBitCast(SDL_Metal_GetLayer(view), to: CAMetalLayer.self)
 | 
				
			||||||
 | 
					      layer.displaySyncEnabled = cfg.vsyncMode == .off ? false : true
 | 
				
			||||||
      self.renderer = try Renderer(layer: layer)
 | 
					      self.renderer = try Renderer(layer: layer)
 | 
				
			||||||
    } catch RendererError.initFailure(let message) {
 | 
					    } catch RendererError.initFailure(let message) {
 | 
				
			||||||
      print("Renderer init error: \(message)", to: &stderr)
 | 
					      print("Renderer init error: \(message)", to: &stderr)
 | 
				
			||||||
@ -92,6 +94,10 @@ public class Application {
 | 
				
			|||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private func update(_ deltaTime: Double) -> ApplicationExecutionState {
 | 
					  private func update(_ deltaTime: Double) -> ApplicationExecutionState {
 | 
				
			||||||
 | 
					    fpsCalculator.frame(deltaTime: deltaTime) { fps in
 | 
				
			||||||
 | 
					      print("FPS: \(fps)", to: &stderr)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    do {
 | 
					    do {
 | 
				
			||||||
      try renderer!.paint()
 | 
					      try renderer!.paint()
 | 
				
			||||||
    } catch RendererError.drawFailure(let message) {
 | 
					    } catch RendererError.drawFailure(let message) {
 | 
				
			||||||
@ -99,6 +105,7 @@ public class Application {
 | 
				
			|||||||
    } catch {
 | 
					    } catch {
 | 
				
			||||||
      print("Renderer draw error: unexpected error", to: &stderr)
 | 
					      print("Renderer draw error: unexpected error", to: &stderr)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return .running
 | 
					    return .running
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -140,7 +147,7 @@ public struct ApplicationConfiguration {
 | 
				
			|||||||
    static let highDPI = Flags(rawValue: 1 << 1)
 | 
					    static let highDPI = Flags(rawValue: 1 << 1)
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  public enum VSyncMode {
 | 
					  public enum VSyncMode: Equatable {
 | 
				
			||||||
    case off
 | 
					    case off
 | 
				
			||||||
    case on(interval: UInt)
 | 
					    case on(interval: UInt)
 | 
				
			||||||
    case adaptive
 | 
					    case adaptive
 | 
				
			||||||
 | 
				
			|||||||
@ -1,6 +1,7 @@
 | 
				
			|||||||
add_executable(Voxelotl MACOSX_BUNDLE
 | 
					add_executable(Voxelotl MACOSX_BUNDLE
 | 
				
			||||||
  Assets.xcassets
 | 
					  Assets.xcassets
 | 
				
			||||||
  Renderer.swift
 | 
					  Renderer.swift
 | 
				
			||||||
 | 
					  FPSCalculator.swift
 | 
				
			||||||
  Application.swift
 | 
					  Application.swift
 | 
				
			||||||
  main.swift)
 | 
					  main.swift)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										18
									
								
								Sources/Voxelotl/FPSCalculator.swift
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								Sources/Voxelotl/FPSCalculator.swift
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					import Foundation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					public struct FPSCalculator {
 | 
				
			||||||
 | 
					  private var _accumulator = 0.0
 | 
				
			||||||
 | 
					  private var _framesCount = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  public mutating func frame(deltaTime: Double, result: (_ fps: Int) -> Void) {
 | 
				
			||||||
 | 
					    _framesCount += 1
 | 
				
			||||||
 | 
					    _accumulator += deltaTime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (_accumulator >= 1.0) {
 | 
				
			||||||
 | 
					      result(_framesCount)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      _framesCount = 0
 | 
				
			||||||
 | 
					      _accumulator = fmod(_accumulator, 1.0)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Reference in New Issue
	
	Block a user