mirror of
https://github.com/glest/glest-source.git
synced 2025-08-17 21:51:17 +02:00
- added GeoVah's initila Mac osX support (via cmake)
This commit is contained in:
@@ -5,3 +5,7 @@ SET(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/mk/cmake/Modules)
|
||||
|
||||
ADD_SUBDIRECTORY( source/shared_lib )
|
||||
ADD_SUBDIRECTORY( source/glest_game )
|
||||
|
||||
IF(APPLE)
|
||||
include(mk/macosx/CMakeLists.txt)
|
||||
ENDIF(APPLE)
|
||||
|
@@ -20,9 +20,11 @@ FIND_PATH(LUA_INCLUDE_DIR NAMES lua.hpp
|
||||
PATHS /usr/include
|
||||
/usr/include/lua
|
||||
/usr/include/lua5.1
|
||||
$ENV{LUA_HOME}
|
||||
)
|
||||
|
||||
FIND_LIBRARY(LUA_LIBRARIES NAMES lua5.1 lua )
|
||||
FIND_LIBRARY(LUA_LIBRARIES NAMES lua5.1 lua
|
||||
PATHS $ENV{LUA_HOME})
|
||||
|
||||
IF(LUA_INCLUDE_DIR AND LUA_LIBRARIES)
|
||||
SET(LUA_FOUND TRUE)
|
||||
|
@@ -15,9 +15,13 @@ ENDIF(OGG_INCLUDE_DIR AND OGG_LIBRARY AND VORBIS_LIBRARY)
|
||||
FIND_PATH(OGG_INCLUDE_DIR ogg/ogg.h)
|
||||
FIND_LIBRARY(OGG_LIBRARY NAMES ogg)
|
||||
FIND_LIBRARY(VORBIS_LIBRARY NAMES vorbis)
|
||||
FIND_LIBRARY(VORBIS_FILE_LIBRARY NAMES vorbisfile)
|
||||
|
||||
IF(OGG_INCLUDE_DIR AND OGG_LIBRARY AND VORBIS_LIBRARY AND VORBIS_FILE_LIBRARY)
|
||||
#on macosx the vorbisfile library is part of the vorbisone...
|
||||
IF(NOT APPLE)
|
||||
FIND_LIBRARY(VORBIS_FILE_LIBRARY NAMES vorbisfile)
|
||||
ENDIF(NOT APPLE)
|
||||
|
||||
IF(OGG_INCLUDE_DIR AND OGG_LIBRARY AND VORBIS_LIBRARY AND (APPLE OR VORBIS_FILE_LIBRARY))
|
||||
SET(OGG_FOUND TRUE)
|
||||
IF(NOT OGG_BE_QUIET)
|
||||
MESSAGE(STATUS "OGG/Vorbis includes: ${OGG_INCLUDE_DIR}")
|
||||
@@ -25,10 +29,10 @@ IF(OGG_INCLUDE_DIR AND OGG_LIBRARY AND VORBIS_LIBRARY AND VORBIS_FILE_LIBRARY)
|
||||
MESSAGE(STATUS "Vorbis library : ${VORBIS_LIBRARY}")
|
||||
MESSAGE(STATUS "Vorbis file library: ${VORBIS_FILE_LIBRARY}")
|
||||
ENDIF(NOT OGG_BE_QUIET)
|
||||
ELSE(OGG_INCLUDE_DIR AND OGG_LIBRARY AND VORBIS_LIBRARY AND VORBIS_FILE_LIBRARY)
|
||||
ELSE(OGG_INCLUDE_DIR AND OGG_LIBRARY AND VORBIS_LIBRARY AND (APPLE OR VORBIS_FILE_LIBRARY))
|
||||
SET(OGG_FOUND FALSE)
|
||||
MESSAGE("OGG/Vorbis was not found on this system!")
|
||||
ENDIF(OGG_INCLUDE_DIR AND OGG_LIBRARY AND VORBIS_LIBRARY AND VORBIS_FILE_LIBRARY)
|
||||
ENDIF(OGG_INCLUDE_DIR AND OGG_LIBRARY AND VORBIS_LIBRARY AND (APPLE OR VORBIS_FILE_LIBRARY))
|
||||
|
||||
MARK_AS_ADVANCED(
|
||||
OGG_INCLUDE_DIR
|
||||
|
@@ -11,9 +11,10 @@ IF (XERCESC_INCLUDE_DIR)
|
||||
SET(XERCESC_FIND_QUIETLY TRUE)
|
||||
ENDIF (XERCESC_INCLUDE_DIR)
|
||||
|
||||
FIND_PATH(XERCESC_INCLUDE_DIR xercesc/dom/DOM.hpp)
|
||||
FIND_PATH(XERCESC_INCLUDE_DIR xercesc
|
||||
PATH_SUFFIXES DOM/dom.hpp)
|
||||
|
||||
SET(XERCESC_NAMES xerces-c xerces-c_3 xerces-c_2)
|
||||
SET(XERCESC_NAMES xerces-c xerces-c_3 xerces-c_2 Xerces)
|
||||
FIND_LIBRARY(XERCESC_LIBRARY NAMES ${XERCESC_NAMES} )
|
||||
|
||||
# Handle the QUIETLY and REQUIRED arguments and set XERCESC_FOUND to
|
||||
|
@@ -51,6 +51,7 @@ LIB_DIRS =
|
||||
platform/common
|
||||
platform/sdl
|
||||
platform/posix
|
||||
platform/unix
|
||||
util
|
||||
graphics
|
||||
graphics/gl
|
||||
|
168
mk/macosx/CMakeLists.txt
Normal file
168
mk/macosx/CMakeLists.txt
Normal file
@@ -0,0 +1,168 @@
|
||||
# Set defaults for Universal Binaries. We want 32-bit Intel/PPC on 10.4
|
||||
# and 32/64-bit Intel/PPC on >= 10.5. Anything <= 10.3 doesn't support.
|
||||
# These are just defaults/recommendations, but how we want to build
|
||||
# out of the box. But the user needs to be able to change these options.
|
||||
# So we must only set the values the first time CMake is run, or we
|
||||
# will overwrite any changes the user sets.
|
||||
# FORCE is used because the options are not reflected in the UI otherwise.
|
||||
# Seems like a good place to add version specific compiler flags too.
|
||||
IF(NOT CONFIG_HAS_BEEN_RUN_BEFORE)
|
||||
IF(EXISTS /Developer/SDKs/MacOSX10.6.sdk)
|
||||
SET(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "Build architectures for OSX" FORCE)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.6 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types." FORCE)
|
||||
|
||||
ELSEIF(EXISTS /Developer/SDKs/MacOSX10.5.sdk)
|
||||
# 64-bit compiles are not supported with Carbon. We should enable
|
||||
# 64-bit compilation by default once osgviewer has been
|
||||
# rewritten with Cocoa.
|
||||
#SET(CMAKE_OSX_ARCHITECTURES "ppc;i386;ppc64;x86_64" CACHE STRING "Build architectures for OSX" FORCE)
|
||||
SET(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "Build architectures for OSX" FORCE)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.5 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types." FORCE)
|
||||
ELSE()
|
||||
# No Universal Binary support
|
||||
# Should break down further to set the -mmacosx-version-min,
|
||||
# but the SDK detection is too unreliable here.
|
||||
ENDIF()
|
||||
ENDIF(NOT CONFIG_HAS_BEEN_RUN_BEFORE)
|
||||
|
||||
|
||||
|
||||
##install part
|
||||
|
||||
|
||||
|
||||
include (InstallRequiredSystemLibraries)
|
||||
|
||||
set (CPACK_RESOURCE_FILE_LICENSE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/docs/code_license.txt")
|
||||
set (CPACK_GENERATOR Bundle)
|
||||
set (CPACK_BUNDLE_NAME "MegaGlest")
|
||||
set (CPACK_BUNDLE_STARTUP_COMMAND "${PROJECT_SOURCE_DIR}/data/glest_game/Debug/glest.bin")
|
||||
set (CPACK_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/mk/macosx/MegaGlest.icns")
|
||||
set (CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/mk/macosx/MegaGlest.icns")
|
||||
set (CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/mk/macosx/Info.plist")
|
||||
INSTALL(FILES
|
||||
${LUA_LIBRARIES}
|
||||
DESTINATION ../Frameworks
|
||||
)
|
||||
INSTALL(DIRECTORY
|
||||
${OGG_LIBRARY}
|
||||
${XERCESC_LIBRARY}
|
||||
${VORBIS_LIBRARY}
|
||||
${SDL_LIBRARY}
|
||||
DESTINATION ../Frameworks
|
||||
)
|
||||
|
||||
include (CPack)
|
||||
# Set defaults for Universal Binaries. We want 32-bit Intel/PPC on 10.4
|
||||
# and 32/64-bit Intel/PPC on >= 10.5. Anything <= 10.3 doesn't support.
|
||||
# These are just defaults/recommendations, but how we want to build
|
||||
# out of the box. But the user needs to be able to change these options.
|
||||
# So we must only set the values the first time CMake is run, or we
|
||||
# will overwrite any changes the user sets.
|
||||
# FORCE is used because the options are not reflected in the UI otherwise.
|
||||
# Seems like a good place to add version specific compiler flags too.
|
||||
IF(NOT CONFIG_HAS_BEEN_RUN_BEFORE)
|
||||
IF(EXISTS /Developer/SDKs/MacOSX10.6.sdk)
|
||||
SET(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "Build architectures for OSX" FORCE)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.6 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types." FORCE)
|
||||
|
||||
ELSEIF(EXISTS /Developer/SDKs/MacOSX10.5.sdk)
|
||||
# 64-bit compiles are not supported with Carbon. We should enable
|
||||
# 64-bit compilation by default once osgviewer has been
|
||||
# rewritten with Cocoa.
|
||||
#SET(CMAKE_OSX_ARCHITECTURES "ppc;i386;ppc64;x86_64" CACHE STRING "Build architectures for OSX" FORCE)
|
||||
SET(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "Build architectures for OSX" FORCE)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.5 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types." FORCE)
|
||||
ELSE()
|
||||
# No Universal Binary support
|
||||
# Should break down further to set the -mmacosx-version-min,
|
||||
# but the SDK detection is too unreliable here.
|
||||
ENDIF()
|
||||
ENDIF(NOT CONFIG_HAS_BEEN_RUN_BEFORE)
|
||||
|
||||
|
||||
|
||||
##install part
|
||||
|
||||
|
||||
|
||||
include (InstallRequiredSystemLibraries)
|
||||
|
||||
set (CPACK_RESOURCE_FILE_LICENSE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/docs/code_license.txt")
|
||||
set (CPACK_GENERATOR Bundle)
|
||||
set (CPACK_BUNDLE_NAME "MegaGlest")
|
||||
set (CPACK_BUNDLE_STARTUP_COMMAND "${PROJECT_SOURCE_DIR}/data/glest_game/Debug/glest.bin")
|
||||
set (CPACK_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/mk/macosx/MegaGlest.icns")
|
||||
set (CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/mk/macosx/MegaGlest.icns")
|
||||
set (CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/mk/macosx/Info.plist")
|
||||
INSTALL(FILES
|
||||
${LUA_LIBRARIES}
|
||||
DESTINATION ../Frameworks
|
||||
)
|
||||
INSTALL(DIRECTORY
|
||||
${OGG_LIBRARY}
|
||||
${XERCESC_LIBRARY}
|
||||
${VORBIS_LIBRARY}
|
||||
${SDL_LIBRARY}
|
||||
DESTINATION ../Frameworks
|
||||
)
|
||||
|
||||
include (CPack)
|
||||
# Set defaults for Universal Binaries. We want 32-bit Intel/PPC on 10.4
|
||||
# and 32/64-bit Intel/PPC on >= 10.5. Anything <= 10.3 doesn't support.
|
||||
# These are just defaults/recommendations, but how we want to build
|
||||
# out of the box. But the user needs to be able to change these options.
|
||||
# So we must only set the values the first time CMake is run, or we
|
||||
# will overwrite any changes the user sets.
|
||||
# FORCE is used because the options are not reflected in the UI otherwise.
|
||||
# Seems like a good place to add version specific compiler flags too.
|
||||
IF(NOT CONFIG_HAS_BEEN_RUN_BEFORE)
|
||||
IF(EXISTS /Developer/SDKs/MacOSX10.6.sdk)
|
||||
SET(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "Build architectures for OSX" FORCE)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.6 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types." FORCE)
|
||||
|
||||
ELSEIF(EXISTS /Developer/SDKs/MacOSX10.5.sdk)
|
||||
# 64-bit compiles are not supported with Carbon. We should enable
|
||||
# 64-bit compilation by default once osgviewer has been
|
||||
# rewritten with Cocoa.
|
||||
#SET(CMAKE_OSX_ARCHITECTURES "ppc;i386;ppc64;x86_64" CACHE STRING "Build architectures for OSX" FORCE)
|
||||
SET(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "Build architectures for OSX" FORCE)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmacosx-version-min=10.5 -ftree-vectorize -fvisibility-inlines-hidden" CACHE STRING "Flags used by the compiler during all build types." FORCE)
|
||||
ELSE()
|
||||
# No Universal Binary support
|
||||
# Should break down further to set the -mmacosx-version-min,
|
||||
# but the SDK detection is too unreliable here.
|
||||
ENDIF()
|
||||
ENDIF(NOT CONFIG_HAS_BEEN_RUN_BEFORE)
|
||||
|
||||
|
||||
|
||||
##install part
|
||||
|
||||
|
||||
|
||||
include (InstallRequiredSystemLibraries)
|
||||
|
||||
set (CPACK_RESOURCE_FILE_LICENSE
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/docs/code_license.txt")
|
||||
set (CPACK_GENERATOR Bundle)
|
||||
set (CPACK_BUNDLE_NAME "MegaGlest")
|
||||
set (CPACK_BUNDLE_STARTUP_COMMAND "${PROJECT_SOURCE_DIR}/data/glest_game/Debug/glest.bin")
|
||||
set (CPACK_BUNDLE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/mk/macosx/MegaGlest.icns")
|
||||
set (CPACK_PACKAGE_ICON "${CMAKE_CURRENT_SOURCE_DIR}/mk/macosx/MegaGlest.icns")
|
||||
set (CPACK_BUNDLE_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/mk/macosx/Info.plist")
|
||||
INSTALL(FILES
|
||||
${LUA_LIBRARIES}
|
||||
DESTINATION ../Frameworks
|
||||
)
|
||||
INSTALL(DIRECTORY
|
||||
${OGG_LIBRARY}
|
||||
${XERCESC_LIBRARY}
|
||||
${VORBIS_LIBRARY}
|
||||
${SDL_LIBRARY}
|
||||
DESTINATION ../Frameworks
|
||||
)
|
||||
|
||||
include (CPack)
|
96
mk/macosx/Info.plist
Normal file
96
mk/macosx/Info.plist
Normal file
@@ -0,0 +1,96 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>MegaGlest</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>3.2.2r1, © 2001-2009 The Glest Team All Rights Reserved.</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>MegaGlest</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>jp.ne.ivory.ciderhouse.MegaGlest</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>MegaGlest</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.2.2</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>3.2</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>MainMenu</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>MegaGlest</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>3.2.2r1, © 2001-2009 The Glest Team All Rights Reserved.</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>MegaGlest</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>jp.ne.ivory.ciderhouse.MegaGlest</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>MegaGlest</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.2.2</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>3.2</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>MainMenu</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>English</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>MegaGlest</string>
|
||||
<key>CFBundleGetInfoString</key>
|
||||
<string>3.2.2r1, © 2001-2009 The Glest Team All Rights Reserved.</string>
|
||||
<key>CFBundleIconFile</key>
|
||||
<string>MegaGlest</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>jp.ne.ivory.ciderhouse.MegaGlest</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>MegaGlest</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>3.2.2</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>3.2</string>
|
||||
<key>NSMainNibFile</key>
|
||||
<string>MainMenu</string>
|
||||
<key>NSPrincipalClass</key>
|
||||
<string>NSApplication</string>
|
||||
</dict>
|
||||
</plist>
|
BIN
mk/macosx/MegaGlest.icns
Normal file
BIN
mk/macosx/MegaGlest.icns
Normal file
Binary file not shown.
@@ -54,6 +54,7 @@ SET(DIRS_WITH_SRC
|
||||
type_instances
|
||||
types
|
||||
world)
|
||||
|
||||
|
||||
SET(GLEST_LIB_INCLUDE_ROOT "../shared_lib/include/")
|
||||
SET(GLEST_LIB_INCLUDE_DIRS
|
||||
@@ -69,7 +70,8 @@ SET(GLEST_LIB_INCLUDE_DIRS
|
||||
${GLEST_LIB_INCLUDE_ROOT}glew
|
||||
${GLEST_LIB_INCLUDE_ROOT}lua
|
||||
${GLEST_LIB_INCLUDE_ROOT}streflop
|
||||
${GLEST_LIB_INCLUDE_ROOT}streflop/libm_flt32_source)
|
||||
${GLEST_LIB_INCLUDE_ROOT}streflop/libm_flt32_source
|
||||
${GLEST_LIB_INCLUDE_ROOT}map)
|
||||
INCLUDE_DIRECTORIES( ${GLEST_LIB_INCLUDE_DIRS} )
|
||||
|
||||
SET(MG_SOURCE_FILES "")
|
||||
@@ -80,10 +82,19 @@ FOREACH(DIR IN LISTS DIRS_WITH_SRC)
|
||||
set(SRC_DIR_TO_GLOB ${DIR})
|
||||
FILE(GLOB SRC_FILES_FROM_THIS_DIR ${SRC_DIR_TO_GLOB}/*.cpp)
|
||||
SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${SRC_FILES_FROM_THIS_DIR})
|
||||
|
||||
IF(APPLE)
|
||||
FILE(GLOB SRC_FILES_FROM_THIS_DIR ${SRC_DIR_TO_GLOB}/*.mm)
|
||||
#MESSAGE(STATUS "SRC_FILES_FROM_THIS_DIR: ${SRC_FILES_FROM_THIS_DIR}")
|
||||
SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${SRC_FILES_FROM_THIS_DIR})
|
||||
FILE(GLOB SRC_FILES_FROM_THIS_DIR ${SRC_DIR_TO_GLOB}/*.m)
|
||||
#MESSAGE(STATUS "SRC_FILES_FROM_THIS_DIR: ${SRC_FILES_FROM_THIS_DIR}")
|
||||
SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${SRC_FILES_FROM_THIS_DIR})
|
||||
ENDIF(APPLE)
|
||||
ENDFOREACH(DIR)
|
||||
|
||||
# [RCL] FIXME: make it compiler-agnostic
|
||||
SET(CMAKE_CXX_FLAGS "-O3 -msse -msse2 -mfpmath=sse -DSTREFLOP_SSE")
|
||||
SET(CMAKE_CXX_FLAGS "-O3 -fno-strict-aliasing -frounding-math -fsignaling-nans -mfpmath=sse -msse -DSTREFLOP_SSE")
|
||||
|
||||
SET(TARGET_NAME "glest.bin")
|
||||
|
||||
|
@@ -47,6 +47,7 @@ FIND_PACKAGE(CURL REQUIRED)
|
||||
INCLUDE_DIRECTORIES(${CURL_INCLUDE_DIRS})
|
||||
SET(EXTERNAL_LIBS ${EXTERNAL_LIBS} ${CURL_LIBRARIES})
|
||||
|
||||
|
||||
#########################################################################################
|
||||
# glest lib
|
||||
|
||||
@@ -63,7 +64,14 @@ SET(DIRS_WITH_SRC
|
||||
glew
|
||||
lua
|
||||
streflop
|
||||
streflop/libm_flt32_source)
|
||||
streflop/libm_flt32_source
|
||||
map)
|
||||
|
||||
IF(APPLE)
|
||||
SET(DIRS_WITH_SRC ${DIRS_WITH_SRC} platform/macosx)
|
||||
ELSE(APPLE)
|
||||
SET(DIRS_WITH_SRC ${DIRS_WITH_SRC} platform/unix)
|
||||
ENDIF(APPLE)
|
||||
|
||||
SET(MG_INCLUDES_ROOT "include/")
|
||||
SET(MG_SOURCES_ROOT "sources/")
|
||||
@@ -73,35 +81,55 @@ SET(MG_SOURCE_FILES "")
|
||||
FOREACH(DIR IN LISTS DIRS_WITH_SRC)
|
||||
set(INCLUDE_DIR_TO_GLOB ${MG_INCLUDES_ROOT}${DIR})
|
||||
INCLUDE_DIRECTORIES( ${INCLUDE_DIR_TO_GLOB} )
|
||||
#MESSAGE(STATUS "INCLUDE_DIR_TO_GLOB: ${INCLUDE_DIR_TO_GLOB}")
|
||||
#FILE(GLOB INC_FILES_FROM_THIS_DIR ${INCLUDE_DIR_TO_GLOB}/*.h)
|
||||
#MESSAGE(STATUS "INCLUDE FILES GLOBBED: ${INC_FILES_FROM_THIS_DIR}")
|
||||
#SET(MG_INCLUDE_FILES ${MG_INCLUDE_FILES} ${INC_FILES_FROM_THIS_DIR})
|
||||
IF(APPLE)
|
||||
#MESSAGE(STATUS "INCLUDE_DIR_TO_GLOB: ${INCLUDE_DIR_TO_GLOB}")
|
||||
FILE(GLOB INC_FILES_FROM_THIS_DIR ${INCLUDE_DIR_TO_GLOB}/*.h)
|
||||
#MESSAGE(STATUS "INCLUDE FILES GLOBBED: ${INC_FILES_FROM_THIS_DIR}")
|
||||
SET(MG_INCLUDE_FILES ${MG_INCLUDE_FILES} ${INC_FILES_FROM_THIS_DIR})
|
||||
ENDIF(APPLE)
|
||||
|
||||
set(SRC_DIR_TO_GLOB ${MG_SOURCES_ROOT}${DIR})
|
||||
#MESSAGE(STATUS "SRC_DIR_TO_GLOB: ${SRC_DIR_TO_GLOB}")
|
||||
FILE(GLOB SRC_FILES_FROM_THIS_DIR ${SRC_DIR_TO_GLOB}/*.cpp)
|
||||
#MESSAGE(STATUS "SRC_FILES_FROM_THIS_DIR: ${SRC_FILES_FROM_THIS_DIR}")
|
||||
SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${SRC_FILES_FROM_THIS_DIR})
|
||||
|
||||
IF(APPLE)
|
||||
FILE(GLOB SRC_FILES_FROM_THIS_DIR ${SRC_DIR_TO_GLOB}/*.mm)
|
||||
#MESSAGE(STATUS "SRC_FILES_FROM_THIS_DIR: ${SRC_FILES_FROM_THIS_DIR}")
|
||||
SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${SRC_FILES_FROM_THIS_DIR})
|
||||
FILE(GLOB SRC_FILES_FROM_THIS_DIR ${SRC_DIR_TO_GLOB}/*.m)
|
||||
#MESSAGE(STATUS "SRC_FILES_FROM_THIS_DIR: ${SRC_FILES_FROM_THIS_DIR}")
|
||||
SET(MG_SOURCE_FILES ${MG_SOURCE_FILES} ${SRC_FILES_FROM_THIS_DIR})
|
||||
ENDIF(APPLE)
|
||||
ENDFOREACH(DIR)
|
||||
|
||||
|
||||
#MESSAGE(STATUS "Source files: ${MG_INCLUDE_FILES}")
|
||||
#MESSAGE(STATUS "Source files: ${MG_SOURCE_FILES}")
|
||||
#MESSAGE(STATUS "Include dirs: ${INCLUDE_DIRECTORIES}")
|
||||
|
||||
# FIXME: hackish, should be tested for
|
||||
SET(UNIX_SPECIFIC_DEFINES "-DX11_AVAILABLE -DHAVE_SYS_IOCTL_H")
|
||||
|
||||
IF(APPLE)
|
||||
SET(PLATFORM_SPECIFIC_DEFINES "-DHAVE_SYS_IOCTL_H")
|
||||
ELSE(APPLE)
|
||||
SET(PLATFORM_SPECIFIC_DEFINES "-DX11_AVAILABLE -DHAVE_SYS_IOCTL_H")
|
||||
ENDIF(APPLE)
|
||||
# FIXME: hackish...
|
||||
SET(STREFLOP_PROPERTIES "-DSTREFLOP_SSE -DLIBM_COMPILING_FLT32")
|
||||
|
||||
# FIXME: should choose between platforms
|
||||
SET_SOURCE_FILES_PROPERTIES(${MG_SOURCE_FILES} PROPERTIES COMPILE_FLAGS
|
||||
"${UNIX_SPECIFIC_DEFINES} ${STREFLOP_PROPERTIES} ${CXXFLAGS}")
|
||||
"${PLATFORM_SPECIFIC_DEFINES} ${STREFLOP_PROPERTIES} ${CXXFLAGS}")
|
||||
|
||||
SET_SOURCE_FILES_PROPERTIES(${MG_INCLUDE_FILES} PROPERTIES HEADER_FILE_ONLY 1)
|
||||
|
||||
|
||||
# [RCL] FIXME: make it compiler-agnostic
|
||||
SET(CMAKE_CXX_FLAGS "-O3 -msse -msse2 -mfpmath=sse")
|
||||
SET(CMAKE_CXX_FLAGS "-O3 -fno-strict-aliasing -frounding-math -fsignaling-nans -mfpmath=sse -msse")
|
||||
|
||||
ADD_LIBRARY(glest_lib ${MG_SOURCE_FILES})
|
||||
TARGET_LINK_LIBRARIES(glest_lib streflop)
|
||||
TARGET_LINK_LIBRARIES(glest_lib ${EXTERNAL_LIBS})
|
||||
|
||||
|
||||
|
||||
|
54
source/shared_lib/sources/platform/macosx/NSFont_OpenGL.h
Normal file
54
source/shared_lib/sources/platform/macosx/NSFont_OpenGL.h
Normal file
@@ -0,0 +1,54 @@
|
||||
/*
|
||||
* Addition to NSFont to allow easy OpenGL display list creation of bitmaps
|
||||
* based on the receiver's font. Example usage:
|
||||
*
|
||||
* [ myFont makeGLDisplayListFirst:' ' count:95 base:displayListBase ];
|
||||
*
|
||||
* This creates a set of display lists, starting at displayListBase, with 95
|
||||
* characters starting with the space. Returns TRUE if all went well,
|
||||
* FALSE otherwise.
|
||||
*
|
||||
* By default, if any errors are encountered, NSLog() will be used to note
|
||||
* what happened; use
|
||||
*
|
||||
* [ NSFont setOpenGLLogging:NO ];
|
||||
*
|
||||
* to disable logging.
|
||||
*
|
||||
* This program is Copyright <20> 2002 Bryan L Blackburn. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the names Bryan L Blackburn, Withay.com, nor the names of any
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BRYAN L BLACKBURN ``AS IS'' AND ANY EXPRESSED OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||
* EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/* NSFont_OpenGL.h */
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
#import <OpenGL/gl.h>
|
||||
|
||||
@interface NSFont (withay_OpenGL)
|
||||
|
||||
+ (void) setOpenGLLogging:(BOOL)logEnabled;
|
||||
- (BOOL) makeGLDisplayListFirst:(unichar)first count:(int)count base:(GLint)base;
|
||||
|
||||
@end
|
211
source/shared_lib/sources/platform/macosx/NSFont_OpenGL.m
Normal file
211
source/shared_lib/sources/platform/macosx/NSFont_OpenGL.m
Normal file
@@ -0,0 +1,211 @@
|
||||
/*
|
||||
* This program is Copyright <EFBFBD> 2002 Bryan L Blackburn. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright notice,
|
||||
* this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||
* this list of conditions and the following disclaimer in the documentation
|
||||
* and/or other materials provided with the distribution.
|
||||
* 3. Neither the names Bryan L Blackburn, Withay.com, nor the names of any
|
||||
* contributors may be used to endorse or promote products derived from this
|
||||
* software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY BRYAN L BLACKBURN ``AS IS'' AND ANY EXPRESSED OR
|
||||
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||
* EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
||||
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
||||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
|
||||
* EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* Initial version, 27 October, 2002
|
||||
*/
|
||||
|
||||
/* NSFont_OpenGL.m */
|
||||
|
||||
#import "NSFont_OpenGL.h"
|
||||
|
||||
@interface NSFont (withay_OpenGL_InternalMethods)
|
||||
- (BOOL) makeDisplayList:(GLint)listNum withImage:(NSImage *)theImage;
|
||||
+ (void) doOpenGLLog:(NSString *)format, ...;
|
||||
@end
|
||||
|
||||
@implementation NSFont (withay_OpenGL)
|
||||
|
||||
static BOOL openGLLoggingEnabled = YES;
|
||||
|
||||
/*
|
||||
* Enable/disable logging, class-wide, not object-wide
|
||||
*/
|
||||
+ (void) setOpenGLLogging:(BOOL)logEnabled
|
||||
{
|
||||
openGLLoggingEnabled = logEnabled;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Create the set of display lists for the bitmaps
|
||||
*/
|
||||
- (BOOL) makeGLDisplayListFirst:(unichar)first count:(int)count base:(GLint)base
|
||||
{
|
||||
GLint curListIndex;
|
||||
NSColor *blackColor;
|
||||
NSDictionary *attribDict;
|
||||
GLint dListNum;
|
||||
NSString *currentChar;
|
||||
unichar currentUnichar;
|
||||
NSSize charSize;
|
||||
NSRect charRect;
|
||||
NSImage *theImage;
|
||||
BOOL retval;
|
||||
|
||||
// Make sure a list isn't already under construction
|
||||
glGetIntegerv( GL_LIST_INDEX, &curListIndex );
|
||||
if( curListIndex != 0 )
|
||||
{
|
||||
[ NSFont doOpenGLLog:@"Display list already under construction" ];
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Save pixel unpacking state
|
||||
glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT );
|
||||
|
||||
glPixelStorei( GL_UNPACK_SWAP_BYTES, GL_FALSE );
|
||||
glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE );
|
||||
glPixelStorei( GL_UNPACK_SKIP_ROWS, 0 );
|
||||
glPixelStorei( GL_UNPACK_SKIP_PIXELS, 0 );
|
||||
glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
|
||||
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
|
||||
|
||||
blackColor = [ NSColor blackColor ];
|
||||
attribDict = [ NSDictionary dictionaryWithObjectsAndKeys:
|
||||
self, NSFontAttributeName,
|
||||
[ NSColor whiteColor ],
|
||||
NSForegroundColorAttributeName,
|
||||
blackColor, NSBackgroundColorAttributeName,
|
||||
nil ];
|
||||
charRect.origin.x = charRect.origin.y = 0;
|
||||
theImage = [ [ [ NSImage alloc ] initWithSize:NSMakeSize( 0, 0 ) ]
|
||||
autorelease ];
|
||||
retval = TRUE;
|
||||
for( dListNum = base, currentUnichar = first; currentUnichar < first + count;
|
||||
dListNum++, currentUnichar++ )
|
||||
{
|
||||
currentChar = [ NSString stringWithCharacters:¤tUnichar length:1 ];
|
||||
charSize = [ currentChar sizeWithAttributes:attribDict ];
|
||||
charRect.size = charSize;
|
||||
charRect = NSIntegralRect( charRect );
|
||||
if( charRect.size.width > 0 && charRect.size.height > 0 )
|
||||
{
|
||||
[ theImage setSize:charRect.size ];
|
||||
[ theImage lockFocus ];
|
||||
[ [ NSGraphicsContext currentContext ] setShouldAntialias:NO ];
|
||||
[ blackColor set ];
|
||||
[ NSBezierPath fillRect:charRect ];
|
||||
[ currentChar drawInRect:charRect withAttributes:attribDict ];
|
||||
[ theImage unlockFocus ];
|
||||
if( ![ self makeDisplayList:dListNum withImage:theImage ] )
|
||||
{
|
||||
retval = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
glPopClientAttrib();
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Create one display list based on the given image. This assumes the image
|
||||
* uses 8-bit chunks to represent a sample
|
||||
*/
|
||||
- (BOOL) makeDisplayList:(GLint)listNum withImage:(NSImage *)theImage
|
||||
{
|
||||
NSBitmapImageRep *bitmap;
|
||||
int bytesPerRow, pixelsHigh, pixelsWide, samplesPerPixel;
|
||||
unsigned char *bitmapBytes;
|
||||
int currentBit, byteValue;
|
||||
unsigned char *newBuffer, *movingBuffer;
|
||||
int rowIndex, colIndex;
|
||||
|
||||
bitmap = [ NSBitmapImageRep imageRepWithData:[ theImage
|
||||
TIFFRepresentationUsingCompression:NSTIFFCompressionNone
|
||||
factor:0 ] ];
|
||||
pixelsHigh = [ bitmap pixelsHigh ];
|
||||
pixelsWide = [ bitmap pixelsWide ];
|
||||
bitmapBytes = [ bitmap bitmapData ];
|
||||
bytesPerRow = [ bitmap bytesPerRow ];
|
||||
samplesPerPixel = [ bitmap samplesPerPixel ];
|
||||
newBuffer = calloc( ceil( (float) bytesPerRow / 8.0 ), pixelsHigh );
|
||||
if( newBuffer == NULL )
|
||||
{
|
||||
[ NSFont doOpenGLLog:@"Failed to calloc() memory in "
|
||||
@"makeDisplayList:withImage:" ];
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
movingBuffer = newBuffer;
|
||||
/*
|
||||
* Convert the color bitmap into a true bitmap, ie, one bit per pixel. We
|
||||
* read at last row, write to first row as Cocoa and OpenGL have opposite
|
||||
* y origins
|
||||
*/
|
||||
for( rowIndex = pixelsHigh - 1; rowIndex >= 0; rowIndex-- )
|
||||
{
|
||||
currentBit = 0x80;
|
||||
byteValue = 0;
|
||||
for( colIndex = 0; colIndex < pixelsWide; colIndex++ )
|
||||
{
|
||||
if( bitmapBytes[ rowIndex * bytesPerRow + colIndex * samplesPerPixel ] )
|
||||
byteValue |= currentBit;
|
||||
currentBit >>= 1;
|
||||
if( currentBit == 0 )
|
||||
{
|
||||
*movingBuffer++ = byteValue;
|
||||
currentBit = 0x80;
|
||||
byteValue = 0;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Fill out the last byte; extra is ignored by OpenGL, but each row
|
||||
* must start on a new byte
|
||||
*/
|
||||
if( currentBit != 0x80 )
|
||||
*movingBuffer++ = byteValue;
|
||||
}
|
||||
|
||||
glNewList( listNum, GL_COMPILE );
|
||||
glBitmap( pixelsWide, pixelsHigh, 0, 0, pixelsWide, 0, newBuffer );
|
||||
glEndList();
|
||||
free( newBuffer );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Log the warning/error, if logging is enabled
|
||||
*/
|
||||
+ (void) doOpenGLLog:(NSString *)format, ...
|
||||
{
|
||||
va_list args;
|
||||
|
||||
if( openGLLoggingEnabled )
|
||||
{
|
||||
va_start( args, format );
|
||||
NSLogv( [ NSString stringWithFormat:@"NSFont_OpenGL: %@\n", format ],
|
||||
args );
|
||||
va_end( args );
|
||||
}
|
||||
}
|
||||
|
||||
@end
|
206
source/shared_lib/sources/platform/macosx/gl_wrap.mm
Normal file
206
source/shared_lib/sources/platform/macosx/gl_wrap.mm
Normal file
@@ -0,0 +1,206 @@
|
||||
//This file is part of Glest Shared Library (www.glest.org)
|
||||
//Copyright (C) 2005 Matthias Braun <matze@braunis.de>
|
||||
|
||||
//You can redistribute this code and/or modify it under
|
||||
//the terms of the GNU General Public License as published by the Free Software
|
||||
//Foundation; either version 2 of the License, or (at your option) any later
|
||||
//version.
|
||||
#include "gl_wrap.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <stdexcept>
|
||||
#include <cassert>
|
||||
|
||||
#import <Cocoa/Cocoa.h>
|
||||
|
||||
#include "opengl.h"
|
||||
#include "sdl_private.h"
|
||||
#include "noimpl.h"
|
||||
#include "util.h"
|
||||
#include "window.h"
|
||||
#include <vector>
|
||||
//#include <SDL_image.h>
|
||||
#include "leak_dumper.h"
|
||||
|
||||
using namespace Shared::Graphics::Gl;
|
||||
using namespace Shared::Util;
|
||||
|
||||
namespace Shared{ namespace Platform{
|
||||
|
||||
// ======================================
|
||||
// Global Fcs
|
||||
// ======================================
|
||||
|
||||
BOOL makeDisplayList(GLint listNum, NSImage *theImage)
|
||||
{
|
||||
NSBitmapImageRep *bitmap;
|
||||
int bytesPerRow, pixelsHigh, pixelsWide, samplesPerPixel;
|
||||
unsigned char *bitmapBytes;
|
||||
int currentBit, byteValue;
|
||||
unsigned char *newBuffer, *movingBuffer;
|
||||
int rowIndex, colIndex;
|
||||
|
||||
bitmap = [ NSBitmapImageRep imageRepWithData:[ theImage
|
||||
TIFFRepresentationUsingCompression:NSTIFFCompressionNone
|
||||
factor:0 ] ];
|
||||
pixelsHigh = [ bitmap pixelsHigh ];
|
||||
pixelsWide = [ bitmap pixelsWide ];
|
||||
bitmapBytes = [ bitmap bitmapData ];
|
||||
bytesPerRow = [ bitmap bytesPerRow ];
|
||||
samplesPerPixel = [ bitmap samplesPerPixel ];
|
||||
newBuffer = (unsigned char *)calloc( ceil( (float) bytesPerRow / 8.0 ), pixelsHigh );
|
||||
if( newBuffer == NULL )
|
||||
{
|
||||
NSLog(@"Failed to calloc() memory in makeDisplayList()");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
movingBuffer = newBuffer;
|
||||
/*
|
||||
* Convert the color bitmap into a true bitmap, ie, one bit per pixel. We
|
||||
* read at last row, write to first row as Cocoa and OpenGL have opposite
|
||||
* y origins
|
||||
*/
|
||||
for( rowIndex = pixelsHigh - 1; rowIndex >= 0; rowIndex-- )
|
||||
{
|
||||
currentBit = 0x80;
|
||||
byteValue = 0;
|
||||
for( colIndex = 0; colIndex < pixelsWide; colIndex++ )
|
||||
{
|
||||
if( bitmapBytes[ rowIndex * bytesPerRow + colIndex * samplesPerPixel ] )
|
||||
byteValue |= currentBit;
|
||||
currentBit >>= 1;
|
||||
if( currentBit == 0 )
|
||||
{
|
||||
*movingBuffer++ = byteValue;
|
||||
currentBit = 0x80;
|
||||
byteValue = 0;
|
||||
}
|
||||
}
|
||||
/*
|
||||
* Fill out the last byte; extra is ignored by OpenGL, but each row
|
||||
* must start on a new byte
|
||||
*/
|
||||
if( currentBit != 0x80 )
|
||||
*movingBuffer++ = byteValue;
|
||||
}
|
||||
|
||||
glNewList( listNum, GL_COMPILE );
|
||||
glBitmap( pixelsWide, pixelsHigh, 0, 0, pixelsWide, 0, newBuffer );
|
||||
glEndList();
|
||||
free( newBuffer );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create the set of display lists for the bitmaps
|
||||
*/
|
||||
BOOL makeGLDisplayListFirst(unichar first, int count, GLint base, NSFont *font, Shared::Graphics::FontMetrics &metrics)
|
||||
{
|
||||
GLint curListIndex;
|
||||
NSColor *blackColor = [NSColor blackColor];
|
||||
GLint dListNum;
|
||||
NSString *currentChar;
|
||||
unichar currentUnichar;
|
||||
NSSize charSize;
|
||||
NSRect charRect;
|
||||
NSImage *theImage;
|
||||
BOOL retval;
|
||||
|
||||
// float ascent = [font ascender];
|
||||
// float descent = [font descender];
|
||||
|
||||
NSDictionary *attribDict = [ NSDictionary dictionaryWithObjectsAndKeys:
|
||||
font, NSFontAttributeName,
|
||||
[NSColor whiteColor],
|
||||
NSForegroundColorAttributeName,
|
||||
[NSColor blackColor], NSBackgroundColorAttributeName,
|
||||
nil ];
|
||||
|
||||
// Make sure a list isn't already under construction
|
||||
glGetIntegerv( GL_LIST_INDEX, &curListIndex );
|
||||
if( curListIndex != 0 )
|
||||
{
|
||||
NSLog(@"Display list already under construction");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Save pixel unpacking state
|
||||
glPushClientAttrib( GL_CLIENT_PIXEL_STORE_BIT );
|
||||
|
||||
glPixelStorei( GL_UNPACK_SWAP_BYTES, GL_FALSE );
|
||||
glPixelStorei( GL_UNPACK_LSB_FIRST, GL_FALSE );
|
||||
glPixelStorei( GL_UNPACK_SKIP_ROWS, 0 );
|
||||
glPixelStorei( GL_UNPACK_SKIP_PIXELS, 0 );
|
||||
glPixelStorei( GL_UNPACK_ROW_LENGTH, 0 );
|
||||
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
|
||||
|
||||
charRect.origin.x = charRect.origin.y = 0;
|
||||
theImage = [ [ [ NSImage alloc ] initWithSize:NSMakeSize( 0, 0 ) ]
|
||||
autorelease ];
|
||||
retval = TRUE;
|
||||
float fontHeight = metrics.getHeight();
|
||||
float dy;
|
||||
|
||||
for( dListNum = base, currentUnichar = first; currentUnichar < first + count;
|
||||
dListNum++, currentUnichar++ )
|
||||
{
|
||||
currentChar = [ NSString stringWithCharacters:¤tUnichar length:1 ];
|
||||
|
||||
charSize = [ currentChar sizeWithAttributes:attribDict ];
|
||||
charRect.size = charSize;
|
||||
charRect = NSIntegralRect( charRect );
|
||||
dy = charRect.size.height - fontHeight;
|
||||
metrics.setWidth(dListNum-base, charRect.size.width);
|
||||
//metrics.setVirticalOffset(dListNum-base, fontHeight - charRect.size.height);
|
||||
|
||||
if( charRect.size.width > 0 && charRect.size.height > 0 )
|
||||
{
|
||||
charRect.size.height = fontHeight;
|
||||
[ theImage setSize:charRect.size ];
|
||||
[ theImage lockFocus ];
|
||||
[ [ NSGraphicsContext currentContext ] setShouldAntialias:NO ];
|
||||
[ blackColor set ];
|
||||
[ NSBezierPath fillRect:charRect ];
|
||||
//[ currentChar drawInRect:charRect withAttributes:attribDict ];
|
||||
[ currentChar drawAtPoint:NSMakePoint(0, 0) withAttributes:attribDict ];
|
||||
|
||||
[ theImage unlockFocus ];
|
||||
if( !makeDisplayList(dListNum, theImage) )
|
||||
{
|
||||
retval = FALSE;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
glPopClientAttrib();
|
||||
|
||||
return retval;
|
||||
}
|
||||
|
||||
void createGlFontBitmaps(GLuint &base, const string &type, int size, int width,
|
||||
int charCount, Shared::Graphics::FontMetrics &metrics) {
|
||||
|
||||
|
||||
//@FF@ keep the reduction ratio ???
|
||||
size = (float)size * 0.80;
|
||||
NSFont *font = [NSFont fontWithName:[NSString stringWithCString:"Arial" encoding:NSUTF8StringEncoding] size:size];
|
||||
if( font == nil )
|
||||
NSLog( @"font is nil\n" );
|
||||
|
||||
float fontHeight = [font ascender] - [font descender];
|
||||
|
||||
metrics.setHeight(fontHeight);
|
||||
|
||||
if( !makeGLDisplayListFirst('\0', charCount, base, font, metrics) )
|
||||
NSLog( @"Didn't make display list\n" );
|
||||
|
||||
}
|
||||
|
||||
void createGlFontOutlines(GLuint &base, const string &type, int width,
|
||||
float depth, int charCount, Shared::Graphics::FontMetrics &metrics) {
|
||||
NOIMPL;
|
||||
}
|
||||
}}//end namespace
|
@@ -12,10 +12,6 @@
|
||||
#include <stdexcept>
|
||||
#include <cassert>
|
||||
|
||||
#ifdef X11_AVAILABLE
|
||||
#include <GL/glx.h>
|
||||
#endif
|
||||
|
||||
#include "opengl.h"
|
||||
#include "sdl_private.h"
|
||||
#include "noimpl.h"
|
||||
@@ -143,227 +139,16 @@ void PlatformContextGl::makeCurrent() {
|
||||
void PlatformContextGl::swapBuffers() {
|
||||
SDL_GL_SwapBuffers();
|
||||
}
|
||||
|
||||
// ======================================
|
||||
// Global Fcs
|
||||
// ======================================
|
||||
|
||||
#ifdef WIN32
|
||||
|
||||
int CALLBACK EnumFontFamExProc(ENUMLOGFONTEX *lpelfe,
|
||||
NEWTEXTMETRICEX *lpntme,
|
||||
int FontType,
|
||||
LPARAM lParam) {
|
||||
std::vector<std::string> *systemFontList = (std::vector<std::string> *)lParam;
|
||||
systemFontList->push_back((char *)lpelfe->elfFullName);
|
||||
return 1; // I want to get all fonts
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
void createGlFontBitmaps(uint32 &base, const string &type, int size, int width,
|
||||
int charCount, FontMetrics &metrics) {
|
||||
// -adecw-screen-medium-r-normal--18-180-75-75-m-160-gb2312.1980-1 this is a Chinese font
|
||||
|
||||
#ifdef X11_AVAILABLE
|
||||
Display* display = glXGetCurrentDisplay();
|
||||
if(display == 0) {
|
||||
throw std::runtime_error("Couldn't create font: display is 0");
|
||||
}
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] trying to load font %s\n",__FILE__,__FUNCTION__,__LINE__,type.c_str());
|
||||
|
||||
XFontStruct* fontInfo = XLoadQueryFont(display, type.c_str());
|
||||
if(!fontInfo) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] CANNOT load font %s, falling back to default\n",__FILE__,__FUNCTION__,__LINE__,type.c_str());
|
||||
fontInfo = XLoadQueryFont(display, "fixed");
|
||||
if(!fontInfo) {
|
||||
throw std::runtime_error("Font not found: " + type);
|
||||
}
|
||||
}
|
||||
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
// we need the height of 'a' which sould ~ be half ascent+descent
|
||||
float height = (static_cast<float>(fontInfo->ascent + fontInfo->descent) / 2);
|
||||
if(height <= 0) {
|
||||
height = static_cast<float>(6);
|
||||
}
|
||||
metrics.setHeight(height);
|
||||
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] height = %f\n",__FILE__,__FUNCTION__,__LINE__,height);
|
||||
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
for(unsigned int i = 0; i < static_cast<unsigned int> (charCount); ++i) {
|
||||
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
if(i < fontInfo->min_char_or_byte2 || i > fontInfo->max_char_or_byte2) {
|
||||
|
||||
float width = static_cast<float>(6);
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] setting size = %f\n",__FILE__,__FUNCTION__,__LINE__,width);
|
||||
|
||||
metrics.setWidth(i, width);
|
||||
} else {
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
int p = i - fontInfo->min_char_or_byte2;
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] p = %d fontInfo->per_char = %p\n",__FILE__,__FUNCTION__,__LINE__,p,fontInfo->per_char);
|
||||
|
||||
if(fontInfo->per_char == NULL) {
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] type = [%s] p = %d fontInfo->per_char = %p\n",__FILE__,__FUNCTION__,__LINE__,type.c_str(),p,fontInfo->per_char);
|
||||
|
||||
XCharStruct *charinfo = &(fontInfo->min_bounds);
|
||||
//int charWidth = charinfo->rbearing - charinfo->lbearing;
|
||||
//int charHeight = charinfo->ascent + charinfo->descent;
|
||||
//int spanLength = (charWidth + 7) / 8;
|
||||
|
||||
if(charinfo != NULL) {
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] type = [%s] charinfo->width = %d\n",__FILE__,__FUNCTION__,__LINE__,type.c_str(),charinfo->width);
|
||||
metrics.setWidth(i, static_cast<float> (std::max((short)0,charinfo->width)));
|
||||
}
|
||||
else {
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] type = [%s] using size 6\n",__FILE__,__FUNCTION__,__LINE__,type.c_str());
|
||||
|
||||
metrics.setWidth(i, static_cast<float>(6));
|
||||
}
|
||||
}
|
||||
else {
|
||||
float width = static_cast<float>(fontInfo->per_char[p].width); //( fontInfo->per_char[p].rbearing - fontInfo->per_char[p].lbearing);
|
||||
if(width <= 0) {
|
||||
width = static_cast<float>(6);
|
||||
}
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] type = [%s] using size = %f\n",__FILE__,__FUNCTION__,__LINE__,type.c_str(),width);
|
||||
metrics.setWidth(i, width);
|
||||
}
|
||||
}
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
}
|
||||
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
glXUseXFont(fontInfo->fid, 0, charCount, base);
|
||||
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
|
||||
GLenum glerror = ::glGetError();
|
||||
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] glerror = %d\n",__FILE__,__FUNCTION__,__LINE__,glerror);
|
||||
|
||||
XFreeFont(display, fontInfo);
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
|
||||
#else
|
||||
// we badly need a solution portable to more than just glx
|
||||
//NOIMPL;
|
||||
|
||||
std::string useRealFontName = type;
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] trying to load useRealFontName [%s], size = %d, width = %d\n",__FILE__,__FUNCTION__,__LINE__,useRealFontName.c_str(),size,width);
|
||||
|
||||
static std::vector<std::string> systemFontList;
|
||||
if(systemFontList.size() == 0) {
|
||||
LOGFONT lf;
|
||||
//POSITION pos;
|
||||
//lf.lfCharSet = ANSI_CHARSET;
|
||||
lf.lfCharSet = (BYTE)charSet;
|
||||
lf.lfFaceName[0]='\0';
|
||||
|
||||
HDC hDC = wglGetCurrentDC();
|
||||
::EnumFontFamiliesEx(hDC,
|
||||
&lf,
|
||||
(FONTENUMPROC) EnumFontFamExProc,
|
||||
(LPARAM) &systemFontList, 0);
|
||||
|
||||
for(unsigned int idx = 0; idx < systemFontList.size(); ++idx) {
|
||||
string &fontName = systemFontList[idx];
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] found system font [%s]\n",__FILE__,__FUNCTION__,__LINE__,fontName.c_str());
|
||||
}
|
||||
}
|
||||
else {
|
||||
for(unsigned int idx = 0; idx < systemFontList.size(); ++idx) {
|
||||
string &fontName = systemFontList[idx];
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] checking font [%s]\n",__FILE__,__FUNCTION__,__LINE__,fontName.c_str());
|
||||
|
||||
if(_stricmp(useRealFontName.c_str(),fontName.c_str()) != 0) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] switch font name from [%s] to [%s]\n",__FILE__,__FUNCTION__,__LINE__,useRealFontName.c_str(),fontName.c_str());
|
||||
|
||||
useRealFontName = fontName;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HFONT font= CreateFont(
|
||||
size, 0, 0, 0, width, FALSE, FALSE, FALSE, charSet,
|
||||
OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
|
||||
DEFAULT_PITCH| (useRealFontName.c_str() ? FF_DONTCARE:FF_SWISS), useRealFontName.c_str());
|
||||
|
||||
assert(font!=NULL);
|
||||
|
||||
HDC dc= wglGetCurrentDC();
|
||||
SelectObject(dc, font);
|
||||
BOOL err= wglUseFontBitmaps(dc, 0, charCount, base);
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] wglUseFontBitmaps returned = %d, charCount = %d, base = %d\n",__FILE__,__FUNCTION__,__LINE__,err,charCount,base);
|
||||
|
||||
FIXED one;
|
||||
one.value= 1;
|
||||
one.fract= 0;
|
||||
|
||||
FIXED zero;
|
||||
zero.value= 0;
|
||||
zero.fract= 0;
|
||||
|
||||
MAT2 mat2;
|
||||
mat2.eM11= one;
|
||||
mat2.eM12= zero;
|
||||
mat2.eM21= zero;
|
||||
mat2.eM22= one;
|
||||
|
||||
//MAT2 mat2 = {{0,1},{0,0},{0,0},{0,1}};
|
||||
|
||||
|
||||
//metrics
|
||||
GLYPHMETRICS glyphMetrics;
|
||||
int errorCode= GetGlyphOutline(dc, 'a', GGO_METRICS, &glyphMetrics, 0, NULL, &mat2);
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] GetGlyphOutline returned = %d\n",__FILE__,__FUNCTION__,__LINE__,errorCode);
|
||||
|
||||
if(errorCode!=GDI_ERROR){
|
||||
metrics.setHeight(static_cast<float>(glyphMetrics.gmBlackBoxY));
|
||||
|
||||
const char *getPlatformExtensions(const PlatformContextGl *pcgl) {
|
||||
return "";
|
||||
}
|
||||
for(int i=0; i<charCount; ++i){
|
||||
int errorCode= GetGlyphOutline(dc, i, GGO_METRICS, &glyphMetrics, 0, NULL, &mat2);
|
||||
if(errorCode!=GDI_ERROR){
|
||||
metrics.setWidth(i, static_cast<float>(glyphMetrics.gmCellIncX));
|
||||
}
|
||||
else {
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] GetGlyphOutline returned = %d for i = %d\n",__FILE__,__FUNCTION__,__LINE__,errorCode,i);
|
||||
metrics.setWidth(i, static_cast<float>(6));
|
||||
}
|
||||
|
||||
void *getGlProcAddress(const char *procName) {
|
||||
void* proc = SDL_GL_GetProcAddress(procName);
|
||||
assert(proc!=NULL);
|
||||
return proc;
|
||||
}
|
||||
|
||||
DeleteObject(font);
|
||||
|
||||
assert(err);
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
void createGlFontOutlines(uint32 &base, const string &type, int width,
|
||||
float depth, int charCount, FontMetrics &metrics) {
|
||||
NOIMPL;
|
||||
}
|
||||
|
||||
const char *getPlatformExtensions(const PlatformContextGl *pcgl) {
|
||||
return "";
|
||||
}
|
||||
|
||||
void *getGlProcAddress(const char *procName) {
|
||||
void* proc = SDL_GL_GetProcAddress(procName);
|
||||
assert(proc!=NULL);
|
||||
return proc;
|
||||
}
|
||||
|
||||
}}//end namespace
|
||||
}}//end namespace
|
||||
|
74
source/shared_lib/sources/platform/unix/gl_wrap.cpp
Normal file
74
source/shared_lib/sources/platform/unix/gl_wrap.cpp
Normal file
@@ -0,0 +1,74 @@
|
||||
//This file is part of Glest Shared Library (www.glest.org)
|
||||
//Copyright (C) 2005 Matthias Braun <matze@braunis.de>
|
||||
|
||||
//You can redistribute this code and/or modify it under
|
||||
//the terms of the GNU General Public License as published by the Free Software
|
||||
//Foundation; either version 2 of the License, or (at your option) any later
|
||||
//version.
|
||||
#include "gl_wrap.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <stdexcept>
|
||||
#include <cassert>
|
||||
|
||||
|
||||
#include <GL/glx.h>
|
||||
|
||||
#include "opengl.h"
|
||||
#include "sdl_private.h"
|
||||
#include "noimpl.h"
|
||||
#include "util.h"
|
||||
#include "window.h"
|
||||
#include <vector>
|
||||
//#include <SDL_image.h>
|
||||
#include "leak_dumper.h"
|
||||
|
||||
using namespace Shared::Graphics::Gl;
|
||||
using namespace Shared::Util;
|
||||
|
||||
namespace Shared{ namespace Platform{
|
||||
|
||||
|
||||
|
||||
// ======================================
|
||||
// Global Fcs
|
||||
// ======================================
|
||||
|
||||
void createGlFontBitmaps(uint32 &base, const string &type, int size, int width,
|
||||
int charCount, FontMetrics &metrics) {
|
||||
Display* display = glXGetCurrentDisplay();
|
||||
if(display == 0) {
|
||||
throw std::runtime_error("Couldn't create font: display is 0");
|
||||
}
|
||||
XFontStruct* fontInfo = XLoadQueryFont(display, type.c_str());
|
||||
if(!fontInfo) {
|
||||
throw std::runtime_error("Font not found.");
|
||||
}
|
||||
|
||||
// we need the height of 'a' which sould ~ be half ascent+descent
|
||||
metrics.setHeight(static_cast<float>
|
||||
(fontInfo->ascent + fontInfo->descent) / 2);
|
||||
for(unsigned int i = 0; i < static_cast<unsigned int> (charCount); ++i) {
|
||||
if(i < fontInfo->min_char_or_byte2 ||
|
||||
i > fontInfo->max_char_or_byte2) {
|
||||
metrics.setWidth(i, static_cast<float>(6));
|
||||
} else {
|
||||
int p = i - fontInfo->min_char_or_byte2;
|
||||
metrics.setWidth(i, static_cast<float> (
|
||||
fontInfo->per_char[p].rbearing
|
||||
- fontInfo->per_char[p].lbearing));
|
||||
}
|
||||
}
|
||||
|
||||
glXUseXFont(fontInfo->fid, 0, charCount, base);
|
||||
XFreeFont(display, fontInfo);
|
||||
}
|
||||
|
||||
void createGlFontOutlines(uint32 &base, const string &type, int width,
|
||||
float depth, int charCount, FontMetrics &metrics) {
|
||||
NOIMPL;
|
||||
}
|
||||
|
||||
|
||||
}}//end namespace
|
145
source/shared_lib/sources/platform/win32/gl_wrap.cpp
Normal file
145
source/shared_lib/sources/platform/win32/gl_wrap.cpp
Normal file
@@ -0,0 +1,145 @@
|
||||
//This file is part of Glest Shared Library (www.glest.org)
|
||||
//Copyright (C) 2005 Matthias Braun <matze@braunis.de>
|
||||
|
||||
//You can redistribute this code and/or modify it under
|
||||
//the terms of the GNU General Public License as published by the Free Software
|
||||
//Foundation; either version 2 of the License, or (at your option) any later
|
||||
//version.
|
||||
#include "gl_wrap.h"
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
#include <stdexcept>
|
||||
#include <cassert>
|
||||
|
||||
#include "opengl.h"
|
||||
#include "sdl_private.h"
|
||||
#include "noimpl.h"
|
||||
#include "util.h"
|
||||
#include "window.h"
|
||||
#include <vector>
|
||||
//#include <SDL_image.h>
|
||||
#include "leak_dumper.h"
|
||||
|
||||
using namespace Shared::Graphics::Gl;
|
||||
using namespace Shared::Util;
|
||||
|
||||
namespace Shared{ namespace Platform{
|
||||
|
||||
|
||||
|
||||
// ======================================
|
||||
// Global Fcs
|
||||
// ======================================
|
||||
|
||||
int CALLBACK EnumFontFamExProc(ENUMLOGFONTEX *lpelfe,
|
||||
NEWTEXTMETRICEX *lpntme,
|
||||
int FontType,
|
||||
LPARAM lParam) {
|
||||
std::vector<std::string> *systemFontList = (std::vector<std::string> *)lParam;
|
||||
systemFontList->push_back((char *)lpelfe->elfFullName);
|
||||
return 1; // I want to get all fonts
|
||||
}
|
||||
|
||||
void createGlFontBitmaps(uint32 &base, const string &type, int size, int width,
|
||||
int charCount, FontMetrics &metrics) {
|
||||
// -adecw-screen-medium-r-normal--18-180-75-75-m-160-gb2312.1980-1 this is a Chinese font
|
||||
|
||||
std::string useRealFontName = type;
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] trying to load useRealFontName [%s], size = %d, width = %d\n",__FILE__,__FUNCTION__,__LINE__,useRealFontName.c_str(),size,width);
|
||||
|
||||
static std::vector<std::string> systemFontList;
|
||||
if(systemFontList.size() == 0) {
|
||||
LOGFONT lf;
|
||||
//POSITION pos;
|
||||
//lf.lfCharSet = ANSI_CHARSET;
|
||||
lf.lfCharSet = (BYTE)charSet;
|
||||
lf.lfFaceName[0]='\0';
|
||||
|
||||
HDC hDC = wglGetCurrentDC();
|
||||
::EnumFontFamiliesEx(hDC,
|
||||
&lf,
|
||||
(FONTENUMPROC) EnumFontFamExProc,
|
||||
(LPARAM) &systemFontList, 0);
|
||||
|
||||
for(unsigned int idx = 0; idx < systemFontList.size(); ++idx) {
|
||||
string &fontName = systemFontList[idx];
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] found system font [%s]\n",__FILE__,__FUNCTION__,__LINE__,fontName.c_str());
|
||||
}
|
||||
}
|
||||
else {
|
||||
for(unsigned int idx = 0; idx < systemFontList.size(); ++idx) {
|
||||
string &fontName = systemFontList[idx];
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] checking font [%s]\n",__FILE__,__FUNCTION__,__LINE__,fontName.c_str());
|
||||
|
||||
if(_stricmp(useRealFontName.c_str(),fontName.c_str()) != 0) {
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] switch font name from [%s] to [%s]\n",__FILE__,__FUNCTION__,__LINE__,useRealFontName.c_str(),fontName.c_str());
|
||||
|
||||
useRealFontName = fontName;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HFONT font= CreateFont(
|
||||
size, 0, 0, 0, width, FALSE, FALSE, FALSE, charSet,
|
||||
OUT_TT_ONLY_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY,
|
||||
DEFAULT_PITCH| (useRealFontName.c_str() ? FF_DONTCARE:FF_SWISS), useRealFontName.c_str());
|
||||
|
||||
assert(font!=NULL);
|
||||
|
||||
HDC dc= wglGetCurrentDC();
|
||||
SelectObject(dc, font);
|
||||
BOOL err= wglUseFontBitmaps(dc, 0, charCount, base);
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] wglUseFontBitmaps returned = %d, charCount = %d, base = %d\n",__FILE__,__FUNCTION__,__LINE__,err,charCount,base);
|
||||
|
||||
FIXED one;
|
||||
one.value= 1;
|
||||
one.fract= 0;
|
||||
|
||||
FIXED zero;
|
||||
zero.value= 0;
|
||||
zero.fract= 0;
|
||||
|
||||
MAT2 mat2;
|
||||
mat2.eM11= one;
|
||||
mat2.eM12= zero;
|
||||
mat2.eM21= zero;
|
||||
mat2.eM22= one;
|
||||
|
||||
//MAT2 mat2 = {{0,1},{0,0},{0,0},{0,1}};
|
||||
|
||||
|
||||
//metrics
|
||||
GLYPHMETRICS glyphMetrics;
|
||||
int errorCode= GetGlyphOutline(dc, 'a', GGO_METRICS, &glyphMetrics, 0, NULL, &mat2);
|
||||
|
||||
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] GetGlyphOutline returned = %d\n",__FILE__,__FUNCTION__,__LINE__,errorCode);
|
||||
|
||||
if(errorCode!=GDI_ERROR){
|
||||
metrics.setHeight(static_cast<float>(glyphMetrics.gmBlackBoxY));
|
||||
}
|
||||
for(int i=0; i<charCount; ++i){
|
||||
int errorCode= GetGlyphOutline(dc, i, GGO_METRICS, &glyphMetrics, 0, NULL, &mat2);
|
||||
if(errorCode!=GDI_ERROR){
|
||||
metrics.setWidth(i, static_cast<float>(glyphMetrics.gmCellIncX));
|
||||
}
|
||||
else {
|
||||
//SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] GetGlyphOutline returned = %d for i = %d\n",__FILE__,__FUNCTION__,__LINE__,errorCode,i);
|
||||
metrics.setWidth(i, static_cast<float>(6));
|
||||
}
|
||||
}
|
||||
|
||||
DeleteObject(font);
|
||||
|
||||
assert(err);
|
||||
|
||||
}
|
||||
|
||||
void createGlFontOutlines(uint32 &base, const string &type, int width,
|
||||
float depth, int charCount, FontMetrics &metrics) {
|
||||
NOIMPL;
|
||||
}
|
||||
|
||||
}}//end namespace
|
Reference in New Issue
Block a user