of code.legacy
| @@ -78,12 +78,6 @@ AC_CHECK_LIB(m, sin, MATH_LIBS="${MATH_LIBS} -lm") | |||
| dnl Which version of OpenGL to use? | |||
| ac_cv_my_have_gl="no" | |||
| PKG_CHECK_MODULES(GLES1, glesv1_cm, | |||
| [ac_cv_my_have_gl="yes" | |||
| AC_DEFINE(HAVE_GLES_1X, 1, Define to 1 if GLES 1.x is available) | |||
| GL_CFLAGS="${GLES1_CFLAGS}" | |||
| GL_LIBS="${GLES1_LIBS}"], | |||
| [:]) | |||
| PKG_CHECK_MODULES(GLES2, glesv2, | |||
| [ac_cv_my_have_gl="yes" | |||
| AC_DEFINE(HAVE_GLES_2X, 1, Define to 1 if GLES 2.x is available) | |||
| @@ -92,7 +86,6 @@ PKG_CHECK_MODULES(GLES2, glesv2, | |||
| [:]) | |||
| AC_CHECK_LIB(GL, glLoadIdentity, | |||
| [ac_cv_my_have_gl="yes" | |||
| AC_DEFINE(HAVE_GL_1X, 1, Define to 1 if GL 1.x is available) | |||
| AC_DEFINE(HAVE_GL_2X, 1, Define to 1 if GL 2.x is available) | |||
| GL_LIBS="-lGL"]) # FIXME: hackish | |||
| if test "${ac_cv_my_have_gl}" = "no"; then | |||
| @@ -32,12 +32,8 @@ class DebugQuadData | |||
| private: | |||
| int initialised; | |||
| float time; | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| GLuint buflist[3]; | |||
| Shader *shader; | |||
| #elif defined HAVE_GL_1X || defined HAVE_GLES_1X | |||
| GLuint buflist[3]; | |||
| #endif | |||
| GLuint texlist[1]; | |||
| uint8_t image[1][32 * 32 * 4]; | |||
| }; | |||
| @@ -70,19 +66,14 @@ void DebugQuad::TickDraw(float deltams) | |||
| { | |||
| if (data->initialised) | |||
| { | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| glDeleteBuffers(3, data->buflist); | |||
| Shader::Destroy(data->shader); | |||
| #elif defined HAVE_GL_1X || defined HAVE_GLES_1X | |||
| glDeleteBuffers(3, data->buflist); | |||
| #endif | |||
| glDeleteTextures(1, data->texlist); | |||
| data->initialised = 0; | |||
| } | |||
| } | |||
| else if (!data->initialised) | |||
| { | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| glGenBuffers(3, data->buflist); | |||
| static char const *vertexshader = | |||
| @@ -108,9 +99,6 @@ void DebugQuad::TickDraw(float deltams) | |||
| " gl_FragColor = col * tex;\n" | |||
| "}\n"; | |||
| data->shader = Shader::Create(vertexshader, fragmentshader); | |||
| #elif defined HAVE_GL_1X || defined HAVE_GLES_1X | |||
| glGenBuffers(3, data->buflist); | |||
| #endif | |||
| glGenTextures(1, data->texlist); | |||
| glEnable(GL_TEXTURE_2D); | |||
| @@ -165,7 +153,6 @@ void DebugQuad::TickDraw(float deltams) | |||
| { 0.0f, 0.0f }, { 1.0f, 1.0f }, { 1.0f, 0.0f }, | |||
| }; | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| data->shader->Bind(); | |||
| GLuint attr_pos, attr_col, attr_tex; | |||
| attr_pos = data->shader->GetAttribLocation("in_Position"); | |||
| @@ -197,61 +184,6 @@ void DebugQuad::TickDraw(float deltams) | |||
| glDisableVertexAttribArray(attr_pos); | |||
| glDisableVertexAttribArray(attr_col); | |||
| glDisableVertexAttribArray(attr_tex); | |||
| #elif defined HAVE_GL_1X || defined HAVE_GLES_1X | |||
| /* Reset all model-view-projection matrices */ | |||
| glMatrixMode(GL_PROJECTION); | |||
| glPushMatrix(); | |||
| glLoadIdentity(); | |||
| glMatrixMode(GL_MODELVIEW); | |||
| glPushMatrix(); | |||
| glLoadIdentity(); | |||
| /* Set up state machine */ | |||
| glDisable(GL_DEPTH_TEST); | |||
| glEnableClientState(GL_TEXTURE_COORD_ARRAY); | |||
| glEnable(GL_TEXTURE_2D); | |||
| glEnableClientState(GL_VERTEX_ARRAY); | |||
| glEnableClientState(GL_COLOR_ARRAY); | |||
| glEnable(GL_BLEND); | |||
| glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | |||
| /* Bind texture */ | |||
| glClientActiveTexture(GL_TEXTURE0); | |||
| glBindTexture(GL_TEXTURE_2D, data->texlist[0]); | |||
| /* Bind vertex, color and texture coordinate buffers */ | |||
| #if defined HAVE_GL_1X | |||
| glBindBuffer(GL_ARRAY_BUFFER, data->buflist[0]); | |||
| glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(GLfloat), verts, GL_STATIC_DRAW); | |||
| glVertexPointer(2, GL_FLOAT, 0, NULL); | |||
| glBindBuffer(GL_ARRAY_BUFFER, data->buflist[1]); | |||
| glBufferData(GL_ARRAY_BUFFER, 24 * sizeof(GLfloat), cols, GL_STATIC_DRAW); | |||
| glColorPointer(4, GL_FLOAT, 0, NULL); | |||
| glBindBuffer(GL_ARRAY_BUFFER, data->buflist[2]); | |||
| glBufferData(GL_ARRAY_BUFFER, 12 * sizeof(GLfloat), tcs, GL_STATIC_DRAW); | |||
| glTexCoordPointer(2, GL_FLOAT, 0, NULL); | |||
| #else | |||
| glVertexPointer(2, GL_FLOAT, 0, verts); | |||
| glColorPointer(4, GL_FLOAT, 0, cols); | |||
| glTexCoordPointer(2, GL_FLOAT, 0, tcs); | |||
| #endif | |||
| /* Draw arrays */ | |||
| glDrawArrays(GL_TRIANGLES, 0, 6); | |||
| /* Disable state machine features */ | |||
| glDisableClientState(GL_VERTEX_ARRAY); | |||
| glDisableClientState(GL_COLOR_ARRAY); | |||
| glDisableClientState(GL_TEXTURE_COORD_ARRAY); | |||
| /* Restore matrices */ | |||
| glMatrixMode(GL_PROJECTION); | |||
| glPopMatrix(); | |||
| glMatrixMode(GL_MODELVIEW); | |||
| glPopMatrix(); | |||
| #endif | |||
| } | |||
| DebugQuad::~DebugQuad() | |||
| @@ -98,9 +98,7 @@ EglApp::EglApp(char const *title, vec2i res, float fps) : | |||
| { | |||
| EGL_BUFFER_SIZE, 16, | |||
| EGL_RENDERABLE_TYPE, | |||
| #if defined HAVE_GLES_1X | |||
| EGL_OPENGL_ES_BIT, | |||
| #elif defined HAVE_GLES_2X | |||
| #if defined HAVE_GLES_2X | |||
| EGL_OPENGL_ES2_BIT, | |||
| #endif | |||
| EGL_NONE | |||
| @@ -130,9 +128,7 @@ EglApp::EglApp(char const *title, vec2i res, float fps) : | |||
| EGLint ctxattr[] = | |||
| { | |||
| #if defined HAVE_GLES_1X | |||
| EGL_CONTEXT_CLIENT_VERSION, 1, | |||
| #elif defined HAVE_GLES_2X | |||
| #if defined HAVE_GLES_2X | |||
| EGL_CONTEXT_CLIENT_VERSION, 2, | |||
| #endif | |||
| EGL_NONE | |||
| @@ -19,35 +19,18 @@ | |||
| #define GL_GLEXT_PROTOTYPES | |||
| /* Only define one GL platform */ | |||
| #if defined HAVE_GL_1X | |||
| # undef HAVE_GLES_1X | |||
| #endif | |||
| #if defined HAVE_GLES_2X | |||
| # undef HAVE_GL_1X | |||
| # undef HAVE_GLES_1X | |||
| #endif | |||
| #if defined HAVE_GL_2X | |||
| # undef HAVE_GL_1X | |||
| # undef HAVE_GLES_1X | |||
| # undef HAVE_GLES_2X | |||
| #endif | |||
| /* Include GL */ | |||
| #if defined HAVE_GL_1X || defined HAVE_GL_2X | |||
| #if defined HAVE_GL_2X | |||
| # if defined __APPLE__ && defined __MACH__ | |||
| # include <OpenGL/gl.h> | |||
| # else | |||
| # define GL_GLEXT_PROTOTYPES | |||
| # include <GL/gl.h> | |||
| # endif | |||
| #elif defined HAVE_GLES_1X | |||
| # if defined __APPLE__ && defined __MACH__ | |||
| # include <OpenGLES/ES1/gl.h> | |||
| # include <OpenGLES/ES1/glext.h> | |||
| # else | |||
| # include <GLES/gl.h> | |||
| # include <GLES/glext.h> | |||
| # endif | |||
| #elif defined HAVE_GLES_2X | |||
| # if defined __APPLE__ && defined __MACH__ | |||
| # include <OpenGLES/ES2/gl.h> | |||
| @@ -59,13 +42,8 @@ | |||
| #endif | |||
| /* Redefine some function names */ | |||
| #if defined HAVE_GL_1X | |||
| # define glClearDepthf glClearDepth | |||
| #elif defined HAVE_GL_2X | |||
| #if defined HAVE_GL_2X | |||
| # define glClearDepthf glClearDepth | |||
| #elif defined HAVE_GLES_1X | |||
| # define glGenVertexArrays glGenVertexArraysOES | |||
| # define glDeleteVertexArrays glDeleteVertexArraysOES | |||
| #elif defined HAVE_GLES_2X | |||
| # define glGenVertexArrays glGenVertexArraysOES | |||
| # define glDeleteVertexArrays glDeleteVertexArraysOES | |||
| @@ -32,9 +32,7 @@ struct Tile | |||
| int x, y, z, o; | |||
| }; | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| extern Shader *stdshader; | |||
| #endif | |||
| extern mat4 model_matrix; | |||
| /* | |||
| @@ -155,7 +153,6 @@ void Scene::Render() // XXX: rename to Blit() | |||
| model_matrix *= mat4::translate(-320.0f, -240.0f, 0.0f); | |||
| // XXX: end of debug stuff | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| GLuint uni_mat, uni_tex, attr_pos, attr_tex; | |||
| attr_pos = stdshader->GetAttribLocation("in_Position"); | |||
| attr_tex = stdshader->GetAttribLocation("in_TexCoord"); | |||
| @@ -169,31 +166,13 @@ void Scene::Render() // XXX: rename to Blit() | |||
| glEnable(GL_TEXTURE_2D); | |||
| glEnable(GL_DEPTH_TEST); | |||
| glDepthFunc(GL_LEQUAL); | |||
| # if !defined HAVE_GLES_2X | |||
| glEnable(GL_ALPHA_TEST); | |||
| glAlphaFunc(GL_GEQUAL, 0.01f); | |||
| # endif | |||
| glEnable(GL_BLEND); | |||
| glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | |||
| #else | |||
| glEnable(GL_DEPTH_TEST); | |||
| glDepthFunc(GL_LEQUAL); | |||
| #if defined HAVE_GL_2X | |||
| glEnable(GL_ALPHA_TEST); | |||
| glAlphaFunc(GL_GEQUAL, 0.01f); | |||
| #endif | |||
| glEnable(GL_BLEND); | |||
| glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); | |||
| glMatrixMode(GL_MODELVIEW); | |||
| glPushMatrix(); | |||
| glLoadIdentity(); | |||
| glMultMatrixf(&model_matrix[0][0]); | |||
| /* Set up state machine */ | |||
| glEnableClientState(GL_TEXTURE_COORD_ARRAY); | |||
| glEnable(GL_TEXTURE_2D); | |||
| glEnableClientState(GL_VERTEX_ARRAY); | |||
| #endif | |||
| for (int buf = 0, i = 0, n; i < data->ntiles; i = n, buf += 2) | |||
| { | |||
| /* Generate new vertex / texture coord buffers if necessary */ | |||
| @@ -220,18 +199,15 @@ void Scene::Render() // XXX: rename to Blit() | |||
| vertex + 18 * (j - i), texture + 12 * (j - i)); | |||
| } | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| stdshader->Bind(); | |||
| #endif | |||
| /* Bind texture */ | |||
| Tiler::Bind(data->tiles[i].code); | |||
| /* Bind vertex, color and texture coordinate buffers */ | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| # if !defined HAVE_GLES_2X | |||
| #if defined HAVE_GL_2X | |||
| glBindVertexArray(data->vao); | |||
| # endif | |||
| #endif | |||
| glEnableVertexAttribArray(attr_pos); | |||
| glEnableVertexAttribArray(attr_tex); | |||
| @@ -244,48 +220,20 @@ void Scene::Render() // XXX: rename to Blit() | |||
| glBufferData(GL_ARRAY_BUFFER, 12 * (n - i) * sizeof(GLfloat), | |||
| texture, GL_STATIC_DRAW); | |||
| glVertexAttribPointer(attr_tex, 2, GL_FLOAT, GL_FALSE, 0, 0); | |||
| #elif defined HAVE_GL_1X | |||
| glBindBuffer(GL_ARRAY_BUFFER, data->bufs[buf]); | |||
| glBufferData(GL_ARRAY_BUFFER, 18 * (n - i) * sizeof(GLfloat), | |||
| vertex, GL_STATIC_DRAW); | |||
| glVertexPointer(3, GL_FLOAT, 0, NULL); | |||
| glBindBuffer(GL_ARRAY_BUFFER, data->bufs[buf + 1]); | |||
| glBufferData(GL_ARRAY_BUFFER, 12 * (n - i) * sizeof(GLfloat), | |||
| texture, GL_STATIC_DRAW); | |||
| glTexCoordPointer(2, GL_FLOAT, 0, NULL); | |||
| #else | |||
| glVertexPointer(3, GL_FLOAT, 0, vertex); | |||
| glTexCoordPointer(2, GL_FLOAT, 0, texture); | |||
| #endif | |||
| /* Draw arrays */ | |||
| glDrawArrays(GL_TRIANGLES, 0, (n - i) * 6); | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| # if !defined HAVE_GLES_2X | |||
| #if defined HAVE_GL_2X | |||
| glBindVertexArray(0); | |||
| # endif | |||
| #endif | |||
| glDisableVertexAttribArray(attr_pos); | |||
| glDisableVertexAttribArray(attr_tex); | |||
| #endif | |||
| free(vertex); | |||
| free(texture); | |||
| } | |||
| #if defined HAVE_GL_1X || defined HAVE_GLES_1X | |||
| /* Disable state machine features */ | |||
| glDisableClientState(GL_VERTEX_ARRAY); | |||
| glDisableClientState(GL_TEXTURE_COORD_ARRAY); | |||
| /* Restore matrices */ | |||
| glMatrixMode(GL_PROJECTION); | |||
| glPopMatrix(); | |||
| glMatrixMode(GL_MODELVIEW); | |||
| glPopMatrix(); | |||
| #endif | |||
| free(data->tiles); | |||
| data->tiles = 0; | |||
| data->ntiles = 0; | |||
| @@ -34,9 +34,7 @@ class ShaderData | |||
| friend class Shader; | |||
| private: | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| GLuint prog_id, vert_id, frag_id; | |||
| #endif | |||
| uint32_t vert_crc, frag_crc; | |||
| /* Global shader cache */ | |||
| @@ -78,13 +76,10 @@ void Shader::Destroy(Shader *shader) | |||
| Shader::Shader(char const *vert, char const *frag) | |||
| : data(new ShaderData()) | |||
| { | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| char buf[4096]; | |||
| GLsizei len; | |||
| #endif | |||
| data->vert_crc = Hash::Crc32(vert); | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| data->vert_id = glCreateShader(GL_VERTEX_SHADER); | |||
| glShaderSource(data->vert_id, 1, &vert, NULL); | |||
| glCompileShader(data->vert_id); | |||
| @@ -92,10 +87,8 @@ Shader::Shader(char const *vert, char const *frag) | |||
| glGetShaderInfoLog(data->vert_id, sizeof(buf), &len, buf); | |||
| if (len > 0) | |||
| Log::Error("failed to compile vertex shader: %s", buf); | |||
| #endif | |||
| data->frag_crc = Hash::Crc32(frag); | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| data->frag_id = glCreateShader(GL_FRAGMENT_SHADER); | |||
| glShaderSource(data->frag_id, 1, &frag, NULL); | |||
| glCompileShader(data->frag_id); | |||
| @@ -110,45 +103,30 @@ Shader::Shader(char const *vert, char const *frag) | |||
| glLinkProgram(data->prog_id); | |||
| glValidateProgram(data->prog_id); | |||
| #endif | |||
| } | |||
| int Shader::GetAttribLocation(char const *attr) const | |||
| { | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| return glGetAttribLocation(data->prog_id, attr); | |||
| #else | |||
| (void)attr; | |||
| return -1; | |||
| #endif | |||
| } | |||
| int Shader::GetUniformLocation(char const *uni) const | |||
| { | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| return glGetUniformLocation(data->prog_id, uni); | |||
| #else | |||
| (void)uni; | |||
| return -1; | |||
| #endif | |||
| } | |||
| void Shader::Bind() const | |||
| { | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| glUseProgram(data->prog_id); | |||
| #endif | |||
| } | |||
| Shader::~Shader() | |||
| { | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| glDetachShader(data->prog_id, data->vert_id); | |||
| glDetachShader(data->prog_id, data->frag_id); | |||
| glDeleteShader(data->vert_id); | |||
| glDeleteShader(data->frag_id); | |||
| glDeleteProgram(data->prog_id); | |||
| #endif | |||
| delete data; | |||
| } | |||
| @@ -29,14 +29,11 @@ namespace lol | |||
| vec2i saved_viewport; | |||
| #endif | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| Shader *stdshader; | |||
| #endif | |||
| mat4 proj_matrix, view_matrix, model_matrix; | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| static char const *vertexshader = | |||
| #if !defined HAVE_GLES_2X | |||
| #if defined HAVE_GL_2X | |||
| "#version 130\n" | |||
| #endif | |||
| "\n" | |||
| @@ -87,11 +84,10 @@ static char const *fragmentshader = | |||
| #else | |||
| " vec4 col = texture2D(in_Texture, vec2(gl_TexCoord[0]));\n" | |||
| #endif | |||
| #if 1 | |||
| #if 0 | |||
| " float mul = 2.0;\n" | |||
| " float dx1 = mod(gl_FragCoord.x, 2.0);\n" | |||
| " float dy1 = mod(gl_FragCoord.y, 2.0);\n" | |||
| " float t1 = mod(3.0 * dx1 + 2.0 * dy1, 4.0);\n" | |||
| " vec2 d1 = mod(vec2(gl_FragCoord), vec2(2.0, 2.0));\n" | |||
| " float t1 = mod(3.0 * d1.x + 2.0 * d1.y, 4.0);\n" | |||
| " float dx2 = mod(floor(gl_FragCoord.x * 0.5), 2.0);\n" | |||
| " float dy2 = mod(floor(gl_FragCoord.y * 0.5), 2.0);\n" | |||
| " float t2 = mod(3.0 * dx2 + 2.0 * dy2, 4.0);\n" | |||
| @@ -111,7 +107,6 @@ static char const *fragmentshader = | |||
| #endif | |||
| " gl_FragColor = col;\n" | |||
| "}\n"; | |||
| #endif | |||
| /* | |||
| * Public Video class | |||
| @@ -129,16 +124,12 @@ void Video::Setup(int width, int height) | |||
| glClearColor(0.1f, 0.2f, 0.3f, 0.0f); | |||
| glClearDepthf(1.0); | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_1X | |||
| #if defined HAVE_GL_2X | |||
| glShadeModel(GL_SMOOTH); | |||
| #endif | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_1X | |||
| glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); | |||
| #endif | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| stdshader = Shader::Create(vertexshader, fragmentshader); | |||
| #endif | |||
| } | |||
| void Video::SetFov(float theta) | |||
| @@ -188,23 +179,12 @@ void Video::SetFov(float theta) | |||
| view_matrix = mat4(1.0f); | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| stdshader->Bind(); /* Required on GLES 2.x? */ | |||
| GLuint uni; | |||
| uni = stdshader->GetUniformLocation("proj_matrix"); | |||
| glUniformMatrix4fv(uni, 1, GL_FALSE, &proj_matrix[0][0]); | |||
| uni = stdshader->GetUniformLocation("view_matrix"); | |||
| glUniformMatrix4fv(uni, 1, GL_FALSE, &view_matrix[0][0]); | |||
| #else | |||
| glMatrixMode(GL_PROJECTION); | |||
| glLoadIdentity(); | |||
| glMultMatrixf(&proj_matrix[0][0]); | |||
| /* Reset the model view matrix, just in case */ | |||
| glMatrixMode(GL_MODELVIEW); | |||
| glLoadIdentity(); | |||
| glMultMatrixf(&view_matrix[0][0]); | |||
| #endif | |||
| } | |||
| void Video::SetDepth(bool set) | |||
| @@ -225,9 +205,7 @@ void Video::Clear() | |||
| void Video::Destroy() | |||
| { | |||
| #if defined HAVE_GL_2X || defined HAVE_GLES_2X | |||
| Shader::Destroy(stdshader); | |||
| #endif | |||
| } | |||
| void Video::Capture(uint32_t *buffer) | |||
| @@ -236,7 +214,7 @@ void Video::Capture(uint32_t *buffer) | |||
| glGetIntegerv(GL_VIEWPORT, v); | |||
| int width = v[2], height = v[3]; | |||
| #if defined HAVE_GL_1X || defined HAVE_GL_2X | |||
| #if defined HAVE_GL_2X | |||
| glPixelStorei(GL_PACK_ROW_LENGTH, 0); | |||
| #endif | |||
| glPixelStorei(GL_PACK_ALIGNMENT, 1); | |||