diff --git a/src/Graphics_D3D11.c b/src/Graphics_D3D11.c index 0eb7effdb..6a709726c 100644 --- a/src/Graphics_D3D11.c +++ b/src/Graphics_D3D11.c @@ -16,8 +16,8 @@ #pragma comment(lib, "d3d11.lib") #pragma comment(lib, "dxguid.lib") -static int gfx_stride, gfx_format = -1; -static int depthBits; +static int gfx_format = -1, depthBits; +static UINT gfx_stride; static ID3D11Device* device; static ID3D11DeviceContext* context; static IDXGIDevice1* dxgi_device; @@ -33,6 +33,7 @@ static void VS_Init(void); static void VS_UpdateShader(void); static void RS_Init(void); static void PS_Init(void); +static void PS_UpdateShader(void); static void OM_Init(void); static void OM_Free(void); @@ -252,36 +253,31 @@ void Gfx_UnlockVb(GfxResourceID vb) { tmp = NULL; } -cc_bool render; void Gfx_SetVertexFormat(VertexFormat fmt) { if (fmt == gfx_format) return; gfx_format = fmt; gfx_stride = strideSizes[fmt]; - render = fmt == VERTEX_FORMAT_TEXTURED; IA_UpdateLayout(); VS_UpdateShader(); + PS_UpdateShader(); } void Gfx_DrawVb_Lines(int verticesCount) { - if (!render) return; ID3D11DeviceContext_IASetPrimitiveTopology(context, D3D11_PRIMITIVE_TOPOLOGY_LINELIST); ID3D11DeviceContext_Draw(context, verticesCount, 0); ID3D11DeviceContext_IASetPrimitiveTopology(context, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST); } void Gfx_DrawVb_IndexedTris(int verticesCount) { - if (!render) return; ID3D11DeviceContext_DrawIndexed(context, ICOUNT(verticesCount), 0, 0); } void Gfx_DrawVb_IndexedTris_Range(int verticesCount, int startVertex) { - if (!render) return; ID3D11DeviceContext_DrawIndexed(context, ICOUNT(verticesCount), 0, startVertex); } void Gfx_DrawIndexedTris_T2fC4b(int verticesCount, int startVertex) { - if (!render) return; ID3D11DeviceContext_DrawIndexed(context, ICOUNT(verticesCount), 0, startVertex); } @@ -353,9 +349,8 @@ void Gfx_BindIb(GfxResourceID ib) { void Gfx_BindVb(GfxResourceID vb) { ID3D11Buffer* buffer = (ID3D11Buffer*)vb; - static UINT32 stride[] = { SIZEOF_VERTEX_TEXTURED }; static UINT32 offset[] = { 0 }; - ID3D11DeviceContext_IASetVertexBuffers(context, 0, 1, &buffer, stride, offset); + ID3D11DeviceContext_IASetVertexBuffers(context, 0, 1, &buffer, &gfx_stride, offset); } static void IA_CreateLayouts(void) { @@ -403,7 +398,7 @@ static const struct ShaderDesc vs_descs[3] = { }; static void VS_CreateShaders(void) { - for (int i = 0; i < 3; i++) { + for (int i = 0; i < Array_Elems(vs_shaders); i++) { HRESULT hr = ID3D11Device_CreateVertexShader(device, vs_descs[i].data, vs_descs[i].len, NULL, &vs_shaders[i]); if (hr) Logger_Abort2(hr, "Failed to compile vertex shader"); } @@ -520,11 +515,23 @@ static void RS_Init(void) { //######################################################################################################################## // https://docs.microsoft.com/en-us/windows/win32/direct3d11/pixel-shader-stage static ID3D11SamplerState* ps_sampler; +static ID3D11PixelShader* ps_shaders[2]; + +static const struct ShaderDesc ps_descs[2] = { + { ps_shader_colored, sizeof(ps_shader_colored) }, + { ps_shader_textured, sizeof(ps_shader_textured) }, +}; static void PS_CreateShaders(void) { - ID3D11PixelShader* ps; - HRESULT hr = ID3D11Device_CreatePixelShader(device, ps_shader, sizeof(ps_shader), NULL, &ps); - ID3D11DeviceContext_PSSetShader(context, ps, NULL, 0); + for (int i = 0; i < Array_Elems(ps_shaders); i++) { + HRESULT hr = ID3D11Device_CreatePixelShader(device, ps_descs[i].data, ps_descs[i].len, NULL, &ps_shaders[i]); + if (hr) Logger_Abort2(hr, "Failed to compile pixel shader"); + } +} + +static void PS_UpdateShader(void) { + int idx = gfx_format == VERTEX_FORMAT_COLOURED ? 0 : 1; + ID3D11DeviceContext_PSSetShader(context, ps_shaders[idx], NULL, 0); } static void PS_CreateSamplers(void) { @@ -552,6 +559,7 @@ static void PS_Init(void) { PS_CreateShaders(); PS_CreateSamplers(); PS_UpdateSampler(); + PS_UpdateShader(); } void Gfx_BindTexture(GfxResourceID texId) { @@ -609,7 +617,7 @@ static void OM_CreateDepthStates(void) { HRESULT hr; desc.DepthFunc = D3D11_COMPARISON_LESS_EQUAL; - for (int i = 0; i < 4; i++) { + for (int i = 0; i < Array_Elems(om_depthStates); i++) { desc.DepthEnable = (i & 1) != 0; desc.DepthWriteMask = (i & 2) != 0; @@ -634,7 +642,7 @@ static void OM_CreateBlendStates(void) { desc.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA; desc.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_INV_SRC_ALPHA; - for (int i = 0; i < 4; i++) { + for (int i = 0; i < Array_Elems(om_blendStates); i++) { desc.RenderTarget[0].RenderTargetWriteMask = (i & 1) ? D3D11_COLOR_WRITE_ENABLE_ALL : 0; desc.RenderTarget[0].BlendEnable = (i & 2) != 0; diff --git a/src/_D3D11Shaders.h b/src/_D3D11Shaders.h index 30afe49f8..398f3ab11 100644 --- a/src/_D3D11Shaders.h +++ b/src/_D3D11Shaders.h @@ -147,68 +147,70 @@ static unsigned char vs_shader_textured_offset[1216] = { }; /* Pixel shader source: +#ifndef PS_COLOR_ONLY Texture2D texValue; SamplerState texState; +#endif struct INPUT_VERTEX { -float2 coords : TEXCOORD0; -float4 color : COLOR0; +#ifndef PS_COLOR_ONLY + float2 coords : TEXCOORD0; +#endif + float4 color : COLOR0; }; //float4 main(float2 coords : TEXCOORD0, float4 color : COLOR0) : SV_TARGET { float4 main(INPUT_VERTEX input) : SV_TARGET { -float4 texColor = texValue.Sample(texState, input.coords); -return texColor * input.color; +#ifdef PS_COLOR_ONLY + return input.color; +#else + float4 texColor = texValue.Sample(texState, input.coords); + return texColor * input.color; +#endif } */ -static unsigned char ps_shader[772] = { - 0x44,0x58,0x42,0x43,0x4f,0xd6,0x95,0x7f,0x72,0x9d,0xf8,0x21,0xb4,0x91,0x75,0x55, - 0x78,0x36,0xf0,0x26,0x01,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x06,0x00,0x00,0x00, - 0x38,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0xd8,0x01,0x00,0x00, - 0x80,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x41,0x6f,0x6e,0x39,0x80,0x00,0x00,0x00, - 0x80,0x00,0x00,0x00,0x00,0x02,0xff,0xff,0x58,0x00,0x00,0x00,0x28,0x00,0x00,0x00, - 0x00,0x00,0x28,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x28,0x00,0x01,0x00,0x24,0x00, - 0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0xff,0x1f,0x00,0x00,0x02, - 0x00,0x00,0x00,0x80,0x00,0x00,0x03,0xb0,0x1f,0x00,0x00,0x02,0x00,0x00,0x00,0x80, - 0x01,0x00,0x0f,0xb0,0x1f,0x00,0x00,0x02,0x00,0x00,0x00,0x90,0x00,0x08,0x0f,0xa0, - 0x42,0x00,0x00,0x03,0x00,0x00,0x0f,0x80,0x00,0x00,0xe4,0xb0,0x00,0x08,0xe4,0xa0, - 0x05,0x00,0x00,0x03,0x00,0x00,0x0f,0x80,0x00,0x00,0xe4,0x80,0x01,0x00,0xe4,0xb0, - 0x01,0x00,0x00,0x02,0x00,0x08,0x0f,0x80,0x00,0x00,0xe4,0x80,0xff,0xff,0x00,0x00, - 0x53,0x48,0x44,0x52,0x94,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x25,0x00,0x00,0x00, - 0x5a,0x00,0x00,0x03,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x00,0x58,0x18,0x00,0x04, - 0x00,0x70,0x10,0x00,0x00,0x00,0x00,0x00,0x55,0x55,0x00,0x00,0x62,0x10,0x00,0x03, - 0x32,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x62,0x10,0x00,0x03,0xf2,0x10,0x10,0x00, - 0x01,0x00,0x00,0x00,0x65,0x00,0x00,0x03,0xf2,0x20,0x10,0x00,0x00,0x00,0x00,0x00, - 0x68,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x45,0x00,0x00,0x09,0xf2,0x00,0x10,0x00, - 0x00,0x00,0x00,0x00,0x46,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x46,0x7e,0x10,0x00, - 0x00,0x00,0x00,0x00,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x07, - 0xf2,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x46,0x0e,0x10,0x00,0x00,0x00,0x00,0x00, - 0x46,0x1e,0x10,0x00,0x01,0x00,0x00,0x00,0x3e,0x00,0x00,0x01,0x53,0x54,0x41,0x54, - 0x74,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x44,0x45,0x46,0xa0,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, - 0x00,0x04,0xff,0xff,0x00,0x09,0x00,0x00,0x6e,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, - 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x65,0x00,0x00,0x00, - 0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xff,0xff,0xff,0xff, - 0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x74,0x65,0x78,0x53, - 0x74,0x61,0x74,0x65,0x00,0x74,0x65,0x78,0x56,0x61,0x6c,0x75,0x65,0x00,0x4d,0x69, - 0x63,0x72,0x6f,0x73,0x6f,0x66,0x74,0x20,0x28,0x52,0x29,0x20,0x48,0x4c,0x53,0x4c, - 0x20,0x53,0x68,0x61,0x64,0x65,0x72,0x20,0x43,0x6f,0x6d,0x70,0x69,0x6c,0x65,0x72, - 0x20,0x31,0x30,0x2e,0x30,0x2e,0x31,0x30,0x30,0x31,0x31,0x2e,0x30,0x00,0xab,0xab, - 0x49,0x53,0x47,0x4e,0x48,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x08,0x00,0x00,0x00, - 0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x0f,0x00,0x00, - 0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44,0x00,0x43,0x4f,0x4c,0x4f,0x52,0x00,0xab, - 0x4f,0x53,0x47,0x4e,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, - 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, - 0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x53,0x56,0x5f,0x54,0x41,0x52,0x47,0x45, +static unsigned char ps_shader_colored[504] = { + 0x44,0x58,0x42,0x43,0xc9,0x56,0x8b,0xec,0xe9,0x21,0x27,0x5d,0x39,0x6a,0xd3,0xca,0x71,0xbb,0x94,0x0f,0x01,0x00,0x00,0x00,0xf8,0x01,0x00,0x00,0x06,0x00,0x00,0x00, + 0x38,0x00,0x00,0x00,0x84,0x00,0x00,0x00,0xc4,0x00,0x00,0x00,0x40,0x01,0x00,0x00,0x94,0x01,0x00,0x00,0xc4,0x01,0x00,0x00,0x41,0x6f,0x6e,0x39,0x44,0x00,0x00,0x00, + 0x44,0x00,0x00,0x00,0x00,0x02,0xff,0xff,0x20,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x24,0x00, + 0x00,0x00,0x24,0x00,0x00,0x02,0xff,0xff,0x1f,0x00,0x00,0x02,0x00,0x00,0x00,0x80,0x00,0x00,0x0f,0xb0,0x01,0x00,0x00,0x02,0x00,0x08,0x0f,0x80,0x00,0x00,0xe4,0xb0, + 0xff,0xff,0x00,0x00,0x53,0x48,0x44,0x52,0x38,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x62,0x10,0x00,0x03,0xf2,0x10,0x10,0x00,0x00,0x00,0x00,0x00, + 0x65,0x00,0x00,0x03,0xf2,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x05,0xf2,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x46,0x1e,0x10,0x00,0x00,0x00,0x00,0x00, + 0x3e,0x00,0x00,0x01,0x53,0x54,0x41,0x54,0x74,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x52,0x44,0x45,0x46,0x4c,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x04,0xff,0xff,0x00,0x09,0x00,0x00, + 0x1c,0x00,0x00,0x00,0x4d,0x69,0x63,0x72,0x6f,0x73,0x6f,0x66,0x74,0x20,0x28,0x52,0x29,0x20,0x48,0x4c,0x53,0x4c,0x20,0x53,0x68,0x61,0x64,0x65,0x72,0x20,0x43,0x6f, + 0x6d,0x70,0x69,0x6c,0x65,0x72,0x20,0x31,0x30,0x2e,0x30,0x2e,0x31,0x30,0x30,0x31,0x31,0x2e,0x30,0x00,0x49,0x53,0x47,0x4e,0x28,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x0f,0x00,0x00,0x43,0x4f,0x4c,0x4f, + 0x52,0x00,0xab,0xab,0x4f,0x53,0x47,0x4e,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x53,0x56,0x5f,0x54,0x41,0x52,0x47,0x45,0x54,0x00,0xab,0xab, +}; +static unsigned char ps_shader_textured[772] = { + 0x44,0x58,0x42,0x43,0x4f,0xd6,0x95,0x7f,0x72,0x9d,0xf8,0x21,0xb4,0x91,0x75,0x55,0x78,0x36,0xf0,0x26,0x01,0x00,0x00,0x00,0x04,0x03,0x00,0x00,0x06,0x00,0x00,0x00, + 0x38,0x00,0x00,0x00,0xc0,0x00,0x00,0x00,0x5c,0x01,0x00,0x00,0xd8,0x01,0x00,0x00,0x80,0x02,0x00,0x00,0xd0,0x02,0x00,0x00,0x41,0x6f,0x6e,0x39,0x80,0x00,0x00,0x00, + 0x80,0x00,0x00,0x00,0x00,0x02,0xff,0xff,0x58,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x28,0x00,0x00,0x00,0x28,0x00,0x01,0x00,0x24,0x00, + 0x00,0x00,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0xff,0xff,0x1f,0x00,0x00,0x02,0x00,0x00,0x00,0x80,0x00,0x00,0x03,0xb0,0x1f,0x00,0x00,0x02,0x00,0x00,0x00,0x80, + 0x01,0x00,0x0f,0xb0,0x1f,0x00,0x00,0x02,0x00,0x00,0x00,0x90,0x00,0x08,0x0f,0xa0,0x42,0x00,0x00,0x03,0x00,0x00,0x0f,0x80,0x00,0x00,0xe4,0xb0,0x00,0x08,0xe4,0xa0, + 0x05,0x00,0x00,0x03,0x00,0x00,0x0f,0x80,0x00,0x00,0xe4,0x80,0x01,0x00,0xe4,0xb0,0x01,0x00,0x00,0x02,0x00,0x08,0x0f,0x80,0x00,0x00,0xe4,0x80,0xff,0xff,0x00,0x00, + 0x53,0x48,0x44,0x52,0x94,0x00,0x00,0x00,0x40,0x00,0x00,0x00,0x25,0x00,0x00,0x00,0x5a,0x00,0x00,0x03,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x00,0x58,0x18,0x00,0x04, + 0x00,0x70,0x10,0x00,0x00,0x00,0x00,0x00,0x55,0x55,0x00,0x00,0x62,0x10,0x00,0x03,0x32,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x62,0x10,0x00,0x03,0xf2,0x10,0x10,0x00, + 0x01,0x00,0x00,0x00,0x65,0x00,0x00,0x03,0xf2,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x68,0x00,0x00,0x02,0x01,0x00,0x00,0x00,0x45,0x00,0x00,0x09,0xf2,0x00,0x10,0x00, + 0x00,0x00,0x00,0x00,0x46,0x10,0x10,0x00,0x00,0x00,0x00,0x00,0x46,0x7e,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x60,0x10,0x00,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x07, + 0xf2,0x20,0x10,0x00,0x00,0x00,0x00,0x00,0x46,0x0e,0x10,0x00,0x00,0x00,0x00,0x00,0x46,0x1e,0x10,0x00,0x01,0x00,0x00,0x00,0x3e,0x00,0x00,0x01,0x53,0x54,0x41,0x54, + 0x74,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x52,0x44,0x45,0x46,0xa0,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x1c,0x00,0x00,0x00,0x00,0x04,0xff,0xff,0x00,0x09,0x00,0x00,0x6e,0x00,0x00,0x00,0x5c,0x00,0x00,0x00, + 0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x65,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x74,0x65,0x78,0x53, + 0x74,0x61,0x74,0x65,0x00,0x74,0x65,0x78,0x56,0x61,0x6c,0x75,0x65,0x00,0x4d,0x69,0x63,0x72,0x6f,0x73,0x6f,0x66,0x74,0x20,0x28,0x52,0x29,0x20,0x48,0x4c,0x53,0x4c, + 0x20,0x53,0x68,0x61,0x64,0x65,0x72,0x20,0x43,0x6f,0x6d,0x70,0x69,0x6c,0x65,0x72,0x20,0x31,0x30,0x2e,0x30,0x2e,0x31,0x30,0x30,0x31,0x31,0x2e,0x30,0x00,0xab,0xab, + 0x49,0x53,0x47,0x4e,0x48,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00, + 0x00,0x00,0x00,0x00,0x03,0x03,0x00,0x00,0x41,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x0f,0x0f,0x00,0x00, + 0x54,0x45,0x58,0x43,0x4f,0x4f,0x52,0x44,0x00,0x43,0x4f,0x4c,0x4f,0x52,0x00,0xab,0x4f,0x53,0x47,0x4e,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x08,0x00,0x00,0x00, + 0x20,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x53,0x56,0x5f,0x54,0x41,0x52,0x47,0x45, 0x54,0x00,0xab,0xab, -}; \ No newline at end of file +};