commit 54a11ede8d05dc2ff95f6d3e6650e6738bf1214e
parent 552ccdd5fd43bff32b3b00929ce131971aa61c28
Author: Brian Swetland <swetland@frotz.net>
Date: Mon, 2 Sep 2013 05:08:39 -0700
build: remove compile time dependency on OpenGL
- no longer link against libGL.so
- SDL will dlopen it at runtime
- use the same symbol resolution code that supported windows
- tidy up and automate the funcpoint/functable header generation
Diffstat:
6 files changed, 154 insertions(+), 65 deletions(-)
diff --git a/Makefile b/Makefile
@@ -20,7 +20,7 @@ SDLCFG := /work/sdl2/bin/sdl2-config
SDLFLAGS := $(shell $(SDLCFG) --cflags)
#SDLLIBS := $(shell $(SDLCFG) --static-libs)
-SDLLIBS := /work/sdl2/lib/libSDL2.a -lpthread -lrt
+SDLLIBS := /work/sdl2/lib/libSDL2.a -lpthread -lrt -ldl
HOST_CFLAGS := $(SDLFLAGS) -Wall -g -O2
HOST_CFLAGS += -std=c++0x
@@ -32,9 +32,7 @@ HOST_LFLAGS := -static-libstdc++
#HOST_LFLAGS += -Wl,--verbose
#HOST_LFLAGS += -Wl,-gc-sections
-#GLLIB := /usr/lib/nvidia-experimental-310/libGL.so.310.14
-GLLIB := -L/usr/lib -lGL
-HOST_LIBS := $(SDLLIBS) $(GLLIB) -lm -lpng
+HOST_LIBS := $(SDLLIBS) -lm -lpng
include $(wildcard arch/*/config.mk)
diff --git a/common/core.h b/common/core.h
@@ -16,18 +16,9 @@
#ifndef _CORE_H_
#define _CORE_H_
-#ifdef _WIN32
-#define NO_SDL_GLEXT 1
+//#define NO_SDL_GLEXT 1
#include <SDL.h>
-#include <SDL_opengl.h>
#include "opengl.h"
-#else
-#define GL_GLEXT_PROTOTYPES 1
-#define NO_SDL_GLEXT 1
-#include <SDL.h>
-#include <SDL_opengl.h>
-#include "glcorearb.h"
-#endif
#include <math.h>
diff --git a/common/gen-opengl-h.sh b/common/gen-opengl-h.sh
@@ -0,0 +1,21 @@
+#!/bin/bash
+
+echo '/* WARNING - MACHINE GENERATED FILE - DO NOT EDIT */'
+echo '#ifndef _OPEN_GL_H_'
+echo '#define _OPEN_GL_H_'
+echo '#include "glcorearb.h"'
+echo '#ifndef GLXTN'
+echo '#define GLXTN extern'
+echo '#define __NO_GLXTN_TABLE__'
+echo '#endif'
+awk '{ print "GLXTN PFN" toupper($1) "PROC " $1 ";" }' < gl-api.txt
+echo '#ifndef __NO_GLXTN_TABLE__'
+echo '#define __GLFN__(n) { (void**) &n, #n }'
+echo 'struct {'
+echo ' void **func;'
+echo ' const char *name;'
+echo '} fntb[] = {'
+awk '{ print "\t__GLFN__(" $1 ")," }' < gl-api.txt
+echo '};'
+echo '#endif'
+echo '#endif'
diff --git a/common/gl-api.txt b/common/gl-api.txt
@@ -0,0 +1,51 @@
+glActiveTexture
+glAttachShader
+glBindBuffer
+glBindBufferBase
+glBindTexture
+glBindVertexArray
+glBlendFunc
+glBufferData
+glClear
+glCompileShader
+glCreateProgram
+glCreateShader
+glDeleteBuffers
+glDeleteProgram
+glDeleteShader
+glDeleteTextures
+glDeleteVertexArrays
+glDisable
+glDisableVertexAttribArray
+glDrawArrays
+glDrawArraysInstanced
+glDrawElements
+glDrawElementsInstanced
+glEnable
+glEnableVertexAttribArray
+glFlush
+glGenBuffers
+glGenerateMipmap
+glGenTextures
+glGenVertexArrays
+glGetAttribLocation
+glGetIntegerv
+glGetProgramInfoLog
+glGetProgramiv
+glGetShaderInfoLog
+glGetShaderiv
+glGetString
+glGetUniformBlockIndex
+glGetUniformLocation
+glLinkProgram
+glShaderSource
+glTexImage2D
+glTexParameteri
+glUniform1i
+glUniform4fv
+glUniformBlockBinding
+glUniformMatrix4fv
+glUseProgram
+glVertexAttribDivisor
+glVertexAttribIPointer
+glVertexAttribPointer
diff --git a/common/glapp.cc b/common/glapp.cc
@@ -15,17 +15,14 @@
#include <stdio.h>
#include <stdlib.h>
-
#include <time.h>
-#ifdef _WIN32
-#define GLUE_DEFINE_EXTENSIONS 1
-#endif
+/* flag opengl.h to include the extension table */
+#define GLXTN
#include "app.h"
#include "util.h"
-#ifdef _WIN32
static void gl_map_functions(void) {
int n;
if (!SDL_GL_ExtensionSupported("GL_ARB_shader_objects") ||
@@ -39,9 +36,6 @@ static void gl_map_functions(void) {
die("cannot find func '%s'", fntb[n].name);
}
}
-#else
-void gl_map_functions(void) {}
-#endif
static void quit(void) {
SDL_Quit();
@@ -219,6 +213,8 @@ int App::start(void) {
/* todo: verify extension availability */
}
+ gl_map_functions();
+
{ // TODO: filter or disable in release mode
PFNGLDEBUGMESSAGECALLBACKPROC fn;
fn = (PFNGLDEBUGMESSAGECALLBACKPROC)
@@ -240,7 +236,6 @@ int App::start(void) {
dump_gl_params();
SDL_GL_SetSwapInterval(_vsync);
- gl_map_functions();
if (init())
return -1;
diff --git a/common/opengl.h b/common/opengl.h
@@ -1,86 +1,119 @@
-/* Copyright 2013 Brian Swetland <swetland@frotz.net>
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
+/* WARNING - MACHINE GENERATED FILE - DO NOT EDIT */
#ifndef _OPEN_GL_H_
#define _OPEN_GL_H_
-
#include "glcorearb.h"
-
-#ifndef GLUE_DEFINE_EXTENSIONS
+#ifndef GLXTN
#define GLXTN extern
-#else
-#define GLXTN
+#define __NO_GLXTN_TABLE__
#endif
-
GLXTN PFNGLACTIVETEXTUREPROC glActiveTexture;
GLXTN PFNGLATTACHSHADERPROC glAttachShader;
GLXTN PFNGLBINDBUFFERPROC glBindBuffer;
GLXTN PFNGLBINDBUFFERBASEPROC glBindBufferBase;
+GLXTN PFNGLBINDTEXTUREPROC glBindTexture;
GLXTN PFNGLBINDVERTEXARRAYPROC glBindVertexArray;
+GLXTN PFNGLBLENDFUNCPROC glBlendFunc;
GLXTN PFNGLBUFFERDATAPROC glBufferData;
+GLXTN PFNGLCLEARPROC glClear;
GLXTN PFNGLCOMPILESHADERPROC glCompileShader;
GLXTN PFNGLCREATEPROGRAMPROC glCreateProgram;
GLXTN PFNGLCREATESHADERPROC glCreateShader;
GLXTN PFNGLDELETEBUFFERSPROC glDeleteBuffers;
GLXTN PFNGLDELETEPROGRAMPROC glDeleteProgram;
GLXTN PFNGLDELETESHADERPROC glDeleteShader;
+GLXTN PFNGLDELETETEXTURESPROC glDeleteTextures;
GLXTN PFNGLDELETEVERTEXARRAYSPROC glDeleteVertexArrays;
+GLXTN PFNGLDISABLEPROC glDisable;
GLXTN PFNGLDISABLEVERTEXATTRIBARRAYPROC glDisableVertexAttribArray;
+GLXTN PFNGLDRAWARRAYSPROC glDrawArrays;
GLXTN PFNGLDRAWARRAYSINSTANCEDPROC glDrawArraysInstanced;
+GLXTN PFNGLDRAWELEMENTSPROC glDrawElements;
GLXTN PFNGLDRAWELEMENTSINSTANCEDPROC glDrawElementsInstanced;
+GLXTN PFNGLENABLEPROC glEnable;
GLXTN PFNGLENABLEVERTEXATTRIBARRAYPROC glEnableVertexAttribArray;
+GLXTN PFNGLFLUSHPROC glFlush;
GLXTN PFNGLGENBUFFERSPROC glGenBuffers;
GLXTN PFNGLGENERATEMIPMAPPROC glGenerateMipmap;
+GLXTN PFNGLGENTEXTURESPROC glGenTextures;
GLXTN PFNGLGENVERTEXARRAYSPROC glGenVertexArrays;
GLXTN PFNGLGETATTRIBLOCATIONPROC glGetAttribLocation;
-GLXTN PFNGLGETPROGRAMIVPROC glGetProgramiv;
+GLXTN PFNGLGETINTEGERVPROC glGetIntegerv;
GLXTN PFNGLGETPROGRAMINFOLOGPROC glGetProgramInfoLog;
-GLXTN PFNGLGETSHADERIVPROC glGetShaderiv;
+GLXTN PFNGLGETPROGRAMIVPROC glGetProgramiv;
GLXTN PFNGLGETSHADERINFOLOGPROC glGetShaderInfoLog;
+GLXTN PFNGLGETSHADERIVPROC glGetShaderiv;
+GLXTN PFNGLGETSTRINGPROC glGetString;
+GLXTN PFNGLGETUNIFORMBLOCKINDEXPROC glGetUniformBlockIndex;
GLXTN PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation;
GLXTN PFNGLLINKPROGRAMPROC glLinkProgram;
GLXTN PFNGLSHADERSOURCEPROC glShaderSource;
+GLXTN PFNGLTEXIMAGE2DPROC glTexImage2D;
+GLXTN PFNGLTEXPARAMETERIPROC glTexParameteri;
GLXTN PFNGLUNIFORM1IPROC glUniform1i;
GLXTN PFNGLUNIFORM4FVPROC glUniform4fv;
-GLXTN PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
GLXTN PFNGLUNIFORMBLOCKBINDINGPROC glUniformBlockBinding;
+GLXTN PFNGLUNIFORMMATRIX4FVPROC glUniformMatrix4fv;
GLXTN PFNGLUSEPROGRAMPROC glUseProgram;
GLXTN PFNGLVERTEXATTRIBDIVISORPROC glVertexAttribDivisor;
-GLXTN PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
GLXTN PFNGLVERTEXATTRIBIPOINTERPROC glVertexAttribIPointer;
-
-#ifdef GLUE_DEFINE_EXTENSIONS
-#define EFUNC(n) { (void**) &n, #n }
+GLXTN PFNGLVERTEXATTRIBPOINTERPROC glVertexAttribPointer;
+#ifndef __NO_GLXTN_TABLE__
+#define __GLFN__(n) { (void**) &n, #n }
struct {
void **func;
const char *name;
} fntb[] = {
- EFUNC(glActiveTexture), EFUNC(glAttachShader), EFUNC(glBindBuffer),
- EFUNC(glBindBufferBase), EFUNC(glBindVertexArray), EFUNC(glBufferData),
- EFUNC(glCompileShader), EFUNC(glCreateProgram), EFUNC(glCreateShader),
- EFUNC(glDeleteBuffers), EFUNC(glDeleteProgram), EFUNC(glDeleteShader),
- EFUNC(glDeleteVertexArrays), EFUNC(glDisableVertexAttribArray),
- EFUNC(glDrawArraysInstanced), EFUNC(glDrawElementsInstanced),
- EFUNC(glEnableVertexAttribArray), EFUNC(glGenBuffers), EFUNC(glGenerateMipmap),
- EFUNC(glGenVertexArrays), EFUNC(glGetAttribLocation), EFUNC(glGetProgramiv),
- EFUNC(glGetProgramInfoLog), EFUNC(glGetShaderiv), EFUNC(glGetShaderInfoLog),
- EFUNC(glGetUniformLocation), EFUNC(glLinkProgram), EFUNC(glShaderSource),
- EFUNC(glUniform1i), EFUNC(glUniform4fv), EFUNC(glUniformMatrix4fv),
- EFUNC(glUniformBlockBinding), EFUNC(glUseProgram), EFUNC(glVertexAttribDivisor),
- EFUNC(glVertexAttribPointer), EFUNC(glVertexAttribIPointer),
+ __GLFN__(glActiveTexture),
+ __GLFN__(glAttachShader),
+ __GLFN__(glBindBuffer),
+ __GLFN__(glBindBufferBase),
+ __GLFN__(glBindTexture),
+ __GLFN__(glBindVertexArray),
+ __GLFN__(glBlendFunc),
+ __GLFN__(glBufferData),
+ __GLFN__(glClear),
+ __GLFN__(glCompileShader),
+ __GLFN__(glCreateProgram),
+ __GLFN__(glCreateShader),
+ __GLFN__(glDeleteBuffers),
+ __GLFN__(glDeleteProgram),
+ __GLFN__(glDeleteShader),
+ __GLFN__(glDeleteTextures),
+ __GLFN__(glDeleteVertexArrays),
+ __GLFN__(glDisable),
+ __GLFN__(glDisableVertexAttribArray),
+ __GLFN__(glDrawArrays),
+ __GLFN__(glDrawArraysInstanced),
+ __GLFN__(glDrawElements),
+ __GLFN__(glDrawElementsInstanced),
+ __GLFN__(glEnable),
+ __GLFN__(glEnableVertexAttribArray),
+ __GLFN__(glFlush),
+ __GLFN__(glGenBuffers),
+ __GLFN__(glGenerateMipmap),
+ __GLFN__(glGenTextures),
+ __GLFN__(glGenVertexArrays),
+ __GLFN__(glGetAttribLocation),
+ __GLFN__(glGetIntegerv),
+ __GLFN__(glGetProgramInfoLog),
+ __GLFN__(glGetProgramiv),
+ __GLFN__(glGetShaderInfoLog),
+ __GLFN__(glGetShaderiv),
+ __GLFN__(glGetString),
+ __GLFN__(glGetUniformBlockIndex),
+ __GLFN__(glGetUniformLocation),
+ __GLFN__(glLinkProgram),
+ __GLFN__(glShaderSource),
+ __GLFN__(glTexImage2D),
+ __GLFN__(glTexParameteri),
+ __GLFN__(glUniform1i),
+ __GLFN__(glUniform4fv),
+ __GLFN__(glUniformBlockBinding),
+ __GLFN__(glUniformMatrix4fv),
+ __GLFN__(glUseProgram),
+ __GLFN__(glVertexAttribDivisor),
+ __GLFN__(glVertexAttribIPointer),
+ __GLFN__(glVertexAttribPointer),
};
#endif
#endif
-