OSX: окно GLUT никогда не появляется - PullRequest
1 голос
/ 24 ноября 2011

Я пытаюсь запустить ORTS на моем Mac для школьного проекта.Якобы он был написан для кроссплатформенности, но я не знаю, был ли он когда-либо должным образом протестирован на OSX.После больших трудностей мне удалось заставить его скомпилироваться, но он все еще не вполне работает.

Когда я запускаю приложение ortsg, которое является графическим интерфейсом OpenGL, вывод терминала показываетчто игра запускается, загружает свои активы и работает правильно.Однако реальное игровое окно никогда не появляется.Единственным возможным признаком любой проблемы является следующее сообщение:

2011-11-23 16: 52: 33.513 ortsg [4565: 107] GLUT Предупреждение: glutInit вызывается во второй раз.

За исключением этого сообщения, весь вывод точно такой же, как и то, что я вижу при работе на машинах Slackware Linux моей школы, где игра работает нормально.(К сожалению, мне довольно неудобно выполнять свою работу на этих машинах, поэтому я пытаюсь запустить ее на OSX.) Я могу избавиться от этого предупреждения, комментируя вызов glutInit в apps/ortsg/src/ortsg_main.C, который неКажется, возникают какие-то другие проблемы, но игровое окно по-прежнему никогда не отображается.

Кажется, я не могу найти сообщений о тех, кто сталкивался с подобными проблемами в Google.Я не ожидаю, что кто-то в SO будет близко знаком с ORTS, поэтому у меня следующие вопросы:

  1. Существуют ли какие-либо общие сценарии, которые могут привести к тому, что окно GLUT не появится, особенно в OSX?
  2. Предоставляет ли GLUT какие-либо средства для отладки таких проблем?

Редактировать: По запросу JimN приведен код инициализации GLUT ...

// From apps/ortsg/src/ortsg_main.C
int main(int argc, char **argv)
{
  char mydir[81];
  getcwd(mydir, 80);
  glutInit(&argc, argv);
  chdir(mydir);
  // ...
}

// From libs/gfxclient/src/GfxInit.C
void glutVisibilityDebug(int state)
{
  if(state == GLUT_VISIBLE)
    cout << "Window is visible" << endl;
  else if(state == GLUT_NOT_VISIBLE)
    cout << "Window is invisible" << endl;
  else
    cout << "Window state unknown";
}

void GfxModule::init_GLUT_window()
{
  cerr << "INITIALIZE GLUT WINDOW" << endl;
  GfxGlutAdaptor::set_client(this);

  glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH | GLUT_ALPHA);

  // the window starts near the upper left corner of the screen
  glutInitWindowPosition(opt.win_x, opt.win_y);
  glutInitWindowSize(opt.win_w, opt.win_h);

  // Open a window
  glutCreateWindow(opt.title.c_str());

  // Register the splash as the draw routing until
  glutDisplayFunc   (GfxGlutAdaptor::splash);
  glutVisibilityFunc(glutVisibilityDebug);

  if (opt.full_screen) glutFullScreen();
}

Я добавил функцию glutVisibilityDebug, чтобы посмотреть, смогу ли я определить, что GLUT думает о состоянии видимости окна, но ни один из моих операторов отладки никогда не печатался.Что-то еще пришло мне в голову, что может помочь отладить это.В какой-то момент я попытался заменить glutDisplayFunc функцией, которая просто выводит «glutDislplayFunc вызвано» в stderr.Я заметил, что текст был напечатан только при выходе из приложения.

1 Ответ

2 голосов
/ 27 ноября 2011

Я загрузил ежедневный снимок от 26/11/2011, а затем установил все зависимости, используя brew на моем Mac.

Выполнено export OSTYPE=DARWIN, за которым следуют make init и make. Было несколько проблем с компиляцией, которые я исправил в этом makefile :

