Browse Source

Connecting the new X11/GLX code, no input yet. Refactoring build files

Panagiotis Christopoulos Charitos 13 years ago
parent
commit
1fc1b52c74

+ 111 - 32
CMakeLists.txt

@@ -31,36 +31,27 @@ ENDMACRO()
 #
 # Arch
 #
-SET(ARCH 64 CACHE STRING "The architecture")
+SET(ARCH 64 CACHE STRING "The architecture (-mXX)")
 
-SET(CMAKE_CXX_FLAGS "-m${ARCH} ")
-SET(CMAKE_C_FLAGS "-m${ARCH} ")
-SET(CMAKE_EXE_LINKER_FLAGS "-m${ARCH} ")
+MESSAGE("++ Arch: ${ARCH}")
+
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m${ARCH} ")
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -m${ARCH} ")
+SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -m${ARCH} ")
 
 #
 # Install
 #
 SET(INCLUDE_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/include/" CACHE PATH "The subdirectory to the header prefix")
 SET(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Library install path")
-	
-#
-# Doxygen
-#
-FIND_PACKAGE(Doxygen)
-IF(DOXYGEN_FOUND)
-	CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/docs/doxyfile ${CMAKE_CURRENT_BINARY_DIR}/doxyfile @ONLY)
-	
-	ADD_CUSTOM_TARGET(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM)
-ENDIF()
+
+MESSAGE("++ Include install dir: ${INCLUDE_INSTALL_DIR}")
+MESSAGE("++ Lib install dir: ${LIB_INSTALL_DIR}")
 
 #
-# Valgrind hacks
+# First the extern
 #
-OPTION(VALGRIND_HAPPY "Make valgrind happy" OFF)
-
-IF(VALGRIND_HAPPY)
-	ADD_DEFINITIONS("-DGLIBCXX_FORCE_NEW")
-ENDIF()
+ADD_SUBDIRECTORY(extern)
 
 #
 # Libraries
@@ -78,28 +69,116 @@ ENDIF()
 #
 # Freetype
 #
-SET(FREETYPE_INCLUDE_DIR "/usr/include/freetype2" 
-	CACHE PATH "The directory that contains the Freetype headers")
-SET(FREETYPE_LIBRARY_DIR "/usr/lib" 
-	CACHE PATH "The directory that contains the libfreetype.so")
+SET(FREETYPE_INCLUDE_DIR "/usr/include/freetype2" CACHE PATH "The directory that contains the Freetype headers")
+SET(FREETYPE_LIBRARY_DIR "/usr/lib" CACHE PATH "The directory that contains the libfreetype.so")
 
 ANKI_ADD_LIB(${FREETYPE_INCLUDE_DIR} ${FREETYPE_LIBRARY_DIR} ${FREETYPE_INCLUDE_DIR}/freetype/freetype.h)
 
 #
 # Bullet (Because FIND_PACKAGE(Bullet) sucks)
 #
-SET(BULLET_INCLUDE_DIR "${ANKI_PROJ_SOURCE_DIR}/extern/include/" CACHE PATH 
-	"The directory that contains the bullet directory with the header files")
-SET(BULLET_LIBRARY_DIR "${ANKI_PROJ_SOURCE_DIR}/extern/lib${ARCH}" CACHE PATH 
-	"The directory that contains the Bullet (static) libraries")
+SET(BULLET_INCLUDE_DIR "${ANKI_PROJ_SOURCE_DIR}/extern/include/" CACHE PATH "The directory that contains the bullet directory with the header files")
+SET(BULLET_LIBRARY_DIR "${ANKI_PROJ_SOURCE_DIR}/extern/lib${ARCH}" CACHE PATH "The directory that contains the Bullet (static) libraries")
 
-ANKI_ADD_LIB(${BULLET_INCLUDE_DIR}/bullet ${BULLET_LIBRARY_DIR} 
-	${BULLET_INCLUDE_DIR}/bullet/btBulletCollisionCommon.h)
+ANKI_ADD_LIB(${BULLET_INCLUDE_DIR}/bullet ${BULLET_LIBRARY_DIR} ${BULLET_INCLUDE_DIR}/bullet/btBulletCollisionCommon.h)
 
 #
-# Add subdirs
+# Doxygen
+#
+FIND_PACKAGE(Doxygen)
+IF(DOXYGEN_FOUND)
+	CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/docs/doxyfile ${CMAKE_CURRENT_BINARY_DIR}/doxyfile @ONLY)
+	
+	ADD_CUSTOM_TARGET(doc ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/doxyfile WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} COMMENT "Generating API documentation with Doxygen" VERBATIM)
+ENDIF()
+
+#
+# Revision
+#
+FIND_PACKAGE(Subversion 1.6 REQUIRED)
+
+IF(Subversion_FOUND)
+	Subversion_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} ER)
+	ADD_DEFINITIONS("-DANKI_REVISION=${ER_WC_REVISION}")
+	SET(ANKI_REVISION ${ER_WC_REVISION})
+ELSE()
+	ADD_DEFINITIONS("-DANKI_REVISION=-1")
+	SET(ANKI_REVISION "-1")
+ENDIF()
+
+# 
+# Version
+#
+SET(ANKI_VERSION_MINOR 0)
+SET(ANKI_VERSION_MAJOR 1)
+ADD_DEFINITIONS("-DANKI_VERSION_MINOR=${ANKI_VERSION_MINOR}")
+ADD_DEFINITIONS("-DANKI_VERSION_MAJOR=${ANKI_VERSION_MAJOR}")
+
+CONFIGURE_FILE("include/anki/Version.h.cmake" "${CMAKE_CURRENT_BINARY_DIR}/anki/Version.h")
+
+INSTALL(FILES "${CMAKE_CURRENT_BINARY_DIR}/anki/Version.h" DESTINATION "${INCLUDE_INSTALL_DIR}/anki")
+
+#
+# Defines
+#
+ADD_DEFINITIONS("-DANKI_MATH_INTEL_SIMD")
+ADD_DEFINITIONS("-Dthread_local=__thread")
+
+IF(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
+	ADD_DEFINITIONS("-DANKI_PLATFORM_LINUX")
+ELSEIF(${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
+	ADD_DEFINITIONS("-DANKI_PLATFORM_WINDOWS")
+ENDIF()
+
+#
+# Window backend
+#
+SET(ANKI_WINDOW_BACKEND "GLXX11" CACHE STRING "The window backend (GLXX11 or EGLX11)")
+ADD_DEFINITIONS("-DANKI_WINDOW_BACKEND_${ANKI_WINDOW_BACKEND}")
+
+MESSAGE("++ Window backend: ${ANKI_WINDOW_BACKEND}")
+
+#
+# Compiler flags
+#
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic-errors -pedantic -ansi -Wall -W -Wwrite-strings -Wno-unused -Werror -Wno-long-long -msse4 -std=c++11 ")
+
+IF(CMAKE_BUILD_TYPE STREQUAL Debug)
+	# Removed because they do not work with boost::regexpr and who knows what
+	# else
+	#ADD_DEFINITIONS("-D_GLIBCXX_DEBUG -D_GLIBXX_DEBUG_PEDANTIC")
+ELSE()
+	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=core2 -ffast-math ")
+ENDIF()
+
+#
+# Include & lib directories
+#
+INCLUDE_DIRECTORIES("extern/GLEW/include" "extern/tinyxml2/include" "extern/lua" "include")
+INCLUDE_DIRECTORIES("extern/include") # XXX Remove that some day
+LINK_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/extern/lib64") # XXX Remove that some day
+
+# Add a few compiler specific stuff 
+IF(${CMAKE_CXX_COMPILER} MATCHES ".*clang\\+\\+$")	
+	INCLUDE_DIRECTORIES("/opt/libcxx/include/c++/v1")
+	LINK_DIRECTORIES("/opt/libcxx/lib")
+ELSE()
+	# Dont use it. It produces warnings with -std=c++0x
+	#ADD_DEFINITIONS("-fsingle-precision-constant")
+ENDIF()
+
+#
+# Valgrind hacks
+#
+OPTION(VALGRIND_HAPPY "Make valgrind happy" OFF)
+
+IF(VALGRIND_HAPPY)
+	ADD_DEFINITIONS("-DGLIBCXX_FORCE_NEW")
+ENDIF()
+
+#
+# Add anki related dirs
 #
-ADD_SUBDIRECTORY(extern)
 ADD_SUBDIRECTORY(src)
 
 OPTION(BUILD_TESTS "Build Unit Tests" OFF)

+ 2 - 1
include/anki/core/NativeWindow.h

@@ -41,13 +41,14 @@ public:
 	/// @{
 	void create(NativeWindowInitializer& initializer);
 	void destroy();
+	void swapBuffers();
 	/// @}
 
 private:
 	U32 width;
 	U32 height;
 
-	std::unique_ptr<NativeWindowImpl> impl;
+	std::shared_ptr<NativeWindowImpl> impl;
 
 	Bool isCreated() const
 	{

+ 0 - 69
src/CMakeLists.txt

@@ -1,72 +1,3 @@
-#
-# Revision
-#
-FIND_PACKAGE(Subversion 1.6 REQUIRED)
-
-IF(Subversion_FOUND)
-	Subversion_WC_INFO(${CMAKE_CURRENT_SOURCE_DIR} ER)
-	ADD_DEFINITIONS("-DANKI_REVISION=${ER_WC_REVISION}")
-	SET(ANKI_REVISION ${ER_WC_REVISION})
-ELSE()
-	ADD_DEFINITIONS("-DANKI_REVISION=-1")
-	SET(ANKI_REVISION "-1")
-ENDIF()
-
-# 
-# Version
-#
-SET(ANKI_VERSION_MINOR 0)
-SET(ANKI_VERSION_MAJOR 1)
-ADD_DEFINITIONS("-DANKI_VERSION_MINOR=${ANKI_VERSION_MINOR}")
-ADD_DEFINITIONS("-DANKI_VERSION_MAJOR=${ANKI_VERSION_MAJOR}")
-
-CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/../include/anki/Version.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/anki/Version.h)
-
-INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/anki/Version.h DESTINATION ${INCLUDE_INSTALL_DIR}/anki)
-
-#
-# Defines
-#
-ADD_DEFINITIONS("-DANKI_MATH_INTEL_SIMD")
-ADD_DEFINITIONS("-Dthread_local=__thread")
-
-IF(${CMAKE_SYSTEM_NAME} STREQUAL Linux)
-	ADD_DEFINITIONS("-DANKI_PLATFORM_LINUX")
-ELSEIF(${CMAKE_SYSTEM_NAME} STREQUAL Windows)
-	ADD_DEFINITIONS("-DANKI_PLATFORM_WINDOWS")
-ENDIF()
-
-# Add a few compiler specific stuff 
-IF(${CMAKE_CXX_COMPILER} MATCHES ".*clang\\+\\+$")	
-	INCLUDE_DIRECTORIES("/opt/libcxx/include/c++/v1")
-	LINK_DIRECTORIES("/opt/libcxx/lib")
-ELSE()
-	# Dont use it. It produces warnings with -std=c++0x
-	#ADD_DEFINITIONS("-fsingle-precision-constant")
-ENDIF()
-
-#
-# Extern directories
-#
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../extern/GLEW/include ${CMAKE_CURRENT_SOURCE_DIR}/../extern/tinyxml2/include ${CMAKE_CURRENT_SOURCE_DIR}/../extern/lua)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../extern/include)
-LINK_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../extern/lib64)
-
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include)
-
-#
-# Compiler flags
-#
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic-errors -pedantic -ansi -Wall -W -Wwrite-strings -Wno-unused -Werror -Wno-long-long -msse4 -std=c++11 ")
-
-IF(CMAKE_BUILD_TYPE STREQUAL Debug)
-	# Removed because they do not work with boost::regexpr and who knows what
-	# else
-	#ADD_DEFINITIONS("-D_GLIBCXX_DEBUG -D_GLIBXX_DEBUG_PEDANTIC")
-ELSE()
-	SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mtune=core2 -ffast-math ")
-ENDIF()
-
 #
 # Add anki sub libraries
 #

