Get Linux build working with OpenGL changes

This commit is contained in:
Aaron Culliney 2014-10-07 22:05:14 -07:00
parent 69bd40216b
commit ca29ec543d
4 changed files with 58 additions and 10 deletions

View File

@ -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

View File

@ -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...])

View File

@ -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++;

View File

@ -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