# $Id: makefile 10648 2011-10-06 15:46:07Z mburo $
#  
# This is an ORTS file (c) Michael Buro, licensed under the GPL

# This make file works for systems which use gcc
#
# - shell variable OSTYPE must be set in your shell rc file as follows:
# 
#   if LINUX matches uppercase($OSTYPE) => Linux
#   if DARWIN matches                   => Mac OS X
#   if CYGWIN matches                   => Cygwin (gcc on Windows)
#   if MSYS   matches                   => MinGW (gcc on Windows)
#
#   check that value with echo $OSTYPE and set it in your shell resource
#   file if above words don't match. Don't forget export OSTYPE when using sh or bash
#
#   I use:  OSTYPE=`uname`
#
# - ORTS_MTUNE = i686 athlon-xp pentium-m etc.
#     if set, -mtune=$(ORTS_MTUNE) is added to compiler options
#
# - set GCC_PRECOMP to 1 if you want to use precompiled header files (gcc >= 3.4)
#
# - adjust SDL/X paths if necessary
#
# - for non-gcc compilers try -DHAS_TYPEOF=0 if typeof causes trouble
#
# - make MDBG=1 ...    displays the entire compiler/linker invocation lines
#
# - make clean         removes make generated files
# - make cleanobj      removes all .o files
#
# - make [MODE=dbg]    compiles targets in debug mode (no STL debug!)
#
# - make MODE=opt      compiles with optimizations
#
# - make MODE=bp       compiles with bprof info
#
# - make MODE=gprof    compiles with gprof info
#
# - make MODE=stldbg   compiles optimized stl debug version
#
# - make <app>         creates application bin/<app>  (omit prefix bin/ !)
#                      use periods in <app> in place of slashes for applications
#                      within subdirectories (e.g. "make rtscomp06.game2.simtest")
#
# - make list          displays a list of all registered applications
#
# - make init          creates necessary dep+bin+obj directories and links
#
# - make               creates all applications
#
# - shell variable ORTS_MODE defines the default compile mode
#   if not set, the passed MODE= parameter or dbg will be used, if MODE is not passed
#   otherwise ORTS_MODE will be used
#
# issues: 
#
#  - all include files are used (only using library includes would be better)
#
# new:
#
# applications and libraries can now name their individual external library dependencies
# (libs + headers)     
# see: apps/*/src/app.mk and libs/*/src/lib.mk, esp. libs/gfxclient/src/lib.mk
#
# todo: adjust mac/cygwin to new libary setting


# supported substrings of OSTYPE
# The following words must be uppercase
# If they are found in the uppercased OSTYPE variable
# the particular O/S matches
OSTYPE_LINUX  := LINUX
OSTYPE_MAC    := DARWIN
OSTYPE_CYGWIN := CYGWIN
OSTYPE_MINGW  := MSYS

# convert OSTYPE to uppercase
OSTYPE := $(shell echo -n "$(OSTYPE)" | tr a-z A-Z )
#$(warning OSTYPE=$(OSTYPE))
#OSTYPE := LINUX

# -DOS_LINUX or -DOS_MAC or -DOS_CYGWIN is passed to g++
# also set: OS_LINUX, OS_CYGWIN, OS_MAC := 1 resp.
# MinGW uses OS_LINUX for now.

# tar file name
PROJ := orts

# directories to be excluded from snapshot tar file

# no longer needed SNAPSHOT_EXCLUDE := libs/mapabstr apps/mapabs apps/polypath apps/hpastar

# special targets
EXCL_INC := clean init cleanobj tar dep rmdeps list tar snapshot rpm

# libraries
#LIB_DIRS := kernel network serverclient gfxclient pathfind osl mapabstr path ortsnet ai/low dcdt/se dcdt/sr newpath
#LIB_DIRS := $(wildcard libs/*) libs/dcdt/se libs/dcdt/sr libs/ai/low
LIB_DIRS := $(wildcard libs/*/src) $(wildcard libs/*/*/src)
#$(warning LIBS $(LIB_DIRS))

