From: <kla...@us...> - 2011-01-31 05:47:11
|
Revision: 13020 http://vegastrike.svn.sourceforge.net/vegastrike/?rev=13020&view=rev Author: klaussfreire Date: 2011-01-31 05:47:05 +0000 (Mon, 31 Jan 2011) Log Message: ----------- Bug 3166583 fix: make engine-supplied #defines appear after #version in all shaders Pending review at: https://sourceforge.net/apps/codestriker/vegastrike/codestriker.pl?action=view&topic=4131897 Modified Paths: -------------- trunk/vegastrike/src/gldrv/gl_program.cpp Modified: trunk/vegastrike/src/gldrv/gl_program.cpp =================================================================== --- trunk/vegastrike/src/gldrv/gl_program.cpp 2011-01-31 05:13:35 UTC (rev 13019) +++ trunk/vegastrike/src/gldrv/gl_program.cpp 2011-01-31 05:47:05 UTC (rev 13020) @@ -154,6 +154,22 @@ return err; } +static std::string appendDefines( const std::string &prog, const char *extra_defines ) +{ + std::string::size_type nlpos = prog.find_first_of('\n'); + std::string firstline = prog.substr(0, nlpos); + + if (firstline.find("#version") != std::string::npos) + return firstline + + std::string(extra_defines) + + "\n#line 1\n" + + prog.substr(nlpos); + else + return std::string(extra_defines) + + "\n#line 0\n" + + prog; +} + static int GFXCreateProgramNoCache( const char *vprogram, const char *fprogram, const char *extra_defines ) { if (vprogram[0] == '\0' && fprogram[0] == '\0') return 0; @@ -185,8 +201,8 @@ } if (extra_defines != NULL) { - vertexprg = std::string(extra_defines) + "\n#line 0\n" + vertexprg; - fragprg = std::string(extra_defines) + "\n#line 0\n" + fragprg; + vertexprg = appendDefines( vertexprg, extra_defines ); + fragprg = appendDefines( fragprg, extra_defines ); } GLint vproghandle = 0; |