+ 2 - 1
src/core/App.cpp

@@ -78,7 +78,8 @@ void App::init(int argc, char* argv[])
 	parseCommandLineArgs(argc, argv);
 	printAppInfo();
 	initDirs();
-	initWindow();
+	//initWindow();
+	//SDL_Init(SDL_INIT_INPUT)
 
 	// other
 	activeCam = NULL;

+ 10 - 3
src/core/CMakeLists.txt

@@ -1,4 +1,11 @@
-FILE(GLOB_RECURSE ANKI_CORE_SOURCES *.cpp)
-FILE(GLOB_RECURSE ANKI_CORE_HEADERS *.h)
+SET(ANKI_CORE_SOURCES App.cpp AsyncLoader.cpp Logger.cpp StdinListener.cpp ThreadPool.cpp Timestamp.cpp)
 
-ADD_LIBRARY(ankicore ${ANKI_CORE_SOURCES} ${ANKI_CORE_HEADERS})
+IF(ANKI_WINDOW_BACKEND STREQUAL "GLXX11")
+	SET(ANKI_CORE_SOURCES ${ANKI_CORE_SOURCES} NativeWindowGlxX11.cpp)
+ELSEIF(ANKI_WINDOW_BACKEND STREQUAL "EGLX11")
+	SET(ANKI_CORE_SOURCES ${ANKI_CORE_SOURCES} NativeWindowEglX11.cpp)
+ELSE()
+	MESSAGE(FATAL "Unrecognized ANKI_WINDOW_BACKEND: ${ANKI_WINDOW_BACKEND}")
+ENDIF()
+
+ADD_LIBRARY(ankicore ${ANKI_CORE_SOURCES})