# sub-projects
ifeq ("$(MAKECMDGOALS)","")
APP_DIRS := orts ortsg#  built by default (do not edit)
else
APP_DIRS := $(MAKECMDGOALS)# build the passed on application
endif

FILT := $(filter $(EXCL_INC),$(MAKECMDGOALS))

ifneq ("$(FILT)","")
APP_DIRS := 
endif

#MAKECMDGOALS := compile_gch link_gch $(MAKECMDGOALS)
#$(warning making $(MAKECMDGOALS) ...)

# $(warning making $(APP_DIRS) ...)

.PHONY: all ALWAYS $(EXCL_INC) $(APP_DIRS) init

# where dependencies are stored (change also in dependency command (***) below)
#
DEP := dep

#$(error $(vp))

# make libraries and applications, make and link gch file first
all: all_end

# create tar file of the entire project
tar:
    @ $(MAKE) clean; cd ..; tar cfz ../$(PROJ).tgz $(PROJ)


# daily SVN snapshot
SVNROOT=svn://mburo@bodo1.cs.ualberta.ca:/all/pubsoft
snapshot:
    rm -rf orts
    mkdir orts
    svn export $(SVNROOT)/orts/trunk orts/trunk
    tar cfz $(PROJ).tgz orts
    rm -rf orts
    rm -rf orts_data
    mkdir orts_data
    svn export $(SVNROOT)/orts_data/trunk orts_data/trunk
    tar cfz orts_data.tgz orts_data
    rm -rf orts_data

CC        := g++
CC_OPTS   := -pipe -felide-constructors -fstrict-aliasing -Wno-deprecated
# -fno-merge-constants

#WARN      := -Wall -W -Wundef 
WARN      := -Wall -W 
#-Wold-style-cast

#ifneq ("$(OSTYPE)", "$(OSTYPE_MINGW)") 
ifeq (,$(findstring $(OSTYPE_MINGW),$(OSTYPE)))
WARN += -Wundef 
endif 

OPT:=-O3

ifneq ("$(ORTS_MTUNE)","") 
  OPT:=$(OPT) -mtune=$(ORTS_MTUNE)
endif

OPT_FRAME := -fomit-frame-pointer 

# default 
AWK := gawk
EXE_SUFFIX :=

#ifeq ("$(OSTYPE)", "$(OSTYPE_MAC)") 
ifneq (,$(findstring $(OSTYPE_MAC),$(OSTYPE)))

################### Mac OS X 

OS_MAC := 1

MACROS    := -DGCC -DOS_MAC -DHAS_TYPEOF=1 -DTRANSFORM_MOUSE_Y=0 -DMAC_OS_X_VERSION_MIN_REQUIRED=1040 -DTARGET_API_MAC_CARBON=1
USR_FRAME := /Library/Frameworks
SYS_FRAME := /System/Library/Frameworks
INC_OPTS += -I/usr/local/Cellar/sdl/1.2.14/include/SDL \
            -I/usr/local/Cellar/sdl_net/1.2.7/include/SDL \
            -I/usr/local/Cellar/glew/1.7.0/include/GL \
            -I/usr/include/GL \
            -L$(USR_FRAME) -L$(SYS_FRAME) -L/usr/local/Cellar/sdl/1.2.14/lib -L/usr/local/Cellar/sdl_net/1.2.7/lib -L/usr/local/lib

SHARED_LIBS0 := -lc -lz  -lpthread \
               -lSDL \
               -lSDL_net \
               -lSDLmain \
               -framework Foundation \
               -framework AppKit

AWK := awk
#WARN += -Wno-long-double

ifeq ("$(CPU)", "G5")
OPT += -mcpu=970 -mpowerpc64
endif

else

################### MinGW

#ifeq ("$(OSTYPE)", "$(OSTYPE_MINGW)")
ifneq (,$(findstring $(OSTYPE_MINGW),$(OSTYPE)))

OS_LINUX := 1
MACROS   := -DOS_LINUX -DGCC -D_WIN32=1 -DTRANSFORM_MOUSE_Y=1 -DHAS_TYPEOF=1
MACROS   += -DGLUT_NO_LIB_PRAGMA -DGLUT_NO_WARNING_DISABLE
INC_OPTS += -I/mingw/include/GL -I/local/include 
SHARED_LIBS0  := -lm -lzlib1 -lmingw32 -lSDLmain -lSDL -lSDL_net -lpthreadGC2 -lstdc++

else

################### Linux | Cygwin

MACROS   := -DGCC -DTRANSFORM_MOUSE_Y=1 -DHAS_TYPEOF=1
INC_OPTS += -I$(HOME)/include -I$(HOME)/include/GL -I/usr/include -I/usr/include/SDL -I/usr/local/include/SDL -I$(HOME)/usr/local/include/GL
# -I/home/dsk06/cscrs/c399/c399-software/include

#ifeq ("$(OSTYPE)", "$(OSTYPE_LINUX)")
ifneq (,$(findstring $(OSTYPE_LINUX),$(OSTYPE)))

################### Linux 

OS_LINUX := 1
MACROS += -DOS_LINUX
#SHARED_LIBS0  += -L/usr/lib -L/usr/local/lib -L/usr/X11R6/lib -lm -lz -lSDLmain -lSDL -lSDL_net -lpthread -lGL -lGLU -lXi -lXmu -lglut -lGLEW $(MODEL_LIBS) -lstdc++
#SHARED_LIBS0  += -L$(HOME)/lib -lm -lz -lSDLmain -lSDL -lSDL_net -lpthread -lstdc++
SHARED_LIBS0  += -L$(HOME)/lib -lm -lz -lSDL -lSDL_net -lpthread -lstdc++
# -lefence

else 

#ifeq ("$(OSTYPE)", "$(OSTYPE_CYGWIN)")
ifneq (,$(findstring $(OSTYPE_CYGWIN),$(OSTYPE)))

################## Cygwin

OS_CYGWIN := 1
EXE_SUFFIX:=.exe
MACROS += -DOS_CYGWIN -DSTDC_HEADERS=1 -DGLUT_IS_PRESENT=1 
#-mno-cygwin
#INC_OPTS += -I/usr/include/mingw   -I/usr/include/mingw/GL -I/usr/include
#$(warning "INC_OPTS=" $(INC_OPTS))
# fixme: /lib/SDL_main.o -> -lSDLmain (didn't get SDL to compile on Cygwin)
# adjust paths if necessary
SHARED_LIBS0 := -lSDL -lSDL_net -lpthread  -lz -lstdc++ 

# GLEW not checked under cygwin!

else 

# unknown OSTYPE

$(error "!!!!! unknown OSTYPE=$(OSTYPE) !!!!")

endif
endif
endif
endif


# default mode; if ORTS_MODE set, use it
# otherwise use MODE if passed, or dbg otherwise

ifeq ("$(ORTS_MODE)", "") 
  MODE := dbg
else
  MODE := $(ORTS_MODE)
endif

OBJ_DIR := obj
CONFIG  := config

SHARED_PROF_LIBS := $(SHARED_LIBS0)
SHARED_BP_LIBS := ~/lib/bmon.o $(SHARED_LIBS0)

OBJ_OPT := $(OBJ_DIR)/opt
OBJ_DBG := $(OBJ_DIR)/dbg
OBJ_SDBG := $(OBJ_DIR)/stldbg
OBJ_PROF:= $(OBJ_DIR)/prof
OBJ_BP  := $(OBJ_DIR)/bp

