141 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			141 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #include "funcs.h"
 | |
| #include <kinc/display.h>
 | |
| #include <kinc/graphics4/graphics.h>
 | |
| #include <kinc/window.h>
 | |
| 
 | |
| #include <string.h>
 | |
| 
 | |
| #ifdef KINC_EGL
 | |
| EGLDisplay kinc_egl_get_display() {
 | |
| 	return procs.egl_get_display();
 | |
| }
 | |
| EGLNativeWindowType kinc_egl_get_native_window(EGLDisplay display, EGLConfig config, int window_index) {
 | |
| 	return procs.egl_get_native_window(display, config, window_index);
 | |
| }
 | |
| #endif
 | |
| 
 | |
| #ifdef KINC_VULKAN
 | |
| void kinc_vulkan_get_instance_extensions(const char **extensions, int *count, int max) {
 | |
| 	procs.vulkan_get_instance_extensions(extensions, count, max);
 | |
| }
 | |
| 
 | |
| VkBool32 kinc_vulkan_get_physical_device_presentation_support(VkPhysicalDevice physicalDevice, uint32_t queueFamilyIndex) {
 | |
| 	return procs.vulkan_get_physical_device_presentation_support(physicalDevice, queueFamilyIndex);
 | |
| }
 | |
| VkResult kinc_vulkan_create_surface(VkInstance instance, int window_index, VkSurfaceKHR *surface) {
 | |
| 	return procs.vulkan_create_surface(instance, window_index, surface);
 | |
| }
 | |
| #endif
 | |
| 
 | |
| int kinc_count_windows(void) {
 | |
| 	return procs.count_windows();
 | |
| }
 | |
| 
 | |
| int kinc_window_x(int window_index) {
 | |
| 	return procs.window_x(window_index);
 | |
| }
 | |
| 
 | |
| int kinc_window_y(int window_index) {
 | |
| 	return procs.window_y(window_index);
 | |
| }
 | |
| 
 | |
| int kinc_window_width(int window_index) {
 | |
| 	return procs.window_width(window_index);
 | |
| }
 | |
| 
 | |
| int kinc_window_height(int window_index) {
 | |
| 	return procs.window_height(window_index);
 | |
| }
 | |
| 
 | |
| void kinc_window_resize(int window_index, int width, int height) {
 | |
| 	procs.window_resize(window_index, width, height);
 | |
| }
 | |
| 
 | |
| void kinc_window_move(int window_index, int x, int y) {
 | |
| 	procs.window_move(window_index, x, y);
 | |
| }
 | |
| 
 | |
| void kinc_window_change_framebuffer(int window_index, kinc_framebuffer_options_t *frame) {}
 | |
| 
 | |
| void kinc_window_change_features(int window_index, int features) {}
 | |
| 
 | |
| void kinc_window_change_mode(int window_index, kinc_window_mode_t mode) {
 | |
| 	procs.window_change_mode(window_index, mode);
 | |
| }
 | |
| 
 | |
| int kinc_window_display(int window_index) {
 | |
| 	return procs.window_display(window_index);
 | |
| }
 | |
| 
 | |
| void kinc_window_destroy(int window_index) {
 | |
| 	kinc_g4_internal_destroy_window(window_index);
 | |
| 	procs.window_destroy(window_index);
 | |
| }
 | |
| 
 | |
| void kinc_window_show(int window_index) {
 | |
| 	procs.window_show(window_index);
 | |
| }
 | |
| 
 | |
| void kinc_window_hide(int window_index) {
 | |
| 	procs.window_hide(window_index);
 | |
| }
 | |
| 
 | |
| void kinc_window_set_title(int window_index, const char *title) {
 | |
| 	procs.window_set_title(window_index, title);
 | |
| }
 | |
| 
 | |
| int kinc_window_create(kinc_window_options_t *win, kinc_framebuffer_options_t *frame) {
 | |
| 	int index = procs.window_create(win, frame);
 | |
| 	kinc_g4_internal_init_window(index, frame->depth_bits, frame->stencil_bits, frame->vertical_sync);
 | |
| 	return index;
 | |
| }
 | |
| 
 | |
| static struct {
 | |
| 	void (*resize_callback)(int width, int height, void *data);
 | |
| 	void *resize_data;
 | |
| 	void (*ppi_callback)(int ppi, void *data);
 | |
| 	void *ppi_data;
 | |
| 	bool (*close_callback)(void *data);
 | |
| 	void *close_data;
 | |
| } kinc_internal_window_callbacks[16];
 | |
| 
 | |
| void kinc_window_set_resize_callback(int window_index, void (*callback)(int width, int height, void *data), void *data) {
 | |
| 	kinc_internal_window_callbacks[window_index].resize_callback = callback;
 | |
| 	kinc_internal_window_callbacks[window_index].resize_data = data;
 | |
| }
 | |
| 
 | |
| void kinc_internal_call_resize_callback(int window_index, int width, int height) {
 | |
| 	if (kinc_internal_window_callbacks[window_index].resize_callback != NULL) {
 | |
| 		kinc_internal_window_callbacks[window_index].resize_callback(width, height, kinc_internal_window_callbacks[window_index].resize_data);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void kinc_window_set_ppi_changed_callback(int window_index, void (*callback)(int ppi, void *data), void *data) {
 | |
| 	kinc_internal_window_callbacks[window_index].ppi_callback = callback;
 | |
| 	kinc_internal_window_callbacks[window_index].ppi_data = data;
 | |
| }
 | |
| 
 | |
| void kinc_internal_call_ppi_changed_callback(int window_index, int ppi) {
 | |
| 	if (kinc_internal_window_callbacks[window_index].ppi_callback != NULL) {
 | |
| 		kinc_internal_window_callbacks[window_index].ppi_callback(ppi, kinc_internal_window_callbacks[window_index].resize_data);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| void kinc_window_set_close_callback(int window_index, bool (*callback)(void *data), void *data) {
 | |
| 	kinc_internal_window_callbacks[window_index].close_callback = callback;
 | |
| 	kinc_internal_window_callbacks[window_index].close_data = data;
 | |
| }
 | |
| 
 | |
| bool kinc_internal_call_close_callback(int window_index) {
 | |
| 	if (kinc_internal_window_callbacks[window_index].close_callback != NULL) {
 | |
| 		return kinc_internal_window_callbacks[window_index].close_callback(kinc_internal_window_callbacks[window_index].close_data);
 | |
| 	}
 | |
| 	else {
 | |
| 		return true;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| kinc_window_mode_t kinc_window_get_mode(int window_index) {
 | |
| 	return procs.window_get_mode(window_index);
 | |
| }
 |