void RenderStates::init()
{
  {
    depthStencilStates.resize(DepthStencilStates::kCount);
    initDepthStencilStates();

    inputAssemblyStates.resize(InputAssemblyStates::kCount);
    initInputAssemblyStates();

    rasterizationStates.resize(RasterizationStates::kCount);
    initRasterizationStates();

    blendStates.resize(BlendStates::kCount);
    initBlendStates();
  }
}
void VegetationRendering::init(ID3D11Device* device)
{
	Config::addFile(configPath);

	camera->init();
	inputManager->init();
	terrain->init(device);
	tessellationTerrain->init(device);
	gsGrass->init(device);
	complexGrass->init(device);
	defaultGrassModel->init(device);
	defaultGrassDetailedModel->init(device);
	separateLeafModel->init(device);
	separateLeafModel->setWorld(Matrix::createTranslation(10, 0, 10));
	billboardLeafModel->init(device);
	billboardLeafModel->setWorld(Matrix::createTranslation(20, 0, 10));
	trunk->init(device);
	defaultTrunkModel->init(device);
	defaultTrunkDetailedModel->init(device);

	//trunk->setDrawInstanceCount(50);

	light.Direction = Config::getValue<Vector3>(ConfigKeys::lightDirection);
	light.Ambient = Config::getValue<Vector3>(ConfigKeys::lightAmbient);
	light.Diffuse = Config::getValue<Vector3>(ConfigKeys::lightDiffuse);
	light.Specular = Config::getValue<Vector3>(ConfigKeys::lightSpecular);

	initRasterizerStates(device);
	initBlendStates(device);

	grassTestInstanceCounts.push_back(100);
	grassTestInstanceCounts.push_back(1000);
	grassTestInstanceCounts.push_back(5000);
	grassTestInstanceCounts.push_back(10000);
	grassTestInstanceCounts.push_back(20000);
	grassTestInstanceCounts.push_back(30000);
	grassTestInstanceCounts.push_back(50000);
	//grassTestInstanceCounts.push_back(100000);

	treeTestInstanceCounts.push_back(50);
	treeTestInstanceCounts.push_back(500);
	treeTestInstanceCounts.push_back(1000);
	treeTestInstanceCounts.push_back(5000);
	treeTestInstanceCounts.push_back(8000);
	treeTestInstanceCounts.push_back(10000);
	treeTestInstanceCounts.push_back(15000);
}