OFLAGS  := $(WARN) $(OPT) $(OPT_FRAME) # !!! -g added for 2007 competition
DFLAGS  := $(WARN) -g -ggdb # -ftrapv
SDFLAGS := $(WARN) -g -ggdb -O -D_GLIBCXX_DEBUG # STL debug mode is SLOW!
PFLAGS  := $(WARN) $(OPT) -pg -O
BPFLAGS := $(WARN) -g -ggdb -O2

ifeq ("$(MODE)", "opt")
  FLAGS := $(OFLAGS) -DNDEBUG -Wuninitialized 
#-DSCRIPT_DEBUG
  STRIP := strip
  OBJ   := $(OBJ_OPT)
  SHARED_LIBS := $(SHARED_LIBS0)
else 
  ifeq ("$(MODE)", "gprof")
  FLAGS := $(PFLAGS) -DNDEBUG -Wuninitialized
  STRIP := echo
  OBJ   := $(OBJ_PROF)
  SHARED_LIBS := $(SHARED_PROF_LIBS)
else 
  ifeq ("$(MODE)", "bp")
  FLAGS := $(BPFLAGS) -DNDEBUG -Wuninitialized
  STRIP := echo
  OBJ   := $(OBJ_BP)
  SHARED_LIBS := $(SHARED_BP_LIBS)
else 
  ifeq ("$(MODE)", "dbg")
  FLAGS := $(DFLAGS) 
  STRIP := echo
  OBJ   := $(OBJ_DBG)
  SHARED_LIBS := $(SHARED_LIBS0)
else
  ifeq ("$(MODE)", "stldbg")
  FLAGS := $(SDFLAGS) 
  STRIP := echo
  OBJ   := $(OBJ_SDBG)
  SHARED_LIBS := $(SHARED_LIBS0)
else 

# unknown MODE

$(error "!!!!! unknown MODE=$(MODE) !!!!")

endif
endif
endif
endif
endif

CCOPTS  = $(CC_OPTS) $(MACROS) $(FLAGS) $(INC_OPTS) -DBOOST_STRICT_CONFIG
# -m32  for 32-bit applications

LD      := $(CC) $(CCOPTS) 
LDOPTS  := $(FLAGS)


# line prefix

ifeq ("$(MDBG)", "") 
VERBOSE=@
else
VERBOSE=
endif

# how to generate precompiled header file if GCC_PRECOMP=1
# otherwise, create dummy file

ALLH       := All.H
ALLGCH     := $(ALLH).gch
ALLGCHMODE := $(ALLGCH).$(MODE)

ifeq ("$(GCC_PRECOMP)", "1")

$(CONFIG)/$(ALLGCHMODE) : $(CONFIG)/$(ALLH)
    @ rm -rf  $(CONFIG)/$(ALLGCH)
    @ echo "compile gch file"
    $(VERBOSE) $(CC) $(CCOPTS) -c -o xxx1 $<
    @ mv xxx1 $@
    @ echo "link gch file"
    $(VERBOSE) cd $(CONFIG); ln -sf $(ALLGCHMODE) $(ALLGCH)
else

$(CONFIG)/$(ALLGCHMODE) : $(CONFIG)/$(ALLH)
    @ echo "DUMMY GCH FILE"
    $(VERBOSE) touch $@

endif


# link gch file to gchmode file
# depends on compiled header file

ifeq ("$(GCC_PRECOMP)", "1")

link_gch: 
    @ echo "link gch file"
    $(VERBOSE) cd $(CONFIG); ln -sf $(ALLGCHMODE) $(ALLGCH)

else

link_gch:
    @ echo "remove gch file"
    @ cd config ; rm -f $(ALLGCHMODE) $(ALLGCH)
endif

#===================================================================

# how to create dependency files
# add depfile (.d) as dependent file
# (***) (can't use $(DEP) in sed command because it contains / - so if DEP changes edit this line!
# also prepend object path for .o file
#

