Add xml example written by Yoran Bosman.
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@3419 dfc29bdd-3216-0410-991c-e03cc46cb475master
parent
4a5a8ef7f4
commit
43a1fd36e7
|
@ -1,5 +1,7 @@
|
|||
Changes in 1.8 (??.0?.2010)
|
||||
|
||||
- Add xml example written by Yoran Bosman.
|
||||
|
||||
- Add creation parameter which allows to disable highres timers on Windows upon device creation.
|
||||
|
||||
- Several transparency setup bugs fixed.
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
# Makefile for Irrlicht Examples
|
||||
# It's usually sufficient to change just the target name and source file list
|
||||
# and be sure that CXX is set to a valid compiler
|
||||
|
||||
# Name of the executable created (.exe will be added automatically if necessary)
|
||||
Target := 25.XmlHandling
|
||||
# List of source files, separated by spaces
|
||||
Sources := main.cpp
|
||||
# Path to Irrlicht directory, should contain include/ and lib/
|
||||
IrrlichtHome := ../..
|
||||
# Path for the executable. Note that Irrlicht.dll should usually also be there for win32 systems
|
||||
BinPath = ../../bin/$(SYSTEM)
|
||||
|
||||
# general compiler settings (might need to be set when compiling the lib, too)
|
||||
# preprocessor flags, e.g. defines and include paths
|
||||
USERCPPFLAGS =
|
||||
# compiler flags such as optimization flags
|
||||
USERCXXFLAGS = -O3 -ffast-math
|
||||
#USERCXXFLAGS = -g -Wall
|
||||
# linker flags such as additional libraries and link paths
|
||||
USERLDFLAGS =
|
||||
|
||||
####
|
||||
#no changes necessary below this line
|
||||
####
|
||||
|
||||
CPPFLAGS = -I$(IrrlichtHome)/include -I/usr/X11R6/include $(USERCPPFLAGS)
|
||||
CXXFLAGS = $(USERCXXFLAGS)
|
||||
LDFLAGS = $(USERLDFLAGS)
|
||||
|
||||
#default target is Linux
|
||||
all: all_linux
|
||||
|
||||
# target specific settings
|
||||
all_linux all_win32 static_win32: LDFLAGS += -L$(IrrlichtHome)/lib/$(SYSTEM) -lIrrlicht
|
||||
all_linux: LDFLAGS += -L/usr/X11R6/lib$(LIBSELECT) -lGL -lXxf86vm -lXext -lX11 -lXcursor
|
||||
all_linux clean_linux: SYSTEM=Linux
|
||||
all_win32 clean_win32 static_win32: SYSTEM=Win32-gcc
|
||||
all_win32 clean_win32 static_win32: SUF=.exe
|
||||
static_win32: CPPFLAGS += -D_IRR_STATIC_LIB_
|
||||
all_win32: LDFLAGS += -lopengl32 -lm
|
||||
static_win32: LDFLAGS += -lgdi32 -lwinspool -lcomdlg32 -lole32 -loleaut32 -luuid -lodbc32 -lodbccp32 -lopengl32
|
||||
# name of the binary - only valid for targets which set SYSTEM
|
||||
DESTPATH = $(BinPath)/$(Target)$(SUF)
|
||||
|
||||
all_linux all_win32 static_win32:
|
||||
$(warning Building...)
|
||||
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(Sources) -o $(DESTPATH) $(LDFLAGS)
|
||||
|
||||
clean: clean_linux clean_win32
|
||||
$(warning Cleaning...)
|
||||
|
||||
clean_linux clean_win32:
|
||||
@$(RM) $(DESTPATH)
|
||||
|
||||
.PHONY: all all_win32 static_win32 clean clean_linux clean_win32
|
||||
|
||||
#multilib handling
|
||||
ifeq ($(HOSTTYPE), x86_64)
|
||||
LIBSELECT=64
|
||||
endif
|
||||
#solaris real-time features
|
||||
ifeq ($(HOSTTYPE), sun4)
|
||||
LDFLAGS += -lrt
|
||||
endif
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
|
||||
<CodeBlocks_project_file>
|
||||
<FileVersion major="1" minor="6" />
|
||||
<Project>
|
||||
<Option title="Irrlicht Example 25 Xml handling" />
|
||||
<Option pch_mode="0" />
|
||||
<Option compiler="gcc" />
|
||||
<Build>
|
||||
<Target title="Linux">
|
||||
<Option platforms="Unix;" />
|
||||
<Option output="../../bin/Linux/XmlHandling" prefix_auto="0" extension_auto="0" />
|
||||
<Option type="1" />
|
||||
<Option compiler="gcc" />
|
||||
<Compiler>
|
||||
<Add option="-W" />
|
||||
<Add option="-g" />
|
||||
<Add option="-D_IRR_STATIC_LIB_" />
|
||||
</Compiler>
|
||||
<Linker>
|
||||
<Add library="Xxf86vm" />
|
||||
<Add library="Xcursor" />
|
||||
<Add library="GL" />
|
||||
<Add directory="../../lib/Linux" />
|
||||
</Linker>
|
||||
</Target>
|
||||
<Target title="Windows">
|
||||
<Option platforms="Windows;" />
|
||||
<Option output="../../bin/Win32-gcc/XmlHandling" prefix_auto="0" extension_auto="1" />
|
||||
<Option type="1" />
|
||||
<Option compiler="gcc" />
|
||||
<Option projectResourceIncludeDirsRelation="1" />
|
||||
<Compiler>
|
||||
<Add option="-W" />
|
||||
<Add option="-g" />
|
||||
<Add directory="../../lib/Win32-gcc" />
|
||||
</Compiler>
|
||||
<Linker>
|
||||
<Add directory="../../lib/Win32-gcc/" />
|
||||
</Linker>
|
||||
</Target>
|
||||
</Build>
|
||||
<VirtualTargets>
|
||||
<Add alias="All" targets="Windows;" />
|
||||
</VirtualTargets>
|
||||
<Compiler>
|
||||
<Add option="-W" />
|
||||
<Add option="-g" />
|
||||
<Add directory="../../include" />
|
||||
</Compiler>
|
||||
<Linker>
|
||||
<Add library="Irrlicht" />
|
||||
</Linker>
|
||||
<Unit filename="main.cpp" />
|
||||
<Extensions>
|
||||
<code_completion />
|
||||
<debugger />
|
||||
<envvars />
|
||||
</Extensions>
|
||||
</Project>
|
||||
</CodeBlocks_project_file>
|
|
@ -0,0 +1,195 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9,00"
|
||||
Name="25.XmlHandling"
|
||||
ProjectGUID="{8FDA260E-EF27-4f8c-8720-7AF707DD0D9E}"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="131072"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="Debug"
|
||||
IntermediateDirectory="Debug"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\include"
|
||||
PreprocessorDefinitions="_IRR_STATIC_LIB_;WIN32;_DEBUG;_WINDOWS"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="..\..\bin\Win32-VisualStudio\25.XmlHandling.exe"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\..\lib\Win32-visualstudio"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/XmlHandling.pdb"
|
||||
SubSystem="1"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="Release"
|
||||
IntermediateDirectory="Release"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
WholeProgramOptimization="1"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
AdditionalOptions="/QIfist /Oa"
|
||||
Optimization="3"
|
||||
InlineFunctionExpansion="2"
|
||||
EnableIntrinsicFunctions="true"
|
||||
FavorSizeOrSpeed="1"
|
||||
OmitFramePointers="true"
|
||||
AdditionalIncludeDirectories="..\..\include"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
||||
RuntimeLibrary="0"
|
||||
BufferSecurityCheck="false"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="0"
|
||||
CallingConvention="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="..\..\bin\Win32-VisualStudio\25.XmlHandling.exe"
|
||||
LinkIncremental="1"
|
||||
SuppressStartupBanner="true"
|
||||
AdditionalLibraryDirectories="..\..\lib\Win32-visualstudio"
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<File
|
||||
RelativePath=".\main.cpp"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
|
@ -0,0 +1,190 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="8,00"
|
||||
Name="25.XmlHandling_vc8"
|
||||
ProjectGUID="{8FDA260E-EF27-4f8c-8720-7AF707DD0D9E}"
|
||||
Keyword="Win32Proj"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="Debug"
|
||||
IntermediateDirectory="Debug"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\include"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="..\..\bin\Win32-VisualStudio\25.XmlHandling.exe"
|
||||
LinkIncremental="2"
|
||||
AdditionalLibraryDirectories="..\..\lib\Win32-visualstudio"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/XmlHandling.pdb"
|
||||
SubSystem="1"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="Release"
|
||||
IntermediateDirectory="Release"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
EnableIntrinsicFunctions="true"
|
||||
FavorSizeOrSpeed="1"
|
||||
AdditionalIncludeDirectories="..\..\include"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
||||
RuntimeLibrary="0"
|
||||
BufferSecurityCheck="false"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
Detect64BitPortabilityProblems="true"
|
||||
DebugInformationFormat="0"
|
||||
CallingConvention="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="..\..\bin\Win32-VisualStudio\25.XmlHandling.exe"
|
||||
LinkIncremental="1"
|
||||
AdditionalLibraryDirectories="..\..\lib\Win32-visualstudio"
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebDeploymentTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<File
|
||||
RelativePath=".\main.cpp"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
|
@ -0,0 +1,185 @@
|
|||
<?xml version="1.0" encoding="Windows-1252"?>
|
||||
<VisualStudioProject
|
||||
ProjectType="Visual C++"
|
||||
Version="9,00"
|
||||
Name="25.XmlHandling_vc9"
|
||||
ProjectGUID="{8FDA260E-EF27-4F8C-8720-7AF707DD0D9E}"
|
||||
RootNamespace="25.XmlHandling_vc9"
|
||||
Keyword="Win32Proj"
|
||||
TargetFrameworkVersion="131072"
|
||||
>
|
||||
<Platforms>
|
||||
<Platform
|
||||
Name="Win32"
|
||||
/>
|
||||
</Platforms>
|
||||
<ToolFiles>
|
||||
</ToolFiles>
|
||||
<Configurations>
|
||||
<Configuration
|
||||
Name="Debug|Win32"
|
||||
OutputDirectory="Debug"
|
||||
IntermediateDirectory="Debug"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
Optimization="0"
|
||||
AdditionalIncludeDirectories="..\..\include"
|
||||
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS"
|
||||
MinimalRebuild="true"
|
||||
BasicRuntimeChecks="3"
|
||||
RuntimeLibrary="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="4"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="..\..\bin\Win32-VisualStudio\25.XmlHandling.exe"
|
||||
AdditionalLibraryDirectories="..\..\lib\Win32-visualstudio"
|
||||
GenerateDebugInformation="true"
|
||||
ProgramDatabaseFile="$(OutDir)/XmlHandling.pdb"
|
||||
SubSystem="1"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
<Configuration
|
||||
Name="Release|Win32"
|
||||
OutputDirectory="Release"
|
||||
IntermediateDirectory="Release"
|
||||
ConfigurationType="1"
|
||||
InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
|
||||
CharacterSet="2"
|
||||
>
|
||||
<Tool
|
||||
Name="VCPreBuildEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCustomBuildTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXMLDataGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCWebServiceProxyGeneratorTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCMIDLTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCCLCompilerTool"
|
||||
EnableIntrinsicFunctions="true"
|
||||
FavorSizeOrSpeed="1"
|
||||
AdditionalIncludeDirectories="..\..\include"
|
||||
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS"
|
||||
ExceptionHandling="1"
|
||||
UsePrecompiledHeader="0"
|
||||
WarningLevel="3"
|
||||
DebugInformationFormat="0"
|
||||
CallingConvention="0"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManagedResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCResourceCompilerTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPreLinkEventTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCLinkerTool"
|
||||
OutputFile="..\..\bin\Win32-VisualStudio\25.XmlHandling.exe"
|
||||
AdditionalLibraryDirectories="..\..\lib\Win32-visualstudio"
|
||||
GenerateDebugInformation="false"
|
||||
SubSystem="1"
|
||||
OptimizeReferences="2"
|
||||
EnableCOMDATFolding="2"
|
||||
RandomizedBaseAddress="1"
|
||||
DataExecutionPrevention="0"
|
||||
TargetMachine="1"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCALinkTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCManifestTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCXDCMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCBscMakeTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCFxCopTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCAppVerifierTool"
|
||||
/>
|
||||
<Tool
|
||||
Name="VCPostBuildEventTool"
|
||||
/>
|
||||
</Configuration>
|
||||
</Configurations>
|
||||
<References>
|
||||
</References>
|
||||
<Files>
|
||||
<File
|
||||
RelativePath=".\main.cpp"
|
||||
>
|
||||
</File>
|
||||
</Files>
|
||||
<Globals>
|
||||
</Globals>
|
||||
</VisualStudioProject>
|
|
@ -0,0 +1,523 @@
|
|||
/** Example 025 Xml Handling
|
||||
*
|
||||
* Demonstrates loading and saving of configurations via XML
|
||||
* @author Y.M. Bosman <yoran.bosman@gmail.com>
|
||||
*/
|
||||
|
||||
#include <irrlicht.h>
|
||||
|
||||
using namespace irr;
|
||||
using namespace core;
|
||||
using namespace scene;
|
||||
using namespace video;
|
||||
using namespace io;
|
||||
using namespace gui;
|
||||
|
||||
#ifdef _IRR_WINDOWS_
|
||||
#pragma comment(lib, "Irrlicht.lib")
|
||||
#endif
|
||||
|
||||
|
||||
/**
|
||||
* SettingManager class
|
||||
* This class loads and writes the settings
|
||||
* and manages the options.
|
||||
*
|
||||
*
|
||||
* The class makes use of irrMap which is a an associative arrays using a red-black tree
|
||||
* it allows easy mapping of a key to a value, along the way there is some information on how to use it
|
||||
*
|
||||
*/
|
||||
|
||||
class SettingManager
|
||||
{
|
||||
public:
|
||||
|
||||
/**
|
||||
* Construct setting managers and set default settings
|
||||
*/
|
||||
SettingManager(const stringw& settings_file): SettingsFile(settings_file), NullDevice(0)
|
||||
{
|
||||
// Irrlicht null device, we want to load settings before we actually created our device, therefore, nulldevice
|
||||
NullDevice = irr::createDevice(irr::video::EDT_NULL);
|
||||
|
||||
|
||||
//DriverOptions is an irrlicht map,
|
||||
//we can insert values in the map in two ways by calling insert(key,value) or by using the [key] operator
|
||||
//the [] operator overrides values if they already exist
|
||||
DriverOptions.insert(L"Software", EDT_SOFTWARE );
|
||||
DriverOptions.insert(L"OpenGL", EDT_OPENGL );
|
||||
DriverOptions.insert(L"Direct3D9", EDT_DIRECT3D9 );
|
||||
|
||||
//some resolution options
|
||||
ResolutionOptions.insert(L"640x480", dimension2du(640,480) );
|
||||
ResolutionOptions.insert(L"800x600", dimension2du(800,600) );
|
||||
ResolutionOptions.insert(L"1024x768", dimension2du(1024,768) );
|
||||
|
||||
//our preferred defaults
|
||||
SettingMap.insert(L"driver", L"Direct3D9"); //0 is software
|
||||
SettingMap.insert(L"resolution", L"640x480"); //0 is 640x480
|
||||
SettingMap.insert(L"fullscreen", L"0"); //0 is false
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Destructor, you could store settings automatically on exit of your application if you wanted to
|
||||
* in our case we simply drop the nulldevice
|
||||
*/
|
||||
~SettingManager()
|
||||
{
|
||||
if(NullDevice)
|
||||
{
|
||||
NullDevice->closeDevice();
|
||||
NullDevice->drop();
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Load xml from disk, overwrite default settings
|
||||
* The xml we are trying to load has the following structure
|
||||
* settings nested in sections nested in the root node, like so
|
||||
*
|
||||
* <?xml version="1.0"?>
|
||||
* <mygame>
|
||||
* <video>
|
||||
* <setting name="driver" value="Direct3D9" />
|
||||
* <setting name="fullscreen" value="0" />
|
||||
* <setting name="resolution" value="1024x768" />
|
||||
* </video>
|
||||
* </mygame>
|
||||
*/
|
||||
bool load()
|
||||
{
|
||||
//if not able to create device dont attempt to load
|
||||
if(!NullDevice)
|
||||
return false;
|
||||
|
||||
irr::io::IXMLReader* xml = NullDevice->getFileSystem()->createXMLReader(SettingsFile); //create xml reader
|
||||
if ( !xml )
|
||||
return false;
|
||||
|
||||
const stringw settingTag(L"setting"); //we'll be looking for this tag in the xml
|
||||
stringw currentSection; //keep track of our currentsection
|
||||
const stringw videoTag(L"video"); //constant for videotag
|
||||
|
||||
//while there is more to read
|
||||
while(xml->read())
|
||||
{
|
||||
//check the node type
|
||||
switch(xml->getNodeType())
|
||||
{
|
||||
//we found a new element
|
||||
case irr::io::EXN_ELEMENT:
|
||||
{
|
||||
//we currently are in the empty or mygame section and find the video tag so we set our current section to video
|
||||
if(currentSection.empty() && videoTag.equals_ignore_case(xml->getNodeName()))
|
||||
{
|
||||
currentSection = videoTag;
|
||||
}
|
||||
//we are in the video section and we find a setting to parse
|
||||
else if (currentSection.equals_ignore_case(videoTag) && settingTag.equals_ignore_case(xml->getNodeName() ))
|
||||
{
|
||||
//read in the key
|
||||
stringw key = xml->getAttributeValueSafe(L"name");
|
||||
//if there actually is a key to set
|
||||
if( !key.empty())
|
||||
{
|
||||
//set the setting in the map to the value,
|
||||
//the [] operator overrides values if they already exist or inserts a new key value
|
||||
//pair into the settings map if it was not defined yet
|
||||
SettingMap[ key ] = xml->getAttributeValueSafe(L"value");
|
||||
}
|
||||
}
|
||||
|
||||
//..
|
||||
// You can add your own sections and tags to read in here
|
||||
//..
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
//we found the end of an element
|
||||
case irr::io::EXN_ELEMENT_END:
|
||||
//we were at the end of the video section so we reset our tag
|
||||
currentSection=L"";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// don't forget to delete the xml reader
|
||||
xml->drop();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Save the xml to disk
|
||||
* We use the nulldevice
|
||||
*/
|
||||
bool save()
|
||||
{
|
||||
|
||||
//if not able to create device don't attempt to save
|
||||
if(!NullDevice)
|
||||
return false;
|
||||
|
||||
//create xml writer
|
||||
irr::io::IXMLWriter* xwriter = NullDevice->getFileSystem()->createXMLWriter( SettingsFile );
|
||||
if(!xwriter)
|
||||
return false;
|
||||
|
||||
//write out the obligatory xml header. Each xml-file needs to have exactly one of those.
|
||||
xwriter->writeXMLHeader();
|
||||
|
||||
//start element mygame, you replace the label "mygame" with anything you want
|
||||
xwriter->writeElement(L"mygame");
|
||||
xwriter->writeLineBreak(); //new line
|
||||
|
||||
//start section with video settings
|
||||
xwriter->writeElement(L"video");
|
||||
xwriter->writeLineBreak(); //new line
|
||||
|
||||
// getIterator gets us a pointer to the first node of the settings map
|
||||
// every iteration we increase the iterator which gives us the next map node
|
||||
// until we reach the end we write settings one by one by using the nodes key and value functions
|
||||
map<stringw, stringw>::Iterator i = SettingMap.getIterator();
|
||||
for(; !i.atEnd(); i++)
|
||||
{
|
||||
//write element as <setting name="key" value="x" />
|
||||
//the second parameter indicates this is an empty element with no children, just attributes
|
||||
xwriter->writeElement(L"setting",true, L"name", i->getKey().c_str(), L"value",i->getValue().c_str() );
|
||||
xwriter->writeLineBreak();
|
||||
}
|
||||
xwriter->writeLineBreak();
|
||||
|
||||
//close video section
|
||||
xwriter->writeClosingTag(L"video");
|
||||
xwriter->writeLineBreak();
|
||||
|
||||
//..
|
||||
// You can add writing sound settings, savegame information etc
|
||||
//..
|
||||
|
||||
//close mygame section
|
||||
xwriter->writeClosingTag(L"mygame");
|
||||
|
||||
//delete xml writer
|
||||
xwriter->drop();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Set setting in our manager
|
||||
*/
|
||||
void setSetting(const stringw& name, const stringw& value)
|
||||
{
|
||||
SettingMap[name]=value;
|
||||
}
|
||||
|
||||
/**
|
||||
* set setting overload to quickly assign integers to our setting map
|
||||
*/
|
||||
void setSetting(const stringw& name, s32 value)
|
||||
{
|
||||
SettingMap[name]=stringw(value);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get setting as string
|
||||
* @param key name of setting
|
||||
* @return empty string if the settings is not found, else value of the setting
|
||||
*/
|
||||
stringw getSetting(const stringw& key) const
|
||||
{
|
||||
//the find function or irrmap returns a pointer to a map Node
|
||||
//if the key can be found, otherwise it returns null
|
||||
//the map node has the function getValue and getKey, as we already know the key, we return node->getValue()
|
||||
map<stringw, stringw>::Node* n = SettingMap.find(key);
|
||||
if (n)
|
||||
return n->getValue();
|
||||
else
|
||||
return L"";
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Get setting as bool
|
||||
* @param key name of setting
|
||||
* @return false if the key cannot be found, else true if the setting == 1
|
||||
*/
|
||||
bool getSettingAsBoolean(const stringw& key ) const
|
||||
{
|
||||
stringw s = getSetting(key);
|
||||
if(s.empty())
|
||||
return false;
|
||||
return s.equals_ignore_case(L"1");
|
||||
}
|
||||
|
||||
/**
|
||||
* Get setting as integer NOTE: function is not used in example but provided for completeness
|
||||
* @param key name of setting
|
||||
* @return 0 if the key cannot be found, else the setting converted to an integer
|
||||
*/
|
||||
s32 getSettingAsInteger(const stringw& key ) const
|
||||
{
|
||||
//we implicitly cast to string instead of stringw because strtol10 does not accept wide strings
|
||||
stringc s = getSetting(key);
|
||||
if(s.empty())
|
||||
return 0;
|
||||
|
||||
return strtol10(s.c_str());
|
||||
|
||||
|
||||
}
|
||||
|
||||
public:
|
||||
map<stringw, s32> DriverOptions; //available options for driver config
|
||||
map<stringw, dimension2du> ResolutionOptions; //available options for resolution config
|
||||
private:
|
||||
|
||||
SettingManager(const SettingManager& other); // defined but not implemented
|
||||
SettingManager& operator=(const SettingManager& other); // defined but not implemented
|
||||
|
||||
map<stringw, stringw> SettingMap; //current config
|
||||
|
||||
stringw SettingsFile; // location of the xml, usually the
|
||||
irr::IrrlichtDevice* NullDevice;
|
||||
|
||||
};
|
||||
|
||||
/**
|
||||
* Application context for global variables
|
||||
*/
|
||||
struct SAppContext
|
||||
{
|
||||
SAppContext()
|
||||
: Device(0),Gui(0), Driver(0), Settings(0), ShouldQuit(false),
|
||||
ButtonSave(0), ButtonExit(0), ListboxDriver(0),
|
||||
ListboxResolution(0), CheckboxFullscreen(0)
|
||||
{
|
||||
}
|
||||
|
||||
~SAppContext()
|
||||
{
|
||||
if(Settings)
|
||||
delete Settings;
|
||||
|
||||
if(Device)
|
||||
{
|
||||
Device->closeDevice();
|
||||
Device->drop();
|
||||
}
|
||||
}
|
||||
|
||||
IrrlichtDevice * Device;
|
||||
IGUIEnvironment* Gui;
|
||||
IVideoDriver* Driver;
|
||||
SettingManager* Settings;
|
||||
bool ShouldQuit;
|
||||
|
||||
//settings dialog
|
||||
IGUIButton* ButtonSave;
|
||||
IGUIButton* ButtonExit;
|
||||
IGUIListBox* ListboxDriver;
|
||||
IGUIListBox* ListboxResolution;
|
||||
IGUICheckBox* CheckboxFullscreen;
|
||||
};
|
||||
|
||||
/*
|
||||
A typical event receiver.
|
||||
*/
|
||||
class MyEventReceiver : public IEventReceiver
|
||||
{
|
||||
public:
|
||||
MyEventReceiver(SAppContext & a) : App(a) { }
|
||||
|
||||
virtual bool OnEvent(const SEvent& event)
|
||||
{
|
||||
if (event.EventType == EET_GUI_EVENT )
|
||||
{
|
||||
switch ( event.GUIEvent.EventType )
|
||||
{
|
||||
//handle button click events
|
||||
case EGET_BUTTON_CLICKED:
|
||||
{
|
||||
//Our save button was called so we obtain the settings from our dialog and save them
|
||||
if ( event.GUIEvent.Caller == App.ButtonSave )
|
||||
{
|
||||
//if there is a selection write it
|
||||
if( App.ListboxDriver->getSelected() != -1)
|
||||
App.Settings->setSetting(L"driver", App.ListboxDriver->getListItem(App.ListboxDriver->getSelected()));
|
||||
|
||||
//if there is a selection write it
|
||||
if( App.ListboxResolution->getSelected() != -1)
|
||||
App.Settings->setSetting(L"resolution", App.ListboxResolution->getListItem(App.ListboxResolution->getSelected()));
|
||||
|
||||
App.Settings->setSetting(L"fullscreen", App.CheckboxFullscreen->isChecked());
|
||||
|
||||
|
||||
if(App.Settings->save())
|
||||
{
|
||||
App.Gui->addMessageBox(L"settings save",L"settings saved, please restart for settings to change effect","",true);
|
||||
}
|
||||
}
|
||||
// cancel/exit button clicked, tell the application to exit
|
||||
else if( event.GUIEvent.Caller == App.ButtonExit)
|
||||
{
|
||||
App.ShouldQuit = true;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
private:
|
||||
SAppContext & App;
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Function to create a video settings dialog
|
||||
* This dialog shows the current settings from the configuration xml and allows them to be changed
|
||||
*/
|
||||
void createSettingsDialog(SAppContext& app)
|
||||
{
|
||||
// first get rid of alpha in gui
|
||||
for (irr::s32 i=0; i<irr::gui::EGDC_COUNT ; ++i)
|
||||
{
|
||||
irr::video::SColor col = app.Gui->getSkin()->getColor((irr::gui::EGUI_DEFAULT_COLOR)i);
|
||||
col.setAlpha(255);
|
||||
app.Gui->getSkin()->setColor((irr::gui::EGUI_DEFAULT_COLOR)i, col);
|
||||
}
|
||||
|
||||
//create video settings windows
|
||||
gui::IGUIWindow* windowSettings = app.Gui->addWindow(rect<s32>(10,10,400,400),true,L"Videosettings");
|
||||
app.Gui->addStaticText (L"Select your desired video settings", rect< s32 >(10,20, 200, 40), false, true, windowSettings);
|
||||
|
||||
// add listbox for driver choice
|
||||
app.Gui->addStaticText (L"Driver", rect< s32 >(10,50, 200, 60), false, true, windowSettings);
|
||||
app.ListboxDriver = app.Gui->addListBox(rect<s32>(10,60,220,120), windowSettings, 1,true);
|
||||
|
||||
//add all available options to the driver choice listbox
|
||||
map<stringw, s32>::Iterator i = app.Settings->DriverOptions.getIterator();
|
||||
for(; !i.atEnd(); i++)
|
||||
app.ListboxDriver->addItem(i->getKey().c_str());
|
||||
|
||||
//set currently selected driver
|
||||
app.ListboxDriver->setSelected(app.Settings->getSetting("driver").c_str());
|
||||
|
||||
// add listbox for resolution choice
|
||||
app.Gui->addStaticText (L"Resolution", rect< s32 >(10,130, 200, 140), false, true, windowSettings);
|
||||
app.ListboxResolution = app.Gui->addListBox(rect<s32>(10,140,220,200), windowSettings, 1,true);
|
||||
|
||||
//add all available options tothe resolution listbox
|
||||
map<stringw, dimension2du>::Iterator ri = app.Settings->ResolutionOptions.getIterator();
|
||||
for(; !ri.atEnd(); ri++)
|
||||
app.ListboxResolution->addItem(ri->getKey().c_str());
|
||||
|
||||
//set currently selected resolution
|
||||
app.ListboxResolution->setSelected(app.Settings->getSetting("resolution").c_str());
|
||||
|
||||
//add checkbox to toggle fullscreen, initially set to loaded setting
|
||||
app.CheckboxFullscreen = app.Gui->addCheckBox(app.Settings->getSettingAsBoolean("fullscreen"),
|
||||
rect<s32>(10,220,220,240),
|
||||
windowSettings, -1,
|
||||
L"Fullscreen");
|
||||
|
||||
//last but not least add save button
|
||||
app.ButtonSave = app.Gui->addButton(rect<s32>(80,250,150,270), windowSettings, 2, L"Save video settings");
|
||||
|
||||
//exit/cancel button
|
||||
app.ButtonExit = app.Gui->addButton(rect<s32>(160,250,240,270), windowSettings, 2, L"Cancel and exit");
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
//create new application context
|
||||
SAppContext app;
|
||||
|
||||
//create device creation parameters that can get overwritten by our settings file
|
||||
SIrrlichtCreationParameters param;
|
||||
param.DriverType = EDT_SOFTWARE;
|
||||
param.WindowSize.set(640,480);
|
||||
|
||||
/**
|
||||
* Try to load config.
|
||||
* I leave it as an exercise of the reader to store the configuration in the local application data folder,
|
||||
* the only logical place to store config data for games. For all other operating systems I redirect to your manuals
|
||||
*/
|
||||
app.Settings = new SettingManager("../../media/settings.xml");
|
||||
if( !app.Settings->load() )
|
||||
{
|
||||
// ...
|
||||
// Here add your own exception handling, for now we continue because there are defaults set in SettingManager constructor
|
||||
// ...
|
||||
}
|
||||
else
|
||||
{
|
||||
//settings xml loaded from disk,
|
||||
|
||||
//map driversetting to driver type and test if the setting is valid
|
||||
//the DriverOptions map contains string representations mapped to to irrlicht E_DRIVER_TYPE enum
|
||||
//e.g "direct3d9" will become 4
|
||||
//see DriverOptions in the settingmanager class for details
|
||||
map<stringw, s32>::Node* driver = app.Settings->DriverOptions.find( app.Settings->getSetting("driver") );
|
||||
|
||||
if(driver)
|
||||
{
|
||||
if( irr::IrrlichtDevice::isDriverSupported( static_cast<E_DRIVER_TYPE>( driver->getValue() )))
|
||||
{
|
||||
// selected driver is supported, so we use it.
|
||||
param.DriverType = static_cast<E_DRIVER_TYPE>( driver->getValue());
|
||||
}
|
||||
}
|
||||
|
||||
//map resolution setting to dimension in a similar way as demonstrated above
|
||||
map<stringw, dimension2du>::Node* res = app.Settings->ResolutionOptions.find( app.Settings->getSetting("resolution") );
|
||||
if(res)
|
||||
{
|
||||
param.WindowSize = res->getValue();
|
||||
}
|
||||
|
||||
//get fullscreen setting from config
|
||||
param.Fullscreen = app.Settings->getSettingAsBoolean("fullscreen");
|
||||
}
|
||||
|
||||
//create the irrlicht device using the settings
|
||||
app.Device = createDeviceEx(param);
|
||||
if (app.Device == 0)
|
||||
{
|
||||
// You can add your own exception handling on driver failure
|
||||
exit(0);
|
||||
}
|
||||
|
||||
app.Device->setWindowCaption(L"Xmlhandling - Irrlicht engine tutorial");
|
||||
app.Driver = app.Device->getVideoDriver();
|
||||
app.Gui = app.Device->getGUIEnvironment();
|
||||
|
||||
createSettingsDialog(app);
|
||||
|
||||
//set event receiver so we can respond to gui events
|
||||
MyEventReceiver receiver(app);
|
||||
app.Device->setEventReceiver(&receiver);
|
||||
|
||||
//enter main loop
|
||||
while(!app.ShouldQuit && app.Device->run())
|
||||
{
|
||||
if(app.Device->isWindowActive())
|
||||
{
|
||||
app.Driver->beginScene(true, true, SColor(0,200,200,200));
|
||||
app.Gui->drawAll();
|
||||
app.Driver->endScene();
|
||||
}
|
||||
app.Device->sleep(10);
|
||||
}
|
||||
|
||||
//app destroys device in destructor
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue