parent
da63248bb9
commit
72c0188ec3
|
@ -5,12 +5,19 @@ cmake_minimum_required(VERSION 2.8)
|
|||
project(colobot C CXX)
|
||||
|
||||
# Required packages
|
||||
find_package(OpenGL REQUIRED)
|
||||
find_package(SDL REQUIRED)
|
||||
find_package(SDL_image REQUIRED)
|
||||
find_package(PNG REQUIRED)
|
||||
find_package(OpenGL 1.4 REQUIRED)
|
||||
find_package(SDL 1.2.10 REQUIRED)
|
||||
find_package(SDL_image 1.2 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
|
||||
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_DEBUG "-g -O0 -Wall -std=gnu++0x")
|
||||
|
||||
# Include cmake directory
|
||||
SET(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${colobot_SOURCE_DIR}/cmake")
|
||||
|
||||
# Subdirectory with sources
|
||||
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)
|
||||
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:
|
||||
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.
|
||||
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' ."
|
||||
7. Type "make"
|
||||
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:
|
||||
|
||||
Since you're running Linux, you probably know how to do this anyway ;)
|
||||
|
@ -32,6 +35,9 @@ How to...
|
|||
$ cmake .
|
||||
$ 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.
|
||||
|
||||
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)
|
||||
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:
|
||||
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.
|
||||
5. Przechodzimy do katalogu, gdzie są źródła wpisując "cd /c/tam/gdzie/sa/zrodla"
|
||||
6. Wpisujemy "cmake -G 'MSYS Makefiles' ."
|
||||
|
@ -76,6 +89,9 @@ Jak...
|
|||
$ cmake .
|
||||
$ 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.
|
||||
|
||||
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_LINUX 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")
|
||||
set(PLATFORM_WINDOWS 0)
|
||||
set(PLATFORM_LINUX 1)
|
||||
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
|
||||
set(PLATFORM_LIBS "-lrt")
|
||||
else()
|
||||
set(PLATFORM_WINDOWS 0)
|
||||
set(PLATFORM_LINUX 0)
|
||||
set(PLATFORM_OTHER 1)
|
||||
# Use GLEW to be safe
|
||||
if (${USE_GLEW} MATCHES "auto")
|
||||
set(USE_GLEW 1)
|
||||
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(common/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/common/config.h)
|
||||
|
||||
|
@ -156,6 +178,7 @@ ${SDL_LIBRARY}
|
|||
${SDLIMAGE_LIBRARY}
|
||||
${OPENGL_LIBRARY}
|
||||
${PNG_LIBRARIES}
|
||||
${OPTIONAL_LIBS}
|
||||
${PLATFORM_LIBS}
|
||||
CBot
|
||||
)
|
||||
|
@ -165,6 +188,7 @@ ${SDL_INCLUDE_DIR}
|
|||
${SDL_IMAGE_INCLUDE_DIR}
|
||||
${SDLTTF_INCLUDE_DIR}
|
||||
${PNG_INCLUDE_DIRS}
|
||||
${OPTIONAL_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/CBot)
|
||||
|
|
|
@ -2,7 +2,9 @@
|
|||
|
||||
// Macros set by CMake
|
||||
#cmakedefine DEBUG
|
||||
|
||||
#cmakedefine PLATFORM_WINDOWS @PLATFORM_WINDOWS@
|
||||
#cmakedefine PLATFORM_LINUX @PLATFORM_LINUX@
|
||||
#cmakedefine PLATFORM_OTHER @PLATFORM_OTHER@
|
||||
|
||||
#cmakedefine USE_GLEW @USE_GLEW@
|
||||
|
|
|
@ -16,10 +16,20 @@
|
|||
|
||||
// gldevice.cpp
|
||||
|
||||
#include "common/image.h"
|
||||
#include "graphics/opengl/gldevice.h"
|
||||
|
||||
#include "common/config.h"
|
||||
#include "common/image.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
|
||||
#define GL_GLEXT_PROTOTYPES
|
||||
|
||||
|
@ -27,9 +37,11 @@
|
|||
#include <GL/glu.h>
|
||||
#include <GL/glext.h>
|
||||
|
||||
#endif // if defined(GLEW)
|
||||
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
#include <assert.h>
|
||||
#include <cassert>
|
||||
|
||||
|
||||
|
||||
|
@ -73,9 +85,23 @@ std::string Gfx::CGLDevice::GetError()
|
|||
|
||||
bool Gfx::CGLDevice::Create()
|
||||
{
|
||||
/* NOTE: extension testing is not done here as the assumed version of OpenGL to be used (1.4+)
|
||||
must already have the required extensions. The used extensions are listed here for reference:
|
||||
GL_ARB_multitexture, GL_EXT_texture_env_combine, GL_EXT_secondary_color */
|
||||
#if defined(USE_GLEW)
|
||||
if (glewInit() != GLEW_OK)
|
||||
{
|
||||
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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue