parent
da63248bb9
commit
72c0188ec3
|
@ -5,12 +5,19 @@ cmake_minimum_required(VERSION 2.8)
|
||||||
project(colobot C CXX)
|
project(colobot C CXX)
|
||||||
|
|
||||||
# Required packages
|
# Required packages
|
||||||
find_package(OpenGL REQUIRED)
|
find_package(OpenGL 1.4 REQUIRED)
|
||||||
find_package(SDL REQUIRED)
|
find_package(SDL 1.2.10 REQUIRED)
|
||||||
find_package(SDL_image REQUIRED)
|
find_package(SDL_image 1.2 REQUIRED)
|
||||||
find_package(PNG REQUIRED)
|
find_package(PNG 1.2 REQUIRED)
|
||||||
|
|
||||||
# TODO: check for SDL version. Should be >= 1.2.10
|
# GLEW requirement depends on platform
|
||||||
|
# By default it is auto detected
|
||||||
|
# This setting may be used to override
|
||||||
|
# Possible values:
|
||||||
|
# - auto -> determine automatically
|
||||||
|
# - 1 -> always enable
|
||||||
|
# - 0 -> always disable
|
||||||
|
set(USE_GLEW auto)
|
||||||
|
|
||||||
# Build with debugging symbols
|
# Build with debugging symbols
|
||||||
set(CMAKE_BUILD_TYPE debug)
|
set(CMAKE_BUILD_TYPE debug)
|
||||||
|
@ -19,5 +26,8 @@ set(CMAKE_BUILD_TYPE debug)
|
||||||
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -Wall -std=gnu++0x")
|
set(CMAKE_CXX_FLAGS_RELEASE "-O2 -Wall -std=gnu++0x")
|
||||||
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -std=gnu++0x")
|
set(CMAKE_CXX_FLAGS_DEBUG "-g -O0 -Wall -std=gnu++0x")
|
||||||
|
|
||||||
|
# Include cmake directory
|
||||||
|
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${colobot_SOURCE_DIR}/cmake")
|
||||||
|
|
||||||
# Subdirectory with sources
|
# Subdirectory with sources
|
||||||
add_subdirectory(src bin)
|
add_subdirectory(src bin)
|
||||||
|
|
26
HOWTO.txt
26
HOWTO.txt
|
@ -13,16 +13,19 @@ How to...
|
||||||
http://www.cmake.org/cmake/resources/software.html (the Windows zip file)
|
http://www.cmake.org/cmake/resources/software.html (the Windows zip file)
|
||||||
Unpack the contents of the archive to where MinGW is installed (files from bin/ should go into bin/, etc.)
|
Unpack the contents of the archive to where MinGW is installed (files from bin/ should go into bin/, etc.)
|
||||||
3. Download the following libraries, installing them in your MinGW directory like with CMake:
|
3. Download the following libraries, installing them in your MinGW directory like with CMake:
|
||||||
SDL, SDL_imgage, SDL_ttf, libpng
|
SDL >=1.2.10, SDL_imgage >= 1.2, SDL_ttf >= 2.0, libpng >= 1.2, GLEW >= 1.8.0
|
||||||
|
Note #1: For most libraries, you can download binary packages with compiled files.
|
||||||
|
However, you must ensure that they work with MinGW as some are built with MSVC
|
||||||
|
and may be incompatible. If that is the case, you should compile the libraries from sources
|
||||||
|
using MinGW.
|
||||||
|
Note #2: For GLEW, you need to compile from source under MinGW. Since there is no automated
|
||||||
|
make script for that, follow the instructions here: http://stackoverflow.com/questions/6005076/
|
||||||
4. Run MinGW console from the shortcut in menu start.
|
4. Run MinGW console from the shortcut in menu start.
|
||||||
5. Change to the directory where you have the Colobot sources by typing "cd /c/where/the/sources/are"
|
5. Change to the directory where you have the Colobot sources by typing "cd /c/where/the/sources/are"
|
||||||
6. Type "cmake -G 'MSYS Makefiles' ."
|
6. Type "cmake -G 'MSYS Makefiles' ."
|
||||||
7. Type "make"
|
7. Type "make"
|
||||||
8. Everything should compile without errors.
|
8. Everything should compile without errors.
|
||||||
|
|
||||||
Note: you might experience some troubles with OpenGL headers, as Windows (used to?) ship with outdated header files.
|
|
||||||
Download the newest ones from SDK of your graphics card vendor.
|
|
||||||
|
|
||||||
1.2 Linux:
|
1.2 Linux:
|
||||||
|
|
||||||
Since you're running Linux, you probably know how to do this anyway ;)
|
Since you're running Linux, you probably know how to do this anyway ;)
|
||||||
|
@ -32,6 +35,9 @@ How to...
|
||||||
$ cmake .
|
$ cmake .
|
||||||
$ make
|
$ make
|
||||||
|
|
||||||
|
Note: If you experience problems with OpenGL's extensions, install GLEW library and enable
|
||||||
|
it in compilation by setting USE_GLEW to 1 in CMakeLists.txt
|
||||||
|
|
||||||
1.3 Other platforms, compilers, etc.
|
1.3 Other platforms, compilers, etc.
|
||||||
|
|
||||||
We haven't checked other platforms yet but the code isn't particularly tied to any compiler or platform, so in theory it should work.
|
We haven't checked other platforms yet but the code isn't particularly tied to any compiler or platform, so in theory it should work.
|
||||||
|
@ -60,7 +66,14 @@ Jak...
|
||||||
http://www.cmake.org/cmake/resources/software.html (plik zip dla Windowsa)
|
http://www.cmake.org/cmake/resources/software.html (plik zip dla Windowsa)
|
||||||
Zip rozpakowujemy do katalogu, gdzie zainstalowany jest MinGW (pliki z bin/ mają trafić do bin/ itd.).
|
Zip rozpakowujemy do katalogu, gdzie zainstalowany jest MinGW (pliki z bin/ mają trafić do bin/ itd.).
|
||||||
3. Ścągamy następujące biblioteki i instalujemy je tam, gdzie MinGW, podobnie jak z CMake:
|
3. Ścągamy następujące biblioteki i instalujemy je tam, gdzie MinGW, podobnie jak z CMake:
|
||||||
SDL, SDL_image, SDL_ttf, libpng
|
SDL >= 1.2.10, SDL_image >= 1.2, SDL_ttf >= 2.0, libpng >= 1.2
|
||||||
|
Uwaga #1: W większości wymienionych bibliotek można ściągnąć paczki binarne ze skompilowanymi plikami.
|
||||||
|
Jednak musisz się upewnić, że pliki te będą współpracowały z MinGW, bo część z nich
|
||||||
|
jest kompilowana MSVC i może być niezgodna. W takim wypadku, musisz skompilować bibliotekę
|
||||||
|
ze źródeł pod MinGW.
|
||||||
|
|
||||||
|
Uwaga #2: W przypadku GLEW, musisz skompilować bibiotekę ze źródeł pod MinGW. Ponieważ nie ma skryptu
|
||||||
|
make do tego, użyj poleceń opisanych tutaj: http://stackoverflow.com/questions/6005076/
|
||||||
4. Uruchamiamy MinGW console ze skrótu w menu start.
|
4. Uruchamiamy MinGW console ze skrótu w menu start.
|
||||||
5. Przechodzimy do katalogu, gdzie są źródła wpisując "cd /c/tam/gdzie/sa/zrodla"
|
5. Przechodzimy do katalogu, gdzie są źródła wpisując "cd /c/tam/gdzie/sa/zrodla"
|
||||||
6. Wpisujemy "cmake -G 'MSYS Makefiles' ."
|
6. Wpisujemy "cmake -G 'MSYS Makefiles' ."
|
||||||
|
@ -76,6 +89,9 @@ Jak...
|
||||||
$ cmake .
|
$ cmake .
|
||||||
$ make
|
$ make
|
||||||
|
|
||||||
|
Uwaga: Jeśli natrafisz na problemy z rozszerzeniami OpenGL, zainstaluj bibliotekę GLEW i włącz ją
|
||||||
|
przy kompilacji, ustawiając USE_GLEW na 1 w CMakeLists.txt
|
||||||
|
|
||||||
1.3 Inne platformy, kompilatory, etc.
|
1.3 Inne platformy, kompilatory, etc.
|
||||||
|
|
||||||
Nie sprawdzaliśmy jeszcze innych platform, ale kod nie jest jakoś specjalnie związany z danym kompilatorem czy platformą, więc w teorii powinien zadziałać.
|
Nie sprawdzaliśmy jeszcze innych platform, ale kod nie jest jakoś specjalnie związany z danym kompilatorem czy platformą, więc w teorii powinien zadziałać.
|
||||||
|
|
|
@ -0,0 +1,51 @@
|
||||||
|
# CMake module to find GLEW
|
||||||
|
# Borrowed from http://code.google.com/p/nvidia-texture-tools/
|
||||||
|
# MIT license Copyright (c) 2007 NVIDIA Corporation
|
||||||
|
|
||||||
|
# Try to find GLEW library and include path.
|
||||||
|
# Once done this will define
|
||||||
|
#
|
||||||
|
# GLEW_FOUND
|
||||||
|
# GLEW_INCLUDE_PATH
|
||||||
|
# GLEW_LIBRARY
|
||||||
|
#
|
||||||
|
|
||||||
|
IF (WIN32)
|
||||||
|
FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h
|
||||||
|
$ENV{PROGRAMFILES}/GLEW/include
|
||||||
|
${PROJECT_SOURCE_DIR}/src/nvgl/glew/include
|
||||||
|
DOC "The directory where GL/glew.h resides")
|
||||||
|
FIND_LIBRARY( GLEW_LIBRARY
|
||||||
|
NAMES glew GLEW glew32 glew32s
|
||||||
|
PATHS
|
||||||
|
/mingw/bin # for MinGW's MSYS
|
||||||
|
/mingw/lib
|
||||||
|
${PROJECT_SOURCE_DIR}/glew/bin # or in local directory
|
||||||
|
${PROJECT_SOURCE_DIR}/glew/lib
|
||||||
|
DOC "The GLEW library")
|
||||||
|
ELSE (WIN32)
|
||||||
|
FIND_PATH( GLEW_INCLUDE_PATH GL/glew.h
|
||||||
|
/usr/include
|
||||||
|
/usr/local/include
|
||||||
|
/sw/include
|
||||||
|
/opt/local/include
|
||||||
|
DOC "The directory where GL/glew.h resides")
|
||||||
|
FIND_LIBRARY( GLEW_LIBRARY
|
||||||
|
NAMES GLEW glew
|
||||||
|
PATHS
|
||||||
|
/usr/lib64
|
||||||
|
/usr/lib
|
||||||
|
/usr/local/lib64
|
||||||
|
/usr/local/lib
|
||||||
|
/sw/lib
|
||||||
|
/opt/local/lib
|
||||||
|
DOC "The GLEW library")
|
||||||
|
ENDIF (WIN32)
|
||||||
|
|
||||||
|
IF (GLEW_INCLUDE_PATH)
|
||||||
|
SET( GLEW_FOUND 1 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise")
|
||||||
|
ELSE (GLEW_INCLUDE_PATH)
|
||||||
|
SET( GLEW_FOUND 0 CACHE STRING "Set to 1 if GLEW is found, 0 otherwise")
|
||||||
|
ENDIF (GLEW_INCLUDE_PATH)
|
||||||
|
|
||||||
|
MARK_AS_ADVANCED( GLEW_FOUND )
|
|
@ -11,18 +11,40 @@ if (${CMAKE_SYSTEM_NAME} MATCHES "Windows")
|
||||||
set(PLATFORM_WINDOWS 1)
|
set(PLATFORM_WINDOWS 1)
|
||||||
set(PLATFORM_LINUX 0)
|
set(PLATFORM_LINUX 0)
|
||||||
set(PLATFORM_OTHER 0)
|
set(PLATFORM_OTHER 0)
|
||||||
|
# On Windows, GLEW is required
|
||||||
|
if (${USE_GLEW} MATCHES "auto")
|
||||||
|
set(USE_GLEW 1)
|
||||||
|
endif()
|
||||||
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
elseif(${CMAKE_SYSTEM_NAME} MATCHES "Linux")
|
||||||
set(PLATFORM_WINDOWS 0)
|
set(PLATFORM_WINDOWS 0)
|
||||||
set(PLATFORM_LINUX 1)
|
set(PLATFORM_LINUX 1)
|
||||||
set(PLATFORM_OTHER 0)
|
set(PLATFORM_OTHER 0)
|
||||||
|
# On Linux, we should be fine without GLEW
|
||||||
|
if (${USE_GLEW} MATCHES "auto")
|
||||||
|
set(USE_GLEW 0)
|
||||||
|
endif()
|
||||||
# for clock_gettime
|
# for clock_gettime
|
||||||
set(PLATFORM_LIBS "-lrt")
|
set(PLATFORM_LIBS "-lrt")
|
||||||
else()
|
else()
|
||||||
set(PLATFORM_WINDOWS 0)
|
set(PLATFORM_WINDOWS 0)
|
||||||
set(PLATFORM_LINUX 0)
|
set(PLATFORM_LINUX 0)
|
||||||
set(PLATFORM_OTHER 1)
|
set(PLATFORM_OTHER 1)
|
||||||
|
# Use GLEW to be safe
|
||||||
|
if (${USE_GLEW} MATCHES "auto")
|
||||||
|
set(USE_GLEW 1)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(OPTIONAL_LIBS "")
|
||||||
|
set(OPTIONAL_INCLUDE_DIRS "")
|
||||||
|
|
||||||
|
if(${USE_GLEW} EQUAL 1)
|
||||||
|
find_package(GLEW REQUIRED)
|
||||||
|
set(OPTIONAL_LIBS ${OPTIONAL_LIBS} ${GLEW_LIBRARY})
|
||||||
|
set(OPTIONAL_INCLUDE_DIRS ${OPTIONAL_INCLUDE_DIRS} ${GLEW_INCLUDE_PATH})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
|
||||||
# Configure file
|
# Configure file
|
||||||
configure_file(common/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/common/config.h)
|
configure_file(common/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/common/config.h)
|
||||||
|
|
||||||
|
@ -156,6 +178,7 @@ ${SDL_LIBRARY}
|
||||||
${SDLIMAGE_LIBRARY}
|
${SDLIMAGE_LIBRARY}
|
||||||
${OPENGL_LIBRARY}
|
${OPENGL_LIBRARY}
|
||||||
${PNG_LIBRARIES}
|
${PNG_LIBRARIES}
|
||||||
|
${OPTIONAL_LIBS}
|
||||||
${PLATFORM_LIBS}
|
${PLATFORM_LIBS}
|
||||||
CBot
|
CBot
|
||||||
)
|
)
|
||||||
|
@ -165,6 +188,7 @@ ${SDL_INCLUDE_DIR}
|
||||||
${SDL_IMAGE_INCLUDE_DIR}
|
${SDL_IMAGE_INCLUDE_DIR}
|
||||||
${SDLTTF_INCLUDE_DIR}
|
${SDLTTF_INCLUDE_DIR}
|
||||||
${PNG_INCLUDE_DIRS}
|
${PNG_INCLUDE_DIRS}
|
||||||
|
${OPTIONAL_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/CBot)
|
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/CBot)
|
||||||
|
|
|
@ -2,7 +2,9 @@
|
||||||
|
|
||||||
// Macros set by CMake
|
// Macros set by CMake
|
||||||
#cmakedefine DEBUG
|
#cmakedefine DEBUG
|
||||||
|
|
||||||
#cmakedefine PLATFORM_WINDOWS @PLATFORM_WINDOWS@
|
#cmakedefine PLATFORM_WINDOWS @PLATFORM_WINDOWS@
|
||||||
#cmakedefine PLATFORM_LINUX @PLATFORM_LINUX@
|
#cmakedefine PLATFORM_LINUX @PLATFORM_LINUX@
|
||||||
#cmakedefine PLATFORM_OTHER @PLATFORM_OTHER@
|
#cmakedefine PLATFORM_OTHER @PLATFORM_OTHER@
|
||||||
|
|
||||||
|
#cmakedefine USE_GLEW @USE_GLEW@
|
||||||
|
|
|
@ -16,10 +16,20 @@
|
||||||
|
|
||||||
// gldevice.cpp
|
// gldevice.cpp
|
||||||
|
|
||||||
#include "common/image.h"
|
|
||||||
#include "graphics/opengl/gldevice.h"
|
#include "graphics/opengl/gldevice.h"
|
||||||
|
|
||||||
|
#include "common/config.h"
|
||||||
|
#include "common/image.h"
|
||||||
#include "math/geometry.h"
|
#include "math/geometry.h"
|
||||||
|
|
||||||
|
|
||||||
|
#if defined(USE_GLEW)
|
||||||
|
|
||||||
|
// When using GLEW, only glew.h is needed
|
||||||
|
#include <GL/glew.h>
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
// Should define prototypes of used extensions as OpenGL functions
|
// Should define prototypes of used extensions as OpenGL functions
|
||||||
#define GL_GLEXT_PROTOTYPES
|
#define GL_GLEXT_PROTOTYPES
|
||||||
|
|
||||||
|
@ -27,9 +37,11 @@
|
||||||
#include <GL/glu.h>
|
#include <GL/glu.h>
|
||||||
#include <GL/glext.h>
|
#include <GL/glext.h>
|
||||||
|
|
||||||
|
#endif // if defined(GLEW)
|
||||||
|
|
||||||
#include <SDL/SDL.h>
|
#include <SDL/SDL.h>
|
||||||
|
|
||||||
#include <assert.h>
|
#include <cassert>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -73,9 +85,23 @@ std::string Gfx::CGLDevice::GetError()
|
||||||
|
|
||||||
bool Gfx::CGLDevice::Create()
|
bool Gfx::CGLDevice::Create()
|
||||||
{
|
{
|
||||||
/* NOTE: extension testing is not done here as the assumed version of OpenGL to be used (1.4+)
|
#if defined(USE_GLEW)
|
||||||
must already have the required extensions. The used extensions are listed here for reference:
|
if (glewInit() != GLEW_OK)
|
||||||
GL_ARB_multitexture, GL_EXT_texture_env_combine, GL_EXT_secondary_color */
|
{
|
||||||
|
m_error = "GLEW initialization failed";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( (! GLEW_ARB_multitexture) || (! GLEW_EXT_texture_env_combine) || (! GLEW_EXT_secondary_color) )
|
||||||
|
{
|
||||||
|
m_error = "GLEW reports required extensions not supported";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* NOTE: when not using GLEW, extension testing is not performed, as it is assumed that
|
||||||
|
glext.h is up-to-date and the OpenGL shared library has the required functions present. */
|
||||||
|
|
||||||
m_wasInit = true;
|
m_wasInit = true;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue