From ca29ec543de358f1b9758ad0de4e46720b069c52 Mon Sep 17 00:00:00 2001 From: Aaron Culliney Date: Tue, 7 Oct 2014 22:05:14 -0700 Subject: [PATCH] Get Linux build working with OpenGL changes --- Makefile.am | 26 ++++++++++++++++++++++---- configure.ac | 3 ++- src/interface.c | 8 ++++++++ src/video/glvideo.c | 31 ++++++++++++++++++++++++++----- 4 files changed, 58 insertions(+), 10 deletions(-) diff --git a/Makefile.am b/Makefile.am index b6acbe6c..efd7f3c7 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,5 +1,5 @@ -AM_CPPFLAGS = -Isrc +AM_CPPFLAGS = -Isrc -DCONFIG_DATADIR=\"@datadir@\" AM_CPPFLAGS += -I../src # work around some bug in make distcheck AM_LFLAGS = -i #AM_COLOR_TESTS = no @@ -37,7 +37,11 @@ INTERFACE_CLASSIC_SRC = \ VIDEO_SRC = \ src/video/xvideo.c \ src/video/glvideo.c \ - src/video/glinput.c + src/video/glinput.c \ + src/video_util/matrixUtil.c \ + src/video_util/modelUtil.c \ + src/video_util/sourceUtil.c \ + src/video_util/vectorUtil.c AUDIO_SRC = \ src/audio/soundcore.c src/audio/soundcore-openal.c src/audio/speaker.c \ @@ -119,10 +123,22 @@ testvm_DEPENDENCIES = @ASM_O@ @META_O@ @VIDEO_O@ EXTRA_testvm_SOURCES = $(ASM_SRC_x86) $(VIDEO_SRC) ############################################################################### -# Misc +# Misc & Installation +# manpage man_MANS = docs/apple2ix.6 +# shaders +shadersdir = @datadir@/@PACKAGE@/shaders +shaders_DATA = src/video/Basic.vsh src/video/Basic.fsh + +# disk images +disksdir = @datadir@/@PACKAGE@/disks +disks_DATA = \ + disks/README disks/blank.dsk.gz disks/blank.nib.gz disks/etc.dsk.gz \ + disks/mystery.dsk.gz disks/speedtest.dsk.gz disks/speedtest.txt + +# Extra distribution stuff EXTRA_DIST = reconf.sh configure README.debugger PROBLEMS .apple2 \ \ disks/README disks/blank.dsk.gz disks/blank.nib.gz disks/etc.dsk.gz \ @@ -131,6 +147,8 @@ EXTRA_DIST = reconf.sh configure README.debugger PROBLEMS .apple2 \ docs/apple2ix.6 \ \ src/font.txt \ - src/x86/genglue + src/x86/genglue \ + \ + src/video/Basic.vsh src/video/Basic.fsh CLEANFILES = src/font.c src/rom.c src/meta/debug.c src/x86/glue.S diff --git a/configure.ac b/configure.ac index 35035f83..3b67a9fa 100644 --- a/configure.ac +++ b/configure.ac @@ -163,7 +163,8 @@ AC_ARG_ENABLE([opengl], AS_HELP_STRING([--disable-opengl], [Disable OpenGL video AC_SEARCH_LIBS(glewInit, [GLEW glew], [ opengl_supported='yes' AC_DEFINE(VIDEO_OPENGL, 1, [Use OpenGL]) - VIDEO_O="src/video/glvideo.o src/video/glinput.o" + AC_DEFINE(USE_GLUT, 1, [Use GLUT library]) + VIDEO_O="src/video/glvideo.o src/video/glinput.o src/video_util/matrixUtil.o src/video_util/modelUtil.o src/video_util/sourceUtil.o src/video_util/vectorUtil.o" AC_MSG_RESULT([Building emulator with OpenGL support, w00t!]) ], [ AC_MSG_WARN([Did not find OpenGL GLEW library...]) diff --git a/src/interface.c b/src/interface.c index cd43d4a5..53f12a45 100644 --- a/src/interface.c +++ b/src/interface.c @@ -689,7 +689,9 @@ typedef enum interface_enum_t { OPT_CALIBRATE, OPT_PATH, OPT_COLOR, +#if !VIDEO_OPENGL OPT_VIDEO, +#endif OPT_VOLUME, OPT_CAPS, @@ -812,9 +814,11 @@ void c_interface_parameters() (color_mode == COLOR_INTERP) ? "Interpolated" : "Black/White "); break; +#if !VIDEO_OPENGL case OPT_VIDEO: sprintf(temp, "%s", (a2_video_mode == VIDEO_1X) ? "1X " : (a2_video_mode == VIDEO_2X) ? "2X " : "Fullscreen"); break; +#endif case OPT_JOYSTICK: snprintf(temp, TEMPSIZE, "%s", (joy_mode == JOY_KPAD) ? "Emulated on Keypad" : @@ -987,6 +991,7 @@ void c_interface_parameters() } break; +#if !VIDEO_OPENGL case OPT_VIDEO: if (a2_video_mode == 1) { @@ -998,6 +1003,7 @@ void c_interface_parameters() } video_set_mode(a2_video_mode); break; +#endif case OPT_VOLUME: if (sound_volume > 0) @@ -1091,6 +1097,7 @@ void c_interface_parameters() } break; +#if !VIDEO_OPENGL case OPT_VIDEO: if (a2_video_mode == NUM_VIDOPTS-1) { @@ -1102,6 +1109,7 @@ void c_interface_parameters() } video_set_mode(a2_video_mode); break; +#endif case OPT_VOLUME: sound_volume++; diff --git a/src/video/glvideo.c b/src/video/glvideo.c index aa0e3ff4..b0c232da 100644 --- a/src/video/glvideo.c +++ b/src/video/glvideo.c @@ -468,7 +468,7 @@ static GLuint _build_program(demoSource *vertexSource, demoSource *fragmentSourc static demoSource *_create_shader_source(const char *fileName) { demoSource *src = NULL; -#ifdef __APPLE__ +#if defined(__APPLE__) CFBundleRef mainBundle = CFBundleGetMainBundle(); CFStringRef fileString = CFStringCreateWithCString(/*allocator*/NULL, fileName, CFStringGetSystemEncoding()); CFURLRef fileURL = CFBundleCopyResourceURL(mainBundle, fileString, NULL, NULL); @@ -477,8 +477,17 @@ static demoSource *_create_shader_source(const char *fileName) { CFRELEASE(fileURL); src = srcLoadSource(CFStringGetCStringPtr(filePath, CFStringGetSystemEncoding())); CFRELEASE(filePath); +#elif defined(CONFIG_DATADIR) + char *filePath = NULL; + asprintf(&filePath, "%s/%s/shaders/%s", CONFIG_DATADIR, PACKAGE_NAME, fileName); + if (filePath) { + src = srcLoadSource(filePath); + free(filePath); + } else { + ERRLOG("OOPS Could not load shader from %s (%s)", filePath, fileName); + } #else -#error FIXME TODO need to leveage GNU build system install_dir or somesuch stuff ... +#error need to specify a DATADIR for shader files, etc #endif return src; } @@ -538,7 +547,7 @@ static void gldriver_init_common(void) { glEnable(GL_CULL_FACE); // Always use this clear color - glClearColor(0.5f, 0.4f, 0.5f, 1.0f); + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Draw our scene once without presenting the rendered image. // This is done in order to pre-warm OpenGL @@ -548,6 +557,14 @@ static void gldriver_init_common(void) { // Check for errors to make sure all of our setup went ok GL_ERRLOG("finished initialization"); + +#if !defined(__APPLE__) + glBindFramebuffer(GL_FRAMEBUFFER, defaultFBO); +#endif + GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); + if (status != GL_FRAMEBUFFER_COMPLETE) { + ERRQUIT("framebuffer status: %04X", status); + } } static void gldriver_shutdown(void) { @@ -632,6 +649,10 @@ static void gldriver_render(void) { // Draw the CRT object glDrawElements(GL_TRIANGLES, crtNumElements, crtElementType, 0); + +#if USE_GLUT + glutSwapBuffers(); +#endif } static void gldriver_reshape(int w, int h) { @@ -667,7 +688,7 @@ static void gldriver_reshape(int w, int h) { } #if USE_GLUT -static void _init_with_glut(GLuint fbo) { +static void gldriver_init_glut(GLuint fbo) { glutInit(&argc, argv); glutInitDisplayMode(/*GLUT_DOUBLE|*/GLUT_RGBA|GLUT_DEPTH); glutInitWindowSize(windowWidth, windowHeight); @@ -705,7 +726,7 @@ void video_driver_init(void *fbo) { #if defined(__APPLE__) gldriver_init_common(); #elif USE_GLUT - gldriver_init_glut(); + gldriver_init_glut(fbo); #else #error no working codepaths #endif