DEP_EXEC = $(VERBOSE) set -e; $(CC) -MM $(CCOPTS) $(INC_OPTS) $< | sed 's/$*\.o[ :]*/$(subst /,.,$(basename $<)).o dep\/$(@F) : /g' | $(AWK) '{ if (index($$1,".o") > 0) { print "$$(OBJ)/" $$0 ; } else { print $$0; } }' > $@; [ -s $@ ] || rm -f $@OB

# how to compile source files
#

COMP_EXEC = $(VERBOSE) $(CC) $(CCOPTS) -c -o $@ `pwd`/$<

#-------------------------------------

define create_sublib_rules2
$$(OBJ)/libs.$(subst /,.,$1).src.%.o : libs/$1/src/%.$2
    @ echo "comp($$(MODE)):" $$<
    $$(COMP_EXEC)

$$(DEP)/libs.$(subst /,.,$1).src.%.d : libs/$1/src/%.$2
    @ echo dep: $$<
    $$(DEP_EXEC)
endef

define create_sublib_rules
$(foreach ext,C c cpp m,$(eval $(call create_sublib_rules2,$1,$(ext))))
endef

#-------------------------------------

define create_subapp_rules2
$$(OBJ)/apps.$1.src.%.o : apps/$(subst .,/,$1)/src/%.$2
    @ echo "comp($$(MODE)):" $$<
    $$(COMP_EXEC)

$$(DEP)/apps.$1.src.%.d : apps/$(subst .,/,$1)/src/%.$2
    @ echo dep: $$<
    $$(DEP_EXEC)
endef

define create_subapp_rules
$(foreach ext,C c cpp,$(eval $(call create_subapp_rules2,$1,$(ext))))
endef

#===================================================================

# collect all source files, replace suffix by .o, and filter out *_main.o

# input:  FILES
# output: O_FILES

define create_O_FILES
#FILES     := $$(notdir $$(FILES))
C_FILES   := $$(filter %.C, $$(FILES))
c_FILES   := $$(filter %.c, $$(FILES))
cpp_FILES := $$(filter %.cpp, $$(FILES))

m_FILES   := 
ifeq ("$(OSTYPE)","$(OSTYPE_MAC)")
#ifneq (,$(findstring $(OSTYPE_MAC),$(OSTYPE)))
m_FILES   := $$(filter %.m, $$(FILES))
endif

O_FILES   := $$(C_FILES:.C=.o) $$(c_FILES:.c=.o) $$(cpp_FILES:.cpp=.o) $$(m_FILES:.m=.o)
O_FILES   := $$(subst /,.,$$(O_FILES))

O_FILES := $$(filter-out %_main.o, $$(O_FILES))
endef


# include all applications and dependencies (uses SHARED_LIBS for linking)

APP_SDIRS := $(subst .,/,$(APP_DIRS))

ifneq ("$(APP_DIRS)","")
#include $(patsubst %, apps/%/src/app.mk, $(APP_DIRS))
include $(patsubst %, apps/%/src/app.mk, $(APP_SDIRS))
endif

#$(warning lib_dirs="$(LIB_DIRS)")

vp := $(patsubst %, apps/%/src, $(APP_SDIRS)) \
      $(patsubst %, libs/%/src, $(APP_LIBS)) \
#     $(LIB_DIRS)

#vp := $(patsubst %, %/src, $(LIB_DIRS)) \
#      $(patsubst %, apps/%/src, $(APP_DIRS)) 

INC_OPTS += -Iconfig $(addprefix -I, $(vp))

# new
INC_OPTS += $(LIB_EXT_HD) $(APP_EXT_HD)

# $(warning INC_OPTS= $(INC_OPTS))

# where source files are searched

#$(warning vp="$(vp)")

vpath %.C   $(vp)
vpath %.c   $(vp)
vpath %.cpp $(vp)
vpath %.m   $(vp)

all_end: link_gch $(APP_DIRS)

