Browse Source

Export GLLoadGen symbols so they can be used in shared libraries.

Caused linker problems mainly on Windows, where every symbol would need
to be exported manually, on Linux this was done implicitly (or with
`-fvisibility=default`). I now maintain glLoadGen fork at
https://github.com/mosra/glloadgen.git containing changes needed for
Magnum.

The `ogl_*()` functions are used only internally, various global
variables for extension queries are not used at all and thus they don't
need to be exported. I thus enabled `-fvisibility=hidden`.

Fixes #16.
pull/23/head
Vladimír Vondruš 13 years ago
parent
commit
655c9ea2cf
  1. 2
      external/OpenGL/GL/CMakeLists.txt
  2. 10
      external/OpenGL/GL/README.md
  3. 1664
      external/OpenGL/GL/gl_magnum.c
  4. 1642
      external/OpenGL/GL/gl_magnum.h
  5. 17
      external/OpenGL/GL/glloadgen.patch
  6. 4
      src/CMakeLists.txt

2
external/OpenGL/GL/CMakeLists.txt vendored

@ -23,6 +23,6 @@
#
add_library(MagnumGLLoadGenObjects OBJECT gl_magnum.c)
set_target_properties(MagnumGLLoadGenObjects PROPERTIES COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS}")
set_target_properties(MagnumGLLoadGenObjects PROPERTIES COMPILE_FLAGS "${CMAKE_SHARED_LIBRARY_CXX_FLAGS} -fvisibility=hidden -DGLLoadGen_EXPORTS")
install(FILES gl_magnum.h DESTINATION ${MAGNUM_INCLUDE_INSTALL_DIR}/OpenGL/GL)

10
external/OpenGL/GL/README.md vendored

@ -1,10 +1,6 @@
OpenGL header and extension loader is generated using [glLoadGen](https://bitbucket.org/alfonse/glloadgen),
preferrably from tip of the development branch, currently `2.0`. For it to work
flawlessly on OpenGL 2.1 and simultaenously not containing all that pre-core
stuff, you need to patch it with included `glloadgen.patch`, which will then
force it to use pre-3.0 `glGetString(GL_EXTENSIONS)` even if we request OpenGL
4.4. Otherwise it would use `glGetStringi(GL_EXTENSIONS, i)`, which is not
available on OpenGL 2.1 and extension loading will fail on these systems.
OpenGL header and extension loader is generated using glLoadGen, originally
from [BitBucket](https://bitbucket.org/alfonse/glloadgen), with Magnum-related
changes at [](https://github.com/mosra/glloadgen.git).
See `extensions.txt` for a list of requested non-core extensions. Copy the file
into glLoadGen directory and generate the files using Lua:

1664
external/OpenGL/GL/gl_magnum.c vendored

File diff suppressed because it is too large Load Diff

1642
external/OpenGL/GL/gl_magnum.h vendored

File diff suppressed because it is too large Load Diff

17
external/OpenGL/GL/glloadgen.patch vendored

@ -1,17 +0,0 @@
diff --git a/modules/Specs.lua b/modules/Specs.lua
index df4f5d5..95e0b97 100644
--- a/modules/Specs.lua
+++ b/modules/Specs.lua
@@ -116,9 +116,9 @@ function glx_spec.GetExtStringParamList(enumResolve) return "display, screen" en
-- Function name used to get an extension string.
-- Enumerator name used to get an extension string.
function gl_spec.GetIndexedExtStringFunc(options)
- if(tonumber(options.version) >= 3.0) then
- return {"GetIntegerv", "NUM_EXTENSIONS", "GetStringi", "EXTENSIONS"}
- end
+-- if(tonumber(options.version) >= 3.0) then
+-- return {"GetIntegerv", "NUM_EXTENSIONS", "GetStringi", "EXTENSIONS"}
+-- end
return nil
end
function wgl_spec.GetIndexedExtStringFunc(options) return nil end

4
src/CMakeLists.txt

@ -161,8 +161,8 @@ set(MagnumMath_SRCS
# TODO: fix when CMake sets target_EXPORTS for OBJECT targets as well
add_library(MagnumMathObjects OBJECT ${MagnumMath_SRCS})
add_library(MagnumObjects OBJECT ${Magnum_SRCS})
set_target_properties(MagnumMathObjects PROPERTIES COMPILE_FLAGS "-DMagnumMathObjects_EXPORTS ${CMAKE_SHARED_LIBRARY_CXX_FLAGS}")
set_target_properties(MagnumObjects PROPERTIES COMPILE_FLAGS "-DMagnumObjects_EXPORTS ${CMAKE_SHARED_LIBRARY_CXX_FLAGS}")
set_target_properties(MagnumMathObjects PROPERTIES COMPILE_FLAGS "-DMagnumMathObjects_EXPORTS -DGLLoadGen_EXPORTS ${CMAKE_SHARED_LIBRARY_CXX_FLAGS}")
set_target_properties(MagnumObjects PROPERTIES COMPILE_FLAGS "-DMagnumObjects_EXPORTS -DGLLoadGen_EXPORTS ${CMAKE_SHARED_LIBRARY_CXX_FLAGS}")
# Main library
add_library(Magnum ${SHARED_OR_STATIC}

Loading…
Cancel
Save