/** Copyright (C) 2013 Robert B. Colton, Josh Ventura *** *** This file is a part of the ENIGMA Development Environment. *** *** ENIGMA is free software: you can redistribute it and/or modify it under the *** terms of the GNU General Public License as published by the Free Software *** Foundation, version 3 of the license or any later version. *** *** This application and its source code is distributed AS-IS, WITHOUT ANY *** WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS *** FOR A PARTICULAR PURPOSE. See the GNU General Public License for more *** details. *** *** You should have received a copy of the GNU General Public License along *** with this code. If not, see **/ #include #include #include using namespace std; #include "syntax/syncheck.h" #include "parser/parser.h" #include "backend/EnigmaStruct.h" //LateralGM interface structures #include "parser/object_storage.h" #include "compiler/compile_common.h" #include //log2 to calculate passes. #define flushl '\n' << flush #define flushs flush #include "languages/lang_CPP.h" #define SHADERSTRUCT "struct ShaderStruct { \ string fragment; \ string vertex; \ string type; \ bool precompile; \ }; " static string esc(string str) { string res; res.reserve(str.length); for (size_t i = 0; i < str.length(); ++i) { char c = str[i]; if (c == '\n') { res += "\\n"; continue; } if (c == '\r') { res += "\\r"; continue; } if (c == '\\') { res += "\\\\"; continue; } res.append(c); } return res; } int lang_CPP::compile_writeShaderData(EnigmaStruct* es, parsed_object *EGMglobal) { ofstream wto("ENIGMAsystem/SHELL/Preprocessor_Environment_Editable/IDE_EDIT_shaderarrays.h",ios_base::out); wto << license << "namespace enigma {\n" wto << " ShaderStruct shaderstructarray[] = { int idmax = 0; for (int i = 0; i < es->shaderCount; i++) { while (idmax < es->shaders[i].id) ++idmax, wto << "ShaderStruct(),\n"; wto << " { " << '"' << esc(es->shaders[i].vertex) << "\", " << '"' << esc(es->shaders[i].fragment) << "\", " << '"' << es->shaders[i].type << "\", " << (es->shaders[i].precompile? "true" : "false") << " },\n"; } wto << " };\n"; wto << "} // Namespace enigma\n"; wto.close(); return 0; }