Hi all,

I gave osg android port a try on Windows using cygwin, and it worked like a
charm (only a tiny problem with osgViewer, when cross compiling for android
using cygwin, the windows path in osgViewer/CMakeLists.txt is used rather
than the android one, fix attached).
For the moment I only compiled all the osg libs and plugins that don't rely
on a 3rdParty lib. I will let you know when I succeed to build an app for my
nexus S :) (the test apk Jorge sent, works for me)

Thanks for your efforts.

Mourad


On Tue, Mar 8, 2011 at 5:37 PM, Robert Osfield <robert.osfi...@gmail.com>wrote:

> Hi Rafa, Jorge and all ;-)
>
> On Mon, Mar 7, 2011 at 11:53 AM, Rafa Gaitan <rafa.gai...@gmail.com>
> wrote:
> > Finally Jorge and me have finished a first approach to build OSG under
> > Android using the android NDK.
> >
> > Attached you will find all required code and cmake modifications (They
> > are based on a previous submissions I sent last week).
>
> Many thanks for your efforts.  I have now merged and checked in
> changes to OpenSceneGraph svn/trunk.  I haven't tested the Android
> build at all yet, only the normal Linux build side.
>
> Would it be possible for you to put up a documentation page on the
> wiki to show how to set up to build the OSG on Android?
>
> Thanks,
> Robert.
> _______________________________________________
> osg-submissions mailing list
> osg-submissi...@lists.openscenegraph.org
>
> http://lists.openscenegraph.org/listinfo.cgi/osg-submissions-openscenegraph.org
>
# FIXME: For OS X, need flag for Framework or dylib
IF(DYNAMIC_OPENSCENEGRAPH)
    ADD_DEFINITIONS(-DOSGVIEWER_LIBRARY)
ELSE()
    ADD_DEFINITIONS(-DOSG_LIBRARY_STATIC)
ENDIF()

SET(LIB_NAME osgViewer)

SET(HEADER_PATH ${OpenSceneGraph_SOURCE_DIR}/include/${LIB_NAME})
SET(TARGET_H
    ${HEADER_PATH}/CompositeViewer
    ${HEADER_PATH}/Export
    ${HEADER_PATH}/GraphicsWindow
    ${HEADER_PATH}/Renderer
    ${HEADER_PATH}/Scene
    ${HEADER_PATH}/Version
    ${HEADER_PATH}/View
    ${HEADER_PATH}/Viewer
    ${HEADER_PATH}/ViewerBase
    ${HEADER_PATH}/ViewerEventHandlers
)

SET(LIB_COMMON_FILES
    CompositeViewer.cpp
    HelpHandler.cpp
    Renderer.cpp
    Scene.cpp
    ScreenCaptureHandler.cpp
    StatsHandler.cpp
    Version.cpp
    View.cpp
    Viewer.cpp
    ViewerBase.cpp
    ViewerEventHandlers.cpp
    ${OPENSCENEGRAPH_VERSIONINFO_RC}
)

SET(LIB_EXTRA_LIBS)

IF(WIN32 AND NOT ANDROID)
    #
    # Enable workaround for OpenGL driver issues when used in 
multithreaded/multiscreen with NVidia drivers on Windows XP 
    # For example: osgviewer dumptruck.osg was showing total garbage (screen 
looked like shattered, splashed hedgehog) 
    # There were also serious issues with render to texture cameras.
    # Workaround repeats makeCurrentContext call as it was found that this 
