Added shaders for UI and fixed UI renderer

This commit is contained in:
Antoine Pilote
2024-09-10 19:18:29 -04:00
parent 1949946cdd
commit 2c48590a4a
9 changed files with 799 additions and 105 deletions

View File

@@ -45,6 +45,8 @@ namespace Nuake
LoadEmbeddedShader(Resources_Shaders_debugLine_shader);
LoadEmbeddedShader(Resources_Shaders_add_shader);
LoadEmbeddedShader(Resources_Shaders_display_depth_shader);
LoadEmbeddedShader(Resources_Shaders_ui_panel_shader);
LoadEmbeddedShader(Resources_Shaders_ui_text_shader);
}
Shader* ShaderManager::GetShader(const std::string& path)

View File

@@ -274912,6 +274912,499 @@ namespace Nuake {
};
unsigned int Resources_Shaders_ui_shader_len = sizeof(Resources_Shaders_ui_shader);
// Data for file: Resources_Shaders_ui_panel_shader_path
const std::string Resources_Shaders_ui_panel_shader_path = R"(Resources/Shaders/ui_panel.shader)";
unsigned char Resources_Shaders_ui_panel_shader[] = {
0x23, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x74,
0x65, 0x78, 0x0D, 0x0A, 0x23, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E,
0x20, 0x34, 0x36, 0x30, 0x20, 0x63, 0x6F, 0x72, 0x65, 0x0D, 0x0A, 0x0D,
0x0A, 0x6C, 0x61, 0x79, 0x6F, 0x75, 0x74, 0x28, 0x6C, 0x6F, 0x63, 0x61,
0x74, 0x69, 0x6F, 0x6E, 0x20, 0x3D, 0x20, 0x30, 0x29, 0x20, 0x69, 0x6E,
0x20, 0x76, 0x65, 0x63, 0x33, 0x20, 0x50, 0x6F, 0x73, 0x69, 0x74, 0x69,
0x6F, 0x6E, 0x3B, 0x0D, 0x0A, 0x6C, 0x61, 0x79, 0x6F, 0x75, 0x74, 0x28,
0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x3D, 0x20, 0x31,
0x29, 0x20, 0x69, 0x6E, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x55, 0x56,
0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D,
0x20, 0x6D, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5F, 0x4D, 0x6F, 0x64, 0x65,
0x6C, 0x3B, 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20,
0x6D, 0x61, 0x74, 0x34, 0x20, 0x75, 0x5F, 0x56, 0x69, 0x65, 0x77, 0x3B,
0x0D, 0x0A, 0x0D, 0x0A, 0x6F, 0x75, 0x74, 0x20, 0x76, 0x65, 0x63, 0x32,
0x20, 0x76, 0x5F, 0x55, 0x56, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x76, 0x6F,
0x69, 0x64, 0x20, 0x6D, 0x61, 0x69, 0x6E, 0x28, 0x29, 0x20, 0x7B, 0x0D,
0x0A, 0x09, 0x76, 0x5F, 0x55, 0x56, 0x20, 0x3D, 0x20, 0x55, 0x56, 0x3B,
0x0D, 0x0A, 0x09, 0x67, 0x6C, 0x5F, 0x50, 0x6F, 0x73, 0x69, 0x74, 0x69,
0x6F, 0x6E, 0x20, 0x3D, 0x20, 0x75, 0x5F, 0x56, 0x69, 0x65, 0x77, 0x20,
0x2A, 0x20, 0x75, 0x5F, 0x4D, 0x6F, 0x64, 0x65, 0x6C, 0x20, 0x2A, 0x20,
0x76, 0x65, 0x63, 0x34, 0x28, 0x50, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F,
0x6E, 0x2C, 0x20, 0x31, 0x2E, 0x30, 0x66, 0x29, 0x3B, 0x0D, 0x0A, 0x7D,
0x0D, 0x0A, 0x0D, 0x0A, 0x23, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20,
0x66, 0x72, 0x61, 0x67, 0x6D, 0x65, 0x6E, 0x74, 0x0D, 0x0A, 0x23, 0x76,
0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x34, 0x36, 0x30, 0x20, 0x63,
0x6F, 0x72, 0x65, 0x0D, 0x0A, 0x0D, 0x0A, 0x69, 0x6E, 0x20, 0x76, 0x65,
0x63, 0x32, 0x20, 0x76, 0x5F, 0x55, 0x56, 0x3B, 0x0D, 0x0A, 0x6F, 0x75,
0x74, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x46, 0x72, 0x61, 0x67, 0x43,
0x6F, 0x6C, 0x6F, 0x72, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x75, 0x6E, 0x69,
0x66, 0x6F, 0x72, 0x6D, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x5F,
0x53, 0x69, 0x7A, 0x65, 0x3B, 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F,
0x72, 0x6D, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5F, 0x43, 0x6F,
0x6C, 0x6F, 0x72, 0x3B, 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72,
0x6D, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5F, 0x42, 0x6F, 0x72,
0x64, 0x65, 0x72, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x3B, 0x0D, 0x0A, 0x75,
0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74,
0x20, 0x75, 0x5F, 0x42, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x3B, 0x0D, 0x0A,
0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x66, 0x6C, 0x6F, 0x61,
0x74, 0x20, 0x75, 0x5F, 0x42, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x52, 0x61,
0x64, 0x69, 0x75, 0x73, 0x3B, 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F,
0x72, 0x6D, 0x20, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x72, 0x32, 0x44,
0x20, 0x75, 0x5F, 0x42, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E,
0x64, 0x49, 0x6D, 0x61, 0x67, 0x65, 0x3B, 0x0D, 0x0A, 0x75, 0x6E, 0x69,
0x66, 0x6F, 0x72, 0x6D, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x75,
0x5F, 0x48, 0x61, 0x73, 0x42, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75,
0x6E, 0x64, 0x49, 0x6D, 0x61, 0x67, 0x65, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A,
0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x53, 0x68, 0x6F, 0x75, 0x6C, 0x64,
0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x28, 0x76, 0x65, 0x63, 0x32,
0x20, 0x63, 0x6F, 0x6F, 0x72, 0x64, 0x73, 0x2C, 0x20, 0x66, 0x6C, 0x6F,
0x61, 0x74, 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2C, 0x20, 0x76,
0x65, 0x63, 0x32, 0x20, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F,
0x6E, 0x73, 0x2C, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x72, 0x61,
0x64, 0x69, 0x75, 0x73, 0x29, 0x0D, 0x0A, 0x7B, 0x0D, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x63, 0x69, 0x72, 0x63, 0x6C,
0x65, 0x5F, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x20, 0x3D, 0x20, 0x76,
0x65, 0x63, 0x32, 0x28, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x20, 0x2B,
0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x2C, 0x20, 0x72, 0x61, 0x64,
0x69, 0x75, 0x73, 0x20, 0x2B, 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72,
0x29, 0x20, 0x2D, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x30, 0x2E, 0x35,
0x2C, 0x20, 0x30, 0x2E, 0x35, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x64, 0x73, 0x74, 0x20, 0x3D,
0x20, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x28, 0x63, 0x6F, 0x6F, 0x72,
0x64, 0x73, 0x20, 0x2D, 0x20, 0x63, 0x69, 0x72, 0x63, 0x6C, 0x65, 0x5F,
0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x64, 0x65, 0x6C, 0x74,
0x61, 0x20, 0x3D, 0x20, 0x66, 0x77, 0x69, 0x64, 0x74, 0x68, 0x28, 0x64,
0x73, 0x74, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
0x20, 0x28, 0x63, 0x6F, 0x6F, 0x72, 0x64, 0x73, 0x2E, 0x78, 0x20, 0x3C,
0x20, 0x63, 0x69, 0x72, 0x63, 0x6C, 0x65, 0x5F, 0x63, 0x65, 0x6E, 0x74,
0x65, 0x72, 0x2E, 0x78, 0x20, 0x26, 0x26, 0x20, 0x63, 0x6F, 0x6F, 0x72,
0x64, 0x73, 0x2E, 0x79, 0x20, 0x3C, 0x20, 0x63, 0x69, 0x72, 0x63, 0x6C,
0x65, 0x5F, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x2E, 0x79, 0x29, 0x20,
0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
0x74, 0x75, 0x72, 0x6E, 0x20, 0x31, 0x2E, 0x30, 0x20, 0x2D, 0x20, 0x73,
0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x73, 0x74, 0x65, 0x70, 0x28, 0x72, 0x61,
0x64, 0x69, 0x75, 0x73, 0x20, 0x2D, 0x20, 0x64, 0x65, 0x6C, 0x74, 0x61,
0x2C, 0x20, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x2C, 0x20, 0x64, 0x73,
0x74, 0x29, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x63,
0x69, 0x72, 0x63, 0x6C, 0x65, 0x5F, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72,
0x2E, 0x78, 0x20, 0x2B, 0x3D, 0x20, 0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73,
0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x78, 0x20, 0x2D, 0x20, 0x32, 0x20, 0x2A,
0x20, 0x28, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x20, 0x2B, 0x20, 0x62,
0x6F, 0x72, 0x64, 0x65, 0x72, 0x29, 0x20, 0x2B, 0x20, 0x31, 0x2E, 0x66,
0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x20, 0x3D,
0x20, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x28, 0x63, 0x6F, 0x6F, 0x72,
0x64, 0x73, 0x20, 0x2D, 0x20, 0x63, 0x69, 0x72, 0x63, 0x6C, 0x65, 0x5F,
0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x64, 0x65, 0x6C, 0x74, 0x61, 0x20, 0x3D, 0x20, 0x66, 0x77,
0x69, 0x64, 0x74, 0x68, 0x28, 0x64, 0x73, 0x74, 0x29, 0x3B, 0x0D, 0x0A,
0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6F, 0x6F, 0x72,
0x64, 0x73, 0x2E, 0x78, 0x20, 0x3E, 0x20, 0x63, 0x69, 0x72, 0x63, 0x6C,
0x65, 0x5F, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x2E, 0x78, 0x20, 0x26,
0x26, 0x20, 0x63, 0x6F, 0x6F, 0x72, 0x64, 0x73, 0x2E, 0x79, 0x20, 0x3C,
0x20, 0x63, 0x69, 0x72, 0x63, 0x6C, 0x65, 0x5F, 0x63, 0x65, 0x6E, 0x74,
0x65, 0x72, 0x2E, 0x79, 0x29, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x31,
0x2E, 0x30, 0x20, 0x2D, 0x20, 0x73, 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x73,
0x74, 0x65, 0x70, 0x28, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x20, 0x2D,
0x20, 0x64, 0x65, 0x6C, 0x74, 0x61, 0x2C, 0x20, 0x72, 0x61, 0x64, 0x69,
0x75, 0x73, 0x2C, 0x20, 0x64, 0x73, 0x74, 0x29, 0x3B, 0x0D, 0x0A, 0x0D,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x63, 0x69, 0x72, 0x63, 0x6C, 0x65, 0x5F,
0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x2E, 0x79, 0x20, 0x2B, 0x3D, 0x20,
0x64, 0x69, 0x6D, 0x65, 0x6E, 0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x79,
0x20, 0x2D, 0x20, 0x32, 0x20, 0x2A, 0x20, 0x28, 0x72, 0x61, 0x64, 0x69,
0x75, 0x73, 0x20, 0x2B, 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x29,
0x20, 0x2B, 0x20, 0x31, 0x2E, 0x66, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x64, 0x73, 0x74, 0x20, 0x3D, 0x20, 0x6C, 0x65, 0x6E, 0x67, 0x74,
0x68, 0x28, 0x63, 0x6F, 0x6F, 0x72, 0x64, 0x73, 0x20, 0x2D, 0x20, 0x63,
0x69, 0x72, 0x63, 0x6C, 0x65, 0x5F, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72,
0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x64, 0x65, 0x6C, 0x74,
0x61, 0x20, 0x3D, 0x20, 0x66, 0x77, 0x69, 0x64, 0x74, 0x68, 0x28, 0x64,
0x73, 0x74, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66,
0x20, 0x28, 0x63, 0x6F, 0x6F, 0x72, 0x64, 0x73, 0x2E, 0x78, 0x20, 0x3E,
0x20, 0x63, 0x69, 0x72, 0x63, 0x6C, 0x65, 0x5F, 0x63, 0x65, 0x6E, 0x74,
0x65, 0x72, 0x2E, 0x78, 0x20, 0x26, 0x26, 0x20, 0x63, 0x6F, 0x6F, 0x72,
0x64, 0x73, 0x2E, 0x79, 0x20, 0x3E, 0x20, 0x63, 0x69, 0x72, 0x63, 0x6C,
0x65, 0x5F, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x2E, 0x79, 0x29, 0x20,
0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
0x74, 0x75, 0x72, 0x6E, 0x20, 0x31, 0x2E, 0x30, 0x20, 0x2D, 0x20, 0x73,
0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x73, 0x74, 0x65, 0x70, 0x28, 0x72, 0x61,
0x64, 0x69, 0x75, 0x73, 0x20, 0x2D, 0x20, 0x64, 0x65, 0x6C, 0x74, 0x61,
0x2C, 0x20, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x2C, 0x20, 0x64, 0x73,
0x74, 0x29, 0x3B, 0x20, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x63, 0x69, 0x72, 0x63, 0x6C, 0x65, 0x5F, 0x63, 0x65, 0x6E, 0x74, 0x65,
0x72, 0x2E, 0x78, 0x20, 0x2D, 0x3D, 0x20, 0x64, 0x69, 0x6D, 0x65, 0x6E,
0x73, 0x69, 0x6F, 0x6E, 0x73, 0x2E, 0x78, 0x20, 0x2D, 0x20, 0x32, 0x20,
0x2A, 0x20, 0x28, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x20, 0x2B, 0x20,
0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x29, 0x20, 0x2B, 0x20, 0x31, 0x2E,
0x66, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x64, 0x73, 0x74, 0x20,
0x3D, 0x20, 0x6C, 0x65, 0x6E, 0x67, 0x74, 0x68, 0x28, 0x63, 0x6F, 0x6F,
0x72, 0x64, 0x73, 0x20, 0x2D, 0x20, 0x63, 0x69, 0x72, 0x63, 0x6C, 0x65,
0x5F, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x29, 0x3B, 0x0D, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x64, 0x65, 0x6C, 0x74, 0x61, 0x20, 0x3D, 0x20, 0x66,
0x77, 0x69, 0x64, 0x74, 0x68, 0x28, 0x64, 0x73, 0x74, 0x29, 0x3B, 0x0D,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x20, 0x28, 0x63, 0x6F, 0x6F,
0x72, 0x64, 0x73, 0x2E, 0x78, 0x20, 0x3C, 0x20, 0x63, 0x69, 0x72, 0x63,
0x6C, 0x65, 0x5F, 0x63, 0x65, 0x6E, 0x74, 0x65, 0x72, 0x2E, 0x78, 0x20,
0x26, 0x26, 0x20, 0x63, 0x6F, 0x6F, 0x72, 0x64, 0x73, 0x2E, 0x79, 0x20,
0x3E, 0x20, 0x63, 0x69, 0x72, 0x63, 0x6C, 0x65, 0x5F, 0x63, 0x65, 0x6E,
0x74, 0x65, 0x72, 0x2E, 0x79, 0x29, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20,
0x31, 0x2E, 0x30, 0x20, 0x2D, 0x20, 0x73, 0x6D, 0x6F, 0x6F, 0x74, 0x68,
0x73, 0x74, 0x65, 0x70, 0x28, 0x72, 0x61, 0x64, 0x69, 0x75, 0x73, 0x20,
0x2D, 0x20, 0x64, 0x65, 0x6C, 0x74, 0x61, 0x2C, 0x20, 0x72, 0x61, 0x64,
0x69, 0x75, 0x73, 0x2C, 0x20, 0x64, 0x73, 0x74, 0x29, 0x3B, 0x0D, 0x0A,
0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E,
0x20, 0x31, 0x2E, 0x66, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x7D, 0x0D, 0x0A,
0x0D, 0x0A, 0x76, 0x6F, 0x69, 0x64, 0x20, 0x6D, 0x61, 0x69, 0x6E, 0x28,
0x29, 0x20, 0x7B, 0x20, 0x0D, 0x0A, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20,
0x63, 0x6F, 0x6F, 0x72, 0x64, 0x73, 0x20, 0x3D, 0x20, 0x76, 0x5F, 0x55,
0x56, 0x20, 0x2A, 0x20, 0x75, 0x5F, 0x53, 0x69, 0x7A, 0x65, 0x3B, 0x0D,
0x0A, 0x09, 0x76, 0x65, 0x63, 0x32, 0x20, 0x63, 0x65, 0x6E, 0x74, 0x65,
0x72, 0x20, 0x3D, 0x20, 0x75, 0x5F, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x2F,
0x20, 0x32, 0x2E, 0x30, 0x3B, 0x0D, 0x0A, 0x09, 0x76, 0x65, 0x63, 0x34,
0x20, 0x66, 0x69, 0x6E, 0x61, 0x6C, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20,
0x3D, 0x20, 0x75, 0x5F, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x3B, 0x0D, 0x0A,
0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x34, 0x20, 0x74,
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20,
0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F,
0x42, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E, 0x64, 0x49, 0x6D,
0x61, 0x67, 0x65, 0x2C, 0x20, 0x76, 0x5F, 0x55, 0x56, 0x29, 0x3B, 0x0D,
0x0A, 0x09, 0x66, 0x69, 0x6E, 0x61, 0x6C, 0x43, 0x6F, 0x6C, 0x6F, 0x72,
0x2E, 0x72, 0x67, 0x62, 0x20, 0x3D, 0x20, 0x6D, 0x69, 0x78, 0x28, 0x66,
0x69, 0x6E, 0x61, 0x6C, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2C, 0x20, 0x74,
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2C,
0x20, 0x75, 0x5F, 0x48, 0x61, 0x73, 0x42, 0x61, 0x63, 0x6B, 0x67, 0x72,
0x6F, 0x75, 0x6E, 0x64, 0x49, 0x6D, 0x61, 0x67, 0x65, 0x29, 0x2E, 0x72,
0x67, 0x62, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x09, 0x69, 0x66, 0x20, 0x28,
0x75, 0x5F, 0x48, 0x61, 0x73, 0x42, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F,
0x75, 0x6E, 0x64, 0x49, 0x6D, 0x61, 0x67, 0x65, 0x20, 0x3D, 0x3D, 0x20,
0x31, 0x2E, 0x30, 0x29, 0x0D, 0x0A, 0x09, 0x7B, 0x0D, 0x0A, 0x09, 0x09,
0x66, 0x69, 0x6E, 0x61, 0x6C, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x61,
0x20, 0x3D, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x43, 0x6F,
0x6C, 0x6F, 0x72, 0x2E, 0x61, 0x3B, 0x0D, 0x0A, 0x09, 0x7D, 0x0D, 0x0A,
0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20,
0x61, 0x20, 0x3D, 0x20, 0x31, 0x2E, 0x30, 0x66, 0x3B, 0x0D, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x75, 0x5F, 0x42, 0x6F, 0x72, 0x64,
0x65, 0x72, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73, 0x20, 0x3E, 0x3D, 0x20,
0x30, 0x2E, 0x66, 0x29, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x61, 0x20, 0x3D, 0x20, 0x6D, 0x69, 0x6E,
0x28, 0x53, 0x68, 0x6F, 0x75, 0x6C, 0x64, 0x44, 0x69, 0x73, 0x63, 0x61,
0x72, 0x64, 0x28, 0x63, 0x6F, 0x6F, 0x72, 0x64, 0x73, 0x2C, 0x20, 0x30,
0x2C, 0x20, 0x75, 0x5F, 0x53, 0x69, 0x7A, 0x65, 0x2C, 0x20, 0x75, 0x5F,
0x42, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x52, 0x61, 0x64, 0x69, 0x75, 0x73,
0x20, 0x2B, 0x20, 0x32, 0x29, 0x2C, 0x20, 0x66, 0x69, 0x6E, 0x61, 0x6C,
0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x61, 0x29, 0x3B, 0x0D, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x61, 0x20,
0x3D, 0x3D, 0x20, 0x30, 0x2E, 0x66, 0x29, 0x20, 0x0D, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x64, 0x69,
0x73, 0x63, 0x61, 0x72, 0x64, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x7D, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x69, 0x66, 0x28, 0x75, 0x5F, 0x42, 0x6F, 0x72, 0x64, 0x65, 0x72,
0x20, 0x3E, 0x20, 0x30, 0x2E, 0x66, 0x29, 0x0D, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72,
0x41, 0x6C, 0x70, 0x68, 0x61, 0x20, 0x3D, 0x20, 0x53, 0x68, 0x6F, 0x75,
0x6C, 0x64, 0x44, 0x69, 0x73, 0x63, 0x61, 0x72, 0x64, 0x28, 0x63, 0x6F,
0x6F, 0x72, 0x64, 0x73, 0x2C, 0x20, 0x75, 0x5F, 0x42, 0x6F, 0x72, 0x64,
0x65, 0x72, 0x2C, 0x20, 0x75, 0x5F, 0x53, 0x69, 0x7A, 0x65, 0x2C, 0x20,
0x75, 0x5F, 0x42, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x52, 0x61, 0x64, 0x69,
0x75, 0x73, 0x29, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x0D, 0x0A, 0x09, 0x09,
0x69, 0x66, 0x28, 0x61, 0x20, 0x3D, 0x3D, 0x20, 0x31, 0x2E, 0x66, 0x29,
0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x20,
0x0D, 0x0A, 0x09, 0x09, 0x09, 0x66, 0x69, 0x6E, 0x61, 0x6C, 0x43, 0x6F,
0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x6D, 0x69, 0x78, 0x28, 0x75, 0x5F,
0x42, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2C,
0x20, 0x66, 0x69, 0x6E, 0x61, 0x6C, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2C,
0x20, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x41, 0x6C, 0x70, 0x68, 0x61,
0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28, 0x63, 0x6F, 0x6F, 0x72, 0x64,
0x73, 0x2E, 0x78, 0x20, 0x3C, 0x20, 0x75, 0x5F, 0x42, 0x6F, 0x72, 0x64,
0x65, 0x72, 0x20, 0x7C, 0x7C, 0x20, 0x63, 0x6F, 0x6F, 0x72, 0x64, 0x73,
0x2E, 0x78, 0x20, 0x3E, 0x20, 0x75, 0x5F, 0x53, 0x69, 0x7A, 0x65, 0x2E,
0x78, 0x20, 0x2D, 0x20, 0x75, 0x5F, 0x42, 0x6F, 0x72, 0x64, 0x65, 0x72,
0x20, 0x7C, 0x7C, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6F,
0x72, 0x64, 0x73, 0x2E, 0x79, 0x20, 0x3C, 0x20, 0x75, 0x5F, 0x42, 0x6F,
0x72, 0x64, 0x65, 0x72, 0x20, 0x7C, 0x7C, 0x20, 0x63, 0x6F, 0x6F, 0x72,
0x64, 0x73, 0x2E, 0x79, 0x20, 0x3E, 0x20, 0x75, 0x5F, 0x53, 0x69, 0x7A,
0x65, 0x2E, 0x79, 0x20, 0x2D, 0x20, 0x75, 0x5F, 0x42, 0x6F, 0x72, 0x64,
0x65, 0x72, 0x29, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x66, 0x69, 0x6E, 0x61, 0x6C, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20,
0x3D, 0x20, 0x75, 0x5F, 0x42, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6F,
0x6C, 0x6F, 0x72, 0x3B, 0x0D, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x0D, 0x0A,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x7D, 0x0D, 0x0A, 0x09, 0x09, 0x09, 0x65, 0x6C, 0x73, 0x65, 0x0D, 0x0A,
0x09, 0x09, 0x09, 0x7B, 0x0D, 0x0A, 0x09, 0x09, 0x09, 0x09, 0x66, 0x69,
0x6E, 0x61, 0x6C, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x61, 0x20, 0x3D,
0x20, 0x6D, 0x69, 0x78, 0x28, 0x62, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x41,
0x6C, 0x70, 0x68, 0x61, 0x2C, 0x20, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72,
0x65, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x61, 0x2C, 0x20, 0x75, 0x5F,
0x48, 0x61, 0x73, 0x42, 0x61, 0x63, 0x6B, 0x67, 0x72, 0x6F, 0x75, 0x6E,
0x64, 0x49, 0x6D, 0x61, 0x67, 0x65, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x09, 0x09, 0x09, 0x0D, 0x0A,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x46, 0x72, 0x61, 0x67, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20,
0x66, 0x69, 0x6E, 0x61, 0x6C, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x3B, 0x20,
0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x3B, 0x0D, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x65, 0x6C, 0x73, 0x65, 0x0D, 0x0A,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0D, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x66,
0x69, 0x6E, 0x61, 0x6C, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20,
0x75, 0x5F, 0x42, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6F, 0x6C, 0x6F,
0x72, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x66, 0x69, 0x6E, 0x61, 0x6C, 0x43, 0x6F, 0x6C,
0x6F, 0x72, 0x2E, 0x61, 0x20, 0x3D, 0x20, 0x6D, 0x61, 0x78, 0x28, 0x61,
0x2C, 0x20, 0x75, 0x5F, 0x42, 0x6F, 0x72, 0x64, 0x65, 0x72, 0x43, 0x6F,
0x6C, 0x6F, 0x72, 0x2E, 0x61, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x46, 0x72, 0x61,
0x67, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x66, 0x69, 0x6E,
0x61, 0x6C, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x3B, 0x0D, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65,
0x74, 0x75, 0x72, 0x6E, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66,
0x69, 0x6E, 0x61, 0x6C, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x61, 0x20,
0x3D, 0x20, 0x61, 0x3B, 0x0D, 0x0A, 0x09, 0x46, 0x72, 0x61, 0x67, 0x43,
0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x66, 0x69, 0x6E, 0x61, 0x6C,
0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x3B, 0x20, 0x0D, 0x0A, 0x7D,
};
unsigned int Resources_Shaders_ui_panel_shader_len = sizeof(Resources_Shaders_ui_panel_shader);
// Data for file: Resources_Shaders_ui_text_shader_path
const std::string Resources_Shaders_ui_text_shader_path = R"(Resources/Shaders/ui_text.shader)";
unsigned char Resources_Shaders_ui_text_shader[] = {
0x23, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x76, 0x65, 0x72, 0x74,
0x65, 0x78, 0x0D, 0x0A, 0x23, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6F, 0x6E,
0x20, 0x34, 0x36, 0x30, 0x20, 0x63, 0x6F, 0x72, 0x65, 0x0D, 0x0A, 0x6C,
0x61, 0x79, 0x6F, 0x75, 0x74, 0x28, 0x6C, 0x6F, 0x63, 0x61, 0x74, 0x69,
0x6F, 0x6E, 0x20, 0x3D, 0x20, 0x30, 0x29, 0x20, 0x69, 0x6E, 0x20, 0x76,
0x65, 0x63, 0x33, 0x20, 0x50, 0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E,
0x3B, 0x0D, 0x0A, 0x6C, 0x61, 0x79, 0x6F, 0x75, 0x74, 0x28, 0x6C, 0x6F,
0x63, 0x61, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x3D, 0x20, 0x31, 0x29, 0x20,
0x69, 0x6E, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x55, 0x56, 0x3B, 0x0D,
0x0A, 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x6D,
0x61, 0x74, 0x34, 0x20, 0x75, 0x5F, 0x4D, 0x6F, 0x64, 0x65, 0x6C, 0x3B,
0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20, 0x6D, 0x61,
0x74, 0x34, 0x20, 0x75, 0x5F, 0x56, 0x69, 0x65, 0x77, 0x3B, 0x0D, 0x0A,
0x0D, 0x0A, 0x6F, 0x75, 0x74, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x76,
0x5F, 0x55, 0x56, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x76, 0x6F, 0x69, 0x64,
0x20, 0x6D, 0x61, 0x69, 0x6E, 0x28, 0x29, 0x20, 0x7B, 0x0D, 0x0A, 0x09,
0x76, 0x5F, 0x55, 0x56, 0x20, 0x3D, 0x20, 0x55, 0x56, 0x3B, 0x0D, 0x0A,
0x09, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x78, 0x20, 0x3D, 0x20, 0x50,
0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x78, 0x3B, 0x0D, 0x0A,
0x09, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x79, 0x20, 0x3D, 0x20, 0x50,
0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x79, 0x3B, 0x0D, 0x0A,
0x09, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x7A, 0x20, 0x3D, 0x20, 0x50,
0x6F, 0x73, 0x69, 0x74, 0x69, 0x6F, 0x6E, 0x2E, 0x7A, 0x3B, 0x0D, 0x0A,
0x0D, 0x0A, 0x09, 0x67, 0x6C, 0x5F, 0x50, 0x6F, 0x73, 0x69, 0x74, 0x69,
0x6F, 0x6E, 0x20, 0x3D, 0x20, 0x75, 0x5F, 0x56, 0x69, 0x65, 0x77, 0x20,
0x2A, 0x20, 0x75, 0x5F, 0x4D, 0x6F, 0x64, 0x65, 0x6C, 0x20, 0x2A, 0x20,
0x76, 0x65, 0x63, 0x34, 0x28, 0x78, 0x2C, 0x20, 0x79, 0x2C, 0x20, 0x7A,
0x2C, 0x20, 0x31, 0x2E, 0x30, 0x66, 0x29, 0x3B, 0x0D, 0x0A, 0x7D, 0x0D,
0x0A, 0x0D, 0x0A, 0x23, 0x73, 0x68, 0x61, 0x64, 0x65, 0x72, 0x20, 0x66,
0x72, 0x61, 0x67, 0x6D, 0x65, 0x6E, 0x74, 0x0D, 0x0A, 0x23, 0x76, 0x65,
0x72, 0x73, 0x69, 0x6F, 0x6E, 0x20, 0x34, 0x36, 0x30, 0x20, 0x63, 0x6F,
0x72, 0x65, 0x0D, 0x0A, 0x0D, 0x0A, 0x0D, 0x0A, 0x69, 0x6E, 0x20, 0x73,
0x61, 0x6D, 0x70, 0x6C, 0x65, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x76,
0x5F, 0x55, 0x56, 0x3B, 0x0D, 0x0A, 0x6F, 0x75, 0x74, 0x20, 0x76, 0x65,
0x63, 0x34, 0x20, 0x46, 0x72, 0x61, 0x67, 0x43, 0x6F, 0x6C, 0x6F, 0x72,
0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D,
0x20, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x72, 0x32, 0x44, 0x20, 0x75,
0x5F, 0x41, 0x74, 0x6C, 0x61, 0x73, 0x3B, 0x0D, 0x0A, 0x75, 0x6E, 0x69,
0x66, 0x6F, 0x72, 0x6D, 0x20, 0x73, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x20,
0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x5F, 0x54, 0x65, 0x78, 0x74, 0x75,
0x72, 0x65, 0x50, 0x6F, 0x73, 0x3B, 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66,
0x6F, 0x72, 0x6D, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x5F, 0x54,
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x53, 0x63, 0x61, 0x6C, 0x65, 0x3B,
0x0D, 0x0A, 0x0D, 0x0A, 0x75, 0x6E, 0x69, 0x66, 0x6F, 0x72, 0x6D, 0x20,
0x76, 0x65, 0x63, 0x34, 0x20, 0x75, 0x5F, 0x46, 0x6F, 0x6E, 0x74, 0x43,
0x6F, 0x6C, 0x6F, 0x72, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x75, 0x6E, 0x69,
0x66, 0x6F, 0x72, 0x6D, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x75,
0x5F, 0x50, 0x78, 0x52, 0x61, 0x6E, 0x67, 0x65, 0x3B, 0x0D, 0x0A, 0x0D,
0x0A, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x73, 0x63, 0x72, 0x65, 0x65,
0x6E, 0x50, 0x78, 0x52, 0x61, 0x6E, 0x67, 0x65, 0x28, 0x76, 0x65, 0x63,
0x32, 0x20, 0x63, 0x6F, 0x6F, 0x72, 0x64, 0x29, 0x20, 0x7B, 0x0D, 0x0A,
0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x6E, 0x69,
0x74, 0x52, 0x61, 0x6E, 0x67, 0x65, 0x20, 0x3D, 0x20, 0x76, 0x65, 0x63,
0x32, 0x28, 0x75, 0x5F, 0x50, 0x78, 0x52, 0x61, 0x6E, 0x67, 0x65, 0x29,
0x20, 0x2F, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x74, 0x65, 0x78, 0x74,
0x75, 0x72, 0x65, 0x53, 0x69, 0x7A, 0x65, 0x28, 0x75, 0x5F, 0x41, 0x74,
0x6C, 0x61, 0x73, 0x2C, 0x20, 0x30, 0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x73, 0x63, 0x72, 0x65,
0x65, 0x6E, 0x54, 0x65, 0x78, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x3D, 0x20,
0x76, 0x65, 0x63, 0x32, 0x28, 0x31, 0x2E, 0x30, 0x29, 0x20, 0x2F, 0x20,
0x66, 0x77, 0x69, 0x64, 0x74, 0x68, 0x28, 0x63, 0x6F, 0x6F, 0x72, 0x64,
0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75,
0x72, 0x6E, 0x20, 0x6D, 0x61, 0x78, 0x28, 0x30, 0x2E, 0x35, 0x20, 0x2A,
0x20, 0x64, 0x6F, 0x74, 0x28, 0x75, 0x6E, 0x69, 0x74, 0x52, 0x61, 0x6E,
0x67, 0x65, 0x2C, 0x20, 0x73, 0x63, 0x72, 0x65, 0x65, 0x6E, 0x54, 0x65,
0x78, 0x53, 0x69, 0x7A, 0x65, 0x29, 0x2C, 0x20, 0x31, 0x2E, 0x30, 0x29,
0x3B, 0x0D, 0x0A, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x66, 0x6C, 0x6F, 0x61,
0x74, 0x20, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x6E, 0x28, 0x66, 0x6C, 0x6F,
0x61, 0x74, 0x20, 0x72, 0x2C, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20,
0x67, 0x2C, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x62, 0x29, 0x20,
0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72,
0x6E, 0x20, 0x6D, 0x61, 0x78, 0x28, 0x6D, 0x69, 0x6E, 0x28, 0x72, 0x2C,
0x20, 0x67, 0x29, 0x2C, 0x20, 0x6D, 0x69, 0x6E, 0x28, 0x6D, 0x61, 0x78,
0x28, 0x72, 0x2C, 0x20, 0x67, 0x29, 0x2C, 0x20, 0x62, 0x29, 0x29, 0x3B,
0x0D, 0x0A, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A, 0x66, 0x6C, 0x6F, 0x61, 0x74,
0x20, 0x6F, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x28, 0x76, 0x65, 0x63,
0x34, 0x20, 0x73, 0x64, 0x66, 0x53, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x29,
0x0D, 0x0A, 0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F,
0x61, 0x74, 0x20, 0x72, 0x20, 0x3D, 0x20, 0x73, 0x64, 0x66, 0x53, 0x61,
0x6D, 0x70, 0x6C, 0x65, 0x2E, 0x72, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x67, 0x20, 0x3D, 0x20, 0x73,
0x64, 0x66, 0x53, 0x61, 0x6D, 0x70, 0x6C, 0x65, 0x2E, 0x67, 0x3B, 0x0D,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x62,
0x20, 0x3D, 0x20, 0x73, 0x64, 0x66, 0x53, 0x61, 0x6D, 0x70, 0x6C, 0x65,
0x2E, 0x62, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F,
0x61, 0x74, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x65, 0x64, 0x5F, 0x64, 0x69,
0x73, 0x74, 0x20, 0x3D, 0x20, 0x6D, 0x65, 0x64, 0x69, 0x61, 0x6E, 0x28,
0x72, 0x2C, 0x20, 0x67, 0x2C, 0x20, 0x62, 0x29, 0x20, 0x2D, 0x20, 0x30,
0x2E, 0x35, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F,
0x61, 0x74, 0x20, 0x64, 0x20, 0x3D, 0x20, 0x66, 0x77, 0x69, 0x64, 0x74,
0x68, 0x28, 0x73, 0x69, 0x67, 0x6E, 0x65, 0x64, 0x5F, 0x64, 0x69, 0x73,
0x74, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F,
0x61, 0x74, 0x20, 0x6F, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x20, 0x3D,
0x20, 0x73, 0x6D, 0x6F, 0x6F, 0x74, 0x68, 0x73, 0x74, 0x65, 0x70, 0x28,
0x2D, 0x64, 0x2C, 0x20, 0x64, 0x2C, 0x20, 0x73, 0x69, 0x67, 0x6E, 0x65,
0x64, 0x5F, 0x64, 0x69, 0x73, 0x74, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6E, 0x20, 0x6F, 0x70, 0x61,
0x63, 0x69, 0x74, 0x79, 0x3B, 0x0D, 0x0A, 0x7D, 0x0D, 0x0A, 0x0D, 0x0A,
0x76, 0x6F, 0x69, 0x64, 0x20, 0x6D, 0x61, 0x69, 0x6E, 0x28, 0x29, 0x20,
0x7B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20,
0x74, 0x65, 0x78, 0x74, 0x53, 0x69, 0x7A, 0x65, 0x20, 0x3D, 0x20, 0x74,
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x53, 0x69, 0x7A, 0x65, 0x28, 0x75,
0x5F, 0x41, 0x74, 0x6C, 0x61, 0x73, 0x2C, 0x20, 0x30, 0x29, 0x3B, 0x0D,
0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20,
0x75, 0x76, 0x20, 0x3D, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x6D, 0x69,
0x78, 0x28, 0x75, 0x5F, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x50,
0x6F, 0x73, 0x2E, 0x78, 0x20, 0x2F, 0x20, 0x74, 0x65, 0x78, 0x74, 0x53,
0x69, 0x7A, 0x65, 0x2E, 0x78, 0x2C, 0x20, 0x75, 0x5F, 0x54, 0x65, 0x78,
0x74, 0x75, 0x72, 0x65, 0x53, 0x63, 0x61, 0x6C, 0x65, 0x2E, 0x78, 0x20,
0x2F, 0x20, 0x74, 0x65, 0x78, 0x74, 0x53, 0x69, 0x7A, 0x65, 0x2E, 0x78,
0x2C, 0x20, 0x76, 0x5F, 0x55, 0x56, 0x2E, 0x78, 0x29, 0x2C, 0x0D, 0x0A,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x6D, 0x69, 0x78, 0x28, 0x75,
0x5F, 0x54, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x53, 0x63, 0x61, 0x6C,
0x65, 0x2E, 0x79, 0x20, 0x2F, 0x20, 0x74, 0x65, 0x78, 0x74, 0x53, 0x69,
0x7A, 0x65, 0x2E, 0x79, 0x2C, 0x20, 0x75, 0x5F, 0x54, 0x65, 0x78, 0x74,
0x75, 0x72, 0x65, 0x50, 0x6F, 0x73, 0x2E, 0x79, 0x20, 0x2F, 0x20, 0x74,
0x65, 0x78, 0x74, 0x53, 0x69, 0x7A, 0x65, 0x2E, 0x79, 0x2C, 0x20, 0x31,
0x2E, 0x30, 0x20, 0x2D, 0x20, 0x76, 0x5F, 0x55, 0x56, 0x2E, 0x79, 0x29,
0x29, 0x3B, 0x0D, 0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F,
0x6E, 0x73, 0x74, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x73, 0x75,
0x62, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x41, 0x6D, 0x6F, 0x75, 0x6E, 0x74,
0x20, 0x3D, 0x20, 0x31, 0x2E, 0x33, 0x33, 0x33, 0x3B, 0x0D, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x6E, 0x69, 0x74,
0x52, 0x61, 0x6E, 0x67, 0x65, 0x20, 0x3D, 0x20, 0x31, 0x2E, 0x30, 0x20,
0x2F, 0x20, 0x74, 0x65, 0x78, 0x74, 0x53, 0x69, 0x7A, 0x65, 0x3B, 0x0D,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x76,
0x4C, 0x65, 0x66, 0x74, 0x20, 0x3D, 0x20, 0x75, 0x76, 0x20, 0x2D, 0x20,
0x76, 0x65, 0x63, 0x32, 0x28, 0x75, 0x6E, 0x69, 0x74, 0x52, 0x61, 0x6E,
0x67, 0x65, 0x2E, 0x78, 0x20, 0x2A, 0x20, 0x73, 0x75, 0x62, 0x50, 0x69,
0x78, 0x65, 0x6C, 0x41, 0x6D, 0x6F, 0x75, 0x6E, 0x74, 0x2C, 0x20, 0x30,
0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x32,
0x20, 0x75, 0x76, 0x52, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3D, 0x20, 0x75,
0x76, 0x20, 0x2B, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x75, 0x6E, 0x69,
0x74, 0x52, 0x61, 0x6E, 0x67, 0x65, 0x2E, 0x78, 0x20, 0x2A, 0x20, 0x73,
0x75, 0x62, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x41, 0x6D, 0x6F, 0x75, 0x6E,
0x74, 0x2C, 0x20, 0x30, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x76, 0x65, 0x63, 0x32, 0x20, 0x75, 0x76, 0x55, 0x70, 0x20, 0x3D, 0x20,
0x75, 0x76, 0x20, 0x2B, 0x20, 0x76, 0x65, 0x63, 0x32, 0x28, 0x30, 0x2C,
0x20, 0x75, 0x6E, 0x69, 0x74, 0x52, 0x61, 0x6E, 0x67, 0x65, 0x2E, 0x79,
0x20, 0x2A, 0x20, 0x73, 0x75, 0x62, 0x50, 0x69, 0x78, 0x65, 0x6C, 0x41,
0x6D, 0x6F, 0x75, 0x6E, 0x74, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x6D, 0x69, 0x64, 0x64, 0x6C,
0x65, 0x20, 0x3D, 0x20, 0x6F, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x28,
0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x41, 0x74,
0x6C, 0x61, 0x73, 0x2C, 0x20, 0x75, 0x76, 0x29, 0x29, 0x3B, 0x0D, 0x0A,
0x20, 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x6C, 0x65,
0x66, 0x74, 0x20, 0x3D, 0x20, 0x6F, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79,
0x28, 0x74, 0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x41,
0x74, 0x6C, 0x61, 0x73, 0x2C, 0x20, 0x75, 0x76, 0x4C, 0x65, 0x66, 0x74,
0x29, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F,
0x61, 0x74, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3D, 0x20, 0x6F,
0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x28, 0x74, 0x65, 0x78, 0x74, 0x75,
0x72, 0x65, 0x28, 0x75, 0x5F, 0x41, 0x74, 0x6C, 0x61, 0x73, 0x2C, 0x20,
0x75, 0x76, 0x52, 0x69, 0x67, 0x68, 0x74, 0x29, 0x29, 0x3B, 0x0D, 0x0A,
0x20, 0x20, 0x20, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x75, 0x70,
0x20, 0x3D, 0x20, 0x6F, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x28, 0x74,
0x65, 0x78, 0x74, 0x75, 0x72, 0x65, 0x28, 0x75, 0x5F, 0x41, 0x74, 0x6C,
0x61, 0x73, 0x2C, 0x20, 0x75, 0x76, 0x55, 0x70, 0x29, 0x29, 0x3B, 0x0D,
0x0A, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x76, 0x65, 0x63, 0x33, 0x20,
0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x75, 0x5F, 0x46, 0x6F,
0x6E, 0x74, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x72, 0x67, 0x62, 0x3B,
0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6F, 0x6F, 0x6C, 0x20, 0x64,
0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6F, 0x6E, 0x20, 0x3D, 0x20, 0x66,
0x61, 0x6C, 0x73, 0x65, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x0D, 0x0A,
0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x20, 0x66, 0x6C,
0x6F, 0x61, 0x74, 0x20, 0x72, 0x61, 0x74, 0x69, 0x6F, 0x20, 0x3D, 0x20,
0x31, 0x2E, 0x36, 0x36, 0x36, 0x36, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74,
0x20, 0x63, 0x75, 0x72, 0x76, 0x65, 0x5F, 0x74, 0x6F, 0x6C, 0x65, 0x72,
0x61, 0x6E, 0x63, 0x65, 0x20, 0x3D, 0x20, 0x31, 0x2E, 0x30, 0x3B, 0x0D,
0x0A, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74, 0x20, 0x66,
0x6C, 0x6F, 0x61, 0x74, 0x20, 0x68, 0x5F, 0x74, 0x6F, 0x6C, 0x65, 0x72,
0x61, 0x6E, 0x63, 0x65, 0x20, 0x3D, 0x20, 0x30, 0x3B, 0x0D, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E,
0x73, 0x74, 0x20, 0x62, 0x6F, 0x6F, 0x6C, 0x20, 0x73, 0x75, 0x62, 0x70,
0x69, 0x78, 0x65, 0x6C, 0x20, 0x3D, 0x20, 0x66, 0x61, 0x6C, 0x73, 0x65,
0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6E, 0x73, 0x74,
0x20, 0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x73, 0x75, 0x62, 0x70, 0x69,
0x78, 0x65, 0x6C, 0x5F, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6F, 0x6C,
0x64, 0x20, 0x3D, 0x20, 0x31, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20,
0x66, 0x6C, 0x6F, 0x61, 0x74, 0x20, 0x63, 0x75, 0x72, 0x76, 0x65, 0x41,
0x6D, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x3D, 0x20, 0x75, 0x70, 0x20, 0x2D,
0x20, 0x6D, 0x69, 0x64, 0x64, 0x6C, 0x65, 0x3B, 0x0D, 0x0A, 0x20, 0x20,
0x20, 0x20, 0x62, 0x6F, 0x6F, 0x6C, 0x20, 0x6D, 0x69, 0x64, 0x20, 0x3D,
0x20, 0x6D, 0x69, 0x64, 0x64, 0x6C, 0x65, 0x20, 0x3C, 0x20, 0x28, 0x73,
0x75, 0x62, 0x70, 0x69, 0x78, 0x65, 0x6C, 0x5F, 0x74, 0x68, 0x72, 0x65,
0x73, 0x68, 0x6F, 0x6C, 0x64, 0x29, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20,
0x20, 0x62, 0x6F, 0x6F, 0x6C, 0x20, 0x6C, 0x65, 0x66, 0x74, 0x74, 0x20,
0x3D, 0x20, 0x6C, 0x65, 0x66, 0x74, 0x20, 0x3C, 0x20, 0x73, 0x75, 0x62,
0x70, 0x69, 0x78, 0x65, 0x6C, 0x5F, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68,
0x6F, 0x6C, 0x64, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x62, 0x6F,
0x6F, 0x6C, 0x20, 0x72, 0x69, 0x67, 0x68, 0x74, 0x74, 0x20, 0x3D, 0x20,
0x72, 0x69, 0x67, 0x68, 0x74, 0x20, 0x3C, 0x20, 0x73, 0x75, 0x62, 0x70,
0x69, 0x78, 0x65, 0x6C, 0x5F, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68, 0x6F,
0x6C, 0x64, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x69, 0x66, 0x28,
0x73, 0x75, 0x62, 0x70, 0x69, 0x78, 0x65, 0x6C, 0x20, 0x26, 0x26, 0x28,
0x6D, 0x69, 0x64, 0x64, 0x6C, 0x65, 0x20, 0x3C, 0x20, 0x73, 0x75, 0x62,
0x70, 0x69, 0x78, 0x65, 0x6C, 0x5F, 0x74, 0x68, 0x72, 0x65, 0x73, 0x68,
0x6F, 0x6C, 0x64, 0x29, 0x20, 0x26, 0x26, 0x20, 0x63, 0x75, 0x72, 0x76,
0x65, 0x41, 0x6D, 0x6F, 0x75, 0x6E, 0x74, 0x20, 0x3C, 0x20, 0x63, 0x75,
0x72, 0x76, 0x65, 0x5F, 0x74, 0x6F, 0x6C, 0x65, 0x72, 0x61, 0x6E, 0x63,
0x65, 0x29, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7B, 0x0D, 0x0A, 0x20,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6C, 0x6F, 0x72,
0x2E, 0x72, 0x20, 0x3D, 0x20, 0x6C, 0x65, 0x66, 0x74, 0x3B, 0x0D, 0x0A,
0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63, 0x6F, 0x6C, 0x6F,
0x72, 0x2E, 0x67, 0x20, 0x3D, 0x20, 0x6D, 0x69, 0x64, 0x64, 0x6C, 0x65,
0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x63,
0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x62, 0x20, 0x3D, 0x20, 0x72, 0x69, 0x67,
0x68, 0x74, 0x3B, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x7D, 0x0D, 0x0A,
0x20, 0x20, 0x20, 0x20, 0x0D, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x46, 0x72,
0x61, 0x67, 0x43, 0x6F, 0x6C, 0x6F, 0x72, 0x20, 0x3D, 0x20, 0x76, 0x65,
0x63, 0x34, 0x28, 0x63, 0x6F, 0x6C, 0x6F, 0x72, 0x2E, 0x72, 0x67, 0x62,
0x2C, 0x20, 0x6D, 0x69, 0x64, 0x64, 0x6C, 0x65, 0x29, 0x3B, 0x0D, 0x0A,
0x7D,
};
unsigned int Resources_Shaders_ui_text_shader_len = sizeof(Resources_Shaders_ui_text_shader);
// Data for file: Resources_Shaders_vignette_shader_path
const std::string Resources_Shaders_vignette_shader_path = R"(Resources/Shaders/vignette.shader)";
unsigned char Resources_Shaders_vignette_shader[] = {

View File

@@ -233,6 +233,12 @@ namespace Nuake {
extern const std::string Resources_Shaders_ui_shader_path;
extern unsigned int Resources_Shaders_ui_shader_len;
extern unsigned char Resources_Shaders_ui_shader[];
extern const std::string Resources_Shaders_ui_panel_shader_path;
extern unsigned int Resources_Shaders_ui_panel_shader_len;
extern unsigned char Resources_Shaders_ui_panel_shader[];
extern const std::string Resources_Shaders_ui_text_shader_path;
extern unsigned int Resources_Shaders_ui_text_shader_len;
extern unsigned char Resources_Shaders_ui_text_shader[];
extern const std::string Resources_Shaders_vignette_shader_path;
extern unsigned int Resources_Shaders_vignette_shader_len;
extern unsigned char Resources_Shaders_vignette_shader[];

View File

@@ -7,9 +7,13 @@
#include "FileSystem.h"
#include <glad/glad.h>
#include <src/Rendering/Shaders/ShaderManager.h>
namespace NuakeUI
{
struct Vertex {
struct Vertex
{
Vector3 Position;
Vector2 UV;
};
@@ -45,15 +49,8 @@ namespace NuakeUI
void Renderer::ReloadShaders()
{
// Rectangle Shader
std::string vertexSource = FileSystem::ReadFile("../resources/panel.vert.glsl");
std::string fragSource = FileSystem::ReadFile("../resources/panel.frag.glsl");
mShader = std::make_shared<Shader>(vertexSource, fragSource);
// SDF Shader
vertexSource = FileSystem::ReadFile("../resources/text.vert.glsl");
fragSource = FileSystem::ReadFile("../resources/text.frag.glsl");
mSDFShader = std::make_shared<Shader>(vertexSource, fragSource);
mShader = ShaderManager::GetShader("Resources/Shaders/ui_panel.shader");
mSDFShader = ShaderManager::GetShader("Resources/Shaders/ui_text.shader");
}
void Renderer::SetViewportSize(const Vector2& size)
@@ -66,12 +63,12 @@ namespace NuakeUI
{
int viewportW = (int)mSize.x;
int viewportH = (int)mSize.y;
//glViewport(0, 0, viewportW, viewportH);
glViewport(0, 0, viewportW, viewportH);
}
void Renderer::DrawNode(std::shared_ptr<Node> node, int z)
{
//glEnable(GL_DEPTH_TEST);
glDisable(GL_DEPTH_TEST);
float parentScroll = 0.f;
float parentPaddingRight = 0.f;
@@ -115,92 +112,90 @@ namespace NuakeUI
}
mShader->Bind();
//mShader->SetUniforms({
// { "u_Model", transform },
// { "u_Size", Vector2(width, height) },
// { "u_View", mView },
// { "u_Color", node->ComputedStyle.BackgroundColor },
// { "u_Border", node->ComputedStyle.BorderSize },
// { "u_BorderRadius", node->ComputedStyle.BorderRadius },
// { "u_BorderColor", node->ComputedStyle.BorderColor },
// { "u_BackgroundImage", 0 },
// { "u_HasBackgroundImage", hasBackgroundImage ? 1.f : 0.f}
//});
mShader->SetUniforms({
{ "u_Model", transform },
{ "u_Size", Vector2(width, height) },
{ "u_View", mView },
{ "u_Color", node->ComputedStyle.BackgroundColor },
{ "u_Border", node->ComputedStyle.BorderSize },
{ "u_BorderRadius", node->ComputedStyle.BorderRadius },
{ "u_BorderColor", node->ComputedStyle.BorderColor },
{ "u_BackgroundImage", 0 },
{ "u_HasBackgroundImage", hasBackgroundImage ? 1.f : 0.f}
});
//bool hideOverflow = node->Parent != nullptr && node->Parent->ComputedStyle.Overflow == OverflowType::Hidden;
//if (hideOverflow)
//{
// glEnable(GL_SCISSOR_TEST);
// Vector2 parentPosition = node->Parent->ComputedPosition;
// Vector2 parentSize = node->Parent->ComputedSize;
// int scissorX = (int)parentPosition.x;
// int scissorY = 1080 - (int)(parentPosition.y - parentSize.y);
// int scissorW = (int)parentSize.x;
// int scissorH = (int)parentSize.y;
// glScissor(scissorX, scissorY, scissorW, scissorH);
//}
bool hideOverflow = node->Parent != nullptr && node->Parent->ComputedStyle.Overflow == OverflowType::Hidden;
if (hideOverflow)
{
glEnable(GL_SCISSOR_TEST);
Vector2 parentPosition = node->Parent->ComputedPosition;
Vector2 parentSize = node->Parent->ComputedSize;
int scissorX = (int)parentPosition.x;
int scissorY = 1080 - (int)(parentPosition.y - parentSize.y);
int scissorW = (int)parentSize.x;
int scissorH = (int)parentSize.y;
glScissor(scissorX, scissorY, scissorW, scissorH);
}
// TODO: Keep overflow until we get out of here
//mVertexArray->Bind();
//glDrawArrays(GL_TRIANGLES, 0, 6);
//mVertexArray->Unbind();
//mShader->Unbind();
//
//if (hideOverflow)
// glDisable(GL_SCISSOR_TEST);
mVertexArray->Bind();
glDrawArrays(GL_TRIANGLES, 0, 6);
mVertexArray->Unbind();
mShader->Unbind();
if (hideOverflow)
glDisable(GL_SCISSOR_TEST);
}
void Renderer::DrawString(const std::string& string, NodeStyle& nodeStyle, std::shared_ptr<Font> font, Vector3 position)
{
//const float fontSize = nodeStyle.FontSize / 64.f;
//glEnable(GL_BLEND);
//glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
//mSDFShader->Bind();
//font->mAtlas->Bind(5);
//mSDFShader->SetUniforms({
// { "u_View", mView },
// { "u_Atlas", 5 },
// { "u_Scale", 1.0f},
// { "u_SDF_BorderSize", 0.0f},
// { "u_FontColor", nodeStyle.FontColor },
// { "u_PxRange", fontSize },
// { "u_SDF_BorderSize", {1.0, 1.0}}
//});
//
//mVertexArray->Bind();
//
//float advance = 0.0f;
//for (char const& c : string)
//{
// Char letter = font->GetChar((int)c);
//
// // Move the cursor
// Matrix4 model = Matrix4(1.f);
// model = glm::translate(model, position);
// model = glm::translate(model, Vector3(advance * fontSize, (-(letter.PlaneBounds.top) + (font->LineHeight)) * fontSize, 0));
//
// advance += (letter.Advance);
//
// // Scaling of the quad
// float scaleX = (float)(letter.PlaneBounds.right - letter.PlaneBounds.left);
// float scaleY = (float)(letter.PlaneBounds.top - letter.PlaneBounds.bottom);
// model = glm::scale(model, Vector3(scaleX * fontSize, scaleY * fontSize, 1.f));
//
// // Set Uniforms
// mSDFShader->SetUniforms({
// { "u_Model", model },
// { "u_TexturePos", Vector2(letter.AtlasBounds.Pos.x, letter.AtlasBounds.Pos.y) },
// { "u_TextureScale", Vector2(letter.AtlasBounds.Size.x, letter.AtlasBounds.Size.y) },
// });
//
//
// glDrawArrays(GL_TRIANGLES, 0, 6);
//}
//
//
//mVertexArray->Unbind();
const float fontSize = nodeStyle.FontSize / 64.f;
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
mSDFShader->Bind();
font->mAtlas->Bind(5);
mSDFShader->SetUniforms({
{ "u_View", mView },
{ "u_Atlas", 5 },
{ "u_Scale", 1.0f},
{ "u_SDF_BorderSize", 0.0f},
{ "u_FontColor", nodeStyle.FontColor },
{ "u_PxRange", fontSize },
{ "u_SDF_BorderSize", {1.0, 1.0}}
});
mVertexArray->Bind();
float advance = 0.0f;
for (char const& c : string)
{
Char letter = font->GetChar((int)c);
// Move the cursor
Matrix4 model = Matrix4(1.f);
model = glm::translate(model, position);
model = glm::translate(model, Vector3(advance * fontSize, (-(letter.PlaneBounds.top) + (font->LineHeight)) * fontSize, 0));
advance += (letter.Advance);
// Scaling of the quad
float scaleX = (float)(letter.PlaneBounds.right - letter.PlaneBounds.left);
float scaleY = (float)(letter.PlaneBounds.top - letter.PlaneBounds.bottom);
model = glm::scale(model, Vector3(scaleX * fontSize, scaleY * fontSize, 1.f));
// Set Uniforms
mSDFShader->SetUniforms({
{ "u_Model", model },
{ "u_TexturePos", Vector2(letter.AtlasBounds.Pos.x, letter.AtlasBounds.Pos.y) },
{ "u_TextureScale", Vector2(letter.AtlasBounds.Size.x, letter.AtlasBounds.Size.y) },
});
glDrawArrays(GL_TRIANGLES, 0, 6);
}
mVertexArray->Unbind();
}
}

View File

@@ -39,8 +39,8 @@ namespace NuakeUI
Renderer();
~Renderer() = default;
std::shared_ptr<Shader> mShader;
std::shared_ptr<Shader> mSDFShader;
Shader* mShader;
Shader* mSDFShader;
std::shared_ptr<VertexArray> mVertexArray;
std::shared_ptr<VertexBuffer> mVertexBuffer;
};