#define RGFW_OPENGL #define RGFW_ALLOC_DROPFILES #define RGFW_IMPLEMENTATION #define RGFW_PRINT_ERRORS #define RGFW_DEBUG #define GL_SILENCE_DEPRECATION #include "RGFW.h" #include #include #include "mlton-rgfw-export.h" RGFW_window* createWindow(char* title, int x, int y, int width, int height) { return RGFW_createWindow(title, x, y, width, height, RGFW_windowCenter | RGFW_windowOpenGL); } void closeWindow(RGFW_window* window) { RGFW_window_close(window); } Bool shouldCloseWindow(RGFW_window* window) { if (RGFW_window_shouldClose(window)) { return true; } else { return false; } } void swapBuffers(RGFW_window* window) { RGFW_window_swapBuffers_OpenGL(window); } void writeClipboard(char* string, int stringSize) { RGFW_writeClipboard(string, stringSize); } void keyCallback(RGFW_window* window, unsigned char key, unsigned char symbol, unsigned char keymod, unsigned char repeated, unsigned char pressed) { if (pressed || repeated) { if (key == RGFW_escape) { mltonEscape(); } } } void setKeyCallback() { RGFW_setKeyCallback(keyCallback); } void pollEvents() { RGFW_pollEvents(); } // OpenGL constants used below unsigned int VERTEX_SHADER = GL_VERTEX_SHADER; unsigned int FRAGMENT_SHADER = GL_FRAGMENT_SHADER; unsigned int TRIANGLES = GL_TRIANGLES; unsigned int STATIC_DRAW = GL_STATIC_DRAW; unsigned int DYNAMIC_DRAW = GL_DYNAMIC_DRAW; // OpenGL functions used below void enableDepthTest() { glEnable(GL_DEPTH_TEST); } void viewport(int width, int height) { glViewport(0, 0, width, height); } void clearColor(float r, float g, float b, float a) { glClearColor(r, g, b, a); } void clear() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); } unsigned int createBuffer() { unsigned int buffer; glGenBuffers(1, &buffer); return buffer; } void bindBuffer(unsigned int buffer) { glBindBuffer(GL_ARRAY_BUFFER, buffer); } void bufferData(float* vector, int vectorLength, unsigned int updateMode) { glBufferData(GL_ARRAY_BUFFER, sizeof(float) * vectorLength, vector, updateMode); } unsigned int createShader(unsigned int shaderType) { return glCreateShader(shaderType); } void shaderSource(unsigned int shader, const char *sourceString) { glShaderSource(shader, 1, &sourceString, NULL); } void compileShader(unsigned int shader) { glCompileShader(shader); } void deleteShader(unsigned int shader) { glDeleteShader(shader); } void vertexAttribPointer(int location, int numVecComponents, int stride, int offset) { glVertexAttribPointer(location, numVecComponents, GL_FLOAT, GL_FALSE, stride * sizeof(float), (void*)offset); } void enableVertexAttribArray(int location) { glEnableVertexAttribArray(location); } unsigned int createProgram() { return glCreateProgram(); } void attachShader(unsigned int program, unsigned int shader) { glAttachShader(program, shader); } void linkProgram(unsigned int program) { glLinkProgram(program); } void useProgram(unsigned int program) { glUseProgram(program); } void deleteProgram(unsigned int program) { glDeleteProgram(program); } void drawArrays(unsigned int drawMode, int startIndex, int numVertices) { glDrawArrays(drawMode, startIndex, numVertices); } int getUniformLocation(unsigned int program, const char *uniformName) { glGetUniformLocation(program, uniformName); } void uniform4f(int uniformLocation, float a, float b, float c, float d) { glUniform4f(uniformLocation, a, b, c, d); }