|
@@ -13,8 +13,13 @@
|
|
|
|
|
|
#include <os_dependent.h>
|
|
|
|
|
|
+#define GLFW_INCLUDE_GLEXT
|
|
|
#include <GLFW/glfw3.h>
|
|
|
-#include <OpenGL/glext.h>
|
|
|
+
|
|
|
+/* "Apple" fix */
|
|
|
+#ifndef GL_TEXTURE_RECTANGLE
|
|
|
+#define GL_TEXTURE_RECTANGLE GL_TEXTURE_RECTANGLE_EXT
|
|
|
+#endif
|
|
|
|
|
|
#include <palette.h>
|
|
|
|
|
@@ -22,26 +27,22 @@ typedef struct GLWindow_t GLWindow;
|
|
|
|
|
|
struct KeyArray
|
|
|
{
|
|
|
- uint8_t lastState;
|
|
|
- uint8_t curState;
|
|
|
- uint8_t debounced;
|
|
|
- GLFWwindow* window;
|
|
|
+ uint8_t lastState;
|
|
|
+ uint8_t curState;
|
|
|
+ uint8_t debounced;
|
|
|
+ GLFWwindow* window;
|
|
|
};
|
|
|
|
|
|
struct GLWindow_t
|
|
|
{
|
|
|
- struct KeyArray keyArray[512];
|
|
|
- GLFWwindow* windows;
|
|
|
- uint8_t *videoMemory;
|
|
|
- GLint videoTexture;
|
|
|
- int WIDTH;
|
|
|
- int HEIGHT;
|
|
|
+ struct KeyArray keyArray[512];
|
|
|
+ GLFWwindow* windows;
|
|
|
+ uint8_t *videoMemory;
|
|
|
+ GLint videoTexture;
|
|
|
+ int WIDTH;
|
|
|
+ int HEIGHT;
|
|
|
};
|
|
|
|
|
|
-#ifndef GL_TEXTURE_RECTANGLE_EXT
|
|
|
-#define GL_TEXTURE_RECTANGLE_EXT GL_TEXTURE_RECTANGLE_NV
|
|
|
-#endif
|
|
|
-
|
|
|
static int window_num = 0;
|
|
|
|
|
|
void GLWindowInitEx(GLWindow *g, int w, int h)
|
|
@@ -58,10 +59,10 @@ void GLWindowInit(GLWindow *g)
|
|
|
|
|
|
void ShowScreen(GLWindow *g, int w, int h)
|
|
|
{
|
|
|
- glBindTexture(GL_TEXTURE_RECTANGLE_EXT, g->videoTexture);
|
|
|
+ glBindTexture(GL_TEXTURE_RECTANGLE, g->videoTexture);
|
|
|
|
|
|
// glTexSubImage2D is faster when not using a texture range
|
|
|
- glTexSubImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, 0, 0, w, h, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, g->videoMemory);
|
|
|
+ glTexSubImage2D(GL_TEXTURE_RECTANGLE, 0, 0, 0, w, h, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, g->videoMemory);
|
|
|
glBegin(GL_QUADS);
|
|
|
|
|
|
glTexCoord2f(0.0f, 0.0f);
|
|
@@ -99,20 +100,20 @@ void setupGL(GLWindow *g, int w, int h)
|
|
|
glLoadIdentity();
|
|
|
|
|
|
glDisable(GL_TEXTURE_2D);
|
|
|
- glEnable(GL_TEXTURE_RECTANGLE_EXT);
|
|
|
- glBindTexture(GL_TEXTURE_RECTANGLE_EXT, g->videoTexture);
|
|
|
+ glEnable(GL_TEXTURE_RECTANGLE);
|
|
|
+ glBindTexture(GL_TEXTURE_RECTANGLE, g->videoTexture);
|
|
|
|
|
|
// glTextureRangeAPPLE(GL_TEXTURE_RECTANGLE_NV_EXT, 0, NULL);
|
|
|
|
|
|
// glTexParameteri(GL_TEXTURE_RECTANGLE_NV_EXT, GL_TEXTURE_STORAGE_HINT_APPLE , GL_STORAGE_CACHED_APPLE);
|
|
|
// glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE);
|
|
|
- glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
|
- glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
|
|
- glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
|
|
- glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
|
|
+ glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
|
+ glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
|
|
+ glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
|
|
+ glTexParameteri(GL_TEXTURE_RECTANGLE, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
|
|
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
|
|
|
|
|
|
- glTexImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, GL_RGBA, w,
|
|
|
+ glTexImage2D(GL_TEXTURE_RECTANGLE, 0, GL_RGBA, w,
|
|
|
h, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, g->videoMemory);
|
|
|
|
|
|
glDisable(GL_DEPTH_TEST);
|
|
@@ -135,7 +136,7 @@ void restoreGL(GLWindow *g, int w, int h)
|
|
|
glLoadIdentity();
|
|
|
|
|
|
glDisable(GL_TEXTURE_2D);
|
|
|
- glEnable(GL_TEXTURE_RECTANGLE_EXT);
|
|
|
+ glEnable(GL_TEXTURE_RECTANGLE);
|
|
|
glDisable(GL_DEPTH_TEST);
|
|
|
}
|
|
|
|
|
@@ -164,6 +165,10 @@ void sizeHandler(GLFWwindow* window,int xs,int ys)
|
|
|
glViewport(0, 0, xs, ys);
|
|
|
}
|
|
|
|
|
|
+static void error_callback(int error, const char* description)
|
|
|
+{
|
|
|
+ puts(description);
|
|
|
+}
|
|
|
|
|
|
void initDisplay(GLWindow *g)
|
|
|
{
|
|
@@ -173,14 +178,18 @@ void initDisplay(GLWindow *g)
|
|
|
/// Initialize GLFW
|
|
|
glfwInit();
|
|
|
|
|
|
+ glfwSetErrorCallback(error_callback);
|
|
|
+
|
|
|
// Open screen OpenGL window
|
|
|
if( !(g->windows=glfwCreateWindow( g->WIDTH, g->HEIGHT, "Main", NULL, NULL)) )
|
|
|
{
|
|
|
glfwTerminate();
|
|
|
fprintf(stderr, "Window creation error...\n");
|
|
|
- return;
|
|
|
+ abort();
|
|
|
}
|
|
|
|
|
|
+ glfwSetWindowAspectRatio(g->windows, 4, 3);
|
|
|
+
|
|
|
glfwMakeContextCurrent(g->windows);
|
|
|
setupGL(g, g->WIDTH, g->HEIGHT);
|
|
|
|
|
@@ -198,7 +207,7 @@ void drawPixel(GLWindow *gw, int x, int y, uint32_t colour)
|
|
|
{
|
|
|
uint8_t r,g,b,a;
|
|
|
|
|
|
- uint32_t offset = (y*gw->WIDTH*4)+4*x;
|
|
|
+ uint32_t offset = (y*gw->WIDTH*4U)+4U*x;
|
|
|
|
|
|
if ((x < 0) || (x > gw->WIDTH) || (y < 0) || (y > gw->HEIGHT))
|
|
|
return;
|
|
@@ -288,7 +297,7 @@ void drawLine(GLWindow *g, int x0, int y0, int x1, int y1, uint32_t colour)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- exit:
|
|
|
+ exit:
|
|
|
return;
|
|
|
}
|
|
|
|