causes the problems to dissapear.
    #
    OPTION(OSG_MULTIMONITOR_MULTITHREAD_WIN32_NVIDIA_WORKAROUND "Set to ON if 
you have NVidia board and drivers earlier than 177.92 ver" OFF)
    MARK_AS_ADVANCED(OSG_MULTIMONITOR_MULTITHREAD_WIN32_NVIDIA_WORKAROUND)
    IF(OSG_MULTIMONITOR_MULTITHREAD_WIN32_NVIDIA_WORKAROUND)
        ADD_DEFINITIONS(-DOSG_MULTIMONITOR_MULTITHREAD_WIN32_NVIDIA_WORKAROUND)
    ENDIF()

    SET(TARGET_H ${TARGET_H}
        ${HEADER_PATH}/api/Win32/GraphicsHandleWin32
        ${HEADER_PATH}/api/Win32/GraphicsWindowWin32
        ${HEADER_PATH}/api/Win32/PixelBufferWin32
    )
        
    SET(LIB_COMMON_FILES ${LIB_COMMON_FILES} 
        GraphicsWindowWin32.cpp
        PixelBufferWin32.cpp
    )
ELSE()
    IF(APPLE)

        IF(OSG_BUILD_PLATFORM_IPHONE OR OSG_BUILD_PLATFORM_IPHONE_SIMULATOR)
            SET(OSG_WINDOWING_SYSTEM "IOS" CACHE STRING "Windowing system type 
for graphics window creation, options only IOS.")
        ELSE()
            SET(OSG_WINDOWING_SYSTEM "Carbon" CACHE STRING "Windowing system 
type for graphics window creation, options Carbon, Cocoa or X11.")
        ENDIF()

    ELSE()
        IF(ANDROID)
            SET(OSG_WINDOWING_SYSTEM "None" CACHE STRING "None Windowing system 
type for graphics window creation.")
        ELSE()
            SET(OSG_WINDOWING_SYSTEM "X11" CACHE STRING "Windowing system type 
for graphics window creation. options only X11")
        ENDIF()
    ENDIF()

    IF(${OSG_WINDOWING_SYSTEM} STREQUAL "Cocoa")
        ADD_DEFINITIONS(-DUSE_DARWIN_COCOA_IMPLEMENTATION)    
 
        IF(OSG_COMPILE_FRAMEWORKS)
           SET(LIB_COMMON_FILES ${LIB_COMMON_FILES} 
                 ${HEADER_PATH}/api/Cocoa/GraphicsHandleCocoa
                 ${HEADER_PATH}/api/Cocoa/GraphicsWindowCocoa
                 ${HEADER_PATH}/api/Cocoa/PixelBufferCocoa
             )
            SET_PROPERTY(SOURCE ${HEADER_PATH}/api/Cocoa/GraphicsHandleCocoa 
PROPERTY MACOSX_PACKAGE_LOCATION Headers/api/Cocoa) 
            SET_PROPERTY(SOURCE ${HEADER_PATH}/api/Cocoa/GraphicsWindowCocoa 
PROPERTY MACOSX_PACKAGE_LOCATION Headers/api/Cocoa)
            SET_PROPERTY(SOURCE ${HEADER_PATH}/api/Cocoa/PixelBufferCocoa 
PROPERTY MACOSX_PACKAGE_LOCATION Headers/api/Cocoa)
        ELSE()
            SET(TARGET_H ${TARGET_H} 
                ${HEADER_PATH}/api/Cocoa/GraphicsHandleCocoa
                ${HEADER_PATH}/api/Cocoa/GraphicsWindowCocoa
                ${HEADER_PATH}/api/Cocoa/PixelBufferCocoa
            )
        ENDIF()  
  
        SET(LIB_COMMON_FILES ${LIB_COMMON_FILES} 
            GraphicsWindowCocoa.mm
            DarwinUtils.h
            DarwinUtils.mm
            PixelBufferCocoa.mm
        )
        SET(LIB_EXTRA_LIBS ${COCOA_LIBRARY} ${LIB_EXTRA_LIBS})

    ELSEIF(${OSG_WINDOWING_SYSTEM} STREQUAL "Carbon")
        ADD_DEFINITIONS(-DUSE_DARWIN_CARBON_IMPLEMENTATION)     
 
        IF(OSG_COMPILE_FRAMEWORKS)
           SET(LIB_COMMON_FILES ${LIB_COMMON_FILES} 
                 ${HEADER_PATH}/api/Carbon/GraphicsHandleCarbon
                 ${HEADER_PATH}/api/Carbon/GraphicsWindowCarbon
                 ${HEADER_PATH}/api/Carbon/PixelBufferCarbon
             )
            SET_PROPERTY(SOURCE ${HEADER_PATH}/api/Carbon/GraphicsHandleCarbon 
PROPERTY MACOSX_PACKAGE_LOCATION Headers/api/Carbon) 
            SET_PROPERTY(SOURCE ${HEADER_PATH}/api/Carbon/GraphicsWindowCarbon 
PROPERTY MACOSX_PACKAGE_LOCATION Headers/api/Carbon)
            SET_PROPERTY(SOURCE ${HEADER_PATH}/api/Carbon/PixelBufferCarbon 
PROPERTY MACOSX_PACKAGE_LOCATION Headers/api/Carbon)
        ELSE()
            SET(TARGET_H ${TARGET_H} 
                ${HEADER_PATH}/api/Carbon/GraphicsHandleCarbon
                ${HEADER_PATH}/api/Carbon/GraphicsWindowCarbon
                ${HEADER_PATH}/api/Carbon/PixelBufferCarbon
            )
        ENDIF()

        SET(LIB_COMMON_FILES ${LIB_COMMON_FILES} 
            GraphicsWindowCarbon.cpp
            DarwinUtils.h
            DarwinUtils.mm
            PixelBufferCarbon.cpp
        )

        SET(LIB_EXTRA_LIBS ${COCOA_LIBRARY} ${LIB_EXTRA_LIBS})

    ELSEIF(${OSG_WINDOWING_SYSTEM} STREQUAL "IOS")

        ADD_DEFINITIONS(-DUSE_IOS_IMPLEMENTATION)     
 
        IF(OSG_COMPILE_FRAMEWORKS)
           SET(LIB_COMMON_FILES ${LIB_COMMON_FILES} 
                 ${HEADER_PATH}/api/IOS/GraphicsWindowIOS
             )

            SET_PROPERTY(SOURCE ${HEADER_PATH}/api/IOS/GraphicsWindowIOS 
PROPERTY MACOSX_PACKAGE_LOCATION Headers/api/IOS)
        ELSE()
            SET(TARGET_H ${TARGET_H} 
                ${HEADER_PATH}/api/IOS/GraphicsWindowIOS
                #${HEADER_PATH}/api/IOS/PixelBufferIOS
            )
        ENDIF()   
 
        SET(LIB_COMMON_FILES ${LIB_COMMON_FILES} 
            GraphicsWindowIOS.mm
            IOSUtils.h
            IOSUtils.mm
        )

        SET(LIB_EXTRA_LIBS ${COCOA_LIBRARY} ${LIB_EXTRA_LIBS})

    ELSEIF(${OSG_WINDOWING_SYSTEM} STREQUAL "X11")
        # X11 for everybody else
        INCLUDE(FindPkgConfig OPTIONAL)
        IF(PKG_CONFIG_FOUND)
            PKG_CHECK_MODULES(XRANDR xrandr)
            IF(XRANDR_FOUND) 
                OPTION(OSGVIEWER_USE_XRANDR "Set to ON to enable Xrandr support 
for GraphicsWindowX11." ON)
            ELSE() 
                SET(OSGVIEWER_USE_XRANDR OFF)
            ENDIF()
        ELSE()
            SET(OSGVIEWER_USE_XRANDR OFF)
        ENDIF()

        SET(TARGET_H ${TARGET_H}
            ${HEADER_PATH}/api/X11/GraphicsHandleX11
            ${HEADER_PATH}/api/X11/GraphicsWindowX11
            ${HEADER_PATH}/api/X11/PixelBufferX11
        )

        SET(LIB_COMMON_FILES ${LIB_COMMON_FILES} 
            GraphicsWindowX11.cpp 
            PixelBufferX11.cpp
        )
        
        IF(OSGVIEWER_USE_XRANDR)
            ADD_DEFINITIONS(-DOSGVIEWER_USE_XRANDR)
            SET(LIB_PRIVATE_HEADERS ${LIB_PRIVATE_HEADERS} 
${XRANDR_INCLUDE_DIRS} )

            IF(X11_Xrandr_LIB)
                SET(LIB_EXTRA_LIBS ${X11_Xrandr_LIB} ${LIB_EXTRA_LIBS})
            ELSE()
                SET(LIB_EXTRA_LIBS ${XRANDR_LIBRARIES} ${LIB_EXTRA_LIBS})
            ENDIF()
        ENDIF()

        # X11 on Apple requires X11 library plus OpenGL linking hack on Leopard
        IF(APPLE)
            # hack for finding the iphone opengl es lib
            IF(OSG_BUILD_PLATFORM_IPHONE OR OSG_BUILD_PLATFORM_IPHONE_SIMULATOR)
                SET(OPENGL_INCLUDE_DIR 
${IPHONE_SDKROOT}System/Library/Frameworks)
                SET(OPENGL_LIBRARIES 
${IPHONE_SDKROOT}System/Library/Frameworks/OpenGLES)
            ELSE()
                # Find GL/glx.h
                IF(EXISTS ${CMAKE_OSX_SYSROOT}/usr/X11/include/GL/glx.h)
                    SET(OPENGL_INCLUDE_DIR /usr/X11/include)
                    SET(OPENGL_LIBRARIES /usr/X11/lib/libGL.dylib)
                ELSEIF(EXISTS ${CMAKE_OSX_SYSROOT}/usr/X11R6/include/GL/glx.h)
                    SET(OPENGL_INCLUDE_DIR /usr/X11R6/include)
                    SET(OPENGL_LIBRARIES /usr/X11R6/lib/libGL.dylib)
                ENDIF()
                INCLUDE_DIRECTORIES(BEFORE SYSTEM ${OPENGL_INCLUDE_DIR})

                SET(LIB_EXTRA_LIBS ${X11_X11_LIB} ${OPENGL_LIBRARIES} 
${LIB_EXTRA_LIBS})
                SET(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} 
-Wl,-dylib_file,/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib:${CMAKE_OSX_SYSROOT}/System/Library/Frameworks/OpenGL.framework/Versions/A/Libraries/libGL.dylib")
            ENDIF()

        ELSE(APPLE)

            SET(LIB_EXTRA_LIBS ${X11_X11_LIB} ${LIB_EXTRA_LIBS})
        ENDIF(APPLE)
    ELSE()
        MESSAGE(STATUS "Windowing system not supported")
    ENDIF()
ENDIF()


SET(TARGET_SRC
    ${LIB_PRIVATE_HEADERS}
    ${LIB_COMMON_FILES}
)


SET(TARGET_LIBRARIES    
    osgGA
    osgText
    osgDB
    osgUtil
    osg
    OpenThreads
)

SET(TARGET_EXTERNAL_LIBRARIES ${LIB_EXTRA_LIBS})

IF(MINGW OR CYGWIN)
    SET(TARGET_EXTERNAL_LIBRARIES ${TARGET_EXTERNAL_LIBRARY} gdi32 )
ENDIF()

SETUP_LIBRARY(${LIB_NAME})

FOREACH(INCLUDEFILE ${TARGET_H} )
   FILE(RELATIVE_PATH REL_INCLUDEFILE ${HEADER_PATH} ${INCLUDEFILE})
   GET_FILENAME_COMPONENT(REL_INCLUDE_PATH ${REL_INCLUDEFILE} PATH)
   INSTALL(
   FILES        ${INCLUDEFILE}
   DESTINATION ${INSTALL_INCDIR}/${LIB_NAME}/${REL_INCLUDE_PATH}
   COMPONENT libopenscenegraph-dev
   )
ENDFOREACH()
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to