graphics

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 3f35f0572096f172faf46f765d1b328b86db1d82
parent 1bf4df5febd6735dff817a2e6daa02b2987d9f3b
Author: Brian Swetland <swetland@frotz.net>
Date:   Sun, 16 Jun 2013 15:03:43 -0700

simplify - remove all the D3D stuff

Diffstat:
Dcommon/TextPS.h | 523-------------------------------------------------------------------------------
Dcommon/TextVS.h | 2435-------------------------------------------------------------------------------
Mcommon/app.h | 210+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
Dcommon/assets/TextPS.hlsl | 13-------------
Dcommon/assets/TextVS.hlsl | 41-----------------------------------------
Dcommon/dxapp.cc | 680-------------------------------------------------------------------------------
Dcommon/dxapp.h | 230-------------------------------------------------------------------------------
Mcommon/glapp.cc | 2+-
Dcommon/glapp.h | 212-------------------------------------------------------------------------------
Mcommon/textgrid.cc | 14++------------
Dhello/assets/SimplePS.hlsl | 15---------------
Dhello/assets/SimpleVS.hlsl | 36------------------------------------
Mhello/hello.cc | 8++++----
Dtest/assets/TestPS.hlsl | 15---------------
Dtest/assets/TestVS.hlsl | 33---------------------------------
Mtest/test.cc | 4++--
16 files changed, 214 insertions(+), 4257 deletions(-)

