Defer worker thread creation until the first draw call.

crbug.com/336438
diff --git a/src/Renderer/Renderer.cpp b/src/Renderer/Renderer.cpp
index 030ab6b..41a3cbb 100644
--- a/src/Renderer/Renderer.cpp
+++ b/src/Renderer/Renderer.cpp
@@ -183,8 +183,6 @@
 			delete drawCall[draw];
 		}
 
-		deleteBatches();
-
 		delete swiftConfig;
 	}
 
@@ -1831,14 +1829,10 @@
 			   Clipper::CLIP_FINITE;   // FIXME: xyz finite
 	}
 
-	void Renderer::initializeThreads(int threads)
+	void Renderer::initializeThreads()
 	{
-		terminateThreads();
-		deleteBatches();
-
-		threadCount = threads;
-		unitCount = ceilPow2(threads);
-		clusterCount = ceilPow2(threads);
+		unitCount = ceilPow2(threadCount);
+		clusterCount = ceilPow2(threadCount);
 
 		for(int i = 0; i < unitCount; i++)
 		{
@@ -1894,10 +1888,7 @@
 			deallocate(vertexTask[thread]);
 			vertexTask[thread] = 0;
 		}
-	}
 
-	void Renderer::deleteBatches()
-	{
 		for(int i = 0; i < 16; i++)
 		{
 			deallocate(triangleBatch[i]);
@@ -2440,17 +2431,17 @@
 
 			switch(configuration.textureSampleQuality)
 			{
-			case 0:  Sampler::setFilterQuality(FILTER_POINT);			break;
-			case 1:  Sampler::setFilterQuality(FILTER_LINEAR);			break;
-			case 2:  Sampler::setFilterQuality(FILTER_ANISOTROPIC);	break;
-			default: Sampler::setFilterQuality(FILTER_ANISOTROPIC);	break;
+			case 0:  Sampler::setFilterQuality(FILTER_POINT);       break;
+			case 1:  Sampler::setFilterQuality(FILTER_LINEAR);      break;
+			case 2:  Sampler::setFilterQuality(FILTER_ANISOTROPIC); break;
+			default: Sampler::setFilterQuality(FILTER_ANISOTROPIC); break;
 			}
 
 			switch(configuration.mipmapQuality)
 			{
 			case 0:  Sampler::setMipmapQuality(MIPMAP_POINT);  break;
 			case 1:  Sampler::setMipmapQuality(MIPMAP_LINEAR); break;
-			default: Sampler::setMipmapQuality(MIPMAP_LINEAR);  break;
+			default: Sampler::setMipmapQuality(MIPMAP_LINEAR); break;
 			}
 
 			setPerspectiveCorrection(configuration.perspectiveCorrection);
@@ -2497,16 +2488,16 @@
 
 			switch(configuration.transparencyAntialiasing)
 			{
-			case 0:		transparencyAntialiasing = Context::TRANSPARENCY_NONE;				break;
-			case 1:		transparencyAntialiasing = Context::TRANSPARENCY_ALPHA_TO_COVERAGE;	break;
-			default:	transparencyAntialiasing = Context::TRANSPARENCY_NONE;				break;
+			case 0:  transparencyAntialiasing = Context::TRANSPARENCY_NONE;              break;
+			case 1:  transparencyAntialiasing = Context::TRANSPARENCY_ALPHA_TO_COVERAGE; break;
+			default: transparencyAntialiasing = Context::TRANSPARENCY_NONE;              break;
 			}
 
 			switch(configuration.threadCount)
 			{
-			case -1: initializeThreads(CPUID::coreCount());        break;
-			case 0:  initializeThreads(CPUID::processAffinity());  break;
-			default: initializeThreads(configuration.threadCount); break;
+			case -1: threadCount = CPUID::coreCount();        break;
+			case 0:  threadCount = CPUID::processAffinity();  break;
+			default: threadCount = configuration.threadCount; break;
 			}
 
 			CPUID::setEnableSSE4_1(configuration.enableSSE4_1);
@@ -2531,5 +2522,10 @@
 			maxPrimitives = configuration.maxPrimitives;
 		#endif
 		}
+
+		if(!initialUpdate && !worker[0])
+		{
+			initializeThreads();
+		}
 	}
 }