+ 9 - 1
src/core/NativeWindowGlxX11.cpp

@@ -256,12 +256,20 @@ NativeWindow::~NativeWindow()
 void NativeWindow::create(NativeWindowInitializer& initializer)
 {
 	impl.reset(new NativeWindowImpl);
+	impl->create(initializer);
 }
 
 //==============================================================================
 void NativeWindow::destroy()
 {
-	impl.reset(nullptr);
+	impl.reset();
+}
+
+//==============================================================================
+void NativeWindow::swapBuffers()
+{
+	ANKI_ASSERT(isCreated());
+	glXSwapBuffers(impl->xDisplay, impl->xWindow);
 }
 
 } // end namespace anki

+ 1 - 1
src/gl/ShaderProgram.cpp

@@ -379,8 +379,8 @@ void ShaderProgram::initUniAndAttribVars()
 	//
 	// attrib locations
 	//
-	U32 attribsCount = (U32)num;
 	glGetProgramiv(glId, GL_ACTIVE_ATTRIBUTES, &num);
+	U32 attribsCount = (U32)num;
 
 	// Count the _useful_ attribs
 	for(GLint i = 0; i < num; i++)

+ 1 - 0
src/renderer/Is.cpp

@@ -642,6 +642,7 @@ void Is::lightPass()
 	//
 	// Do shadows pass
 	//
