Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
Dario Seyb
edge-of-space
Commits
266f3f65
Commit
266f3f65
authored
Feb 20, 2016
by
Dario Seyb
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
improved vignette
parent
97259a3e
Changes
104
Hide whitespace changes
Inline
Side-by-side
Showing
104 changed files
with
62731 additions
and
2 deletions
+62731
-2
data/shader/Blit.fsh
data/shader/Blit.fsh
+23
-2
extern/OculusSDK/3rdParty/TinyXml/tinyxml2.cpp
extern/OculusSDK/3rdParty/TinyXml/tinyxml2.cpp
+2101
-0
extern/OculusSDK/3rdParty/TinyXml/tinyxml2.h
extern/OculusSDK/3rdParty/TinyXml/tinyxml2.h
+1911
-0
extern/OculusSDK/Doc/sdk_docs_have_moved.txt
extern/OculusSDK/Doc/sdk_docs_have_moved.txt
+3
-0
extern/OculusSDK/LICENSE.txt
extern/OculusSDK/LICENSE.txt
+264
-0
extern/OculusSDK/LibOVR/Include/Extras/OVR_CAPI_Util.h
extern/OculusSDK/LibOVR/Include/Extras/OVR_CAPI_Util.h
+183
-0
extern/OculusSDK/LibOVR/Include/Extras/OVR_Math.h
extern/OculusSDK/LibOVR/Include/Extras/OVR_Math.h
+3785
-0
extern/OculusSDK/LibOVR/Include/Extras/OVR_StereoProjection.h
...rn/OculusSDK/LibOVR/Include/Extras/OVR_StereoProjection.h
+70
-0
extern/OculusSDK/LibOVR/Include/OVR.h
extern/OculusSDK/LibOVR/Include/OVR.h
+21
-0
extern/OculusSDK/LibOVR/Include/OVR_CAPI.h
extern/OculusSDK/LibOVR/Include/OVR_CAPI.h
+1
-0
extern/OculusSDK/LibOVR/Include/OVR_CAPI_0_8_0.h
extern/OculusSDK/LibOVR/Include/OVR_CAPI_0_8_0.h
+2009
-0
extern/OculusSDK/LibOVR/Include/OVR_CAPI_Audio.h
extern/OculusSDK/LibOVR/Include/OVR_CAPI_Audio.h
+48
-0
extern/OculusSDK/LibOVR/Include/OVR_CAPI_D3D.h
extern/OculusSDK/LibOVR/Include/OVR_CAPI_D3D.h
+128
-0
extern/OculusSDK/LibOVR/Include/OVR_CAPI_GL.h
extern/OculusSDK/LibOVR/Include/OVR_CAPI_GL.h
+103
-0
extern/OculusSDK/LibOVR/Include/OVR_CAPI_Keys.h
extern/OculusSDK/LibOVR/Include/OVR_CAPI_Keys.h
+61
-0
extern/OculusSDK/LibOVR/Include/OVR_ErrorCode.h
extern/OculusSDK/LibOVR/Include/OVR_ErrorCode.h
+145
-0
extern/OculusSDK/LibOVR/Include/OVR_Kernel.h
extern/OculusSDK/LibOVR/Include/OVR_Kernel.h
+25
-0
extern/OculusSDK/LibOVR/Include/OVR_Version.h
extern/OculusSDK/LibOVR/Include/OVR_Version.h
+69
-0
extern/OculusSDK/LibOVR/Projects/Windows/ForceRebuild.props
extern/OculusSDK/LibOVR/Projects/Windows/ForceRebuild.props
+26
-0
extern/OculusSDK/LibOVR/Projects/Windows/LibOVR.props
extern/OculusSDK/LibOVR/Projects/Windows/LibOVR.props
+30
-0
extern/OculusSDK/LibOVR/Projects/Windows/OVRRootPath.props
extern/OculusSDK/LibOVR/Projects/Windows/OVRRootPath.props
+15
-0
extern/OculusSDK/LibOVR/Projects/Windows/VS2010/LibOVR.vcxproj
...n/OculusSDK/LibOVR/Projects/Windows/VS2010/LibOVR.vcxproj
+235
-0
extern/OculusSDK/LibOVR/Projects/Windows/VS2010/LibOVR.vcxproj.filters
...SDK/LibOVR/Projects/Windows/VS2010/LibOVR.vcxproj.filters
+37
-0
extern/OculusSDK/LibOVR/Projects/Windows/VS2012/LibOVR.vcxproj
...n/OculusSDK/LibOVR/Projects/Windows/VS2012/LibOVR.vcxproj
+234
-0
extern/OculusSDK/LibOVR/Projects/Windows/VS2012/LibOVR.vcxproj.filters
...SDK/LibOVR/Projects/Windows/VS2012/LibOVR.vcxproj.filters
+37
-0
extern/OculusSDK/LibOVR/Projects/Windows/VS2013/LibOVR.vcxproj
...n/OculusSDK/LibOVR/Projects/Windows/VS2013/LibOVR.vcxproj
+453
-0
extern/OculusSDK/LibOVR/Projects/Windows/VS2013/LibOVR.vcxproj.filters
...SDK/LibOVR/Projects/Windows/VS2013/LibOVR.vcxproj.filters
+39
-0
extern/OculusSDK/LibOVR/Projects/Windows/VS2015/LibOVR.vcxproj
...n/OculusSDK/LibOVR/Projects/Windows/VS2015/LibOVR.vcxproj
+453
-0
extern/OculusSDK/LibOVR/Projects/Windows/VS2015/LibOVR.vcxproj.filters
...SDK/LibOVR/Projects/Windows/VS2015/LibOVR.vcxproj.filters
+39
-0
extern/OculusSDK/LibOVR/Src/OVR_CAPIShim.c
extern/OculusSDK/LibOVR/Src/OVR_CAPIShim.c
+1424
-0
extern/OculusSDK/LibOVR/Src/OVR_CAPI_Util.cpp
extern/OculusSDK/LibOVR/Src/OVR_CAPI_Util.cpp
+211
-0
extern/OculusSDK/LibOVR/Src/OVR_StereoProjection.cpp
extern/OculusSDK/LibOVR/Src/OVR_StereoProjection.cpp
+227
-0
extern/OculusSDK/LibOVR/Src/Resources/Windows/LibOVR.rc
extern/OculusSDK/LibOVR/Src/Resources/Windows/LibOVR.rc
+0
-0
extern/OculusSDK/LibOVR/Src/Resources/Windows/Oculus.ico
extern/OculusSDK/LibOVR/Src/Resources/Windows/Oculus.ico
+0
-0
extern/OculusSDK/LibOVR/Src/Resources/Windows/resource.h
extern/OculusSDK/LibOVR/Src/Resources/Windows/resource.h
+0
-0
extern/OculusSDK/LibOVRKernel/Projects/Windows/OVRRootPath.props
...OculusSDK/LibOVRKernel/Projects/Windows/OVRRootPath.props
+15
-0
extern/OculusSDK/LibOVRKernel/Projects/Windows/VS2010/LibOVRKernel.vcxproj
...LibOVRKernel/Projects/Windows/VS2010/LibOVRKernel.vcxproj
+521
-0
extern/OculusSDK/LibOVRKernel/Projects/Windows/VS2010/LibOVRKernel.vcxproj.filters
...rnel/Projects/Windows/VS2010/LibOVRKernel.vcxproj.filters
+246
-0
extern/OculusSDK/LibOVRKernel/Projects/Windows/VS2012/LibOVRKernel.vcxproj
...LibOVRKernel/Projects/Windows/VS2012/LibOVRKernel.vcxproj
+526
-0
extern/OculusSDK/LibOVRKernel/Projects/Windows/VS2012/LibOVRKernel.vcxproj.filters
...rnel/Projects/Windows/VS2012/LibOVRKernel.vcxproj.filters
+237
-0
extern/OculusSDK/LibOVRKernel/Projects/Windows/VS2013/LibOVRKernel.sln
...SDK/LibOVRKernel/Projects/Windows/VS2013/LibOVRKernel.sln
+28
-0
extern/OculusSDK/LibOVRKernel/Projects/Windows/VS2013/LibOVRKernel.vcxproj
...LibOVRKernel/Projects/Windows/VS2013/LibOVRKernel.vcxproj
+638
-0
extern/OculusSDK/LibOVRKernel/Projects/Windows/VS2013/LibOVRKernel.vcxproj.filters
...rnel/Projects/Windows/VS2013/LibOVRKernel.vcxproj.filters
+289
-0
extern/OculusSDK/LibOVRKernel/Projects/Windows/VS2015/LibOVRKernel.sln
...SDK/LibOVRKernel/Projects/Windows/VS2015/LibOVRKernel.sln
+28
-0
extern/OculusSDK/LibOVRKernel/Projects/Windows/VS2015/LibOVRKernel.vcxproj
...LibOVRKernel/Projects/Windows/VS2015/LibOVRKernel.vcxproj
+638
-0
extern/OculusSDK/LibOVRKernel/Projects/Windows/VS2015/LibOVRKernel.vcxproj.filters
...rnel/Projects/Windows/VS2015/LibOVRKernel.vcxproj.filters
+289
-0
extern/OculusSDK/LibOVRKernel/Src/GL/CAPI_GLE.cpp
extern/OculusSDK/LibOVRKernel/Src/GL/CAPI_GLE.cpp
+7988
-0
extern/OculusSDK/LibOVRKernel/Src/GL/CAPI_GLE.h
extern/OculusSDK/LibOVRKernel/Src/GL/CAPI_GLE.h
+2047
-0
extern/OculusSDK/LibOVRKernel/Src/GL/CAPI_GLE_GL.h
extern/OculusSDK/LibOVRKernel/Src/GL/CAPI_GLE_GL.h
+4833
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Alg.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Alg.cpp
+57
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Alg.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Alg.h
+1248
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Allocator.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Allocator.cpp
+1059
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Allocator.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Allocator.h
+674
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Array.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Array.h
+847
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Atomic.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Atomic.cpp
+139
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Atomic.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Atomic.h
+1049
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_CRC32.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_CRC32.cpp
+203
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_CRC32.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_CRC32.h
+78
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Callbacks.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Callbacks.cpp
+45
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Callbacks.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Callbacks.h
+325
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_CallbacksInternal.h
...OculusSDK/LibOVRKernel/Src/Kernel/OVR_CallbacksInternal.h
+366
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Color.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Color.h
+73
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Compiler.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Compiler.h
+1544
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_ContainerAllocator.h
...culusSDK/LibOVRKernel/Src/Kernel/OVR_ContainerAllocator.h
+279
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_DebugHelp.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_DebugHelp.cpp
+4241
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_DebugHelp.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_DebugHelp.h
+598
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Delegates.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Delegates.h
+541
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Deque.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Deque.h
+316
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_File.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_File.cpp
+585
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_File.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_File.h
+523
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_FileFILE.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_FileFILE.cpp
+615
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Hash.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Hash.h
+1306
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_JSON.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_JSON.cpp
+1335
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_JSON.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_JSON.h
+171
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_KeyCodes.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_KeyCodes.h
+255
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_List.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_List.h
+402
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Lockless.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Lockless.cpp
+225
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Lockless.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Lockless.h
+150
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Log.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Log.cpp
+578
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Log.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Log.h
+252
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_NewOverride.inl
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_NewOverride.inl
+197
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Nullptr.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Nullptr.h
+150
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Rand.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Rand.cpp
+79
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Rand.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Rand.h
+201
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_RefCount.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_RefCount.cpp
+105
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_RefCount.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_RefCount.h
+554
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_SharedMemory.cpp
...rn/OculusSDK/LibOVRKernel/Src/Kernel/OVR_SharedMemory.cpp
+747
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_SharedMemory.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_SharedMemory.h
+254
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Std.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Std.cpp
+1119
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Std.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Std.h
+626
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_String.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_String.cpp
+855
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_String.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_String.h
+689
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_StringHash.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_StringHash.h
+100
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_String_FormatUtil.cpp
...ulusSDK/LibOVRKernel/Src/Kernel/OVR_String_FormatUtil.cpp
+80
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_String_PathUtil.cpp
...OculusSDK/LibOVRKernel/Src/Kernel/OVR_String_PathUtil.cpp
+210
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_SysFile.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_SysFile.cpp
+139
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_SysFile.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_SysFile.h
+104
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_System.cpp
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_System.cpp
+205
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_System.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_System.h
+173
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_ThreadCommandQueue.cpp
...lusSDK/LibOVRKernel/Src/Kernel/OVR_ThreadCommandQueue.cpp
+410
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_ThreadCommandQueue.h
...culusSDK/LibOVRKernel/Src/Kernel/OVR_ThreadCommandQueue.h
+318
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Threads.h
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_Threads.h
+443
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_ThreadsPthread.cpp
.../OculusSDK/LibOVRKernel/Src/Kernel/OVR_ThreadsPthread.cpp
+1006
-0
extern/OculusSDK/LibOVRKernel/Src/Kernel/OVR_ThreadsWinAPI.cpp
...n/OculusSDK/LibOVRKernel/Src/Kernel/OVR_ThreadsWinAPI.cpp
+1155
-0
No files found.
Too many changes to show.
To preserve performance only
104 of 104+
files are displayed.
Plain diff
Email patch
data/shader/Blit.fsh
View file @
266f3f65
...
...
@@ -23,6 +23,27 @@ vec3 Uncharted2Tonemap(vec3 x)
return ((x*(A*x+C*B)+D*E)/(x*(A*x+B)+D*F))-E/F;
}
//RADIUS of our vignette, where 0.5 results in a circle fitting the screen
const float RADIUS = 0.65;
//softness of our vignette, between 0.0 and 1.0
const float SOFTNESS = 0.35;
vec3 Vignette(vec3 color) {
//determine center position
vec2 position = vTexCoord - vec2(0.5);
//determine the vector length of the center position
float len = length(position);
//use smoothstep to create a smooth vignette
float vignette = smoothstep(RADIUS, RADIUS-SOFTNESS, len);
//apply the vignette with 50% opacity
return mix(color, color * vignette, 0.8);
}
void main()
{
...
...
@@ -36,8 +57,8 @@ void main()
vec3 whiteScale = vec3(1.0f)/Uncharted2Tonemap(vec3(W));
color = curr*whiteScale;
vec2 centerDist = abs(vTexCoord * 2.0 - 1.0
);
color *= length(vec2(1.0) - centerDist);
color = Vignette(color
);
vec3 retColor = pow(color, vec3(1.0/2.2));
retColor += vec3(rand(gl_FragCoord.xy) * 1.0/255 - 0.5/255);
...
...
extern/OculusSDK/3rdParty/TinyXml/tinyxml2.cpp
0 → 100644
View file @
266f3f65
/*
Original code by Lee Thomason (www.grinninglizard.com)
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any
damages arising from the use of this software.
Permission is granted to anyone to use this software for any
purpose, including commercial applications, and to alter it and
redistribute it freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must
not claim that you wrote the original software. If you use this
software in a product, an acknowledgment in the product documentation
would be appreciated but is not required.
2. Altered source versions must be plainly marked as such, and
must not be misrepresented as being the original software.
3. This notice may not be removed or altered from any source
distribution.
*/
#include "tinyxml2.h"
#include <new> // yes, this one new style header, is in the Android SDK.
# ifdef ANDROID_NDK
# include <stddef.h>
#else
# include <cstddef>
#endif
static
const
char
LINE_FEED
=
(
char
)
0x0a
;
// all line endings are normalized to LF
static
const
char
LF
=
LINE_FEED
;
static
const
char
CARRIAGE_RETURN
=
(
char
)
0x0d
;
// CR gets filtered out
static
const
char
CR
=
CARRIAGE_RETURN
;
static
const
char
SINGLE_QUOTE
=
'\''
;
static
const
char
DOUBLE_QUOTE
=
'\"'
;
// Bunch of unicode info at:
// http://www.unicode.org/faq/utf_bom.html
// ef bb bf (Microsoft "lead bytes") - designates UTF-8
static
const
unsigned
char
TIXML_UTF_LEAD_0
=
0xefU
;
static
const
unsigned
char
TIXML_UTF_LEAD_1
=
0xbbU
;
static
const
unsigned
char
TIXML_UTF_LEAD_2
=
0xbfU
;
#define DELETE_NODE( node ) { \
if ( node ) { \
MemPool* pool = node->_memPool; \
node->~XMLNode(); \
pool->Free( node ); \
} \
}
#define DELETE_ATTRIBUTE( attrib ) { \
if ( attrib ) { \
MemPool* pool = attrib->_memPool; \
attrib->~XMLAttribute(); \
pool->Free( attrib ); \
} \
}
namespace
tinyxml2
{
struct
Entity
{
const
char
*
pattern
;
int
length
;
char
value
;
};
static
const
int
NUM_ENTITIES
=
5
;
static
const
Entity
entities
[
NUM_ENTITIES
]
=
{
{
"quot"
,
4
,
DOUBLE_QUOTE
},
{
"amp"
,
3
,
'&'
},
{
"apos"
,
4
,
SINGLE_QUOTE
},
{
"lt"
,
2
,
'<'
},
{
"gt"
,
2
,
'>'
}
};
StrPair
::~
StrPair
()
{
Reset
();
}
void
StrPair
::
Reset
()
{
if
(
_flags
&
NEEDS_DELETE
)
{
delete
[]
_start
;
}
_flags
=
0
;
_start
=
0
;
_end
=
0
;
}
void
StrPair
::
SetStr
(
const
char
*
str
,
int
flags
)
{
Reset
();
size_t
len
=
strlen
(
str
);
_start
=
new
char
[
len
+
1
];
memcpy
(
_start
,
str
,
len
+
1
);
_end
=
_start
+
len
;
_flags
=
flags
|
NEEDS_DELETE
;
}
char
*
StrPair
::
ParseText
(
char
*
p
,
const
char
*
endTag
,
int
strFlags
)
{
TIXMLASSERT
(
endTag
&&
*
endTag
);
char
*
start
=
p
;
// fixme: hides a member
char
endChar
=
*
endTag
;
size_t
length
=
strlen
(
endTag
);
// Inner loop of text parsing.
while
(
*
p
)
{
if
(
*
p
==
endChar
&&
strncmp
(
p
,
endTag
,
length
)
==
0
)
{
Set
(
start
,
p
,
strFlags
);
return
p
+
length
;
}
++
p
;
}
return
0
;
}
char
*
StrPair
::
ParseName
(
char
*
p
)
{
char
*
start
=
p
;
if
(
!
start
||
!
(
*
start
)
)
{
return
0
;
}
while
(
*
p
&&
(
XMLUtil
::
IsAlphaNum
(
(
unsigned
char
)
*
p
)
||
*
p
==
'_'
||
*
p
==
':'
||
(
*
p
==
'-'
&&
p
>
start
)
// can be in a name, but not lead it.
||
(
*
p
==
'.'
&&
p
>
start
)
))
{
// can be in a name, but not lead it.
++
p
;
}
if
(
p
>
start
)
{
Set
(
start
,
p
,
0
);
return
p
;
}
return
0
;
}
void
StrPair
::
CollapseWhitespace
()
{
// Trim leading space.
_start
=
XMLUtil
::
SkipWhiteSpace
(
_start
);
if
(
_start
&&
*
_start
)
{
char
*
p
=
_start
;
// the read pointer
char
*
q
=
_start
;
// the write pointer
while
(
*
p
)
{
if
(
XMLUtil
::
IsWhiteSpace
(
*
p
))
{
p
=
XMLUtil
::
SkipWhiteSpace
(
p
);
if
(
*
p
==
0
)
{
break
;
// don't write to q; this trims the trailing space.
}
*
q
=
' '
;
++
q
;
}
*
q
=
*
p
;
++
q
;
++
p
;
}
*
q
=
0
;
}
}
const
char
*
StrPair
::
GetStr
()
{
if
(
_flags
&
NEEDS_FLUSH
)
{
*
_end
=
0
;
_flags
^=
NEEDS_FLUSH
;
if
(
_flags
)
{
char
*
p
=
_start
;
// the read pointer
char
*
q
=
_start
;
// the write pointer
while
(
p
<
_end
)
{
if
(
(
_flags
&
NEEDS_NEWLINE_NORMALIZATION
)
&&
*
p
==
CR
)
{
// CR-LF pair becomes LF
// CR alone becomes LF
// LF-CR becomes LF
if
(
*
(
p
+
1
)
==
LF
)
{
p
+=
2
;
}
else
{
++
p
;
}
*
q
++
=
LF
;
}
else
if
(
(
_flags
&
NEEDS_NEWLINE_NORMALIZATION
)
&&
*
p
==
LF
)
{
if
(
*
(
p
+
1
)
==
CR
)
{
p
+=
2
;
}
else
{
++
p
;
}
*
q
++
=
LF
;
}
else
if
(
(
_flags
&
NEEDS_ENTITY_PROCESSING
)
&&
*
p
==
'&'
)
{
// Entities handled by tinyXML2:
// - special entities in the entity table [in/out]
// - numeric character reference [in]
// 中 or 中
if
(
*
(
p
+
1
)
==
'#'
)
{
char
buf
[
10
]
=
{
0
};
int
len
;
p
=
const_cast
<
char
*>
(
XMLUtil
::
GetCharacterRef
(
p
,
buf
,
&
len
)
);
for
(
int
i
=
0
;
i
<
len
;
++
i
)
{
*
q
++
=
buf
[
i
];
}
TIXMLASSERT
(
q
<=
p
);
}
else
{
int
i
=
0
;
for
(;
i
<
NUM_ENTITIES
;
++
i
)
{
if
(
strncmp
(
p
+
1
,
entities
[
i
].
pattern
,
entities
[
i
].
length
)
==
0
&&
*
(
p
+
entities
[
i
].
length
+
1
)
==
';'
)
{
// Found an entity convert;
*
q
=
entities
[
i
].
value
;
++
q
;
p
+=
entities
[
i
].
length
+
2
;
break
;
}
}
if
(
i
==
NUM_ENTITIES
)
{
// fixme: treat as error?
++
p
;
++
q
;
}
}
}
else
{
*
q
=
*
p
;
++
p
;
++
q
;
}
}
*
q
=
0
;
}
// The loop below has plenty going on, and this
// is a less useful mode. Break it out.
if
(
_flags
&
COLLAPSE_WHITESPACE
)
{
CollapseWhitespace
();
}
_flags
=
(
_flags
&
NEEDS_DELETE
);
}
return
_start
;
}
// --------- XMLUtil ----------- //
const
char
*
XMLUtil
::
ReadBOM
(
const
char
*
p
,
bool
*
bom
)
{
*
bom
=
false
;
const
unsigned
char
*
pu
=
reinterpret_cast
<
const
unsigned
char
*>
(
p
);
// Check for BOM:
if
(
*
(
pu
+
0
)
==
TIXML_UTF_LEAD_0
&&
*
(
pu
+
1
)
==
TIXML_UTF_LEAD_1
&&
*
(
pu
+
2
)
==
TIXML_UTF_LEAD_2
)
{
*
bom
=
true
;
p
+=
3
;
}
return
p
;
}
void
XMLUtil
::
ConvertUTF32ToUTF8
(
unsigned
long
input
,
char
*
output
,
int
*
length
)
{
const
unsigned
long
BYTE_MASK
=
0xBF
;
const
unsigned
long
BYTE_MARK
=
0x80
;
const
unsigned
long
FIRST_BYTE_MARK
[
7
]
=
{
0x00
,
0x00
,
0xC0
,
0xE0
,
0xF0
,
0xF8
,
0xFC
};
if
(
input
<
0x80
)
{
*
length
=
1
;
}
else
if
(
input
<
0x800
)
{
*
length
=
2
;
}
else
if
(
input
<
0x10000
)
{
*
length
=
3
;
}
else
if
(
input
<
0x200000
)
{
*
length
=
4
;
}
else
{
*
length
=
0
;
// This code won't covert this correctly anyway.
return
;
}
output
+=
*
length
;
// Scary scary fall throughs.
switch
(
*
length
)
{
case
4
:
--
output
;
*
output
=
(
char
)((
input
|
BYTE_MARK
)
&
BYTE_MASK
);
input
>>=
6
;
case
3
:
--
output
;
*
output
=
(
char
)((
input
|
BYTE_MARK
)
&
BYTE_MASK
);
input
>>=
6
;
case
2
:
--
output
;
*
output
=
(
char
)((
input
|
BYTE_MARK
)
&
BYTE_MASK
);
input
>>=
6
;
case
1
:
--
output
;
*
output
=
(
char
)(
input
|
FIRST_BYTE_MARK
[
*
length
]);
default:
break
;
}
}
const
char
*
XMLUtil
::
GetCharacterRef
(
const
char
*
p
,
char
*
value
,
int
*
length
)
{
// Presume an entity, and pull it out.
*
length
=
0
;
if
(
*
(
p
+
1
)
==
'#'
&&
*
(
p
+
2
)
)
{
unsigned
long
ucs
=
0
;
ptrdiff_t
delta
=
0
;
unsigned
mult
=
1
;
if
(
*
(
p
+
2
)
==
'x'
)
{
// Hexadecimal.
if
(
!*
(
p
+
3
)
)
{
return
0
;
}
const
char
*
q
=
p
+
3
;
q
=
strchr
(
q
,
';'
);
if
(
!
q
||
!*
q
)
{
return
0
;
}
delta
=
q
-
p
;
--
q
;
while
(
*
q
!=
'x'
)
{
if
(
*
q
>=
'0'
&&
*
q
<=
'9'
)
{
ucs
+=
mult
*
(
*
q
-
'0'
);
}
else
if
(
*
q
>=
'a'
&&
*
q
<=
'f'
)
{
ucs
+=
mult
*
(
*
q
-
'a'
+
10
);
}
else
if
(
*
q
>=
'A'
&&
*
q
<=
'F'
)
{
ucs
+=
mult
*
(
*
q
-
'A'
+
10
);
}
else
{
return
0
;
}
mult
*=
16
;
--
q
;
}
}
else
{
// Decimal.
if
(
!*
(
p
+
2
)
)
{
return
0
;
}
const
char
*
q
=
p
+
2
;
q
=
strchr
(
q
,
';'
);
if
(
!
q
||
!*
q
)
{
return
0
;
}
delta
=
q
-
p
;
--
q
;
while
(
*
q
!=
'#'
)
{
if
(
*
q
>=
'0'
&&
*
q
<=
'9'
)
{
ucs
+=
mult
*
(
*
q
-
'0'
);
}
else
{
return
0
;
}
mult
*=
10
;
--
q
;
}
}
// convert the UCS to UTF-8
ConvertUTF32ToUTF8
(
ucs
,
value
,
length
);
return
p
+
delta
+
1
;
}
return
p
+
1
;
}
void
XMLUtil
::
ToStr
(
int
v
,
char
*
buffer
,
int
bufferSize
)
{
TIXML_SNPRINTF
(
buffer
,
bufferSize
,
"%d"
,
v
);
}
void
XMLUtil
::
ToStr
(
unsigned
v
,
char
*
buffer
,
int
bufferSize
)
{
TIXML_SNPRINTF
(
buffer
,
bufferSize
,
"%u"
,
v
);
}
void
XMLUtil
::
ToStr
(
bool
v
,
char
*
buffer
,
int
bufferSize
)
{
TIXML_SNPRINTF
(
buffer
,
bufferSize
,
"%d"
,
v
?
1
:
0
);
}
void
XMLUtil
::
ToStr
(
float
v
,
char
*
buffer
,
int
bufferSize
)
{
TIXML_SNPRINTF
(
buffer
,
bufferSize
,
"%g"
,
v
);
}
void
XMLUtil
::
ToStr
(
double
v
,
char
*
buffer
,
int
bufferSize
)
{
TIXML_SNPRINTF
(
buffer
,
bufferSize
,
"%g"
,
v
);
}
bool
XMLUtil
::
ToInt
(
const
char
*
str
,
int
*
value
)
{
if
(
TIXML_SSCANF
(
str
,
"%d"
,
value
)
==
1
)
{
return
true
;
}
return
false
;
}
bool
XMLUtil
::
ToUnsigned
(
const
char
*
str
,
unsigned
*
value
)
{
if
(
TIXML_SSCANF
(
str
,
"%u"
,
value
)
==
1
)
{
return
true
;
}
return
false
;
}
bool
XMLUtil
::
ToBool
(
const
char
*
str
,
bool
*
value
)
{
int
ival
=
0
;
if
(
ToInt
(
str
,
&
ival
))
{
*
value
=
(
ival
==
0
)
?
false
:
true
;
return
true
;
}
if
(
StringEqual
(
str
,
"true"
)
)
{
*
value
=
true
;
return
true
;
}
else
if
(
StringEqual
(
str
,
"false"
)
)
{
*
value
=
false
;
return
true
;
}
return
false
;
}
bool
XMLUtil
::
ToFloat
(
const
char
*
str
,
float
*
value
)
{
if
(
TIXML_SSCANF
(
str
,
"%f"
,
value
)
==
1
)
{
return
true
;
}
return
false
;
}
bool
XMLUtil
::
ToDouble
(
const
char
*
str
,
double
*
value
)
{
if
(
TIXML_SSCANF
(
str
,
"%lf"
,
value
)
==
1
)
{
return
true
;
}
return
false
;
}
char
*
XMLDocument
::
Identify
(
char
*
p
,
XMLNode
**
node
)
{
XMLNode
*
returnNode
=
0
;
char
*
start
=
p
;
p
=
XMLUtil
::
SkipWhiteSpace
(
p
);
if
(
!
p
||
!*
p
)
{
return
p
;
}
// What is this thing?
// - Elements start with a letter or underscore, but xml is reserved.
// - Comments: <!--
// - Decleration: <?
// - Everthing else is unknown to tinyxml.
//
static
const
char
*
xmlHeader
=
{
"<?"
};
static
const
char
*
commentHeader
=
{
"<!--"
};
static
const
char
*
dtdHeader
=
{
"<!"
};
static
const
char
*
cdataHeader
=
{
"<![CDATA["
};
static
const
char
*
elementHeader
=
{
"<"
};
// and a header for everything else; check last.
static
const
int
xmlHeaderLen
=
2
;
static
const
int
commentHeaderLen
=
4
;
static
const
int
dtdHeaderLen
=
2
;
static
const
int
cdataHeaderLen
=
9
;
static
const
int
elementHeaderLen
=
1
;
#if defined(_MSC_VER)