]> de.git.xonotic.org Git - xonotic/netradiant.git/blob - radiant/shaders.cpp
q3map2: fix prt loading for vis computation when using -prtfile
[xonotic/netradiant.git] / radiant / shaders.cpp
1 /*
2    Copyright (C) 1999-2006 Id Software, Inc. and contributors.
3    For a list of contributors, see the accompanying CONTRIBUTORS file.
4
5    This file is part of GtkRadiant.
6
7    GtkRadiant is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 2 of the License, or
10    (at your option) any later version.
11
12    GtkRadiant is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with GtkRadiant; if not, write to the Free Software
19    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20  */
21
22 #include "shaders.h"
23
24 #include "ifilesystem.h"
25
26 #include "stream/stringstream.h"
27
28 #include "gtkdlgs.h"
29
30 void ViewShader(const char *pFile, const char *pName)
31 {
32     char *pBuff = 0;
33     //int nSize =
34     vfsLoadFile(pFile, reinterpret_cast<void **>( &pBuff ));
35     if (pBuff == 0) {
36         globalErrorStream() << "Failed to load shader file " << pFile << "\n";
37         return;
38     }
39     // look for the shader declaration
40     StringOutputStream strFind(string_length(pName));
41     strFind << LowerCase(pName);
42     StringOutputStream strLook(string_length(pBuff));
43     strFind << LowerCase(pBuff);
44     // offset used when jumping over commented out definitions
45     std::size_t nOffset = 0;
46     while (true) {
47         const char *substr = strstr(strFind.c_str() + nOffset, strFind.c_str());
48         if (substr == 0) {
49             break;
50         }
51         std::size_t nStart = substr - strLook.c_str();
52         // we have found something, maybe it's a commented out shader name?
53         char *strCheck = new char[string_length(strLook.c_str()) + 1];
54         strcpy(strCheck, strLook.c_str());
55         strCheck[nStart] = 0;
56         char *pCheck = strrchr(strCheck, '\n');
57         // if there's a commentary sign in-between we'll continue
58         if (pCheck && strstr(pCheck, "//")) {
59             delete[] strCheck;
60             nOffset = nStart + 1;
61             continue;
62         }
63         delete[] strCheck;
64         nOffset = nStart;
65         break;
66     }
67     // now close the file
68     vfsFreeFile(pBuff);
69
70     DoTextEditor(pFile, static_cast<int>( nOffset ));
71 }