+	
 
 	//
 	// Write the lights UBO

+ 2 - 2
src/renderer/MainRenderer.cpp

@@ -43,11 +43,11 @@ void MainRenderer::init(const Renderer::Initializer& initializer_)
 //==============================================================================
 void MainRenderer::initGl()
 {
-	glewExperimental = GL_TRUE;
+	/*glewExperimental = GL_TRUE;
 	if(glewInit() != GLEW_OK)
 	{
 		throw ANKI_EXCEPTION("GLEW initialization failed");
-	}
+	}*/
 
 	// Ignore the first error
 	glGetError();

+ 0 - 11
testapp/CMakeLists.txt

@@ -1,13 +1,2 @@
-SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pedantic-errors -pedantic -ansi -Wall -W -Wwrite-strings -Wno-unused -Werror -Wno-long-long -msse4 -std=c++11 ")
-
-ADD_DEFINITIONS("-Dthread_local=__thread")
-
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../extern/GLEW/include ${CMAKE_CURRENT_SOURCE_DIR}/../extern/tinyxml2/include ${CMAKE_CURRENT_SOURCE_DIR}/../extern/lua)
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../extern/include)
-LINK_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../extern/lib64)
-
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/../include)
-
 ADD_EXECUTABLE(testapp Main.cpp)
-
 TARGET_LINK_LIBRARIES(testapp anki) 

+ 15 - 1
testapp/Main.cpp

@@ -38,6 +38,7 @@
 #include "anki/resource/Material.h"
 #include "anki/core/ThreadPool.h"
 #include "anki/core/Timestamp.h"
+#include "anki/core/NativeWindow.h"
 #include "anki/util/Functions.h"
 
 using namespace anki;
@@ -45,6 +46,7 @@ using namespace anki;
 UiPainter* painter;
 ModelNode* horse;
 PerspectiveCamera* cam;
+NativeWindow* win;
 
 //==============================================================================
 void init()
@@ -275,7 +277,8 @@ void mainLoop()
 			break;
 		}
 
-		AppSingleton::get().swapBuffers();
+		//AppSingleton::get().swapBuffers();
+		win->swapBuffers();
 
 		// Sleep
 		//
@@ -307,6 +310,17 @@ void initSubsystems(int argc, char* argv[])
 	// App
 	AppSingleton::get().init(argc, argv);
 
+	// Window
+	NativeWindowInitializer nwinit;
+	nwinit.width = 1280;
+	nwinit.height = 720;
+	nwinit.majorVersion = 4;
+	nwinit.minorVersion = 2;
+	nwinit.depthBits = 0;
+	nwinit.stencilBits = 0;
+	win = new NativeWindow;	
+	win->create(nwinit);
+
 	// Main renderer
 	RendererInitializer initializer;
 	initializer.ms.ez.enabled = true;

+ 2 - 0
tests/CMakeLists.txt

@@ -1,6 +1,8 @@
 FILE(GLOB_RECURSE TESTS_SOURCES *.cpp)
 FILE(GLOB_RECURSE TESTS_HEADERS *.h)
 
+INCLUDE_DIRECTORIES("..")
+
 ADD_EXECUTABLE(anki_tests ${TESTS_SOURCES} ${TESTS_HEADERS})
 TARGET_LINK_LIBRARIES(anki_tests anki)