cleanobj:
    rm -f $(OBJ_OPT)/*
    rm -f $(OBJ_DBG)/*
    rm -f $(OBJ_SDBG)/*
    rm -f $(OBJ_PROF)/*
    rm -f $(OBJ_BP)/*

clean:
    ( rm -f bin/*; exit 0)
    rm -f $(DEP)/*
    rm -f $(OBJ_OPT)/*
    rm -f $(OBJ_DBG)/*
    rm -f $(OBJ_SDBG)/*
    rm -f $(OBJ_PROF)/*
    rm -f $(OBJ_BP)/*
    rm -f $(CONFIG)/*.gch*
    rm -rf misc/doxygen/html
    find . -name "*.bprof" -exec rm -f '{}' \;
    find . -name ".ui" -exec rm -f '{}'/* \;
    find . -name ".moc" -exec rm -f '{}'/* \;

rmdeps:
    @ rm -f $(DEP)/

rpm:
    cd misc/pkgs/fc7; ./makerpm; cd ../../..

# create dependency, object directories
# doesn't touch links (pointing to fast local partitions)

init:
    @ echo "create directories"
    @ config/create_dir bin
    @ config/create_dir $(DEP)
    @ config/create_dir $(OBJ_DIR)
    @ config/create_dir $(OBJ_OPT)
    @ config/create_dir $(OBJ_DBG)
    @ config/create_dir $(OBJ_SDBG)
    @ config/create_dir $(OBJ_PROF)
    @ config/create_dir $(OBJ_BP)
#   @ ln -s ../../orts_data/trunk orts_data
    @ (cd libs/pathfinding/dcdt; ./makelinks; exit 0) > /dev/null 2>&1

Затем некоторые изменения мне пришлось сделать вручную, чтобы исправить ошибки вроде:

sr_bv_math.cpp:561: error: ‘isnan’ was not declared in this scope

Отредактируйте файл trunk/libs/pathfinding/dcdt/sr/src/sr_bv_math.cpp и сразу после включения включите, объявите isnan как extern :

#include <cmath>
extern "C" int isnan(double);

Это скомпилировало двоичные файлы, но затем мне пришлось также загрузить orts_data.tgz для запуска приложений.

Хорошо, запуск ortsg в первый раз не удался, сообщив:

размер текстуры = 64X64

REMARK: can't open file:  testgame/ortsg/terrain.tga
REMARK: can't open file:  testgame/ortsg/noise.tga
Unable to load terrain noise texture testgame/ortsg/noise.tga
ERROR: /Users/karlphillip/installers/orts/orts/trunk/libs/gfxclient/src/GfxTerrain.C GfxTerrain() (line 213): failed to load noise image testgame/ortsg/noise.tga
REMARK: closing connection
REMARK: !!! already closed
REMARK: ~IO_Buffer called

Даже если файлы есть. Поэтому я убил приложение и попробовал снова:

2011-11-27 01:51:02.947 ortsg[390:903] GLUT Warning: glutInit being called a second time.
seed=1322365862
ERROR: /Users/karlphillip/installers/orts/orts/trunk/libs/network/src/TCP_Client.C connect() (line 27): can't connect
REMARK: mixer not open
REMARK: closing connection
REMARK: !!! already closed

/Users/karlphillip/installers/orts/orts/trunk/libs/network/src/TCP_Client.C connect() (line 27): can't connect
Abort trap

Первая строка ошибки может быть вам знакома. Несмотря на то, что приложение было убито, кажется, что-то где-то зависло, и я нашел единственный способ обойти ошибку и выполнить безошибочный запуск приложения - перезагрузить компьютер.

Кажется, это приложение имеет проблемы в Mac OS X и нуждается в немедленном устранении. Я предлагаю вам установить виртуальную машину Linux или даже виртуальную машину Windows внутри вашего Mac, чтобы иметь возможность запускать orts , если вам действительно нужно ее использовать.

...