Work-around for an issue which cropped up with the release of gcc-10. In their
[freeglut] / src / fg_gl2.h
index 2450f8d..fb3d467 100644 (file)
 #ifndef  FG_GL2_H
 #define  FG_GL2_H
 
-#ifndef APIENTRY
-#    define APIENTRY
-#endif
+#include <GL/freeglut.h>
+#include "fg_internal.h"
+
+#ifdef GL_ES_VERSION_2_0
+/* Use existing functions on GLES 2.0 */
+
+#define FGH_ARRAY_BUFFER GL_ARRAY_BUFFER
+#define FGH_STATIC_DRAW GL_STATIC_DRAW
+#define FGH_ELEMENT_ARRAY_BUFFER GL_ELEMENT_ARRAY_BUFFER
+
+#define fghGenBuffers glGenBuffers
+#define fghDeleteBuffers glDeleteBuffers
+#define fghBindBuffer glBindBuffer
+#define fghBufferData glBufferData
+#define fghEnableVertexAttribArray glEnableVertexAttribArray
+#define fghDisableVertexAttribArray glDisableVertexAttribArray
+#define fghVertexAttribPointer glVertexAttribPointer
+
+#else
+/* Load functions dynamically, they are not defined in e.g. win32's
+   OpenGL headers */
+
+#    ifndef APIENTRY
+#        define APIENTRY
+#    endif
+
+/* extension #defines, types and entries, avoiding a dependency on additional
+   libraries like GLEW or the GL/glext.h header */
+#define FGH_ARRAY_BUFFER 0x8892
+#define FGH_STATIC_DRAW 0x88E4
+#define FGH_ELEMENT_ARRAY_BUFFER 0x8893
+
+typedef int fghGLsizeiptr;
+typedef void (APIENTRY *FGH_PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
+typedef void (APIENTRY *FGH_PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
+typedef void (APIENTRY *FGH_PFNGLBUFFERDATAPROC) (GLenum target, fghGLsizeiptr size, const GLvoid *data, GLenum usage);
+typedef void (APIENTRY *FGH_PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint* buffers);
+typedef void (APIENTRY *FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
+typedef void (APIENTRY *FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint);
+typedef void (APIENTRY *FGH_PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
+
+extern FGH_PFNGLGENBUFFERSPROC fghGenBuffers;
+extern FGH_PFNGLDELETEBUFFERSPROC fghDeleteBuffers;
+extern FGH_PFNGLBINDBUFFERPROC fghBindBuffer;
+extern FGH_PFNGLBUFFERDATAPROC fghBufferData;
+extern FGH_PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray;
+extern FGH_PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray;
+extern FGH_PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer;
+
+#    endif
 
-typedef ptrdiff_t fghGLsizeiptr;
-typedef void (APIENTRY *PFNGLGENBUFFERSPROC) (GLsizei n, GLuint *buffers);
-typedef void (APIENTRY *PFNGLBINDBUFFERPROC) (GLenum target, GLuint buffer);
-typedef void (APIENTRY *PFNGLBUFFERDATAPROC) (GLenum target, fghGLsizeiptr size, const GLvoid *data, GLenum usage);
-typedef void (APIENTRY *PFNGLDELETEBUFFERSPROC) (GLsizei n, const GLuint* buffers);
-typedef void (APIENTRY *PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index);
-typedef void (APIENTRY *PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint);
-typedef void (APIENTRY *PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer);
-
-PFNGLGENBUFFERSPROC fghGenBuffers;
-PFNGLDELETEBUFFERSPROC fghDeleteBuffers;
-PFNGLBINDBUFFERPROC fghBindBuffer;
-PFNGLBUFFERDATAPROC fghBufferData;
-PFNGLENABLEVERTEXATTRIBARRAYPROC fghEnableVertexAttribArray;
-PFNGLDISABLEVERTEXATTRIBARRAYPROC fghDisableVertexAttribArray;
-PFNGLVERTEXATTRIBPOINTERPROC fghVertexAttribPointer;
+extern void fgInitGL2();
 
 #endif