From: <rly...@us...> - 2010-12-07 12:31:48
|
Revision: 6491 http://planeshift.svn.sourceforge.net/planeshift/?rev=6491&view=rev Author: rlydontknow Date: 2010-12-07 12:31:42 +0000 (Tue, 07 Dec 2010) Log Message: ----------- added option "PlaneShift.Loading.ThreadedShaders" that controls whether shaders should be loaded threaded parse-time defaults to false (note this changes the current behaviour as it used to always load them per default) works around some race conditions in the shadermanager Modified Paths: -------------- trunk/src/common/bgloader/loader.cpp trunk/src/common/bgloader/loader.h trunk/src/common/bgloader/parser.cpp Modified: trunk/src/common/bgloader/loader.cpp =================================================================== --- trunk/src/common/bgloader/loader.cpp 2010-12-07 12:25:17 UTC (rev 6490) +++ trunk/src/common/bgloader/loader.cpp 2010-12-07 12:31:42 UTC (rev 6491) @@ -162,6 +162,9 @@ // Check whether we want to parse shaders parseShaders = config->GetBool("PlaneShift.Loading.ParseShaders",true); + // Check whether we want to load shaders threaded. + blockShaderLoad = !config->GetBool("PlaneShift.Loading.ThreadedShaders",false); + // Check the level of shader use. csString shader(config->GetStr("PlaneShift.Graphics.Shaders")); if(shader.CompareNoCase("Highest")) Modified: trunk/src/common/bgloader/loader.h =================================================================== --- trunk/src/common/bgloader/loader.h 2010-12-07 12:25:17 UTC (rev 6490) +++ trunk/src/common/bgloader/loader.h 2010-12-07 12:31:42 UTC (rev 6491) @@ -664,6 +664,9 @@ // Whether we want to parse shaders. bool parseShaders; + // Whether to load shaders blocking or not. + bool blockShaderLoad; + // Our load range ^_^ float loadRange; Modified: trunk/src/common/bgloader/parser.cpp =================================================================== --- trunk/src/common/bgloader/parser.cpp 2010-12-07 12:25:17 UTC (rev 6490) +++ trunk/src/common/bgloader/parser.cpp 2010-12-07 12:31:42 UTC (rev 6491) @@ -77,7 +77,14 @@ csRef<iDocumentNode> file = node->GetNode("file"); shaders.Push(file->GetContentsValue()); - rets.Push(tloader->LoadShader(vfs->GetCwd(), file->GetContentsValue())); + if(blockShaderLoad) + { + rets.Push(tloader->LoadShaderWait(vfs->GetCwd(), file->GetContentsValue())); + } + else + { + rets.Push(tloader->LoadShader(vfs->GetCwd(), file->GetContentsValue())); + } shadersByUsageType.Put(strings->Request(node->GetNode("type")->GetContentsValue()), node->GetAttributeValue("name")); @@ -274,7 +281,14 @@ if(loadShader && parseShaders) { // Dispatch shader load to a thread. - rets.Push(tloader->LoadShader(vfs->GetCwd(), node->GetContentsValue())); + if(blockShaderLoad) + { + rets.Push(tloader->LoadShader(vfs->GetCwd(), node->GetContentsValue())); + } + else + { + rets.Push(tloader->LoadShaderWait(vfs->GetCwd(), node->GetContentsValue())); + } } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |