#include "internal.h" #include int createWindow(_GLFWwindow* window, const _GLFWwndconfig* wndconfig) { window->osmesa.width = wndconfig->width; window->osmesa.height = wndconfig->height; return GLFW_TRUE; } ////////////////////////////////////////////////////////////////////////// ////// GLFW internal API ////// ////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////// ////// GLFW platform API ////// ////////////////////////////////////////////////////////////////////////// int _glfwPlatformCreateWindow(_GLFWwindow* window, const _GLFWwndconfig* wndconfig, const _GLFWctxconfig* ctxconfig, const _GLFWfbconfig* fbconfig) { if (!_glfwInitOSMesa()) return GLFW_FALSE; if (!_glfwCreateContextOSMesa(window, ctxconfig, fbconfig)) return GLFW_FALSE; if (!createWindow(window, wndconfig)) return GLFW_FALSE; return GLFW_TRUE; } void _glfwPlatformDestroyWindow(_GLFWwindow* window) { if (window->context.destroy) window->context.destroy(window); } void _glfwPlatformSetWindowTitle(_GLFWwindow* window, const char* title) {} void _glfwPlatformSetWindowIcon(_GLFWwindow* window, int count, const GLFWimage* images) {} void _glfwPlatformSetWindowMonitor(_GLFWwindow* window, _GLFWmonitor* monitor, int xpos, int ypos, int width, int height, int refreshRate) {} void _glfwPlatformGetWindowPos(_GLFWwindow* window, int* xpos, int* ypos) { if (xpos != NULL) *xpos = 0; if (ypos != NULL) *ypos = 0; } void _glfwPlatformSetWindowPos(_GLFWwindow* window, int xpos, int ypos) {} void _glfwPlatformGetWindowSize(_GLFWwindow* window, int* width, int* height) { if (width != NULL) *width = window->osmesa.width; if (height != NULL) *height = window->osmesa.height; } void _glfwPlatformSetWindowSize(_GLFWwindow* window, int width, int height) { window->osmesa.width = width; window->osmesa.height = height; } void _glfwPlatformSetWindowSizeLimits(_GLFWwindow* window, int minwidth, int minheight, int maxwidth, int maxheight) {} void _glfwPlatformSetWindowAspectRatio(_GLFWwindow* window, int n, int d) {} void _glfwPlatformGetFramebufferSize(_GLFWwindow* window, int* width, int* height) { if (width != NULL) *width = window->osmesa.width; if (height != NULL) *height = window->osmesa.height; } void _glfwPlatformGetWindowFrameSize(_GLFWwindow* window, int* left, int* top, int* right, int* bottom) { if (left != NULL) *left = 0; if (top != NULL) *top = 0; if (right != NULL) *right = window->osmesa.width; if (bottom != NULL) *top = window->osmesa.height; } void _glfwPlatformIconifyWindow(_GLFWwindow* window) {} void _glfwPlatformRestoreWindow(_GLFWwindow* window) {} void _glfwPlatformMaximizeWindow(_GLFWwindow* window) {} int _glfwPlatformWindowMaximized(_GLFWwindow* window) { return 0; } void _glfwPlatformShowWindow(_GLFWwindow* window) {} void _glfwPlatformUnhideWindow(_GLFWwindow* window) {} void _glfwPlatformHideWindow(_GLFWwindow* window) {} void _glfwPlatformFocusWindow(_GLFWwindow* window) {} int _glfwPlatformWindowFocused(_GLFWwindow* window) { return GLFW_FALSE; } int _glfwPlatformWindowIconified(_GLFWwindow* window) { return GLFW_FALSE; } int _glfwPlatformWindowVisible(_GLFWwindow* window) { return GLFW_FALSE; } void _glfwPlatformPollEvents(void) {} void _glfwPlatformWaitEvents(void) {} void _glfwPlatformWaitEventsTimeout(double timeout) {} void _glfwPlatformPostEmptyEvent(void) {} void _glfwPlatformGetCursorPos(_GLFWwindow* window, double* xpos, double* ypos) { if (xpos != NULL) *xpos = 0; if (ypos != NULL) *ypos = 0; } void _glfwPlatformSetCursorPos(_GLFWwindow* window, double x, double y) {} void _glfwPlatformSetCursorMode(_GLFWwindow* window, int mode) {} void _glfwPlatformApplyCursorMode(_GLFWwindow* window) {} int _glfwPlatformCreateCursor(_GLFWcursor* cursor, const GLFWimage* image, int xhot, int yhot) { return GLFW_FALSE; } int _glfwPlatformCreateStandardCursor(_GLFWcursor* cursor, int shape) { return GLFW_FALSE; } void _glfwPlatformDestroyCursor(_GLFWcursor* cursor) {} void _glfwPlatformSetCursor(_GLFWwindow* window, _GLFWcursor* cursor) {} void _glfwPlatformSetClipboardString(_GLFWwindow* window, const char* string) {} const char* _glfwPlatformGetClipboardString(_GLFWwindow* window) { return NULL; } const char* _glfwPlatformGetKeyName(int key, int scancode) { return ""; } int _glfwPlatformJoystickPresent(int joy) { return 0; } const float* _glfwPlatformGetJoystickAxes(int joy, int* count) { if (count != NULL) *count = 0; return NULL; } const unsigned char* _glfwPlatformGetJoystickButtons(int joy, int* count) { if (count != NULL) *count = 0; return NULL; } const char* _glfwPlatformGetJoystickName(int joy) { return NULL; } char** _glfwPlatformGetRequiredInstanceExtensions(uint32_t* count) { if (count != NULL) *count = 0; return NULL; } int _glfwPlatformGetPhysicalDevicePresentationSupport(VkInstance instance, VkPhysicalDevice device, uint32_t queuefamily) { return GLFW_FALSE; } VkResult _glfwPlatformCreateWindowSurface(VkInstance instance, _GLFWwindow* window, const VkAllocationCallbacks* allocator, VkSurfaceKHR* surface) { // This seems like the most appropriate error to return here. return VK_ERROR_INITIALIZATION_FAILED; } ////////////////////////////////////////////////////////////////////////// ////// GLFW native API ////// ////////////////////////////////////////////////////////////////////////// GLFWAPI int glfwGetOSMesaColorBuffer(GLFWwindow* window, int* width, int* height, int* format, void** buffer) { GLint mesaWidth; GLint mesaHeight; GLint mesaFormat; void* mesaBuffer; assert(window != NULL); OSMesaContext ctx = ((_GLFWwindow*) window)->context.osmesa.handle; // Query OSMesa for the color buffer data. int result = OSMesaGetColorBuffer( ctx, &mesaWidth, &mesaHeight, &mesaFormat, &mesaBuffer); if (result) { // Copy the values returned by OSMesa. if (width != NULL) *width = mesaWidth; if (height != NULL) *height = mesaHeight; if (format != NULL) *format = mesaFormat; if (buffer != NULL) *buffer = mesaBuffer; } return result; } GLFWAPI int glfwGetOSMesaDepthBuffer(GLFWwindow* window, int* width, int* height, int* bytesPerValue, void** buffer) { GLint mesaWidth; GLint mesaHeight; GLint mesaBytes; void* mesaBuffer; assert(window != NULL); OSMesaContext ctx = ((_GLFWwindow*) window)->context.osmesa.handle; // Query OSMesa for the color buffer data. int result = OSMesaGetDepthBuffer( ctx, &mesaWidth, &mesaHeight, &mesaBytes, &mesaBuffer); if (result) { // Copy the values returned by OSMesa. if (width != NULL) *width = mesaWidth; if (height != NULL) *height = mesaHeight; if (bytesPerValue != NULL) *bytesPerValue = mesaBytes; if (buffer != NULL) *buffer = mesaBuffer; } return result; }