diff --git a/common/TextPS.h b/common/TextPS.h @@ -1,523 +0,0 @@ -#if 0 -// -// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111 -// -// -// fxc /nologo /Emain /T ps_4_0 /Fh C:\Work\graphics\Debug\TextPS.h /Fo -// C:\Work\graphics\Debug\TextPS.cso /Vn codeTextPS /Od /Zi -// ..\common\TextPS.hlsl -// -// -// Resource Bindings: -// -// Name Type Format Dim Slot Elements -// ------------------------------ ---------- ------- ----------- ---- -------- -// samLinear sampler NA NA 0 1 -// Texture0 texture float4 2d 0 1 -// -// -// -// Input signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------ ------ -// SV_POSITION 0 xyzw 0 POS float -// TEXCOORD 0 xy 1 NONE float xy -// -// -// Output signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------ ------ -// SV_Target 0 xyzw 0 TARGET float xyzw -// -ps_4_0 -dcl_sampler s0, mode_default -dcl_resource_texture2d (float,float,float,float) t0 -dcl_input_ps linear v1.xy -dcl_output o0.xyzw - -#line 12 "C:\Work\graphics\common\TextPS.hlsl" -sample o0.xyzw, v1.xyxx, t0.xyzw, s0 // main<0:Inf,1:Inf,2:Inf,3:Inf> -ret -// Approximately 2 instruction slots used -#endif - -const BYTE codeTextPS[] = -{ - 68, 88, 66, 67, 115, 168, - 18, 253, 246, 81, 130, 62, - 206, 239, 145, 164, 250, 204, - 121, 18, 1, 0, 0, 0, - 34, 11, 0, 0, 6, 0, - 0, 0, 56, 0, 0, 0, - 224, 0, 0, 0, 56, 1, - 0, 0, 108, 1, 0, 0, - 216, 1, 0, 0, 84, 2, - 0, 0, 82, 68, 69, 70, - 160, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 28, 0, - 0, 0, 0, 4, 255, 255, - 5, 1, 0, 0, 111, 0, - 0, 0, 92, 0, 0, 0, - 3, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 102, 0, - 0, 0, 2, 0, 0, 0, - 5, 0, 0, 0, 4, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 1, 0, - 0, 0, 12, 0, 0, 0, - 115, 97, 109, 76, 105, 110, - 101, 97, 114, 0, 84, 101, - 120, 116, 117, 114, 101, 48, - 0, 77, 105, 99, 114, 111, - 115, 111, 102, 116, 32, 40, - 82, 41, 32, 72, 76, 83, - 76, 32, 83, 104, 97, 100, - 101, 114, 32, 67, 111, 109, - 112, 105, 108, 101, 114, 32, - 57, 46, 50, 57, 46, 57, - 53, 50, 46, 51, 49, 49, - 49, 0, 73, 83, 71, 78, - 80, 0, 0, 0, 2, 0, - 0, 0, 8, 0, 0, 0, - 56, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 3, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, - 68, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 1, 0, - 0, 0, 3, 3, 0, 0, - 83, 86, 95, 80, 79, 83, - 73, 84, 73, 79, 78, 0, - 84, 69, 88, 67, 79, 79, - 82, 68, 0, 171, 171, 171, - 79, 83, 71, 78, 44, 0, - 0, 0, 1, 0, 0, 0, - 8, 0, 0, 0, 32, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 83, 86, - 95, 84, 97, 114, 103, 101, - 116, 0, 171, 171, 83, 72, - 68, 82, 100, 0, 0, 0, - 64, 0, 0, 0, 25, 0, - 0, 0, 90, 0, 0, 3, - 0, 96, 16, 0, 0, 0, - 0, 0, 88, 24, 0, 4, - 0, 112, 16, 0, 0, 0, - 0, 0, 85, 85, 0, 0, - 98, 16, 0, 3, 50, 16, - 16, 0, 1, 0, 0, 0, - 101, 0, 0, 3, 242, 32, - 16, 0, 0, 0, 0, 0, - 69, 0, 0, 9, 242, 32, - 16, 0, 0, 0, 0, 0, - 70, 16, 16, 0, 1, 0, - 0, 0, 70, 126, 16, 0, - 0, 0, 0, 0, 0, 96, - 16, 0, 0, 0, 0, 0, - 62, 0, 0, 1, 83, 84, - 65, 84, 116, 0, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 83, 68, 66, 71, - 198, 8, 0, 0, 84, 0, - 0, 0, 65, 1, 0, 0, - 114, 1, 0, 0, 119, 1, - 0, 0, 5, 1, 0, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 0, 0, - 16, 0, 0, 0, 12, 0, - 0, 0, 40, 3, 0, 0, - 4, 0, 0, 0, 72, 4, - 0, 0, 11, 0, 0, 0, - 168, 4, 0, 0, 3, 0, - 0, 0, 132, 5, 0, 0, - 6, 0, 0, 0, 192, 5, - 0, 0, 200, 6, 0, 0, - 244, 6, 0, 0, 0, 0, - 0, 0, 35, 0, 0, 0, - 35, 0, 0, 0, 241, 0, - 0, 0, 0, 0, 0, 0, - 69, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 1, 0, 0, 0, 2, 0, - 0, 0, 3, 0, 0, 0, - 8, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 128, 255, 255, - 255, 127, 0, 0, 128, 255, - 0, 0, 128, 127, 0, 0, - 0, 0, 1, 0, 0, 0, - 9, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 128, 255, 255, - 255, 127, 0, 0, 128, 255, - 0, 0, 128, 127, 0, 0, - 0, 0, 1, 0, 0, 0, - 10, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 128, 255, 255, - 255, 127, 0, 0, 128, 255, - 0, 0, 128, 127, 0, 0, - 0, 0, 1, 0, 0, 0, - 11, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 128, 255, 255, - 255, 127, 0, 0, 128, 255, - 0, 0, 128, 127, 0, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 10, 0, 0, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 36, 0, 0, 0, - 3, 0, 0, 0, 24, 0, - 0, 0, 1, 0, 0, 0, - 62, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 10, 0, 0, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 36, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 0, - 7, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 9, 0, 0, 0, - 10, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 1, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, - 3, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 5, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, - 3, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 5, 0, 0, 0, 1, 0, - 0, 0, 6, 0, 0, 0, - 3, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 5, 0, 0, 0, 2, 0, - 0, 0, 6, 0, 0, 0, - 3, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 5, 0, 0, 0, 3, 0, - 0, 0, 6, 0, 0, 0, - 3, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 5, 0, 0, 0, 4, 0, - 0, 0, 6, 0, 0, 0, - 3, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 5, 0, 0, 0, 5, 0, - 0, 0, 7, 0, 0, 0, - 3, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 4, 0, 0, 0, 0, 0, - 0, 0, 7, 0, 0, 0, - 3, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 4, 0, 0, 0, 1, 0, - 0, 0, 7, 0, 0, 0, - 3, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 4, 0, 0, 0, 2, 0, - 0, 0, 7, 0, 0, 0, - 3, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 4, 0, 0, 0, 3, 0, - 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 1, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 7, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 1, 0, 0, 0, - 1, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 6, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 1, 0, 0, 0, - 7, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 7, 0, 0, 0, 8, 0, - 0, 0, 19, 0, 0, 0, - 27, 1, 0, 0, 0, 0, - 0, 0, 8, 0, 0, 0, - 8, 0, 0, 0, 19, 0, - 0, 0, 46, 1, 0, 0, - 0, 0, 0, 0, 11, 0, - 0, 0, 22, 0, 0, 0, - 5, 0, 0, 0, 198, 0, - 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 10, 0, - 0, 0, 8, 0, 0, 0, - 47, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 13, 0, 0, 0, 9, 0, - 0, 0, 73, 0, 0, 0, - 0, 0, 0, 0, 11, 0, - 0, 0, 7, 0, 0, 0, - 4, 0, 0, 0, 183, 0, - 0, 0, 0, 0, 0, 0, - 11, 0, 0, 0, 22, 0, - 0, 0, 5, 0, 0, 0, - 198, 0, 0, 0, 0, 0, - 0, 0, 11, 0, 0, 0, - 7, 0, 0, 0, 4, 0, - 0, 0, 183, 0, 0, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 10, 0, 0, 0, - 8, 0, 0, 0, 47, 0, - 0, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 13, 0, - 0, 0, 9, 0, 0, 0, - 73, 0, 0, 0, 0, 0, - 0, 0, 12, 0, 0, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 94, 0, - 0, 0, 9, 0, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 183, 0, 0, 0, 4, 0, - 0, 0, 1, 0, 0, 0, - 8, 0, 0, 0, 0, 0, - 0, 0, 20, 1, 0, 0, - 7, 0, 0, 0, 3, 0, - 0, 0, 12, 0, 0, 0, - 3, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 4, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 4, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 0, - 0, 0, 255, 255, 255, 255, - 1, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 2, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 255, 255, - 255, 255, 5, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 4, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 8, 0, 0, 0, 2, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, - 0, 0, 2, 0, 0, 0, - 2, 0, 0, 0, 3, 0, - 0, 0, 5, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 5, 0, 0, 0, - 1, 0, 0, 0, 2, 0, - 0, 0, 67, 58, 92, 87, - 111, 114, 107, 92, 103, 114, - 97, 112, 104, 105, 99, 115, - 92, 99, 111, 109, 109, 111, - 110, 92, 84, 101, 120, 116, - 80, 83, 46, 104, 108, 115, - 108, 13, 10, 84, 101, 120, - 116, 117, 114, 101, 50, 68, - 32, 84, 101, 120, 116, 117, - 114, 101, 48, 59, 13, 10, - 13, 10, 83, 97, 109, 112, - 108, 101, 114, 83, 116, 97, - 116, 101, 32, 115, 97, 109, - 76, 105, 110, 101, 97, 114, - 59, 13, 10, 13, 10, 115, - 116, 114, 117, 99, 116, 32, - 86, 83, 95, 79, 85, 84, - 80, 85, 84, 32, 123, 13, - 10, 9, 102, 108, 111, 97, - 116, 52, 32, 80, 111, 115, - 105, 116, 105, 111, 110, 32, - 58, 32, 83, 86, 95, 80, - 79, 83, 73, 84, 73, 79, - 78, 59, 13, 10, 9, 102, - 108, 111, 97, 116, 50, 32, - 84, 101, 120, 67, 111, 111, - 114, 100, 32, 58, 32, 84, - 69, 88, 67, 79, 79, 82, - 68, 59, 13, 10, 125, 59, - 13, 10, 13, 10, 102, 108, - 111, 97, 116, 52, 32, 109, - 97, 105, 110, 40, 86, 83, - 95, 79, 85, 84, 80, 85, - 84, 32, 105, 110, 112, 117, - 116, 41, 32, 58, 32, 83, - 86, 95, 84, 97, 114, 103, - 101, 116, 32, 123, 13, 10, - 9, 114, 101, 116, 117, 114, - 110, 32, 84, 101, 120, 116, - 117, 114, 101, 48, 46, 83, - 97, 109, 112, 108, 101, 40, - 115, 97, 109, 76, 105, 110, - 101, 97, 114, 44, 32, 105, - 110, 112, 117, 116, 46, 84, - 101, 120, 67, 111, 111, 114, - 100, 41, 59, 13, 10, 125, - 13, 10, 71, 108, 111, 98, - 97, 108, 115, 86, 83, 95, - 79, 85, 84, 80, 85, 84, - 58, 58, 80, 111, 115, 105, - 116, 105, 111, 110, 86, 83, - 95, 79, 85, 84, 80, 85, - 84, 58, 58, 84, 101, 120, - 67, 111, 111, 114, 100, 77, - 105, 99, 114, 111, 115, 111, - 102, 116, 32, 40, 82, 41, - 32, 72, 76, 83, 76, 32, - 83, 104, 97, 100, 101, 114, - 32, 67, 111, 109, 112, 105, - 108, 101, 114, 32, 57, 46, - 50, 57, 46, 57, 53, 50, - 46, 51, 49, 49, 49, 0, - 109, 97, 105, 110, 0, 112, - 115, 95, 52, 95, 48, 0 -}; diff --git a/common/TextVS.h b/common/TextVS.h @@ -1,2435 +0,0 @@ -#if 0 -// -// Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111 -// -// -// fxc /nologo /Emain /T vs_4_0 /Fh C:\Work\graphics\Debug\TextVS.h /Fo -// C:\Work\graphics\Debug\TextVS.cso /Vn codeTextVS /Zi -// ..\common\TextVS.hlsl -// -// -// Buffer Definitions: -// -// cbuffer cb0 -// { -// -// float4x4 MVP; // Offset: 0 Size: 64 -// uint cw; // Offset: 64 Size: 4 -// uint ch; // Offset: 68 Size: 4 -// -// } -// -// -// Resource Bindings: -// -// Name Type Format Dim Slot Elements -// ------------------------------ ---------- ------- ----------- ---- -------- -// cb0 cbuffer NA NA 0 1 -// -// -// -// Input signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------ ------ -// POSITION 0 xyzw 0 NONE float xyzw -// TEXCOORD 0 xy 1 NONE float xy -// CHARACTER 0 x 2 NONE uint x -// SV_INSTANCEID 0 x 3 INSTID uint x -// -// -// Output signature: -// -// Name Index Mask Register SysValue Format Used -// -------------------- ----- ------ -------- -------- ------ ------ -// SV_POSITION 0 xyzw 0 POS float xyzw -// TEXCOORD 0 xy 1 NONE float xy -// -vs_4_0 -dcl_constantbuffer cb0[5], immediateIndexed -dcl_input v0.xyzw -dcl_input v1.xy -dcl_input v2.x -dcl_input_sgv v3.x, instance_id -dcl_output_siv o0.xyzw, position -dcl_output o1.xy -dcl_temps 2 - -#line 22 "C:\Work\graphics\common\TextVS.hlsl" -iadd r0.x, cb0[4].y, l(-1) -udiv r0.y, null, v3.x, cb0[4].y -iadd r0.x, r0.x, -r0.y -utof r0.y, r0.x -udiv null, r0.z, v3.x, cb0[4].x -utof r0.x, r0.z -add r0.xy, r0.xyxx, v0.xyxx // pos<0,1> - -#line 28 -mul r1.xyzw, r0.yyyy, cb0[1].xyzw -mad r0.xyzw, cb0[0].xyzw, r0.xxxx, r1.xyzw -mad r0.xyzw, cb0[2].xyzw, v0.zzzz, r0.xyzw -mad r0.xyzw, cb0[3].xyzw, v0.wwww, r0.xyzw // output<0:NaN:Inf,1:NaN:Inf,2:NaN:Inf,3:NaN:Inf> - -#line 38 -movc o0.z, v2.x, r0.z, l(-1.100000) // main<2:NaN:Inf> -mov o0.xyw, r0.xyxw // main<0:NaN:Inf,1:NaN:Inf,3:NaN:Inf> - -#line 25 -and r0.x, v2.x, l(15) -utof r0.x, r0.x // tx<0:[0f,15f]> -ushr r0.z, v2.x, l(4) -utof r0.z, r0.z // ty<0:[0f,2.68435e+008f]> - -#line 35 -mul r0.xy, r0.xzxx, l(0.062500, 0.062500, 0.000000, 0.000000) -mad r0.xy, v1.xyxx, l(0.062500, 0.062500, 0.000000, 0.000000), r0.xyxx -add o1.xy, r0.xyxx, l(0.003906, 0.003906, 0.000000, 0.000000) // main<4:[-2.12676e+037f,2.12676e+037f],5:[-2.12676e+037f,2.12676e+037f]> - -#line 40 -ret -// Approximately 21 instruction slots used -#endif - -const BYTE codeTextVS[] = -{ - 68, 88, 66, 67, 57, 29, - 242, 234, 77, 129, 163, 144, - 43, 154, 91, 62, 44, 78, - 140, 14, 1, 0, 0, 0, - 213, 54, 0, 0, 6, 0, - 0, 0, 56, 0, 0, 0, - 60, 1, 0, 0, 216, 1, - 0, 0, 48, 2, 0, 0, - 40, 5, 0, 0, 164, 5, - 0, 0, 82, 68, 69, 70, - 252, 0, 0, 0, 1, 0, - 0, 0, 64, 0, 0, 0, - 1, 0, 0, 0, 28, 0, - 0, 0, 0, 4, 254, 255, - 1, 1, 0, 0, 203, 0, - 0, 0, 60, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 99, 98, - 48, 0, 60, 0, 0, 0, - 3, 0, 0, 0, 88, 0, - 0, 0, 80, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 160, 0, 0, 0, - 0, 0, 0, 0, 64, 0, - 0, 0, 2, 0, 0, 0, - 164, 0, 0, 0, 0, 0, - 0, 0, 180, 0, 0, 0, - 64, 0, 0, 0, 4, 0, - 0, 0, 2, 0, 0, 0, - 184, 0, 0, 0, 0, 0, - 0, 0, 200, 0, 0, 0, - 68, 0, 0, 0, 4, 0, - 0, 0, 2, 0, 0, 0, - 184, 0, 0, 0, 0, 0, - 0, 0, 77, 86, 80, 0, - 3, 0, 3, 0, 4, 0, - 4, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 99, 119, - 0, 171, 0, 0, 19, 0, - 1, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 99, 104, 0, 77, 105, 99, - 114, 111, 115, 111, 102, 116, - 32, 40, 82, 41, 32, 72, - 76, 83, 76, 32, 83, 104, - 97, 100, 101, 114, 32, 67, - 111, 109, 112, 105, 108, 101, - 114, 32, 57, 46, 50, 57, - 46, 57, 53, 50, 46, 51, - 49, 49, 49, 0, 73, 83, - 71, 78, 148, 0, 0, 0, - 4, 0, 0, 0, 8, 0, - 0, 0, 104, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 15, 15, - 0, 0, 113, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 1, 0, 0, 0, 3, 3, - 0, 0, 122, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 1, 1, - 0, 0, 132, 0, 0, 0, - 0, 0, 0, 0, 8, 0, - 0, 0, 1, 0, 0, 0, - 3, 0, 0, 0, 1, 1, - 0, 0, 80, 79, 83, 73, - 84, 73, 79, 78, 0, 84, - 69, 88, 67, 79, 79, 82, - 68, 0, 67, 72, 65, 82, - 65, 67, 84, 69, 82, 0, - 83, 86, 95, 73, 78, 83, - 84, 65, 78, 67, 69, 73, - 68, 0, 171, 171, 79, 83, - 71, 78, 80, 0, 0, 0, - 2, 0, 0, 0, 8, 0, - 0, 0, 56, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 15, 0, - 0, 0, 68, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 1, 0, 0, 0, 3, 12, - 0, 0, 83, 86, 95, 80, - 79, 83, 73, 84, 73, 79, - 78, 0, 84, 69, 88, 67, - 79, 79, 82, 68, 0, 171, - 171, 171, 83, 72, 68, 82, - 240, 2, 0, 0, 64, 0, - 1, 0, 188, 0, 0, 0, - 89, 0, 0, 4, 70, 142, - 32, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 95, 0, - 0, 3, 242, 16, 16, 0, - 0, 0, 0, 0, 95, 0, - 0, 3, 50, 16, 16, 0, - 1, 0, 0, 0, 95, 0, - 0, 3, 18, 16, 16, 0, - 2, 0, 0, 0, 96, 0, - 0, 4, 18, 16, 16, 0, - 3, 0, 0, 0, 8, 0, - 0, 0, 103, 0, 0, 4, - 242, 32, 16, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 101, 0, 0, 3, 50, 32, - 16, 0, 1, 0, 0, 0, - 104, 0, 0, 2, 2, 0, - 0, 0, 30, 0, 0, 8, - 18, 0, 16, 0, 0, 0, - 0, 0, 26, 128, 32, 0, - 0, 0, 0, 0, 4, 0, - 0, 0, 1, 64, 0, 0, - 255, 255, 255, 255, 78, 0, - 0, 9, 34, 0, 16, 0, - 0, 0, 0, 0, 0, 208, - 0, 0, 10, 16, 16, 0, - 3, 0, 0, 0, 26, 128, - 32, 0, 0, 0, 0, 0, - 4, 0, 0, 0, 30, 0, - 0, 8, 18, 0, 16, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 0, 0, 0, 0, - 26, 0, 16, 128, 65, 0, - 0, 0, 0, 0, 0, 0, - 86, 0, 0, 5, 34, 0, - 16, 0, 0, 0, 0, 0, - 10, 0, 16, 0, 0, 0, - 0, 0, 78, 0, 0, 9, - 0, 208, 0, 0, 66, 0, - 16, 0, 0, 0, 0, 0, - 10, 16, 16, 0, 3, 0, - 0, 0, 10, 128, 32, 0, - 0, 0, 0, 0, 4, 0, - 0, 0, 86, 0, 0, 5, - 18, 0, 16, 0, 0, 0, - 0, 0, 42, 0, 16, 0, - 0, 0, 0, 0, 0, 0, - 0, 7, 50, 0, 16, 0, - 0, 0, 0, 0, 70, 0, - 16, 0, 0, 0, 0, 0, - 70, 16, 16, 0, 0, 0, - 0, 0, 56, 0, 0, 8, - 242, 0, 16, 0, 1, 0, - 0, 0, 86, 5, 16, 0, - 0, 0, 0, 0, 70, 142, - 32, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 0, 0, 0, 0, 70, 142, - 32, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, - 16, 0, 0, 0, 0, 0, - 70, 14, 16, 0, 1, 0, - 0, 0, 50, 0, 0, 10, - 242, 0, 16, 0, 0, 0, - 0, 0, 70, 142, 32, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 166, 26, 16, 0, - 0, 0, 0, 0, 70, 14, - 16, 0, 0, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 0, 0, 0, 0, - 70, 142, 32, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 246, 31, 16, 0, 0, 0, - 0, 0, 70, 14, 16, 0, - 0, 0, 0, 0, 55, 0, - 0, 9, 66, 32, 16, 0, - 0, 0, 0, 0, 10, 16, - 16, 0, 2, 0, 0, 0, - 42, 0, 16, 0, 0, 0, - 0, 0, 1, 64, 0, 0, - 205, 204, 140, 191, 54, 0, - 0, 5, 178, 32, 16, 0, - 0, 0, 0, 0, 70, 12, - 16, 0, 0, 0, 0, 0, - 1, 0, 0, 7, 18, 0, - 16, 0, 0, 0, 0, 0, - 10, 16, 16, 0, 2, 0, - 0, 0, 1, 64, 0, 0, - 15, 0, 0, 0, 86, 0, - 0, 5, 18, 0, 16, 0, - 0, 0, 0, 0, 10, 0, - 16, 0, 0, 0, 0, 0, - 85, 0, 0, 7, 66, 0, - 16, 0, 0, 0, 0, 0, - 10, 16, 16, 0, 2, 0, - 0, 0, 1, 64, 0, 0, - 4, 0, 0, 0, 86, 0, - 0, 5, 66, 0, 16, 0, - 0, 0, 0, 0, 42, 0, - 16, 0, 0, 0, 0, 0, - 56, 0, 0, 10, 50, 0, - 16, 0, 0, 0, 0, 0, - 134, 0, 16, 0, 0, 0, - 0, 0, 2, 64, 0, 0, - 0, 0, 128, 61, 0, 0, - 128, 61, 0, 0, 0, 0, - 0, 0, 0, 0, 50, 0, - 0, 12, 50, 0, 16, 0, - 0, 0, 0, 0, 70, 16, - 16, 0, 1, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 128, 61, 0, 0, 128, 61, - 0, 0, 0, 0, 0, 0, - 0, 0, 70, 0, 16, 0, - 0, 0, 0, 0, 0, 0, - 0, 10, 50, 32, 16, 0, - 1, 0, 0, 0, 70, 0, - 16, 0, 0, 0, 0, 0, - 2, 64, 0, 0, 0, 0, - 128, 59, 0, 0, 128, 59, - 0, 0, 0, 0, 0, 0, - 0, 0, 62, 0, 0, 1, - 83, 84, 65, 84, 116, 0, - 0, 0, 21, 0, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, - 4, 0, 0, 0, 2, 0, - 0, 0, 4, 0, 0, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 83, 68, - 66, 71, 41, 49, 0, 0, - 84, 0, 0, 0, 212, 3, - 0, 0, 5, 4, 0, 0, - 10, 4, 0, 0, 1, 1, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 21, 0, - 0, 0, 16, 0, 0, 0, - 38, 0, 0, 0, 140, 32, - 0, 0, 26, 0, 0, 0, - 28, 36, 0, 0, 32, 0, - 0, 0, 140, 38, 0, 0, - 9, 0, 0, 0, 12, 41, - 0, 0, 13, 0, 0, 0, - 192, 41, 0, 0, 252, 43, - 0, 0, 196, 44, 0, 0, - 0, 0, 0, 0, 35, 0, - 0, 0, 35, 0, 0, 0, - 126, 3, 0, 0, 0, 0, - 0, 0, 30, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 120, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 78, 0, 0, 0, - 2, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 1, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 120, 0, - 0, 0, 2, 0, 0, 0, - 132, 0, 0, 0, 2, 0, - 0, 0, 30, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 120, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 86, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 1, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 0, 0, 0, 0, 128, 79, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 120, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 0, - 0, 0, 78, 0, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 2, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 24, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 120, 0, - 0, 0, 2, 0, 0, 0, - 140, 0, 0, 0, 5, 0, - 0, 0, 86, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 0, 0, 0, 0, 128, 79, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 120, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 18, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 255, 255, - 127, 255, 255, 255, 127, 127, - 0, 0, 0, 0, 0, 0, - 0, 0, 19, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 255, 255, - 127, 255, 255, 255, 127, 127, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 24, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 120, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 7, 0, - 0, 0, 56, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 3, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 0, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 0, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 0, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 0, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 156, 0, - 0, 0, 2, 0, 0, 0, - 148, 0, 0, 0, 8, 0, - 0, 0, 50, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 3, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 156, 0, - 0, 0, 2, 0, 0, 0, - 148, 0, 0, 0, 9, 0, - 0, 0, 50, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 3, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 156, 0, - 0, 0, 2, 0, 0, 0, - 148, 0, 0, 0, 10, 0, - 0, 0, 50, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 3, 0, - 0, 0, 32, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 33, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 34, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 35, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 156, 0, - 0, 0, 3, 0, 0, 0, - 168, 0, 0, 0, 11, 0, - 0, 0, 55, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 2, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 28, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 26, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 156, 0, - 0, 0, 2, 0, 0, 0, - 180, 0, 0, 0, 12, 0, - 0, 0, 54, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 3, 0, - 0, 0, 26, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 27, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 29, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 128, 255, 0, 0, 128, 127, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 27, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 156, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 13, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 15, 0, - 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 0, 0, - 0, 128, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 28, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 120, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 14, 0, - 0, 0, 86, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 255, 255, 36, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 0, 0, 0, 0, 112, 65, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 28, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 120, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 15, 0, - 0, 0, 85, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 2, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 15, 0, 0, 0, 0, - 255, 255, 255, 15, 0, 0, - 0, 0, 255, 255, 255, 15, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 29, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 188, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 16, 0, - 0, 0, 86, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 2, 0, 0, 0, 255, 255, - 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 37, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 0, 0, 0, 0, 128, 77, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 29, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 188, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 17, 0, - 0, 0, 56, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 0, 0, 0, 0, 112, 63, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 0, 0, - 0, 0, 0, 0, 128, 75, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 156, 0, - 0, 0, 2, 0, 0, 0, - 84, 0, 0, 0, 18, 0, - 0, 0, 50, 0, 0, 0, - 1, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 255, 255, - 127, 253, 255, 255, 127, 125, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 255, 255, - 127, 253, 255, 255, 127, 125, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 156, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 19, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 30, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 255, 255, - 127, 253, 255, 255, 127, 125, - 0, 0, 0, 0, 0, 0, - 0, 0, 31, 0, 0, 0, - 0, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 128, - 255, 255, 255, 127, 255, 255, - 127, 253, 255, 255, 127, 125, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 255, 255, 255, 255, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 30, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 156, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 20, 0, - 0, 0, 62, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 31, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 156, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 0, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 1, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 2, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 3, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 4, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 5, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 6, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 7, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 8, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 9, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 10, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 11, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 12, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 13, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 14, 0, 0, 0, 21, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 0, 0, 0, 0, - 15, 0, 0, 0, 22, 0, - 0, 0, 19, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 1, 0, 0, 0, - 0, 0, 0, 0, 23, 0, - 0, 0, 19, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 2, 0, 0, 0, - 0, 0, 0, 0, 13, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 6, 0, 0, 0, - 0, 0, 0, 0, 13, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 6, 0, 0, 0, - 1, 0, 0, 0, 13, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 6, 0, 0, 0, - 2, 0, 0, 0, 13, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 6, 0, 0, 0, - 3, 0, 0, 0, 14, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 7, 0, 0, 0, - 0, 0, 0, 0, 14, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 7, 0, 0, 0, - 1, 0, 0, 0, 15, 0, - 0, 0, 19, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 8, 0, 0, 0, - 0, 0, 0, 0, 16, 0, - 0, 0, 19, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 9, 0, 0, 0, - 0, 0, 0, 0, 17, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 5, 0, 0, 0, - 0, 0, 0, 0, 17, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 5, 0, 0, 0, - 1, 0, 0, 0, 17, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 5, 0, 0, 0, - 2, 0, 0, 0, 17, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 5, 0, 0, 0, - 3, 0, 0, 0, 17, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 5, 0, 0, 0, - 4, 0, 0, 0, 17, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 5, 0, 0, 0, - 5, 0, 0, 0, 20, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 10, 0, 0, 0, - 0, 0, 0, 0, 20, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 10, 0, 0, 0, - 1, 0, 0, 0, 20, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 10, 0, 0, 0, - 2, 0, 0, 0, 20, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 10, 0, 0, 0, - 3, 0, 0, 0, 18, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 11, 0, 0, 0, - 0, 0, 0, 0, 19, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 255, 255, - 255, 255, 12, 0, 0, 0, - 0, 0, 0, 0, 18, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 19, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 20, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 2, 0, 0, 0, - 255, 255, 255, 255, 21, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 22, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 1, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 23, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 1, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 24, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 2, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 25, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 3, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 4, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 8, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 0, 0, - 255, 255, 255, 255, 12, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 1, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 5, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 9, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 255, 255, 255, 255, 13, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 2, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 6, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 10, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 2, 0, 0, 0, - 255, 255, 255, 255, 14, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 3, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 7, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 11, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 2, 0, 0, 0, - 255, 255, 255, 255, 15, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 3, 0, 0, 0, - 255, 255, 255, 255, 16, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 4, 0, - 0, 0, 0, 0, 0, 0, - 255, 255, 255, 255, 17, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 4, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 3, 0, 0, 0, - 8, 0, 0, 0, 3, 0, - 0, 0, 60, 0, 0, 0, - 0, 0, 0, 0, 4, 0, - 0, 0, 14, 0, 0, 0, - 2, 0, 0, 0, 80, 0, - 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 14, 0, - 0, 0, 2, 0, 0, 0, - 99, 0, 0, 0, 0, 0, - 0, 0, 12, 0, 0, 0, - 10, 0, 0, 0, 4, 0, - 0, 0, 207, 0, 0, 0, - 0, 0, 0, 0, 8, 0, - 0, 0, 8, 0, 0, 0, - 19, 0, 0, 0, 174, 3, - 0, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 8, 0, - 0, 0, 19, 0, 0, 0, - 193, 3, 0, 0, 0, 0, - 0, 0, 13, 0, 0, 0, - 8, 0, 0, 0, 3, 0, - 0, 0, 222, 0, 0, 0, - 0, 0, 0, 0, 14, 0, - 0, 0, 8, 0, 0, 0, - 2, 0, 0, 0, 247, 0, - 0, 0, 0, 0, 0, 0, - 15, 0, 0, 0, 14, 0, - 0, 0, 1, 0, 0, 0, - 14, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 0, - 14, 0, 0, 0, 2, 0, - 0, 0, 51, 1, 0, 0, - 0, 0, 0, 0, 19, 0, - 0, 0, 11, 0, 0, 0, - 6, 0, 0, 0, 90, 1, - 0, 0, 0, 0, 0, 0, - 25, 0, 0, 0, 7, 0, - 0, 0, 2, 0, 0, 0, - 25, 2, 0, 0, 0, 0, - 0, 0, 26, 0, 0, 0, - 7, 0, 0, 0, 2, 0, - 0, 0, 48, 2, 0, 0, - 0, 0, 0, 0, 13, 0, - 0, 0, 8, 0, 0, 0, - 3, 0, 0, 0, 222, 0, - 0, 0, 0, 0, 0, 0, - 14, 0, 0, 0, 8, 0, - 0, 0, 2, 0, 0, 0, - 247, 0, 0, 0, 0, 0, - 0, 0, 15, 0, 0, 0, - 14, 0, 0, 0, 1, 0, - 0, 0, 14, 0, 0, 0, - 0, 0, 0, 0, 16, 0, - 0, 0, 14, 0, 0, 0, - 2, 0, 0, 0, 51, 1, - 0, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 10, 0, - 0, 0, 4, 0, 0, 0, - 207, 0, 0, 0, 0, 0, - 0, 0, 25, 0, 0, 0, - 7, 0, 0, 0, 2, 0, - 0, 0, 25, 2, 0, 0, - 0, 0, 0, 0, 26, 0, - 0, 0, 7, 0, 0, 0, - 2, 0, 0, 0, 48, 2, - 0, 0, 0, 0, 0, 0, - 19, 0, 0, 0, 11, 0, - 0, 0, 6, 0, 0, 0, - 90, 1, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 8, 0, 0, 0, 3, 0, - 0, 0, 60, 0, 0, 0, - 0, 0, 0, 0, 4, 0, - 0, 0, 14, 0, 0, 0, - 2, 0, 0, 0, 80, 0, - 0, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 14, 0, - 0, 0, 2, 0, 0, 0, - 99, 0, 0, 0, 0, 0, - 0, 0, 22, 0, 0, 0, - 8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 28, 0, - 0, 0, 17, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 38, 0, 0, 0, 5, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 40, 0, 0, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 25, 0, - 0, 0, 7, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 26, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 35, 0, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 40, 0, - 0, 0, 1, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 3, 0, 0, 0, - 115, 0, 0, 0, 9, 0, - 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 161, 3, 0, 0, - 7, 0, 0, 0, 4, 0, - 0, 0, 8, 0, 0, 0, - 3, 0, 0, 0, 115, 0, - 0, 0, 9, 0, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 168, 3, 0, 0, 6, 0, - 0, 0, 1, 0, 0, 0, - 24, 0, 0, 0, 4, 0, - 0, 0, 207, 0, 0, 0, - 4, 0, 0, 0, 5, 0, - 0, 0, 28, 0, 0, 0, - 1, 0, 0, 0, 168, 3, - 0, 0, 6, 0, 0, 0, - 2, 0, 0, 0, 48, 0, - 0, 0, 4, 0, 0, 0, - 207, 0, 0, 0, 4, 0, - 0, 0, 6, 0, 0, 0, - 56, 0, 0, 0, 1, 0, - 0, 0, 168, 3, 0, 0, - 6, 0, 0, 0, 3, 0, - 0, 0, 80, 0, 0, 0, - 4, 0, 0, 0, 207, 0, - 0, 0, 4, 0, 0, 0, - 7, 0, 0, 0, 92, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 4, 0, 0, 0, - 4, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 16, 0, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 17, 0, - 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 4, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 255, 255, 255, 255, 5, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 255, 255, 255, 255, - 3, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 26, 0, - 0, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 4, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 18, 0, 0, 0, 7, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 22, 0, 0, 0, - 8, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 24, 0, - 0, 0, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 25, 0, 0, 0, 10, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 6, 0, - 0, 0, 32, 0, 0, 0, - 11, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 1, 0, - 0, 0, 255, 255, 255, 255, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 1, 0, 0, 0, 36, 0, - 0, 0, 12, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 1, 0, 0, 0, 255, 255, - 255, 255, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 1, 0, 0, 0, - 37, 0, 0, 0, 3, 0, - 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 5, 0, 0, 0, 10, 0, - 0, 0, 6, 0, 0, 0, - 7, 0, 0, 0, 8, 0, - 0, 0, 9, 0, 0, 0, - 10, 0, 0, 0, 10, 0, - 0, 0, 11, 0, 0, 0, - 6, 0, 0, 0, 7, 0, - 0, 0, 8, 0, 0, 0, - 9, 0, 0, 0, 10, 0, - 0, 0, 11, 0, 0, 0, - 10, 0, 0, 0, 11, 0, - 0, 0, 12, 0, 0, 0, - 6, 0, 0, 0, 7, 0, - 0, 0, 8, 0, 0, 0, - 9, 0, 0, 0, 10, 0, - 0, 0, 11, 0, 0, 0, - 12, 0, 0, 0, 3, 0, - 0, 0, 4, 0, 0, 0, - 1, 0, 0, 0, 2, 0, - 0, 0, 9, 0, 0, 0, - 1, 0, 0, 0, 9, 0, - 0, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 7, 0, - 0, 0, 8, 0, 0, 0, - 1, 0, 0, 0, 0, 0, - 0, 0, 6, 0, 0, 0, - 10, 0, 0, 0, 8, 0, - 0, 0, 10, 0, 0, 0, - 5, 0, 0, 0, 6, 0, - 0, 0, 1, 0, 0, 0, - 67, 58, 92, 87, 111, 114, - 107, 92, 103, 114, 97, 112, - 104, 105, 99, 115, 92, 99, - 111, 109, 109, 111, 110, 92, - 84, 101, 120, 116, 86, 83, - 46, 104, 108, 115, 108, 13, - 10, 99, 98, 117, 102, 102, - 101, 114, 32, 99, 98, 48, - 32, 123, 13, 10, 9, 109, - 97, 116, 114, 105, 120, 32, - 77, 86, 80, 59, 13, 10, - 9, 117, 110, 115, 105, 103, - 110, 101, 100, 32, 105, 110, - 116, 32, 99, 119, 59, 13, - 10, 9, 117, 110, 115, 105, - 103, 110, 101, 100, 32, 105, - 110, 116, 32, 99, 104, 59, - 13, 10, 125, 59, 13, 10, - 115, 116, 114, 117, 99, 116, - 32, 86, 83, 95, 79, 85, - 84, 80, 85, 84, 32, 123, - 13, 10, 9, 102, 108, 111, - 97, 116, 52, 32, 80, 111, - 115, 105, 116, 105, 111, 110, - 32, 58, 32, 83, 86, 95, - 80, 79, 83, 73, 84, 73, - 79, 78, 59, 13, 10, 9, - 102, 108, 111, 97, 116, 50, - 32, 84, 101, 120, 67, 111, - 111, 114, 100, 32, 58, 32, - 84, 69, 88, 67, 79, 79, - 82, 68, 59, 13, 10, 125, - 59, 13, 10, 13, 10, 86, - 83, 95, 79, 85, 84, 80, - 85, 84, 32, 109, 97, 105, - 110, 40, 13, 10, 9, 102, - 108, 111, 97, 116, 52, 32, - 112, 111, 115, 32, 58, 32, - 80, 79, 83, 73, 84, 73, - 79, 78, 44, 13, 10, 9, - 102, 108, 111, 97, 116, 50, - 32, 117, 118, 32, 58, 32, - 84, 69, 88, 67, 79, 79, - 82, 68, 44, 13, 10, 9, - 117, 110, 115, 105, 103, 110, - 101, 100, 32, 105, 110, 116, - 32, 99, 32, 58, 32, 67, - 72, 65, 82, 65, 67, 84, - 69, 82, 44, 13, 10, 9, - 117, 110, 115, 105, 103, 110, - 101, 100, 32, 105, 110, 116, - 32, 105, 100, 32, 58, 32, - 83, 86, 95, 73, 78, 83, - 84, 65, 78, 67, 69, 73, - 68, 13, 10, 9, 41, 32, - 123, 13, 10, 13, 10, 9, - 86, 83, 95, 79, 85, 84, - 80, 85, 84, 32, 111, 117, - 116, 112, 117, 116, 32, 61, - 32, 40, 86, 83, 95, 79, - 85, 84, 80, 85, 84, 41, - 32, 48, 59, 13, 10, 13, - 10, 9, 47, 47, 32, 115, - 104, 105, 102, 116, 32, 117, - 110, 105, 116, 32, 114, 101, - 99, 116, 97, 110, 103, 108, - 101, 32, 116, 111, 32, 99, - 104, 97, 114, 97, 99, 116, - 101, 114, 32, 99, 101, 108, - 108, 32, 114, 101, 99, 116, - 97, 110, 103, 108, 101, 13, - 10, 9, 112, 111, 115, 46, - 120, 121, 32, 43, 61, 32, - 102, 108, 111, 97, 116, 50, - 40, 105, 100, 32, 37, 32, - 99, 119, 44, 32, 40, 99, - 104, 45, 49, 41, 32, 45, - 32, 105, 100, 32, 47, 32, - 99, 104, 41, 59, 13, 10, - 13, 10, 9, 47, 47, 32, - 97, 100, 106, 117, 115, 116, - 32, 117, 110, 105, 116, 32, - 116, 101, 120, 116, 117, 114, - 101, 32, 99, 111, 111, 114, - 100, 32, 116, 111, 32, 102, - 111, 110, 116, 32, 99, 101, - 108, 108, 32, 114, 101, 99, - 116, 97, 110, 103, 108, 101, - 13, 10, 9, 102, 108, 111, - 97, 116, 32, 116, 120, 32, - 61, 32, 40, 99, 32, 37, - 32, 49, 54, 41, 59, 13, - 10, 9, 102, 108, 111, 97, - 116, 32, 116, 121, 32, 61, - 32, 40, 99, 32, 47, 32, - 49, 54, 41, 59, 13, 10, - 13, 10, 9, 111, 117, 116, - 112, 117, 116, 46, 80, 111, - 115, 105, 116, 105, 111, 110, - 32, 61, 32, 109, 117, 108, - 40, 77, 86, 80, 44, 32, - 112, 111, 115, 41, 59, 32, - 13, 10, 9, 111, 117, 116, - 112, 117, 116, 46, 84, 101, - 120, 67, 111, 111, 114, 100, - 32, 61, 13, 10, 9, 9, - 47, 47, 32, 115, 99, 97, - 108, 101, 32, 116, 111, 32, - 115, 105, 122, 101, 32, 111, - 102, 32, 99, 104, 97, 114, - 97, 99, 116, 101, 114, 32, - 105, 110, 32, 102, 111, 110, - 116, 116, 101, 120, 116, 117, - 114, 101, 13, 10, 9, 9, - 117, 118, 32, 42, 32, 102, - 108, 111, 97, 116, 50, 40, - 49, 46, 48, 47, 49, 54, - 46, 48, 44, 49, 46, 48, - 47, 49, 54, 46, 48, 41, - 13, 10, 9, 9, 47, 47, - 32, 109, 111, 118, 101, 32, - 116, 111, 32, 99, 111, 114, - 114, 101, 99, 116, 32, 99, - 104, 97, 114, 97, 99, 116, - 101, 114, 13, 10, 9, 9, - 43, 32, 102, 108, 111, 97, - 116, 50, 40, 116, 120, 47, - 49, 54, 46, 48, 44, 116, - 121, 47, 49, 54, 46, 48, - 41, 13, 10, 9, 9, 47, - 47, 32, 111, 102, 102, 115, - 101, 116, 32, 116, 111, 32, - 97, 118, 111, 105, 100, 32, - 99, 114, 117, 102, 116, 13, - 10, 9, 9, 43, 32, 102, - 108, 111, 97, 116, 50, 40, - 49, 46, 48, 47, 50, 53, - 54, 46, 48, 44, 49, 46, - 48, 47, 50, 53, 54, 46, - 48, 41, 59, 13, 10, 13, - 10, 9, 47, 47, 32, 100, - 105, 115, 99, 97, 114, 100, - 32, 118, 105, 97, 32, 99, - 108, 105, 112, 112, 105, 110, - 103, 13, 10, 9, 105, 102, - 32, 40, 99, 32, 61, 61, - 32, 48, 41, 32, 111, 117, - 116, 112, 117, 116, 46, 80, - 111, 115, 105, 116, 105, 111, - 110, 46, 122, 32, 61, 32, - 45, 49, 46, 49, 59, 13, - 10, 13, 10, 9, 114, 101, - 116, 117, 114, 110, 32, 111, - 117, 116, 112, 117, 116, 59, - 13, 10, 125, 13, 10, 71, - 108, 111, 98, 97, 108, 115, - 76, 111, 99, 97, 108, 115, - 86, 83, 95, 79, 85, 84, - 80, 85, 84, 58, 58, 80, - 111, 115, 105, 116, 105, 111, - 110, 86, 83, 95, 79, 85, - 84, 80, 85, 84, 58, 58, - 84, 101, 120, 67, 111, 111, - 114, 100, 77, 105, 99, 114, - 111, 115, 111, 102, 116, 32, - 40, 82, 41, 32, 72, 76, - 83, 76, 32, 83, 104, 97, - 100, 101, 114, 32, 67, 111, - 109, 112, 105, 108, 101, 114, - 32, 57, 46, 50, 57, 46, - 57, 53, 50, 46, 51, 49, - 49, 49, 0, 109, 97, 105, - 110, 0, 118, 115, 95, 52, - 95, 48, 0 -}; diff --git a/common/app.h b/common/app.h @@ -1,10 +1,210 @@ -#ifndef _APP_H_ -#define _APP_H_ +/* Copyright 2013 Brian Swetland <swetland@frotz.net> + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ -#if defined(USE_OPENGL) || !defined(_WIN32) -#include "glapp.h" +#ifndef _GL_APP_H_ +#define _GL_APP_H_ + +#ifdef _WIN32 +#define NO_SDL_GLEXT 1 +#include <SDL.h> +#include <SDL_opengl.h> +#include "opengl.h" #else -#include "dxapp.h" +#define GL_GLEXT_PROTOTYPES 1 +#define NO_SDL_GLEXT 1 +#include <SDL.h> +#include <SDL_opengl.h> +#include "glcorearb.h" #endif +#include <math.h> + +enum { + FMT_32x4_FLOAT = 1, + FMT_32x3_FLOAT = 2, + FMT_32x2_FLOAT = 3, + FMT_32x1_FLOAT = 4, + + FMT_8x4_SNORM = 5, + + FMT_8x4_UNORM = 6, + FMT_8x2_UNORM = 7, + FMT_8x1_UNORM = 8, + + FMT_8x4_UINT = 9, + FMT_8x2_UINT = 10, + FMT_8x1_UINT = 11, +}; + +enum { + VERTEX_DATA = 1, + INSTANCE_DATA = 2, +}; + +struct AttribInfo { + const char *name; + unsigned nidx; + unsigned format; + unsigned slot; + unsigned offset; + unsigned type; + unsigned divisor; +}; + + +struct GLAttrInfo { +#define KIND_ATTRIB_POINTER 0 +#define KIND_ATTRIB_IPOINTER 1 + int kind; + +/* which VBO {0...} to associate with */ + int vidx; + +/* arguments for VertexAttrib[I]Pointer() */ + int index; + int size; + int type; + int normalized; + int pointer; + int divisor; +}; + +struct PixelShader { + unsigned ps; + PixelShader() : ps(0) {}; + ~PixelShader() { if (ps) glDeleteShader(ps); }; +}; + +struct VertexShader { + unsigned vs; + GLAttrInfo *ai; + AttribInfo *info; + unsigned count; + VertexShader() : vs(0), ai(NULL), info(NULL), count(0) {}; + ~VertexShader() { if (vs) { glDeleteShader(vs); free(ai); } }; +}; + +struct Texture2D { + unsigned tex; + Texture2D() : tex(0) {}; + ~Texture2D() { if (tex) { glDeleteTextures(1, &tex); } }; +}; + +struct UniformBuffer { + unsigned buf; + unsigned sz; + UniformBuffer() : buf(0) {}; + ~UniformBuffer() { if (buf) glDeleteBuffers(1, &buf); }; +}; + +struct VertexBuffer { + unsigned buf; + unsigned sz; + VertexBuffer() : buf(0) {}; + ~VertexBuffer() { if (buf) glDeleteBuffers(1, &buf); }; +}; + +struct IndexBuffer { + unsigned buf; + unsigned sz; + IndexBuffer() : buf(0) {}; + ~IndexBuffer() { if (buf) glDeleteBuffers(1, &buf); }; +}; + +struct InputConfiguration { + PixelShader *ps; + VertexShader *vs; + unsigned vao; + unsigned pgm; + VertexBuffer *vbuf[16]; + UniformBuffer *ubuf[16]; + IndexBuffer *ibuf; + InputConfiguration() : ps(NULL), vs(NULL), vao(0), pgm(0), ibuf(NULL) { + memset(vbuf, 0, sizeof(vbuf)); memset(ubuf, 0, sizeof(ubuf)); }; + ~InputConfiguration() { if (vao) glDeleteVertexArrays(1, &vao); if (pgm) glDeleteProgram(pgm); }; +}; + +class App { +public: + App(); + virtual ~App(); + + virtual int init(void) = 0; + virtual void render(void) = 0; + virtual void release(void) {}; + + /* glue - do not use */ + int start(void); + void handleEvents(void); + + // TODO: move away from D3D10_INPUT... + int compileShader(VertexShader *vs, const char *fn, + void *data, unsigned len, int raw, + AttribInfo *layout, unsigned lcount); + int compileShader(PixelShader *ps, const char *fn, + void *data, unsigned len, int raw); + int loadShader(VertexShader *vs, const char *fn, + AttribInfo *layout, unsigned lcount); + int loadShader(PixelShader *ps, const char *fn); + + int loadTextureRGBA(Texture2D *tex, const char *fn, int genmips); + int createTextureRGBA(Texture2D *tex, void *data, unsigned w, unsigned h, int genmips); + + int initConfig(InputConfiguration *ic, VertexShader *vs, PixelShader *ps); + int initBuffer(VertexBuffer *vb, void *data, int sz); + int initBuffer(IndexBuffer *ib, void *data, int sz); + int initBuffer(UniformBuffer *ub, void *data, int sz); + + void updateBuffer(VertexBuffer *vb, void *data); + void updateBuffer(IndexBuffer *ib, void *data); + void updateBuffer(UniformBuffer *ub, void *data); + + void useConfig(InputConfiguration *ic); + void useBuffer(VertexBuffer *vb, int slot, unsigned stride, unsigned offset); + void useBuffer(IndexBuffer *ib); + void useBuffer(UniformBuffer *ub, int slot); + void useTexture(Texture2D *tex, int slot); + void drawIndexedInstanced(unsigned numindices, unsigned numinstances); + void drawInstanced(unsigned numvertices, unsigned numinstances); + void drawIndexed(unsigned numindices); + void setBlend(int enable); +protected: + int width; + int height; + + /* mouse motion since last frame */ + int mouseDX, mouseDY, mouseDZ; + /* mouse button state */ + int mouseBTN; + /* mouse position in window coordinates */ + int mouseWX, mouseWY; + /* keys down */ + unsigned char keystate[256]; + + InputConfiguration *ic; + +private: + int _vsync; + SDL_Window *win; + SDL_GLContext glcontext; +}; + +App *createApp(void); + +void printx(const char *fmt, ...); +void printmtx(float *m, const char *name); +int error(const char *fmt, ...); + #endif diff --git a/common/assets/TextPS.hlsl b/common/assets/TextPS.hlsl @@ -1,13 +0,0 @@ - -Texture2D Texture0; - -SamplerState samLinear; - -struct VS_OUTPUT { - float4 Position : SV_POSITION; - float2 TexCoord : TEXCOORD; -}; - -float4 main(VS_OUTPUT input) : SV_Target { - return Texture0.Sample(samLinear, input.TexCoord); -} diff --git a/common/assets/TextVS.hlsl b/common/assets/TextVS.hlsl @@ -1,41 +0,0 @@ - -cbuffer cb0 { - matrix MVP; - unsigned int cw; - unsigned int ch; -}; -struct VS_OUTPUT { - float4 Position : SV_POSITION; - float2 TexCoord : TEXCOORD; -}; - -VS_OUTPUT main( - float4 pos : POSITION, - float2 uv : TEXCOORD, - unsigned int c : CHARACTER, - unsigned int id : SV_INSTANCEID - ) { - - VS_OUTPUT output = (VS_OUTPUT) 0; - - // shift unit rectangle to character cell rectangle - pos.xy += float2(id % cw, (ch-1) - id / ch); - - // adjust unit texture coord to font cell rectangle - float tx = (c % 16); - float ty = (c / 16); - - output.Position = mul(MVP, pos); - output.TexCoord = - // scale to size of character in fonttexture - uv * float2(1.0/16.0,1.0/16.0) - // move to correct character - + float2(tx/16.0,ty/16.0) - // offset to avoid cruft - + float2(1.0/256.0,1.0/256.0); - - // discard via clipping - if (c == 0) output.Position.z = -1.1; - - return output; -} diff --git a/common/dxapp.cc b/common/dxapp.cc @@ -1,680 +0,0 @@ -/* Copyright 2013 Brian Swetland <swetland@frotz.net> - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include <stdio.h> -#include <stdarg.h> -#include <float.h> - -#include "util.h" -#include "app.h" - -LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); - -App::App() : width(800), height(600), active(0), - mouseDX(0), mouseDY(0), mouseDZ(0), mouseBTN(0), - device(NULL), targetView(NULL), depthView(NULL), - swapchain(NULL), rsDefault(NULL), dsDepthEnabled(NULL), dsDepthDisabled(NULL) { -} - -App::~App() { -} - -void App::stop(void) { - if (swapchain) { - // teardown during fullscreen will crash - // ensure we're not fullscreen first... - swapchain->SetFullscreenState(false, NULL); - } - if (device) device->Release(); - - release(); - - if (rsDefault) rsDefault->Release(); - if (dsDepthEnabled) dsDepthEnabled->Release(); - if (dsDepthDisabled) dsDepthDisabled->Release(); - if (depthView) depthView->Release(); - if (depthBuffer) depthBuffer->Release(); - if (targetView) targetView->Release(); - if (swapchain) swapchain->Release(); - if (device) device->ClearState(); - - printx("-- goodbye --\n"); -} - -static App *app; -static int moving = 0; -static int frame = 0; - -static LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { - PAINTSTRUCT ps; - HDC hdc; - switch( message ) { - case WM_PAINT: - hdc = BeginPaint( hWnd, &ps ); - EndPaint( hWnd, &ps ); - break; - case WM_DESTROY: - PostQuitMessage( 0 ); - break; - case WM_SIZE: -#if 0 - if (wParam == SIZE_MINIMIZED) printx("win: minimized\n"); - else if (wParam == SIZE_MAXIMIZED) printx("win: maximized\n"); - else if (wParam == SIZE_RESTORED) printx("win: restored\n"); - else printx("win: sized %d??\n", wParam); -#endif - if (!moving) - app->reconfigure(0); - break; - case WM_ENTERSIZEMOVE: - moving = 1; - break; - case WM_EXITSIZEMOVE: - moving = 0; - app->reconfigure(0); - break; - case WM_MOUSEMOVE: - app->setMouseXY((short) LOWORD(lParam), (short) HIWORD(lParam)); - break; - case WM_ACTIVATEAPP: - printx("win: activate: %d\n", wParam); - app->setActive(wParam); - break; - default: - return DefWindowProc(hWnd, message, wParam, lParam); - } - return 0; -} - -void init_io(void); - -int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { - init_io(); - app = createApp(); - if (app->start(hInstance, nCmdShow)) - return 0; - app->eventloop(); - app->stop(); - delete app; - return 0; -} - -void App::eventloop(void) { - HRESULT hr; - MSG msg = {0}; - while (msg.message != WM_QUIT) { - if (1) { - if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) { - TranslateMessage(&msg); - DispatchMessage(&msg); - continue; - } - } else { - if (GetMessage(&msg, 0, 0, 0) == -1) - return; - TranslateMessage(&msg); - DispatchMessage(&msg); - continue; - } - - hr = dkeyboard->GetDeviceState(sizeof(keystate), (void*) keystate); - if (FAILED(hr)) { - // We can lose the keyboard if we lose focus - // Try to reacquire it - dkeyboard->Acquire(); - } else { - if (keystate[DIK_ESCAPE] & 0x80) - break; - } - - DIMOUSESTATE2 state; - hr = dmouse->GetDeviceState(sizeof(DIMOUSESTATE2), &state); - if (FAILED(hr)) { - dmouse->Acquire(); - mouseDX = mouseDY = mouseDZ = 0; - } else { - mouseDX = state.lX; - mouseDY = state.lY; - mouseDZ = state.lZ; - mouseBTN = - ((state.rgbButtons[0] >> 7) & 1) | - ((state.rgbButtons[1] >> 6) & 2) | - ((state.rgbButtons[2] >> 5) & 4); - } - - float rgba[4] = { 0.0f, 0.125f, 0.3f, 1.0f }; - device->ClearRenderTargetView(targetView, rgba); - device->ClearDepthStencilView(depthView, D3D10_CLEAR_DEPTH, 1.0f, 0 ); - - app->render(); - - swapchain->Present(1, 0); - frame++; - } -} - -int App::start(HINSTANCE hInstance, int nCmdShow) { - hinstance = hInstance; - - WNDCLASSEX wc; - memset(&wc, 0, sizeof(wc)); - wc.cbSize = sizeof(WNDCLASSEX); - wc.style = CS_HREDRAW | CS_VREDRAW; - wc.lpfnWndProc = WndProc; - wc.hInstance = hInstance; - wc.hCursor = LoadCursor(NULL, IDC_ARROW); - wc.hbrBackground = (HBRUSH) (COLOR_WINDOW + 1); - wc.lpszClassName = "MyWindowClass"; - - if (!RegisterClassEx(&wc)) - return -1; - - RECT rc = { 0, 0, width, height }; - - AdjustWindowRect(&rc, WS_OVERLAPPEDWINDOW, false); - hwnd = CreateWindow("MyWindowCLass", "Hello", WS_OVERLAPPEDWINDOW, - CW_USEDEFAULT, CW_USEDEFAULT, width, height, - NULL, NULL, hInstance, NULL); - if (!hwnd) - return -1; - - ShowWindow(hwnd, nCmdShow); - - if (FAILED(initD3D())) - return -1; - if (initDirectInput()) - return -1; - if (init()) - return -1; - return 0; -} - -int App::initDirectInput(void) { - HRESULT hr; - hr = DirectInput8Create(hinstance, - DIRECTINPUT_VERSION, IID_IDirectInput8, - (void**) &dinput, NULL); - if (FAILED(hr)) - return -1; - - hr = dinput->CreateDevice(GUID_SysKeyboard, &dkeyboard, NULL); - if (FAILED(hr)) - return -1; - hr = dkeyboard->SetDataFormat(&c_dfDIKeyboard); - if (FAILED(hr)) - return -1; - hr = dkeyboard->SetCooperativeLevel(hwnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); - if (FAILED(hr)) - return -1; - - hr = dinput->CreateDevice(GUID_SysMouse, &dmouse, NULL); - if (FAILED(hr)) - return -1; - hr = dmouse->SetDataFormat(&c_dfDIMouse2); - if (FAILED(hr)) - return -1; - hr = dmouse->SetCooperativeLevel(hwnd, DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); - if (FAILED(hr)) - return -1; - - return 0; -} - -int App::reconfigure(int init) { - HRESULT hr; - int w, h; - - if (init) { - printx("reconfigure: init\n"); - } else { - RECT r; - GetClientRect(hwnd, &r); - w = r.right - r.left; - h = r.bottom - r.top; - - // TODO: handle minimized state - if (w < 320) w = 320; - if (h < 240) h = 240; - - if ((width == w) && (height == h)) - return 0; - - width = w; - height = h; - if (targetView) { - targetView->Release(); - targetView = NULL; - } - if (depthView) { - depthView->Release(); - depthView = NULL; - } - if (depthBuffer) { - depthBuffer->Release(); - depthBuffer = NULL; - } - - hr = swapchain->ResizeBuffers(1, width, height, DXGI_FORMAT_R8G8B8A8_UNORM, 0); - if (FAILED(hr)) - return -1; - } - - ID3D10Texture2D *buffer; - hr = swapchain->GetBuffer(0, __uuidof(ID3D10Texture2D), (LPVOID*) &buffer); - if (FAILED(hr)) printx("OOPS\n"); - hr = device->CreateRenderTargetView(buffer, NULL, &targetView); - buffer->Release(); - if (FAILED(hr)) - return -1; - - D3D10_TEXTURE2D_DESC td; - td.Width = width; - td.Height = height; - td.MipLevels = 1; - td.ArraySize = 1; -// td.Format = DXGI_FORMAT_D32_FLOAT; - td.Format = DXGI_FORMAT_D24_UNORM_S8_UINT; // NVIDIA suggested - td.SampleDesc.Count = 1; - td.SampleDesc.Quality = 0; - td.Usage = D3D10_USAGE_DEFAULT; - td.BindFlags = D3D10_BIND_DEPTH_STENCIL; - td.CPUAccessFlags = 0; - td.MiscFlags = 0; - hr = device->CreateTexture2D(&td, NULL, &depthBuffer); - if (FAILED(hr)) - return -1; - - D3D10_DEPTH_STENCIL_VIEW_DESC dsvd; - dsvd.Format = td.Format; - dsvd.ViewDimension = D3D10_DSV_DIMENSION_TEXTURE2D; - dsvd.Texture2D.MipSlice = 0; - hr = device->CreateDepthStencilView(depthBuffer, &dsvd, &depthView); - if (FAILED(hr)) - return -1; - - D3D10_VIEWPORT vp; - vp.Width = width; - vp.Height = height; - vp.MinDepth = 0.0f; - vp.MaxDepth = 1.0f; - vp.TopLeftX = 0; - vp.TopLeftY = 0; - device->RSSetViewports(1, &vp); - - device->IASetPrimitiveTopology(D3D10_PRIMITIVE_TOPOLOGY_TRIANGLELIST); - - device->OMSetRenderTargets(1, &targetView, depthView); - return 0; -} - -int App::initD3D(void) { - HRESULT hr; - RECT rc; - GetClientRect(hwnd, &rc); - - unsigned width = rc.right - rc.left; - unsigned height = rc.bottom - rc.top; - - DXGI_SWAP_CHAIN_DESC sc; - ZeroMemory(&sc, sizeof(sc)); - sc.BufferCount = 1; - sc.BufferDesc.Width = width; - sc.BufferDesc.Height = height; - sc.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - sc.BufferDesc.RefreshRate.Numerator = 60; - sc.BufferDesc.RefreshRate.Denominator = 1; - sc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; - sc.OutputWindow = hwnd; - sc.SampleDesc.Count = 1; - sc.SampleDesc.Quality = 0; - sc.Windowed = TRUE; - - hr = D3D10CreateDeviceAndSwapChain(NULL, - D3D10_DRIVER_TYPE_HARDWARE, NULL, DEVICE_DEBUG_FLAGS, - D3D10_SDK_VERSION, &sc, &swapchain, &device); - if (FAILED(hr)) - return -1; - - if (reconfigure(1)) - return -1; - - D3D10_RASTERIZER_DESC rd; - rd.FillMode = D3D10_FILL_SOLID; - rd.CullMode = D3D10_CULL_BACK; - rd.FrontCounterClockwise = true; - rd.DepthBias = 0; - rd.DepthBiasClamp = 0.0f; - rd.SlopeScaledDepthBias =0.0f; - rd.DepthClipEnable = true; - rd.ScissorEnable = false; - rd.MultisampleEnable = false; - rd.AntialiasedLineEnable = false; - hr = device->CreateRasterizerState(&rd, &rsDefault); - if (FAILED(hr)) - return -1; - - D3D10_DEPTH_STENCIL_DESC dsd; - memset(&dsd, 0, sizeof(dsd)); - dsd.DepthEnable = true; - dsd.DepthWriteMask = D3D10_DEPTH_WRITE_MASK_ALL; - dsd.DepthFunc = D3D10_COMPARISON_LESS; - dsd.StencilEnable = false; - dsd.StencilReadMask = D3D10_DEFAULT_STENCIL_READ_MASK; - dsd.StencilWriteMask = D3D10_DEFAULT_STENCIL_WRITE_MASK; - hr = device->CreateDepthStencilState(&dsd, &dsDepthEnabled); - if (FAILED(hr)) - return -1; - hr = device->CreateDepthStencilState(&dsd, &dsDepthDisabled); - if (FAILED(hr)) - return -1; - - D3D10_SAMPLER_DESC sd; - //sd.Filter = D3D10_FILTER_MIN_MAG_MIP_LINEAR; - sd.Filter = D3D10_FILTER_MIN_MAG_MIP_POINT; - sd.AddressU = D3D10_TEXTURE_ADDRESS_CLAMP; - sd.AddressV = D3D10_TEXTURE_ADDRESS_CLAMP; - sd.AddressW = D3D10_TEXTURE_ADDRESS_CLAMP; - sd.MipLODBias = 0; - sd.MaxAnisotropy = 1; - sd.ComparisonFunc = D3D10_COMPARISON_NEVER; - sd.BorderColor[0] = 1; - sd.BorderColor[1] = 1; - sd.BorderColor[2] = 1; - sd.BorderColor[3] = 1; - sd.MinLOD = -FLT_MAX; - sd.MaxLOD = FLT_MAX; - hr = device->CreateSamplerState(&sd, &defaultSamplerState); - if (FAILED(hr)) - return -1; - - D3D10_BLEND_DESC bd; - memset(&bd, 0, sizeof(bd)); - bd.SrcBlend = D3D10_BLEND_SRC_ALPHA; - bd.DestBlend = D3D10_BLEND_INV_SRC_ALPHA; - bd.BlendOp = D3D10_BLEND_OP_ADD; - bd.SrcBlendAlpha = D3D10_BLEND_ONE; - bd.DestBlendAlpha = D3D10_BLEND_ZERO; - bd.BlendOpAlpha = D3D10_BLEND_OP_ADD; - bd.BlendEnable[0] = true; - bd.RenderTargetWriteMask[0] = D3D10_COLOR_WRITE_ENABLE_ALL; - device->CreateBlendState(&bd, &bsAlpha); - - bd.SrcBlend = D3D10_BLEND_ONE; - bd.DestBlend = D3D10_BLEND_ZERO; - bd.BlendEnable[0] = false; - device->CreateBlendState(&bd, &bsOpaque); - - device->RSSetState(rsDefault); - device->PSSetSamplers(0, 1, &defaultSamplerState); - return S_OK; -} - -void App::setBlend(int enable) { - if (enable) - device->OMSetBlendState(bsAlpha, NULL, 0xffffffff); - else - device->OMSetBlendState(bsOpaque, NULL, 0xffffffff); -} - -// ---- - -static int _compile_shader(const char *fn, void *data, unsigned sz, - const char *profile, ID3D10Blob **shader) { - HRESULT hr; - ID3D10Blob *errors = NULL; - - hr = D3D10CompileShader((char*) data, sz, fn, - NULL, NULL, "main", profile, - D3D10_SHADER_ENABLE_STRICTNESS, - shader, &errors); - - if (errors) { - printx("--- error compiling '%s' ---\n", fn); - OutputDebugString((char*) errors->GetBufferPointer()); - errors->Release(); - return -1; - } - if (FAILED(hr)) - return error("cannot compile shader 0x%08x", hr); - - printx("Compiled '%s' to %d bytes\n", fn, (*shader)->GetBufferSize()); - return 0; -} - -int App::compileShader(VertexShader *_vs, const char *fn, - void *data, unsigned len, int raw, - AttribInfo *desc, unsigned dcount) { - ID3D10VertexShader *vs = NULL; - ID3D10InputLayout *layout = NULL; - ID3D10Blob *bin = NULL; - HRESULT hr; - - if (raw) { - hr = device->CreateVertexShader(data, len, &vs); - if (FAILED(hr)) - return error("failed to create shader '%s' 0x%08x", fn, hr); - hr = device->CreateInputLayout((D3D10_INPUT_ELEMENT_DESC*) desc, - dcount, data, len, &layout); - } else { - if (_compile_shader(fn, data, len, "vs_4_0", &bin)) - return -1; - hr = device->CreateVertexShader(bin->GetBufferPointer(), bin->GetBufferSize(), &vs); - if (FAILED(hr)) { - bin->Release(); - return error("failed to create shader '%s' 0x%08x", fn, hr); - } - hr = device->CreateInputLayout((D3D10_INPUT_ELEMENT_DESC*) desc, dcount, - bin->GetBufferPointer(), bin->GetBufferSize(), &layout); - bin->Release(); - } - if (FAILED(hr)) - return error("failed to bind layout for '%s' 0x%08x", fn, hr); - if (_vs->vs) - _vs->vs->Release(); - if (_vs->layout) - _vs->layout->Release(); - _vs->vs = vs; - _vs->layout = layout; - _vs->desc = (D3D10_INPUT_ELEMENT_DESC*) desc; - _vs->dcount = dcount; - return 0; -} - -int App::compileShader(PixelShader *_ps, const char *fn, - void *data, unsigned len, int raw) { - ID3D10PixelShader *ps; - HRESULT hr; - if (raw) { - hr = device->CreatePixelShader(data, len, &ps); - } else { - ID3D10Blob *bin = NULL; - if (_compile_shader(fn, data, len, "ps_4_0", &bin)) - return -1; - hr = device->CreatePixelShader(bin->GetBufferPointer(), bin->GetBufferSize(), &ps); - bin->Release(); - } - if (FAILED(hr)) - return error("failed to create shader '%s' 0x%08x", fn, hr); - if (_ps->ps) - _ps->ps->Release(); - _ps->ps = ps; - return 0; -} - -// TODO choose raw based on content or extension -int App::loadShader(VertexShader *vs, const char *fn, - AttribInfo *layout, unsigned lcount) { - void *data; - unsigned sz; - if (!(data = load_file(fn, &sz))) - return -1; - int r = compileShader(vs, fn, data, sz, 0, layout, lcount); - free(data); - return r; -} - -int App::loadShader(PixelShader *ps, const char *fn) { - void *data; - unsigned sz; - if (!(data = load_file(fn, &sz))) - return -1; - int r = compileShader(ps, fn, data, sz, 0); - free(data); - return r; -} - -int App::loadTextureRGBA(Texture2D *tex, const char *fn, int genmips) { - void *data; - unsigned dw, dh; - int r; - if (!(data = load_png_rgba(fn, &dw, &dh, 0))) - return -1; - r = createTextureRGBA(tex, data, dw, dh, genmips); - free(data); - return r; -} - -int App::createTextureRGBA(Texture2D *tex, void *data, unsigned tw, unsigned th, int genmips) { - int stride = tw * 4; - int size = stride * th; - HRESULT hr; - ID3D10Texture2D *texture; - - D3D10_TEXTURE2D_DESC txd; - txd.Width = tw; - txd.Height = th; - txd.MipLevels = genmips ? 0 : 1; - txd.ArraySize = 1; - txd.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - txd.SampleDesc.Count = 1; - txd.SampleDesc.Quality = 0; - txd.Usage = D3D10_USAGE_DEFAULT; - txd.BindFlags = D3D10_BIND_SHADER_RESOURCE; - if (genmips) - txd.BindFlags |= D3D10_BIND_RENDER_TARGET; - txd.CPUAccessFlags = 0; // no cpu access - txd.MiscFlags = genmips ? D3D10_RESOURCE_MISC_GENERATE_MIPS : 0; - - D3D10_SUBRESOURCE_DATA idata; - idata.pSysMem = data; - idata.SysMemPitch = stride; - idata.SysMemSlicePitch = size; - - hr = device->CreateTexture2D(&txd, genmips ? NULL : &idata, &texture); - if (FAILED(hr)) - return error("failed to create texture 0x%08x",hr); - - D3D10_SHADER_RESOURCE_VIEW_DESC srvd; - srvd.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - srvd.ViewDimension = D3D10_SRV_DIMENSION_TEXTURE2D; - srvd.Texture2D.MipLevels = genmips ? -1 : 1; - srvd.Texture2D.MostDetailedMip = 0; - hr = device->CreateShaderResourceView(texture, &srvd, &tex->srv); - if (FAILED(hr)) { - tex->tex->Release(); - tex->tex = NULL; - return error("failed to create shader resource view 0x%08x",hr); - } - - if (genmips) { - device->UpdateSubresource(texture, 0, NULL, data, stride, size); - device->GenerateMips(tex->srv); - } - - return 0; -} - -int App::initConfig(InputConfiguration *ic, VertexShader *vs, PixelShader *ps) { - ic->vs = vs; - ic->ps = ps; - return 0; -}; -void App::useConfig(InputConfiguration *_ic) { - int i; - ic = _ic; - ID3D10Buffer *buf[16]; - ID3D10ShaderResourceView *srv[16]; - - device->PSSetShader(ic->ps->ps); - device->VSSetShader(ic->vs->vs); - device->IASetInputLayout(ic->vs->layout); - for (i = 0; i < ic->vcount; i++) - buf[i] = ic->vbuf[i]->buf; - device->IASetVertexBuffers(0, ic->vcount, buf, ic->vstride, ic->voffset); - for (i = 0; i < ic->ucount; i++) - buf[i] = ic->ubuf[i]->buf; - device->VSSetConstantBuffers(0, ic->ucount, buf); - if (ic->tcount) { - for (i = 0; i < ic->tcount; i++) - srv[i] = ic->tex[i]->srv; - device->PSSetShaderResources(0, ic->tcount, srv); - } - if (ic->ibuf) - device->IASetIndexBuffer(ic->ibuf->buf, DXGI_FORMAT_R16_UINT, 0); -} - -void App::useBuffer(VertexBuffer *vb, int slot, UINT stride, UINT offset) { - ic->vbuf[slot] = vb; - ic->vstride[slot] = stride; - ic->voffset[slot] = offset; - if (slot >= ic->vcount) - ic->vcount = slot + 1; -} -void App::useBuffer(IndexBuffer *ib) { - ic->ibuf = ib; -} -void App::useBuffer(UniformBuffer *ub, int slot) { - ic->ubuf[slot] = ub; - if (slot >= ic->ucount) - ic->ucount = slot + 1; -} -void App::useTexture(Texture2D *tex, int slot) { - ic->tex[slot] = tex; - if (slot >= ic->tcount) - ic->tcount = slot + 1; -} - -int _create_buffer(ID3D10Device *device, D3D10_BIND_FLAG flag, - void *data, int sz, ID3D10Buffer **buf) { - HRESULT hr; - ID3D10Buffer *old = *buf; - - D3D10_BUFFER_DESC bd; - bd.Usage = D3D10_USAGE_DEFAULT; - bd.ByteWidth = sz; - bd.BindFlags = flag; - bd.CPUAccessFlags = 0; - bd.MiscFlags = 0; - - D3D10_SUBRESOURCE_DATA idata; - idata.pSysMem = data; - hr = device->CreateBuffer(&bd, data ? &idata : NULL, buf); - if (FAILED(hr)) - return error("create buffer failed 0x%08x", hr); - if (old != NULL) - old->Release(); - return 0; -} - -int App::initBuffer(VertexBuffer *vb, void *data, int sz) { - return _create_buffer(device, D3D10_BIND_VERTEX_BUFFER, data, sz, &vb->buf); -} -int App::initBuffer(IndexBuffer *ib, void *data, int sz) { - return _create_buffer(device, D3D10_BIND_INDEX_BUFFER, data, sz, &ib->buf); -} -int App::initBuffer(UniformBuffer *ub, void *data, int sz) { - return _create_buffer(device, D3D10_BIND_CONSTANT_BUFFER, data, sz, &ub->buf); -} - diff --git a/common/dxapp.h b/common/dxapp.h @@ -1,230 +0,0 @@ -/* Copyright 2013 Brian Swetland <swetland@frotz.net> - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _DX_APP_H_ -#define _DX_APP_H_ - -#include <windows.h> - -/* TODO: figure out wtf is up with dxgitype.h macro redefinitions... */ -#pragma warning ( disable : 4005 ) - -#include <d3d10.h> -#include <dinput.h> - -#ifdef _DEBUG -#define DEVICE_DEBUG_FLAGS D3D10_CREATE_DEVICE_DEBUG -#define SHADER_DEBUG_FLAGS D3D10_SHADER_DEBUG -#else -#define DEVICE_DEBUG_FLAGS 0 -#define SHADER_DEBUG_FLAGS 0 -#endif - -#define SL "hlsl" - -enum { - FMT_32x4_FLOAT = DXGI_FORMAT_R32G32B32A32_FLOAT, - FMT_32x3_FLOAT = DXGI_FORMAT_R32G32B32_FLOAT, - FMT_32x2_FLOAT = DXGI_FORMAT_R32G32_FLOAT, - FMT_32x1_FLOAT = DXGI_FORMAT_R32_FLOAT, - - FMT_8x4_SNORM = DXGI_FORMAT_R8G8B8A8_SNORM, - - FMT_8x4_UNORM = DXGI_FORMAT_R8G8B8A8_UNORM, - FMT_8x2_UNORM = DXGI_FORMAT_R8G8_UNORM, - FMT_8x1_UNORM = DXGI_FORMAT_R8_UNORM, - - FMT_8x4_UINT = DXGI_FORMAT_R8G8B8A8_UINT, - FMT_8x2_UINT = DXGI_FORMAT_R8G8_UINT, - FMT_8x1_UINT = DXGI_FORMAT_R8_UINT, -}; - -enum { - VERTEX_DATA = D3D10_INPUT_PER_VERTEX_DATA, - INSTANCE_DATA = D3D10_INPUT_PER_INSTANCE_DATA, -}; - -struct AttribInfo { - const char *name; - unsigned nidx; - unsigned format; - unsigned slot; - unsigned offset; - unsigned type; - unsigned divisor; -}; - -struct PixelShader { - ID3D10PixelShader *ps; - PixelShader() : ps(NULL) {}; - ~PixelShader() { if (ps) ps->Release(); }; -}; - -struct VertexShader { - ID3D10VertexShader *vs; - ID3D10InputLayout *layout; - D3D10_INPUT_ELEMENT_DESC *desc; - unsigned dcount; - VertexShader() : vs(NULL), layout(NULL), desc(NULL), dcount(0) {}; - ~VertexShader() { if (vs) { vs->Release(); layout->Release(); } }; -}; - -struct Texture2D { - ID3D10Texture2D *tex; - ID3D10ShaderResourceView *srv; - Texture2D() : tex(NULL), srv(NULL) {}; - ~Texture2D() { if (tex) { tex->Release(); srv->Release(); } }; -}; - -struct UniformBuffer { - ID3D10Buffer *buf; - UniformBuffer() : buf(NULL) {}; - ~UniformBuffer() { if (buf) buf->Release(); }; -}; - -struct VertexBuffer { - ID3D10Buffer *buf; - VertexBuffer() : buf(NULL) {}; - ~VertexBuffer() { if (buf) buf->Release(); }; -}; - -struct IndexBuffer { - ID3D10Buffer *buf; - IndexBuffer() : buf(NULL) {}; - ~IndexBuffer() { if (buf) buf->Release(); }; -}; - -struct InputConfiguration { - VertexShader *vs; - PixelShader *ps; - - IndexBuffer *ibuf; - VertexBuffer *vbuf[16]; - unsigned vstride[16]; - unsigned voffset[16]; - UniformBuffer *ubuf[16]; - Texture2D *tex[16]; - - int vcount; - int ucount; - int tcount; - - InputConfiguration() : vs(NULL), ps(NULL), vcount(0), ucount(0), tcount(0), ibuf(NULL) { - memset(vbuf, 0, sizeof(vbuf)); - memset(ubuf, 0, sizeof(ubuf)); - } -}; - -class App { -public: - App(); - virtual ~App(); - - virtual int init(void) = 0; - virtual void render(void) = 0; - virtual void release(void) {}; - - /* glue - do not use */ - int start(HINSTANCE hInstance, int nCmdShow); - void eventloop(void); - void stop(void); - int reconfigure(int init); - void setActive(int a) { active = a; }; - void setMouseXY(int x, int y) { mouseWX = x; mouseWY = y; }; - - // TODO: move away from D3D10_INPUT... - int compileShader(VertexShader *vs, const char *fn, - void *data, unsigned len, int raw, - AttribInfo *layout, unsigned lcount); - int compileShader(PixelShader *ps, const char *fn, - void *data, unsigned len, int raw); - int loadShader(VertexShader *vs, const char *fn, - AttribInfo *layout, unsigned lcount); - int loadShader(PixelShader *ps, const char *fn); - - int loadTextureRGBA(Texture2D *tex, const char *fn, int genmips); - int createTextureRGBA(Texture2D *tex, void *data, unsigned w, unsigned h, int genmips); - - int initConfig(InputConfiguration *ic, VertexShader *vs, PixelShader *ps); - int initBuffer(VertexBuffer *vb, void *data, int sz); - int initBuffer(IndexBuffer *ib, void *data, int sz); - int initBuffer(UniformBuffer *ub, void *data, int sz); - - void updateBuffer(VertexBuffer *vb, void *data) { - device->UpdateSubresource(vb->buf, 0, NULL, data, 0, 0); - } - void updateBuffer(IndexBuffer *ib, void *data) { - device->UpdateSubresource(ib->buf, 0, NULL, data, 0, 0); - } - void updateBuffer(UniformBuffer *ub, void *data) { - device->UpdateSubresource(ub->buf, 0, NULL, data, 0, 0); - } - - void useConfig(InputConfiguration *ic); - void useBuffer(VertexBuffer *vb, int slot, UINT stride, UINT offset); - void useBuffer(IndexBuffer *ib); - void useBuffer(UniformBuffer *ub, int slot); - void useTexture(Texture2D *tex, int slot); - void drawIndexedInstanced(unsigned numindices, unsigned numinstances) { - device->DrawIndexedInstanced(numindices, numinstances, 0, 0, 0); - } - void drawInstanced(unsigned numvertices, unsigned numinstances) { - device->DrawInstanced(numvertices, numinstances, 0, 0); - } - void drawIndexed(unsigned numindices) { - device->DrawIndexed(numindices, 0, 0); - }; - void setBlend(int enabled); -protected: - int width; - int height; - - /* mouse motion since last frame */ - int mouseDX, mouseDY, mouseDZ; - /* mouse button state */ - int mouseBTN; - /* mouse position in window coordinates */ - int mouseWX, mouseWY; - /* keys down */ - unsigned char keystate[256]; - - ID3D10Device *device; - IDXGISwapChain *swapchain; - ID3D10RenderTargetView *targetView; - ID3D10Texture2D *depthBuffer; - ID3D10DepthStencilView *depthView; - ID3D10RasterizerState *rsDefault; - ID3D10DepthStencilState *dsDepthEnabled; - ID3D10DepthStencilState *dsDepthDisabled; - ID3D10SamplerState *defaultSamplerState; - ID3D10BlendState *bsAlpha; - ID3D10BlendState *bsOpaque; -private: - InputConfiguration *ic; - LPDIRECTINPUT8 dinput; - LPDIRECTINPUTDEVICE8 dkeyboard; - LPDIRECTINPUTDEVICE8 dmouse; - int initD3D(void); - int initDirectInput(void); - HWND hwnd; - HINSTANCE hinstance; - int active; -}; - -//int compileShader(const char *fn, const char *profile, ID3D10Blob **shader); - -App *createApp(void); - -#endif diff --git a/common/glapp.cc b/common/glapp.cc @@ -20,7 +20,7 @@ #define GLUE_DEFINE_EXTENSIONS 1 #endif -#include "glapp.h" +#include "app.h" #include "util.h" #if 1 diff --git a/common/glapp.h b/common/glapp.h @@ -1,212 +0,0 @@ -/* Copyright 2013 Brian Swetland <swetland@frotz.net> - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#ifndef _GL_APP_H_ -#define _GL_APP_H_ - -#ifdef _WIN32 -#define NO_SDL_GLEXT 1 -#include <SDL.h> -#include <SDL_opengl.h> -#include "opengl.h" -#else -#define GL_GLEXT_PROTOTYPES 1 -#define NO_SDL_GLEXT 1 -#include <SDL.h> -#include <SDL_opengl.h> -#include "glcorearb.h" -#endif - -#include <math.h> - -#define SL "glsl" - -enum { - FMT_32x4_FLOAT = 1, - FMT_32x3_FLOAT = 2, - FMT_32x2_FLOAT = 3, - FMT_32x1_FLOAT = 4, - - FMT_8x4_SNORM = 5, - - FMT_8x4_UNORM = 6, - FMT_8x2_UNORM = 7, - FMT_8x1_UNORM = 8, - - FMT_8x4_UINT = 9, - FMT_8x2_UINT = 10, - FMT_8x1_UINT = 11, -}; - -enum { - VERTEX_DATA = 1, - INSTANCE_DATA = 2, -}; - -struct AttribInfo { - const char *name; - unsigned nidx; - unsigned format; - unsigned slot; - unsigned offset; - unsigned type; - unsigned divisor; -}; - - -struct GLAttrInfo { -#define KIND_ATTRIB_POINTER 0 -#define KIND_ATTRIB_IPOINTER 1 - int kind; - -/* which VBO {0...} to associate with */ - int vidx; - -/* arguments for VertexAttrib[I]Pointer() */ - int index; - int size; - int type; - int normalized; - int pointer; - int divisor; -}; - -struct PixelShader { - unsigned ps; - PixelShader() : ps(0) {}; - ~PixelShader() { if (ps) glDeleteShader(ps); }; -}; - -struct VertexShader { - unsigned vs; - GLAttrInfo *ai; - AttribInfo *info; - unsigned count; - VertexShader() : vs(0), ai(NULL), info(NULL), count(0) {}; - ~VertexShader() { if (vs) { glDeleteShader(vs); free(ai); } }; -}; - -struct Texture2D { - unsigned tex; - Texture2D() : tex(0) {}; - ~Texture2D() { if (tex) { glDeleteTextures(1, &tex); } }; -}; - -struct UniformBuffer { - unsigned buf; - unsigned sz; - UniformBuffer() : buf(0) {}; - ~UniformBuffer() { if (buf) glDeleteBuffers(1, &buf); }; -}; - -struct VertexBuffer { - unsigned buf; - unsigned sz; - VertexBuffer() : buf(0) {}; - ~VertexBuffer() { if (buf) glDeleteBuffers(1, &buf); }; -}; - -struct IndexBuffer { - unsigned buf; - unsigned sz; - IndexBuffer() : buf(0) {}; - ~IndexBuffer() { if (buf) glDeleteBuffers(1, &buf); }; -}; - -struct InputConfiguration { - PixelShader *ps; - VertexShader *vs; - unsigned vao; - unsigned pgm; - VertexBuffer *vbuf[16]; - UniformBuffer *ubuf[16]; - IndexBuffer *ibuf; - InputConfiguration() : ps(NULL), vs(NULL), vao(0), pgm(0), ibuf(NULL) { - memset(vbuf, 0, sizeof(vbuf)); memset(ubuf, 0, sizeof(ubuf)); }; - ~InputConfiguration() { if (vao) glDeleteVertexArrays(1, &vao); if (pgm) glDeleteProgram(pgm); }; -}; - -class App { -public: - App(); - virtual ~App(); - - virtual int init(void) = 0; - virtual void render(void) = 0; - virtual void release(void) {}; - - /* glue - do not use */ - int start(void); - void handleEvents(void); - - // TODO: move away from D3D10_INPUT... - int compileShader(VertexShader *vs, const char *fn, - void *data, unsigned len, int raw, - AttribInfo *layout, unsigned lcount); - int compileShader(PixelShader *ps, const char *fn, - void *data, unsigned len, int raw); - int loadShader(VertexShader *vs, const char *fn, - AttribInfo *layout, unsigned lcount); - int loadShader(PixelShader *ps, const char *fn); - - int loadTextureRGBA(Texture2D *tex, const char *fn, int genmips); - int createTextureRGBA(Texture2D *tex, void *data, unsigned w, unsigned h, int genmips); - - int initConfig(InputConfiguration *ic, VertexShader *vs, PixelShader *ps); - int initBuffer(VertexBuffer *vb, void *data, int sz); - int initBuffer(IndexBuffer *ib, void *data, int sz); - int initBuffer(UniformBuffer *ub, void *data, int sz); - - void updateBuffer(VertexBuffer *vb, void *data); - void updateBuffer(IndexBuffer *ib, void *data); - void updateBuffer(UniformBuffer *ub, void *data); - - void useConfig(InputConfiguration *ic); - void useBuffer(VertexBuffer *vb, int slot, unsigned stride, unsigned offset); - void useBuffer(IndexBuffer *ib); - void useBuffer(UniformBuffer *ub, int slot); - void useTexture(Texture2D *tex, int slot); - void drawIndexedInstanced(unsigned numindices, unsigned numinstances); - void drawInstanced(unsigned numvertices, unsigned numinstances); - void drawIndexed(unsigned numindices); - void setBlend(int enable); -protected: - int width; - int height; - - /* mouse motion since last frame */ - int mouseDX, mouseDY, mouseDZ; - /* mouse button state */ - int mouseBTN; - /* mouse position in window coordinates */ - int mouseWX, mouseWY; - /* keys down */ - unsigned char keystate[256]; - - InputConfiguration *ic; - -private: - int _vsync; - SDL_Window *win; - SDL_GLContext glcontext; -}; - -App *createApp(void); - -void printx(const char *fmt, ...); -void printmtx(float *m, const char *name); -int error(const char *fmt, ...); - -#endif diff --git a/common/textgrid.cc b/common/textgrid.cc @@ -70,21 +70,11 @@ int TextGrid::init(App *a, int w, int h) { return -1; if (a->initBuffer(&ubuf, NULL, sizeof(cb))) return -1; -#if BUILTIN - if (a->compileShader(&ps, "TextPS." SL, - (void*) codeTextPS, sizeof(codeTextPS), 1)) + if (a->loadShader(&ps, "TextPS.glsl")) return -1; - if (a->compileShader(&vs, "TextVS." SL, - (void*) codeTextVS, sizeof(codeTextVS), 1, + if (a->loadShader(&vs, "TextVS.glsl", text_layout_desc, sizeof(text_layout_desc)/sizeof(text_layout_desc[0]))) return -1; -#else - if (a->loadShader(&ps, "TextPS." SL)) - return -1; - if (a->loadShader(&vs, "TextVS." SL, - text_layout_desc, sizeof(text_layout_desc)/sizeof(text_layout_desc[0]))) - return -1; -#endif cb.proj.setOrtho(0, w, 0, h, -1, 1); cb.cw = width; diff --git a/hello/assets/SimplePS.hlsl b/hello/assets/SimplePS.hlsl @@ -1,15 +0,0 @@ - -//Texture2D Texture0; -//SamplerState samLinear; - -struct VS_OUTPUT { - float4 Position : SV_POSITION; - float2 TexCoord : TEXCOORD; - float Diffuse : DIFFUSE; -}; - -float4 main(VS_OUTPUT input) : SV_Target { -// return Texture0.Sample(samLinear, input.TexCoord); - float4 c = float4(1.0, 0.0, 0.0, 1.0); - return c * 0.25 + c * input.Diffuse; -} diff --git a/hello/assets/SimpleVS.hlsl b/hello/assets/SimpleVS.hlsl @@ -1,36 +0,0 @@ - -cbuffer cb0 { - matrix MVP; - matrix MV; -} - -struct VS_OUTPUT { - float4 Position : SV_POSITION; - float2 TexCoord : TEXCOORD; - float Diffuse : DIFFUSE; -}; - -VS_OUTPUT main( - float4 Position : POSITION, - float4 Normal : NORMAL, - float2 TexCoord : TEXCOORD, - float4 Location : LOCATION - ) { - - VS_OUTPUT output = (VS_OUTPUT) 0; - - Position.xyz += Location.xyz * float3(127,127,127); - - float3 mvPosition = mul(MV, Position).xyz; - float3 mvNormal = mul(MV, float4(Normal.xyz,0.0)).xyz; - -// float3 lightVec = normalize(float3(10,20,25) - float3(0,0,0)); - float3 lightVec = normalize(float3(10,20,25) - mvPosition); - float diffuse = max(dot(mvNormal, lightVec), 0.0); - - output.Position = mul(MVP, Position); - output.TexCoord = TexCoord; - output.Diffuse = diffuse; - - return output; -} diff --git a/hello/hello.cc b/hello/hello.cc @@ -114,9 +114,9 @@ void TestApp::build(void) { } int TestApp::init(void) { - if (loadShader(&ps, "SimplePS." SL )) + if (loadShader(&ps, "SimplePS.glsl")) return -1; - if (loadShader(&vs, "SimpleVS." SL, obj_layout, sizeof(obj_layout) / sizeof(obj_layout[0]))) + if (loadShader(&vs, "SimpleVS.glsl", obj_layout, sizeof(obj_layout) / sizeof(obj_layout[0]))) return -1; if (!(m = load_wavefront_obj("unitcubeoid.obj"))) @@ -178,8 +178,8 @@ void TestApp::render(void) { if (keystate[DIK_W]) { ny -= 0.01; update = 1; } if (keystate[DIK_S]) { ny += 0.01; update = 1; } if (keystate[DIK_P]) { - loadShader(&ps, "SimplePS."SL); - loadShader(&vs, "SimpleVS."SL, obj_layout, + loadShader(&ps, "SimplePS.glsl"); + loadShader(&vs, "SimpleVS.glsl", obj_layout, sizeof(obj_layout) / sizeof(obj_layout[0])); } oops: diff --git a/test/assets/TestPS.hlsl b/test/assets/TestPS.hlsl @@ -1,15 +0,0 @@ - -//Texture2D Texture0; -//SamplerState samLinear; - -struct VS_OUTPUT { - float4 Position : SV_POSITION; - float2 TexCoord : TEXCOORD; - float Diffuse : DIFFUSE; -}; - -float4 main(VS_OUTPUT input) : SV_Target { -// return Texture0.Sample(samLinear, input.TexCoord); - float4 c = float4(1.0, 0.0, 0.0, 1.0); - return c * 0.25 + c * input.Diffuse; -} diff --git a/test/assets/TestVS.hlsl b/test/assets/TestVS.hlsl @@ -1,33 +0,0 @@ - -cbuffer cb0 { - matrix MVP; - matrix MV; -} - -struct VS_OUTPUT { - float4 Position : SV_POSITION; - float2 TexCoord : TEXCOORD; - float Diffuse : DIFFUSE; -}; - -VS_OUTPUT main( - float4 Position : POSITION, - float4 Normal : NORMAL, - float2 TexCoord : TEXCOORD - ) { - - VS_OUTPUT output = (VS_OUTPUT) 0; - - float3 mvPosition = mul(MV, Position).xyz; - float3 mvNormal = mul(MV, float4(Normal.xyz,0.0)).xyz; - -// float3 lightVec = normalize(float3(10,20,25) - float3(0,0,0)); - float3 lightVec = normalize(float3(10,20,25) - mvPosition); - float diffuse = max(dot(mvNormal, lightVec), 0.0); - - output.Position = mul(MVP, Position); - output.TexCoord = TexCoord; - output.Diffuse = diffuse; - - return output; -} diff --git a/test/test.cc b/test/test.cc @@ -53,8 +53,8 @@ private: int vs_mtime; }; -static const char *psfn = "TestPS." SL; -static const char *vsfn = "TestVS." SL; +static const char *psfn = "TestPS.glsl"; +static const char *vsfn = "TestVS.glsl"; TestApp::TestApp() : App(), r(0.0) { }