glfw: add error handling
Signed-off-by: Stephen Gutekanst <stephen@hexops.com>
This commit is contained in:
parent
4b5f94c4ea
commit
1b1e184129
1 changed files with 25 additions and 3 deletions
|
|
@ -3,7 +3,7 @@
|
||||||
const c = @cImport(@cInclude("GLFW/glfw3.h"));
|
const c = @cImport(@cInclude("GLFW/glfw3.h"));
|
||||||
|
|
||||||
/// Errors that GLFW can produce.
|
/// Errors that GLFW can produce.
|
||||||
const Error = error{
|
pub const Error = error{
|
||||||
/// GLFW has not been initialized.
|
/// GLFW has not been initialized.
|
||||||
///
|
///
|
||||||
/// This occurs if a GLFW function was called that must not be called unless the library is
|
/// This occurs if a GLFW function was called that must not be called unless the library is
|
||||||
|
|
@ -87,9 +87,9 @@ const Error = error{
|
||||||
NoWindowContext,
|
NoWindowContext,
|
||||||
};
|
};
|
||||||
|
|
||||||
fn convertError(e: int) ?Error {
|
fn convertError(e: c_int) Error!void {
|
||||||
return switch (e) {
|
return switch (e) {
|
||||||
c.GLFW_NO_ERROR => null,
|
c.GLFW_NO_ERROR => {},
|
||||||
c.GLFW_NOT_INITIALIZED => Error.NotInitialized,
|
c.GLFW_NOT_INITIALIZED => Error.NotInitialized,
|
||||||
c.GLFW_NO_CURRENT_CONTEXT => Error.NoCurrentContext,
|
c.GLFW_NO_CURRENT_CONTEXT => Error.NoCurrentContext,
|
||||||
c.GLFW_INVALID_ENUM => Error.InvalidEnum,
|
c.GLFW_INVALID_ENUM => Error.InvalidEnum,
|
||||||
|
|
@ -100,5 +100,27 @@ fn convertError(e: int) ?Error {
|
||||||
c.GLFW_PLATFORM_ERROR => Error.PlatformError,
|
c.GLFW_PLATFORM_ERROR => Error.PlatformError,
|
||||||
c.GLFW_FORMAT_UNAVAILABLE => Error.FormatUnavailable,
|
c.GLFW_FORMAT_UNAVAILABLE => Error.FormatUnavailable,
|
||||||
c.GLFW_NO_WINDOW_CONTEXT => Error.NoWindowContext,
|
c.GLFW_NO_WINDOW_CONTEXT => Error.NoWindowContext,
|
||||||
|
else => unreachable,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns and clears the last error for the calling thread.
|
||||||
|
///
|
||||||
|
/// This function returns and clears the error code of the last error that occurred on the calling
|
||||||
|
/// thread, and optionally a UTF-8 encoded human-readable description of it. If no error has
|
||||||
|
/// occurred since the last call, it returns GLFW_NO_ERROR (zero) and the description pointer is
|
||||||
|
/// set to `NULL`.
|
||||||
|
///
|
||||||
|
/// * @param[in] description Where to store the error description pointer, or `NULL`.
|
||||||
|
/// @return The last error code for the calling thread, or @ref GLFW_NO_ERROR (zero).
|
||||||
|
///
|
||||||
|
/// @pointer_lifetime The returned string is allocated and freed by GLFW. You should not free it
|
||||||
|
/// yourself. It is guaranteed to be valid only until the next error occurs or the library is
|
||||||
|
/// terminated.
|
||||||
|
///
|
||||||
|
/// @remark This function may be called before @ref glfwInit.
|
||||||
|
///
|
||||||
|
/// @thread_safety This function may be called from any thread.
|
||||||
|
pub fn getError() Error!void {
|
||||||
|
return convertError(c.glfwGetError(null));
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue