bool PropertyPaneTerrain::_OnCreate()
{
	CXTPPropertyGridItem* pCategory = m_wndPropertyGrid.AddCategory(L"Terrain Info");
	PROPERTY_REG(pCategory, Double, L"World Size"			, 0, propWorldSize		);
	PROPERTY_REG(pCategory, Number, L"Map Size"				, 0, propMapSize		);
	PROPERTY_REG(pCategory, Number, L"Min Batch Size"		, 0, propMinBatchSize	);
	PROPERTY_REG(pCategory, Number, L"Max Batch Size"		, 0, propMaxBatchSize	);
	PROPERTY_REG(pCategory, Number, L"Skirt Size"			, 0, propSkirtSize		);
	pCategory->Expand();

	pCategory = m_wndPropertyGrid.AddCategory(L"Terrain Config");
	PROPERTY_REG(pCategory, Number, L"Max Pixel Error"		, 0, propMaxPixelError	);
	PROPERTY_REG(pCategory, Double, L"CompositeMap Distance", 0, propCompMapDist	);
	pCategory->Expand();

// 	size_t maxLayer = ManipulatorSystem.GetScene()->GetTerrainMaxLayer();
// 	for(size_t iLayer=0; iLayer<maxLayer; ++iLayer)
// 	{
// 		std::string strLayer("Layer");
// 		strLayer += Ogre::StringConverter::toString(iLayer);
// 		std::wstring wcsLayer = Utility::EngineToUnicode(strLayer);
// 
// 		pCategory = m_wndPropertyGrid.AddCategory(wcsLayer.c_str());
// 		PROPERTY_REG(pCategory, Double, L"World Size"			, 0, propLayerWorldSize0 + iLayer);
// 		PROPERTY_REG(pCategory,		, L"Diffuse Map"			, L"",propLayerDiffuseMap0 + iLayer);
// 		PROPERTY_REG(pCategory,		, L"Normal Map"				, L"",propLayerNormalMap0 + iLayer);
// 		pCategory->Expand();
// 
// 		_CreateLayerTexList(propLayerDiffuseMap0 + iLayer);
// 		_CreateLayerTexList(propLayerNormalMap0 + iLayer);
// 	}

	return true;
}
bool PropertyPaneEffect::_OnCreate()
{
    CXTPPropertyGridItem* pCategory = m_wndPropertyGrid.AddCategory(L"Shadow");
    PROPERTY_REG(pCategory,	Double	, L"Far Distance"				, 300						, propShadowFarDist);
    PROPERTY_REG(pCategory,	Double	, L"Split Padding"				, 1							, propShadowSplitPadding);
    PROPERTY_REG(pCategory,	Vec3	, L"Optimal Adjust Factor"		, VEC3(0.5f,0.8f,2)		, propShadowOptimalAdjustFactor);
    PROPERTY_REG(pCategory,	Bool	, L"Use Simple Optimal Adjust"	, TRUE						, propShadowUseSimpleOptimalAdjust);
    PROPERTY_REG(pCategory, Number	, L"Camera Light Direction Threshold", 45					, propShadowCameraLightDirectionThreshold);
    PROPERTY_REG(pCategory, Vec3	, L"Shadow Map Size"			, VEC3(2048,1024,1024)	, propShadowMapSize);
    PROPERTY_REG(pCategory,	Bool	, L"Self Shadow"				, FALSE						, propShadowSelfShadow);
    PROPERTY_REG(pCategory, Bool	, L"Render Back Faces"			, TRUE						, propShadowCasterRenderBackFaces);
    PROPERTY_REG(pCategory,	Double	, L"Lambda"						, 0.75f						, propShadowLambda);
    PROPERTY_REG(pCategory,	Double	, L"Extrusion Distance"			, 10000						, propShadowDirectionalLightExtrusionDistance);
    pCategory->Expand();

    pCategory = m_wndPropertyGrid.AddCategory(L"SSAO");
    PROPERTY_REG(pCategory,	Double	, L"Sample Length"				, 20						, propSSAOSampleLength);
    PROPERTY_REG(pCategory,	Double	, L"Offset Scale"				, 1							, propSSAOOffsetScale);
    PROPERTY_REG(pCategory,	Double	, L"Default Accessibility"		, 0.5f						, propSSAODefaultAccessibility);
    PROPERTY_REG(pCategory,	Double	, L"Edge Highlight"				, 1.99f						, propSSAOEdgeHighlight);
    pCategory->Expand();

    (dynamic_cast<CXTPPropertyGridItemVec3*>(m_mapItem[propShadowOptimalAdjustFactor]))->SetChildItemID(propOptimalAdjustFactor0, propOptimalAdjustFactor1, propOptimalAdjustFactor2);
    (dynamic_cast<CXTPPropertyGridItemVec3*>(m_mapItem[propShadowMapSize]))->SetChildItemID(propShadowMapSize0, propShadowMapSize1, propShadowMapSize2);

    return true;
}