Compare commits
2
Commits
5ef1dafed2
..
master
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2b8488a1e2 | ||
|
|
7740632541 |
@@ -11,5 +11,9 @@ key_state: proc(key: Key) -> Action
|
|||||||
// implementation in platform package, to prevent cyclic dependency
|
// implementation in platform package, to prevent cyclic dependency
|
||||||
mouse_button_state: proc(button: Mouse_Button) -> Action
|
mouse_button_state: proc(button: Mouse_Button) -> Action
|
||||||
|
|
||||||
|
// Returns the position of the mouse cursor
|
||||||
|
// implementation in platform package, to prevent cyclic dependency
|
||||||
|
mouse_position: proc() -> (x_pos: f32, y_pos: f32)
|
||||||
|
|
||||||
// -----------------------------------------
|
// -----------------------------------------
|
||||||
// Private functions
|
// Private functions
|
||||||
|
|||||||
@@ -52,11 +52,7 @@ os_init :: proc(settings: core.Settings) {
|
|||||||
// Register input functions
|
// Register input functions
|
||||||
input.key_state = key_state
|
input.key_state = key_state
|
||||||
input.mouse_button_state = mouse_button_state
|
input.mouse_button_state = mouse_button_state
|
||||||
|
input.mouse_position = mouse_position
|
||||||
// TODO: Figure out proper vsync, found 3 spots so far
|
|
||||||
// - glfw.SwapInterval(0) this is only for OpenGL it seems?
|
|
||||||
// - glfw.SetWindowMonitor(refresh)
|
|
||||||
// - wgpu presentMode = .Fifo
|
|
||||||
}
|
}
|
||||||
|
|
||||||
os_destroy :: proc() {
|
os_destroy :: proc() {
|
||||||
@@ -157,6 +153,12 @@ mouse_button_state :: proc(button: input.Mouse_Button) -> input.Action {
|
|||||||
return input_action(glfw.GetMouseButton(state.os.window, i32(button)))
|
return input_action(glfw.GetMouseButton(state.os.window, i32(button)))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@(private = "file")
|
||||||
|
mouse_position :: proc() -> (x_pos: f32, y_pos: f32) {
|
||||||
|
x_pos_f64, y_pos_64 := glfw.GetCursorPos(state.os.window)
|
||||||
|
return f32(x_pos_f64), f32(y_pos_64)
|
||||||
|
}
|
||||||
|
|
||||||
@(private = "file")
|
@(private = "file")
|
||||||
input_action :: proc(action: i32) -> input.Action {
|
input_action :: proc(action: i32) -> input.Action {
|
||||||
if action == glfw.RELEASE do return input.Action.Release
|
if action == glfw.RELEASE do return input.Action.Release
|
||||||
|
|||||||
+12
-7
@@ -26,7 +26,7 @@ state: struct {
|
|||||||
pipeline_layout: wgpu.PipelineLayout,
|
pipeline_layout: wgpu.PipelineLayout,
|
||||||
pipeline: wgpu.RenderPipeline,
|
pipeline: wgpu.RenderPipeline,
|
||||||
// ----------------------------------------
|
// ----------------------------------------
|
||||||
present_modes: []wgpu.PresentMode,
|
capabilities: wgpu.SurfaceCapabilities,
|
||||||
vsync: bool,
|
vsync: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -69,6 +69,7 @@ instance_destroy :: proc() {
|
|||||||
wgpu.ShaderModuleRelease(state.module)
|
wgpu.ShaderModuleRelease(state.module)
|
||||||
wgpu.QueueRelease(state.queue)
|
wgpu.QueueRelease(state.queue)
|
||||||
wgpu.DeviceRelease(state.device)
|
wgpu.DeviceRelease(state.device)
|
||||||
|
wgpu.SurfaceCapabilitiesFreeMembers(state.capabilities)
|
||||||
wgpu.AdapterRelease(state.adapter)
|
wgpu.AdapterRelease(state.adapter)
|
||||||
wgpu.SurfaceRelease(state.surface)
|
wgpu.SurfaceRelease(state.surface)
|
||||||
wgpu.InstanceRelease(state.instance)
|
wgpu.InstanceRelease(state.instance)
|
||||||
@@ -260,25 +261,29 @@ get_present_modes :: proc() {
|
|||||||
if status != .Success {
|
if status != .Success {
|
||||||
fmt.panicf("[wgpu] surface capabilities failure: [%v]", status)
|
fmt.panicf("[wgpu] surface capabilities failure: [%v]", status)
|
||||||
}
|
}
|
||||||
state.present_modes = capabilities.presentModes[:capabilities.presentModeCount]
|
state.capabilities = capabilities
|
||||||
fmt.println("[wgpu] supported present modes", state.present_modes)
|
|
||||||
|
present_modes := capabilities.presentModes[:capabilities.presentModeCount]
|
||||||
|
fmt.println("[wgpu] supported present modes", present_modes)
|
||||||
}
|
}
|
||||||
|
|
||||||
@(private = "file")
|
@(private = "file")
|
||||||
pick_present_mode :: proc(vsync: bool) -> wgpu.PresentMode {
|
pick_present_mode :: proc(vsync: bool) -> wgpu.PresentMode {
|
||||||
if len(state.present_modes) == 0 do return .Fifo
|
present_modes := state.capabilities.presentModes[:state.capabilities.presentModeCount]
|
||||||
|
|
||||||
|
if len(present_modes) == 0 do return .Fifo
|
||||||
|
|
||||||
// Mimmick wgpu auto Vsync behavior
|
// Mimmick wgpu auto Vsync behavior
|
||||||
// https://docs.rs/wgpu/latest/wgpu/enum.PresentMode.html
|
// https://docs.rs/wgpu/latest/wgpu/enum.PresentMode.html
|
||||||
if vsync {
|
if vsync {
|
||||||
if slice.contains(state.present_modes, wgpu.PresentMode.FifoRelaxed) {
|
if slice.contains(present_modes, wgpu.PresentMode.FifoRelaxed) {
|
||||||
return .FifoRelaxed // Adaptive Vsync
|
return .FifoRelaxed // Adaptive Vsync
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if slice.contains(state.present_modes, wgpu.PresentMode.Immediate) {
|
if slice.contains(present_modes, wgpu.PresentMode.Immediate) {
|
||||||
return .Immediate // Vsync Off
|
return .Immediate // Vsync Off
|
||||||
}
|
}
|
||||||
if slice.contains(state.present_modes, wgpu.PresentMode.Mailbox) {
|
if slice.contains(present_modes, wgpu.PresentMode.Mailbox) {
|
||||||
return .Mailbox // Fast Vsync
|
return .Mailbox // Fast Vsync
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user