add framebufferSize callback (FFI scaffolding and creating new variant of input_message type but don't react to this message in a meaningful way yet)

This commit is contained in:
2024-08-01 23:33:54 +01:00
parent c5d9ed4c69
commit 13063ea2c6
7 changed files with 34 additions and 7 deletions

BIN
dotscape

Binary file not shown.

View File

@@ -159,6 +159,7 @@ extern "C" {
MLLIB_PUBLIC(void mltonMouseMoveCallback (Real32 x0, Real32 x1);) MLLIB_PUBLIC(void mltonMouseMoveCallback (Real32 x0, Real32 x1);)
MLLIB_PUBLIC(void mltonMouseClickCallback (Int32 x0, Int32 x1);) MLLIB_PUBLIC(void mltonMouseClickCallback (Int32 x0, Int32 x1);)
MLLIB_PUBLIC(void mltonFramebufferSizeCallback (Int32 x0, Int32 x1);)
#undef MLLIB_PRIVATE #undef MLLIB_PRIVATE
#undef MLLIB_PUBLIC #undef MLLIB_PUBLIC

View File

@@ -10,16 +10,21 @@ void mouseMoveCallback(GLFWwindow *window, double xpos, double ypos) {
mltonMouseMoveCallback((float)xpos, (float)ypos); mltonMouseMoveCallback((float)xpos, (float)ypos);
} }
void mouseClickCallback(GLFWwindow *window, int button, int action, int mods) { // Call this from MLton to register callback with GLFW.
mltonMouseClickCallback(button, action);
}
// Call this from MLton to register key callback with GLFW.
void setMouseMoveCallback(GLFWwindow *window) { void setMouseMoveCallback(GLFWwindow *window) {
glfwSetCursorPosCallback(window, mouseMoveCallback); glfwSetCursorPosCallback(window, mouseMoveCallback);
} }
void mouseClickCallback(GLFWwindow *window, int button, int action, int mods) {
mltonMouseClickCallback(button, action);
}
void setMouseClickCallback(GLFWwindow *window) { void setMouseClickCallback(GLFWwindow *window) {
glfwSetMouseButtonCallback(window, mouseClickCallback); glfwSetMouseButtonCallback(window, mouseClickCallback);
} }
void framebufferSizeCallback(GLFWwindow *window, int width, int height) {
mltonFramebufferSizeCallback(width, height);
}
void setFramebufferSizeCallback(GLFWwindow *window, int width, int height) {
glfwSetFramebufferSizeCallback(window, framebufferSizeCallback);
}

View File

@@ -11,9 +11,13 @@ struct
val exportMouseClickCallback = val exportMouseClickCallback =
_export "mltonMouseClickCallback" public : (int * int -> unit) -> unit; _export "mltonMouseClickCallback" public : (int * int -> unit) -> unit;
val setMouseClickCallback = _import "setMouseClickCallback" public reentrant : window -> unit; val setMouseClickCallback = _import "setMouseClickCallback" public reentrant : window -> unit;
val exportFramebufferSizeCallback =
_export "mltonFramebufferSizeCallback" public : (int * int -> unit) -> unit;
val setFramebufferSizeCallback =
_import "setFramebufferSizeCallback" public reentrant : window -> unit;
(* Constants for mouse input. *) (* Constants for mouse input. *)
val (MOUSE_PRESSED, _) = val (MOUSE_PRESSED, _) =
_symbol "MOUSE_PRESSED" public : ( unit -> int ) * ( int -> unit ); _symbol "MOUSE_PRESSED" public : ( unit -> int ) * ( int -> unit );

View File

@@ -161,7 +161,7 @@ struct
in in
(model, drawMsg, mouseX, mouseY) (model, drawMsg, mouseX, mouseY)
end end
| MUSE_LEFT_CLICK => | MOUSE_LEFT_CLICK =>
let let
val (buttonVec, hpos, vpos) = getClickPos val (buttonVec, hpos, vpos) = getClickPos
(#clickPoints model, mouseX, mouseY, 0.0, 0.0, 1.0) (#clickPoints model, mouseX, mouseY, 0.0, 0.0, 1.0)
@@ -205,5 +205,11 @@ struct
else else
(model, NO_DRAW, mouseX, mouseY) (model, NO_DRAW, mouseX, mouseY)
end end
| RESIZE_WINDOW {width, height} =>
let
val _ = print "resized window \n"
in
(model, NO_DRAW, mouseX, mouseY)
end
end end
end end

View File

@@ -15,6 +15,11 @@ struct
else else
() ()
fun framebufferSizeCallback mailbox (width, height) =
let val _ = Gles3.viewport (width, height)
in Mailbox.send (mailbox, RESIZE_WINDOW {width = width, height = height})
end
fun registerCallbacks (window, inputMailbox) = fun registerCallbacks (window, inputMailbox) =
let let
val mouseMoveCallback = mouseMoveCallback inputMailbox val mouseMoveCallback = mouseMoveCallback inputMailbox
@@ -24,6 +29,10 @@ struct
val mouseClickCallback = mouseClickCallback inputMailbox val mouseClickCallback = mouseClickCallback inputMailbox
val _ = Input.exportMouseClickCallback mouseClickCallback val _ = Input.exportMouseClickCallback mouseClickCallback
val _ = Input.setMouseClickCallback window val _ = Input.setMouseClickCallback window
val resizeCallback = framebufferSizeCallback inputMailbox
val _ = Input.exportFramebufferSizeCallback resizeCallback
val _ = Input.setFramebufferSizeCallback window
in in
() ()
end end

View File

@@ -4,6 +4,7 @@ sig
MOUSE_MOVE of {x: Real32.real, y: Real32.real} MOUSE_MOVE of {x: Real32.real, y: Real32.real}
| MOUSE_LEFT_CLICK | MOUSE_LEFT_CLICK
| MOUSE_LEFT_RELEASE | MOUSE_LEFT_RELEASE
| RESIZE_WINDOW of {width: int, height: int}
end end
structure InputMessage :> INPUT_MESSAGE = structure InputMessage :> INPUT_MESSAGE =
@@ -12,4 +13,5 @@ struct
MOUSE_MOVE of {x: Real32.real, y: Real32.real} MOUSE_MOVE of {x: Real32.real, y: Real32.real}
| MOUSE_LEFT_CLICK | MOUSE_LEFT_CLICK
| MOUSE_LEFT_RELEASE | MOUSE_LEFT_RELEASE
| RESIZE_WINDOW of {width: int, height: int}
end end