Browse Source

Fixes to DX9 param block parsing and start-up

Marko Pintera 11 years ago
parent
commit
be684eb127

+ 2 - 2
BansheeCore/Source/BsCoreApplication.cpp

@@ -78,10 +78,10 @@ namespace BansheeEngine
 		RendererManager::startUp();
 
 		loadPlugin(desc.renderer);
-		RendererManager::instance().setActive(desc.renderer);
-
 		loadPlugin(desc.sceneManager, &mSceneManagerPlugin);
 
+		RendererManager::instance().setActive(desc.renderer);
+
 		ProfilerGPU::startUp();
 		MeshManager::startUp();
 		MaterialManager::startUp();

+ 4 - 4
BansheeD3D9RenderSystem/Include/BsD3D9HLSLParamParser.h

@@ -76,10 +76,10 @@ namespace BansheeEngine
 		{
 			mParamDesc.paramBlocks.insert(std::make_pair(block.blockName, GpuParamBlockDesc()));
 			GpuParamBlockDesc& blockDesc = mParamDesc.paramBlocks[block.blockName];
-			globalBlockDesc.name = block.blockName;
-			globalBlockDesc.slot = curSlot++;
-			globalBlockDesc.blockSize = 0;
-			globalBlockDesc.isShareable = true;
+			blockDesc.name = block.blockName;
+			blockDesc.slot = curSlot++;
+			blockDesc.blockSize = 0;
+			blockDesc.isShareable = true;
 
 			for (auto& fieldName : block.paramNames)
 			{

+ 8 - 7
BansheeD3D9RenderSystem/Source/BsD3D9EmulatedParamBlocks.cpp

@@ -5,17 +5,17 @@ namespace BansheeEngine
 {
 	String D3D9EmulatedParamBlockParser::parse(const String& gpuProgSource, Vector<D3D9EmulatedParamBlock>& paramBlocks)
 	{
-		static std::regex paramBlockRegex("BS_PARAM_BLOCK\\s*(.*})");
-		static std::regex blockNameRegex("([^\\s{]*)");
-		static std::regex paramNameRegex("(?:{ *([^\\, ]*))|(?:\\, *([^\\, }]*))");
-		static std::regex replaceRegex("BS_PARAM_BLOCK\\s*(.*}\\n?)");
+		static std::regex paramBlockRegex("BS_PARAM_BLOCK\\s*(.*\\})");
+		static std::regex blockNameRegex("([^\\s\\{]*)");
+		static std::regex paramNameRegex("(?:\\{ *([^\\, ]*))|(?:\\, *([^\\, \\}]*))");
+		static std::regex replaceRegex("BS_PARAM_BLOCK\\s*(.*\\}\\n?)");
 
 		std::sregex_iterator paramBlockIter(gpuProgSource.begin(), gpuProgSource.end(), paramBlockRegex);
 		std::sregex_iterator iterEnd;
 
 		while (paramBlockIter != iterEnd)
 		{
-			std::string stdString = paramBlockIter->str();
+			std::string stdString = (*paramBlockIter)[1];
 			String paramBlockString = String(stdString.begin(), stdString.end());
 
 			paramBlocks.push_back(D3D9EmulatedParamBlock());
@@ -24,15 +24,16 @@ namespace BansheeEngine
 			std::smatch nameMatch;
 			if (std::regex_search(paramBlockString, nameMatch, blockNameRegex))
 			{
-				stdString = nameMatch.str();
+				stdString = nameMatch[1];
 				block.blockName = String(stdString.begin(), stdString.end());
 			}
 
 			std::sregex_iterator paramNameIter(paramBlockString.begin(), paramBlockString.end(), paramNameRegex);
 			while (paramNameIter != iterEnd)
 			{
-				stdString = paramNameIter->str();
+				stdString = (*paramNameIter)[1];
 				block.paramNames.push_back(String(stdString.begin(), stdString.end()));
+				paramNameIter++;
 			}
 
 			paramBlockIter++;