lovrPlatformGetProcAddress;

Seems nicer than a global and allows for logging/hooks;
This commit is contained in:
bjorn 2019-12-10 13:15:12 -08:00
parent 2f9400a5f7
commit c87d6dec3d
6 changed files with 14 additions and 13 deletions

View File

@ -53,10 +53,6 @@ typedef void (*windowResizeCallback)(int width, int height);
typedef void (*mouseButtonCallback)(MouseButton button, ButtonAction action);
typedef void (*keyboardCallback)(KeyCode key, ButtonAction action);
typedef void (*gpuProc)(void);
typedef gpuProc (*getProcAddressProc)(const char*);
extern getProcAddressProc lovrGetProcAddress;
bool lovrPlatformInit(void);
void lovrPlatformDestroy(void);
const char* lovrPlatformGetName(void);
@ -70,6 +66,7 @@ void lovrPlatformGetWindowSize(int* width, int* height);
void lovrPlatformGetFramebufferSize(int* width, int* height);
void lovrPlatformSetSwapInterval(int interval);
void lovrPlatformSwapBuffers(void);
void* lovrPlatformGetProcAddress(const char* function);
void lovrPlatformOnWindowClose(windowCloseCallback callback);
void lovrPlatformOnWindowResize(windowResizeCallback callback);
void lovrPlatformOnMouseButton(mouseButtonCallback callback);

View File

@ -1,6 +1,8 @@
#include "platform.h"
#include <stdio.h>
#include <unistd.h>
#include <EGL/egl.h>
#include <EGL/eglext.h>
bool lovrPlatformInit() {
return true;
@ -51,6 +53,10 @@ void lovrPlatformSwapBuffers() {
//
}
void* lovrPlatformGetProcAddress(const char* function) {
return (void*) eglGetProcAddress(function)
}
void lovrPlatformOnWindowClose(windowCloseCallback callback) {
//
}
@ -86,7 +92,3 @@ bool lovrPlatformIsKeyDown(KeyCode key) {
void lovrPlatformSleep(double seconds) {
usleep((unsigned int) (seconds * 1000000));
}
#include <EGL/egl.h>
#include <EGL/eglext.h>
getProcAddressProc lovrGetProcAddress = eglGetProcAddress;

View File

@ -12,8 +12,6 @@
#include <GLFW/glfw3native.h>
#endif
getProcAddressProc lovrGetProcAddress = glfwGetProcAddress;
static struct {
GLFWwindow* window;
windowCloseCallback onWindowClose;
@ -202,6 +200,10 @@ void lovrPlatformSwapBuffers() {
glfwSwapBuffers(state.window);
}
void* lovrPlatformGetProcAddress(const char* function) {
return (void*) glfwGetProcAddress(function);
}
void lovrPlatformOnWindowClose(windowCloseCallback callback) {
state.onWindowClose = callback;
}

View File

@ -224,7 +224,7 @@ void lovrGraphicsCreateWindow(WindowFlags* flags) {
lovrPlatformOnWindowClose(onCloseWindow);
lovrPlatformOnWindowResize(onResizeWindow);
lovrPlatformGetFramebufferSize(&state.width, &state.height);
lovrGpuInit(lovrGetProcAddress);
lovrGpuInit(lovrPlatformGetProcAddress);
state.defaultCanvas = lovrCanvasCreateFromHandle(state.width, state.height, (CanvasFlags) { .stereo = false }, 0, 0, 0, 1, true);

View File

@ -211,7 +211,7 @@ typedef struct {
uint32_t instances;
} DrawCommand;
void lovrGpuInit(getProcAddressProc getProcAddress);
void lovrGpuInit(void* (*getProcAddress)(const char*));
void lovrGpuDestroy(void);
void lovrGpuClear(struct Canvas* canvas, Color* color, float* depth, int* stencil);
void lovrGpuCompute(struct Shader* shader, int x, int y, int z);

View File

@ -1011,7 +1011,7 @@ static void lovrGpuSetViewports(float* viewport, uint32_t count) {
// GPU
void lovrGpuInit(getProcAddressProc getProcAddress) {
void lovrGpuInit(void* (*getProcAddress)(const char*)) {
#ifdef LOVR_GL
gladLoadGLLoader((GLADloadproc) getProcAddress);
#elif defined(LOVR_GLES)