Skip to content

Commit

Permalink
Merge branch 'main' of https://github.com/Kode/Kinc
Browse files Browse the repository at this point in the history
  • Loading branch information
RobDangerous committed Jun 9, 2022
2 parents d3b6ae5 + ddec0f8 commit 0577532
Show file tree
Hide file tree
Showing 70 changed files with 3,348 additions and 3,061 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -766,21 +766,28 @@ void kinc_g4_pipeline_compile(struct kinc_g4_pipeline *state) {

kinc_microsoft_affirm(dx_ctx.device->lpVtbl->CreateInputLayout(dx_ctx.device, vertexDesc, all, state->vertex_shader->impl.data,
state->vertex_shader->impl.length, &state->impl.d3d11inputLayout));

{
D3D11_DEPTH_STENCIL_DESC desc;
kinc_memset(&desc, 0, sizeof(desc));

desc.DepthEnable = state->depth_mode != KINC_G4_COMPARE_ALWAYS;
desc.DepthWriteMask = state->depth_write ? D3D11_DEPTH_WRITE_MASK_ALL : D3D11_DEPTH_WRITE_MASK_ZERO;
desc.DepthFunc = get_comparison(state->depth_mode);

desc.StencilEnable = state->stencil_mode != KINC_G4_COMPARE_ALWAYS;
desc.StencilEnable = state->stencil_front_mode != KINC_G4_COMPARE_ALWAYS || state->stencil_back_mode != KINC_G4_COMPARE_ALWAYS ||
state->stencil_front_both_pass != KINC_G4_STENCIL_KEEP || state->stencil_back_both_pass != KINC_G4_STENCIL_KEEP ||
state->stencil_front_depth_fail != KINC_G4_STENCIL_KEEP || state->stencil_back_depth_fail != KINC_G4_STENCIL_KEEP ||
state->stencil_front_fail != KINC_G4_STENCIL_KEEP || state->stencil_back_fail != KINC_G4_STENCIL_KEEP;
desc.StencilReadMask = state->stencil_read_mask;
desc.StencilWriteMask = state->stencil_write_mask;
desc.FrontFace.StencilFunc = desc.BackFace.StencilFunc = get_comparison(state->stencil_mode);
desc.FrontFace.StencilDepthFailOp = desc.BackFace.StencilDepthFailOp = get_stencil_action(state->stencil_depth_fail);
desc.FrontFace.StencilPassOp = desc.BackFace.StencilPassOp = get_stencil_action(state->stencil_both_pass);
desc.FrontFace.StencilFailOp = desc.BackFace.StencilFailOp = get_stencil_action(state->stencil_fail);
desc.FrontFace.StencilFunc = desc.BackFace.StencilFunc = get_comparison(state->stencil_front_mode);
desc.FrontFace.StencilDepthFailOp = desc.BackFace.StencilDepthFailOp = get_stencil_action(state->stencil_front_depth_fail);
desc.FrontFace.StencilPassOp = desc.BackFace.StencilPassOp = get_stencil_action(state->stencil_front_both_pass);
desc.FrontFace.StencilFailOp = desc.BackFace.StencilFailOp = get_stencil_action(state->stencil_front_fail);
desc.BackFace.StencilFunc = desc.BackFace.StencilFunc = get_comparison(state->stencil_back_mode);
desc.BackFace.StencilDepthFailOp = desc.BackFace.StencilDepthFailOp = get_stencil_action(state->stencil_back_depth_fail);
desc.BackFace.StencilPassOp = desc.BackFace.StencilPassOp = get_stencil_action(state->stencil_back_both_pass);
desc.BackFace.StencilFailOp = desc.BackFace.StencilFailOp = get_stencil_action(state->stencil_back_fail);

dx_ctx.device->lpVtbl->CreateDepthStencilState(dx_ctx.device, &desc, &state->impl.depthStencilState);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
#include <kinc/graphics4/textureunit.h>
#include <kinc/memory.h>

#include <assert.h>

static kinc_g4_texture_t *setTextures[16] = {NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL};

static DXGI_FORMAT convertFormat(kinc_image_format_t format) {
Expand Down Expand Up @@ -267,6 +269,7 @@ void kinc_g4_texture_clear(kinc_g4_texture_t *texture, int x, int y, int z, int
}

int kinc_g4_texture_stride(kinc_g4_texture_t *texture) {
assert(texture->impl.rowPitch != 0); // stride is not yet said, lock and unlock the texture first (or find a good fix for this and send a PR)
return texture->impl.rowPitch;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1172,7 +1172,8 @@ void kinc_g4_set_pipeline(kinc_g4_pipeline_t *pipeline) {
}

void kinc_g4_set_stencil_reference_value(int value) {
glStencilFunc(Kinc_G4_Internal_StencilFunc(lastPipeline->stencil_mode), value, lastPipeline->stencil_read_mask);
glStencilFuncSeparate(GL_FRONT, Kinc_G4_Internal_StencilFunc(lastPipeline->stencil_front_mode), value, lastPipeline->stencil_read_mask);
glStencilFuncSeparate(GL_BACK, Kinc_G4_Internal_StencilFunc(lastPipeline->stencil_back_mode), value, lastPipeline->stencil_read_mask);
}

void Kinc_G4_Internal_TextureArraySet(kinc_g4_texture_array_t *array, kinc_g4_texture_unit_t unit);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,17 +228,26 @@ void kinc_g4_internal_set_pipeline(kinc_g4_pipeline_t *pipeline) {
glCheckErrors();
}

if (pipeline->stencil_mode == KINC_G4_COMPARE_ALWAYS && pipeline->stencil_both_pass == KINC_G4_STENCIL_KEEP &&
pipeline->stencil_depth_fail == KINC_G4_STENCIL_KEEP && pipeline->stencil_fail == KINC_G4_STENCIL_KEEP) {
if (pipeline->stencil_front_mode == KINC_G4_COMPARE_ALWAYS && pipeline->stencil_back_mode == KINC_G4_COMPARE_ALWAYS &&
pipeline->stencil_front_both_pass == KINC_G4_STENCIL_KEEP && pipeline->stencil_back_both_pass == KINC_G4_STENCIL_KEEP &&
pipeline->stencil_front_depth_fail == KINC_G4_STENCIL_KEEP && pipeline->stencil_back_depth_fail == KINC_G4_STENCIL_KEEP &&
pipeline->stencil_front_fail == KINC_G4_STENCIL_KEEP && pipeline->stencil_back_fail == KINC_G4_STENCIL_KEEP) {
glDisable(GL_STENCIL_TEST);
}
else {
glEnable(GL_STENCIL_TEST);
int stencilFunc = Kinc_G4_Internal_StencilFunc(pipeline->stencil_mode);
glStencilMask(pipeline->stencil_write_mask);
glStencilOp(convertStencilAction(pipeline->stencil_fail), convertStencilAction(pipeline->stencil_depth_fail),
convertStencilAction(pipeline->stencil_both_pass));
glStencilFunc(stencilFunc, pipeline->stencil_reference_value, pipeline->stencil_read_mask);

glStencilMaskSeparate(GL_FRONT, pipeline->stencil_write_mask);
glStencilOpSeparate(GL_FRONT, convertStencilAction(pipeline->stencil_front_fail), convertStencilAction(pipeline->stencil_front_depth_fail),
convertStencilAction(pipeline->stencil_front_both_pass));
glStencilFuncSeparate(GL_FRONT, Kinc_G4_Internal_StencilFunc(pipeline->stencil_front_mode), pipeline->stencil_reference_value,
pipeline->stencil_read_mask);

glStencilMaskSeparate(GL_BACK, pipeline->stencil_write_mask);
glStencilOpSeparate(GL_BACK, convertStencilAction(pipeline->stencil_back_fail), convertStencilAction(pipeline->stencil_back_depth_fail),
convertStencilAction(pipeline->stencil_back_both_pass));
glStencilFuncSeparate(GL_BACK, Kinc_G4_Internal_StencilFunc(pipeline->stencil_back_mode), pipeline->stencil_reference_value,
pipeline->stencil_read_mask);
}

#ifdef KORE_OPENGL_ES
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
#include "wayland.h"

void kinc_wayland_display_init(void) {}
void kinc_wayland_display_init(void) {
// This is a no-op because displays are already registered in kinc_wayland_init,
// which should be called before this function is ever invoked
}

int kinc_wayland_display_primary(void) {
return 0; // TODO
Expand Down
46 changes: 3 additions & 43 deletions Backends/System/Linux/Sources/kinc/backend/wayland/system.c.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,49 +34,9 @@ bool kinc_wayland_load_procs() {
has_missing_symbol = true; \
kinc_log(KINC_LOG_LEVEL_ERROR, "Did not find symbol %s.", name); \
}
LOAD_FUN(wayland_client, _wl_event_queue_destroy, "wl_event_queue_destroy")
LOAD_FUN(wayland_client, _wl_proxy_marshal_flags, "wl_proxy_marshal_flags")
LOAD_FUN(wayland_client, _wl_proxy_marshal_array_flags, "wl_proxy_marshal_array_flags")
LOAD_FUN(wayland_client, _wl_proxy_marshal, "wl_proxy_marshal")
LOAD_FUN(wayland_client, _wl_proxy_marshal_array, "wl_proxy_marshal_array")
LOAD_FUN(wayland_client, _wl_proxy_create, "wl_proxy_create")
LOAD_FUN(wayland_client, _wl_proxy_create_wrapper, "wl_proxy_create_wrapper")
LOAD_FUN(wayland_client, _wl_proxy_wrapper_destroy, "wl_proxy_wrapper_destroy")
LOAD_FUN(wayland_client, _wl_proxy_marshal_constructor, "wl_proxy_marshal_constructor")
LOAD_FUN(wayland_client, _wl_proxy_marshal_constructor_versioned, "wl_proxy_marshal_constructor_versioned")
LOAD_FUN(wayland_client, _wl_proxy_marshal_array_constructor, "wl_proxy_marshal_array_constructor")
LOAD_FUN(wayland_client, _wl_proxy_marshal_array_constructor_versioned, "wl_proxy_marshal_array_constructor_versioned")
LOAD_FUN(wayland_client, _wl_proxy_destroy, "wl_proxy_destroy")
LOAD_FUN(wayland_client, _wl_proxy_add_listener, "wl_proxy_add_listener")
LOAD_FUN(wayland_client, _wl_proxy_get_listener, "wl_proxy_get_listener")
LOAD_FUN(wayland_client, _wl_proxy_add_dispatcher, "wl_proxy_add_dispatcher")
LOAD_FUN(wayland_client, _wl_proxy_set_user_data, "wl_proxy_set_user_data")
LOAD_FUN(wayland_client, _wl_proxy_get_user_data, "wl_proxy_get_user_data")
LOAD_FUN(wayland_client, _wl_proxy_get_version, "wl_proxy_get_version")
LOAD_FUN(wayland_client, _wl_proxy_get_id, "wl_proxy_get_id")
LOAD_FUN(wayland_client, _wl_proxy_set_tag, "wl_proxy_set_tag")
LOAD_FUN(wayland_client, _wl_proxy_get_tag, "wl_proxy_get_tag")
LOAD_FUN(wayland_client, _wl_proxy_get_class, "wl_proxy_get_class")
LOAD_FUN(wayland_client, _wl_proxy_set_queue, "wl_proxy_set_queue")
LOAD_FUN(wayland_client, _wl_display_connect, "wl_display_connect")
LOAD_FUN(wayland_client, _wl_display_connect_to_fd, "wl_display_connect_to_fd")
LOAD_FUN(wayland_client, _wl_display_disconnect, "wl_display_disconnect")
LOAD_FUN(wayland_client, _wl_display_get_fd, "wl_display_get_fd")
LOAD_FUN(wayland_client, _wl_display_dispatch, "wl_display_dispatch")
LOAD_FUN(wayland_client, _wl_display_dispatch_queue, "wl_display_dispatch_queue")
LOAD_FUN(wayland_client, _wl_display_dispatch_queue_pending, "wl_display_dispatch_queue_pending")
LOAD_FUN(wayland_client, _wl_display_dispatch_pending, "wl_display_dispatch_pending")
LOAD_FUN(wayland_client, _wl_display_get_error, "wl_display_get_error")
LOAD_FUN(wayland_client, _wl_display_get_protocol_error, "wl_display_get_protocol_error")
LOAD_FUN(wayland_client, _wl_display_flush, "wl_display_flush")
LOAD_FUN(wayland_client, _wl_display_roundtrip_queue, "wl_display_roundtrip_queue")
LOAD_FUN(wayland_client, _wl_display_roundtrip, "wl_display_roundtrip")
LOAD_FUN(wayland_client, _wl_display_create_queue, "wl_display_create_queue")
LOAD_FUN(wayland_client, _wl_display_prepare_read_queue, "wl_display_prepare_read_queue")
LOAD_FUN(wayland_client, _wl_display_prepare_read, "wl_display_prepare_read")
LOAD_FUN(wayland_client, _wl_display_cancel_read, "wl_display_cancel_read")
LOAD_FUN(wayland_client, _wl_display_read_events, "wl_display_read_events")
LOAD_FUN(wayland_client, _wl_log_set_handler_client, "wl_log_set_handler_client")
#define KINC_WL_FUN(ret, name, args) LOAD_FUN(wayland_client, _##name, #name)
#include "wayland-funs.h"
#undef KINC_WL_FN

void *wayland_cursor = dlopen("libwayland-cursor.so", RTLD_LAZY);
if (wayland_cursor == NULL) {
Expand Down
53 changes: 53 additions & 0 deletions Backends/System/Linux/Sources/kinc/backend/wayland/wayland-funs.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
#ifndef KINC_WL_FN
#define KINC_WL_FN(ret, name, args)
#endif

KINC_WL_FUN(void ,wl_event_queue_destroy, (struct wl_event_queue *queue))
#if KINC_WL_CHECK_VERSION(1, 20, 0)
KINC_WL_FUN(struct wl_proxy *,wl_proxy_marshal_flags, (struct wl_proxy *proxy, uint32_t opcode, const struct wl_interface *interface, uint32_t version, uint32_t flags,
...))
KINC_WL_FUN(struct wl_proxy *,wl_proxy_marshal_array_flags, (struct wl_proxy *proxy, uint32_t opcode, const struct wl_interface *interface, uint32_t version,
uint32_t flags, union wl_argument *args))
#endif
KINC_WL_FUN(void ,wl_proxy_marshal, (struct wl_proxy *p, uint32_t opcode, ...))
KINC_WL_FUN(void ,wl_proxy_marshal_array, (struct wl_proxy *p, uint32_t opcode, union wl_argument *args))
KINC_WL_FUN(struct wl_proxy *,wl_proxy_create, (struct wl_proxy *factory, const struct wl_interface *interface))
KINC_WL_FUN(void *,wl_proxy_create_wrapper, (void *proxy))
KINC_WL_FUN(void ,wl_proxy_wrapper_destroy, (void *proxy_wrapper))
KINC_WL_FUN(struct wl_proxy *,wl_proxy_marshal_constructor, (struct wl_proxy *proxy, uint32_t opcode, const struct wl_interface *interface, ...))
KINC_WL_FUN(struct wl_proxy *,wl_proxy_marshal_constructor_versioned, (struct wl_proxy *proxy, uint32_t opcode, const struct wl_interface *interface, uint32_t version,
...))
KINC_WL_FUN(struct wl_proxy *,wl_proxy_marshal_array_constructor, (struct wl_proxy *proxy, uint32_t opcode, union wl_argument *args, const struct wl_interface *interface))
KINC_WL_FUN(struct wl_proxy *,wl_proxy_marshal_array_constructor_versioned, (struct wl_proxy *proxy, uint32_t opcode, union wl_argument *args,
const struct wl_interface *interface, uint32_t version))
KINC_WL_FUN(void ,wl_proxy_destroy, (struct wl_proxy *proxy))
KINC_WL_FUN(int ,wl_proxy_add_listener, (struct wl_proxy *proxy, void (**implementation)(void), void *data))
KINC_WL_FUN(const void *,wl_proxy_get_listener, (struct wl_proxy *proxy))
KINC_WL_FUN(int ,wl_proxy_add_dispatcher, (struct wl_proxy *proxy, wl_dispatcher_func_t dispatcher_func, const void *dispatcher_data, void *data))
KINC_WL_FUN(void ,wl_proxy_set_user_data, (struct wl_proxy *proxy, void *user_data))
KINC_WL_FUN(void *,wl_proxy_get_user_data, (struct wl_proxy *proxy))
KINC_WL_FUN(uint32_t ,wl_proxy_get_version, (struct wl_proxy *proxy))
KINC_WL_FUN(uint32_t ,wl_proxy_get_id, (struct wl_proxy *proxy))
KINC_WL_FUN(void ,wl_proxy_set_tag, (struct wl_proxy *proxy, const char *const *tag))
KINC_WL_FUN(const char *const *,wl_proxy_get_tag, (struct wl_proxy *proxy))
KINC_WL_FUN(const char *,wl_proxy_get_class, (struct wl_proxy *proxy))
KINC_WL_FUN(void ,wl_proxy_set_queue, (struct wl_proxy *proxy, struct wl_event_queue *queue))
KINC_WL_FUN(struct wl_display *,wl_display_connect, (const char *name))
KINC_WL_FUN(struct wl_display *,wl_display_connect_to_fd, (int fd))
KINC_WL_FUN(void ,wl_display_disconnect, (struct wl_display *display))
KINC_WL_FUN(int ,wl_display_get_fd, (struct wl_display *display))
KINC_WL_FUN(int ,wl_display_dispatch, (struct wl_display *display))
KINC_WL_FUN(int ,wl_display_dispatch_queue, (struct wl_display *display, struct wl_event_queue *queue))
KINC_WL_FUN(int ,wl_display_dispatch_queue_pending, (struct wl_display *display, struct wl_event_queue *queue))
KINC_WL_FUN(int ,wl_display_dispatch_pending, (struct wl_display *display))
KINC_WL_FUN(int ,wl_display_get_error, (struct wl_display *display))
KINC_WL_FUN(uint32_t ,wl_display_get_protocol_error, (struct wl_display *display, const struct wl_interface **interface, uint32_t *id))
KINC_WL_FUN(int ,wl_display_flush, (struct wl_display *display))
KINC_WL_FUN(int ,wl_display_roundtrip_queue, (struct wl_display *display, struct wl_event_queue *queue))
KINC_WL_FUN(int ,wl_display_roundtrip, (struct wl_display *display))
KINC_WL_FUN(struct wl_event_queue *,wl_display_create_queue, (struct wl_display *display))
KINC_WL_FUN(int ,wl_display_prepare_read_queue, (struct wl_display *display, struct wl_event_queue *queue))
KINC_WL_FUN(int ,wl_display_prepare_read, (struct wl_display *display))
KINC_WL_FUN(void ,wl_display_cancel_read, (struct wl_display *display))
KINC_WL_FUN(int ,wl_display_read_events, (struct wl_display *display))
KINC_WL_FUN(void ,wl_log_set_handler_client, (wl_log_func_t handler))
55 changes: 7 additions & 48 deletions Backends/System/Linux/Sources/kinc/backend/wayland/wayland.h
Original file line number Diff line number Diff line change
Expand Up @@ -11,57 +11,16 @@
#include <wayland-client-core.h>
#include <wayland-cursor.h>

#define KINC_WL_CHECK_VERSION(x, y, z) \
(WAYLAND_VERSION_MAJOR > x || (WAYLAND_VERSION_MAJOR == x && WAYLAND_VERSION_MINOR > y) || \
(WAYLAND_VERSION_MAJOR == x && WAYLAND_VERSION_MINOR == y && WAYLAND_VERSION_MICRO >= z))

struct wl_surface;

struct kinc_wl_procs {
void (*_wl_event_queue_destroy)(struct wl_event_queue *queue);
struct wl_proxy *(*_wl_proxy_marshal_flags)(struct wl_proxy *proxy, uint32_t opcode, const struct wl_interface *interface, uint32_t version, uint32_t flags,
...);
struct wl_proxy *(*_wl_proxy_marshal_array_flags)(struct wl_proxy *proxy, uint32_t opcode, const struct wl_interface *interface, uint32_t version,
uint32_t flags, union wl_argument *args);
void (*_wl_proxy_marshal)(struct wl_proxy *p, uint32_t opcode, ...);
void (*_wl_proxy_marshal_array)(struct wl_proxy *p, uint32_t opcode, union wl_argument *args);
struct wl_proxy *(*_wl_proxy_create)(struct wl_proxy *factory, const struct wl_interface *interface);
void *(*_wl_proxy_create_wrapper)(void *proxy);
void (*_wl_proxy_wrapper_destroy)(void *proxy_wrapper);
struct wl_proxy *(*_wl_proxy_marshal_constructor)(struct wl_proxy *proxy, uint32_t opcode, const struct wl_interface *interface, ...);
struct wl_proxy *(*_wl_proxy_marshal_constructor_versioned)(struct wl_proxy *proxy, uint32_t opcode, const struct wl_interface *interface, uint32_t version,
...);
struct wl_proxy *(*_wl_proxy_marshal_array_constructor)(struct wl_proxy *proxy, uint32_t opcode, union wl_argument *args,
const struct wl_interface *interface);
struct wl_proxy *(*_wl_proxy_marshal_array_constructor_versioned)(struct wl_proxy *proxy, uint32_t opcode, union wl_argument *args,
const struct wl_interface *interface, uint32_t version);
void (*_wl_proxy_destroy)(struct wl_proxy *proxy);
int (*_wl_proxy_add_listener)(struct wl_proxy *proxy, void (**implementation)(void), void *data);
const void *(*_wl_proxy_get_listener)(struct wl_proxy *proxy);
int (*_wl_proxy_add_dispatcher)(struct wl_proxy *proxy, wl_dispatcher_func_t dispatcher_func, const void *dispatcher_data, void *data);
void (*_wl_proxy_set_user_data)(struct wl_proxy *proxy, void *user_data);
void *(*_wl_proxy_get_user_data)(struct wl_proxy *proxy);
uint32_t (*_wl_proxy_get_version)(struct wl_proxy *proxy);
uint32_t (*_wl_proxy_get_id)(struct wl_proxy *proxy);
void (*_wl_proxy_set_tag)(struct wl_proxy *proxy, const char *const *tag);
const char *const *(*_wl_proxy_get_tag)(struct wl_proxy *proxy);
const char *(*_wl_proxy_get_class)(struct wl_proxy *proxy);
void (*_wl_proxy_set_queue)(struct wl_proxy *proxy, struct wl_event_queue *queue);
struct wl_display *(*_wl_display_connect)(const char *name);
struct wl_display *(*_wl_display_connect_to_fd)(int fd);
void (*_wl_display_disconnect)(struct wl_display *display);
int (*_wl_display_get_fd)(struct wl_display *display);
int (*_wl_display_dispatch)(struct wl_display *display);
int (*_wl_display_dispatch_queue)(struct wl_display *display, struct wl_event_queue *queue);
int (*_wl_display_dispatch_queue_pending)(struct wl_display *display, struct wl_event_queue *queue);
int (*_wl_display_dispatch_pending)(struct wl_display *display);
int (*_wl_display_get_error)(struct wl_display *display);
uint32_t (*_wl_display_get_protocol_error)(struct wl_display *display, const struct wl_interface **interface, uint32_t *id);
int (*_wl_display_flush)(struct wl_display *display);
int (*_wl_display_roundtrip_queue)(struct wl_display *display, struct wl_event_queue *queue);
int (*_wl_display_roundtrip)(struct wl_display *display);
struct wl_event_queue *(*_wl_display_create_queue)(struct wl_display *display);
int (*_wl_display_prepare_read_queue)(struct wl_display *display, struct wl_event_queue *queue);
int (*_wl_display_prepare_read)(struct wl_display *display);
void (*_wl_display_cancel_read)(struct wl_display *display);
int (*_wl_display_read_events)(struct wl_display *display);
void (*_wl_log_set_handler_client)(wl_log_func_t handler);
#define KINC_WL_FUN(ret, name, args) ret (*_##name) args;
#include "wayland-funs.h"
#undef KINC_WL_FUN

struct wl_cursor_theme *(*_wl_cursor_theme_load)(const char *name, int size, struct wl_shm *shm);
void (*_wl_cursor_theme_destroy)(struct wl_cursor_theme *theme);
Expand Down
Loading

0 comments on commit 0577532

Please sign in to comment.