Пример #1
0
	virtual GpuProgramPtr generateFragmentShader(Perm permutation)
	{
		/// Create shader
		if (mMasterSource.empty())
		{
			DataStreamPtr ptrMasterSource = ResourceGroupManager::getSingleton().openResource(
				 "DeferredShading/post/LightMaterial_ps.cg"
				, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
			assert(ptrMasterSource.isNull()==false);
			mMasterSource = ptrMasterSource->getAsString();
		}

		assert(mMasterSource.empty()==false);

		// Create name
		String name = mBaseName+StringConverter::toString(permutation)+"_ps";		

		// Create shader object
		HighLevelGpuProgramPtr ptrProgram = HighLevelGpuProgramManager::getSingleton().createProgram(
			name, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
			"cg", GPT_FRAGMENT_PROGRAM);
		ptrProgram->setSource(mMasterSource);
		ptrProgram->setParameter("entry_point","main");
	    ptrProgram->setParameter("profiles","ps_2_x arbfp1");
		// set up the preprocessor defines
		// Important to do this before any call to get parameters, i.e. before the program gets loaded
		ptrProgram->setParameter("compile_arguments", getPPDefines(permutation));

		setUpBaseParameters(ptrProgram->getDefaultParameters());

		return GpuProgramPtr(ptrProgram);
	}
Пример #2
0
Ogre::DataStreamPtr TerrainGeometryManager::getPageConfig(int x, int z)
{
	String cfg = getPageConfigFilename(x, z);

	try
	{
		LOG("loading page config for page " + XZSTR(x,z) + " : " + cfg);
		DataStreamPtr ds = ResourceGroupManager::getSingleton().openResource(cfg, Ogre::ResourceGroupManager::AUTODETECT_RESOURCE_GROUP_NAME);

		if (!ds.isNull() && ds->isReadable())
		{
			return ds;
		}
	} catch (...)
	{

	}

	LOG("error loading page config for page " + XZSTR(x,z) + " : " + cfg);

	if (x != 0 || z != 0)
	{
		LOG("loading default page config: " + cfg + " instead");
		return getPageConfig(0, 0);
	}

	return DataStreamPtr();
}
Пример #3
0
	//---------------------------------------------------------------------
	String Texture::getSourceFileType() const
	{
		if (mName.empty())
			return StringUtil::BLANK;

		String::size_type pos = mName.find_last_of(".");
		if (pos != String::npos && pos < (mName.length() - 1))
		{
			String ext = mName.substr(pos+1);
			StringUtil::toLowerCase(ext);
			return ext;
		}
		else
		{
			// No extension
			DataStreamPtr dstream;
			try
			{
				dstream = ResourceGroupManager::getSingleton().openResource(
						mName, mGroup, true, 0);
			}
			catch (Exception&)
			{
			}
			if (dstream.isNull() && getTextureType() == TEX_TYPE_CUBE_MAP)
			{
				// try again with one of the faces (non-dds)
				try
				{
					dstream = ResourceGroupManager::getSingleton().openResource(
						mName + "_rt", mGroup, true, 0);
				}
				catch (Exception&)
				{
				}
			}

			if (!dstream.isNull())
			{
				return Image::getFileExtFromMagic(dstream);
			}
		}

		return StringUtil::BLANK;

	}
Rocket::Core::FileHandle FileInterfaceOgre3D::Open(const Rocket::Core::String& path)
{
	DataStreamPtr stream = ResourceGroupManager::getSingleton().openResource(path.CString());
	if (stream.isNull())
		return 0;	

	return (Rocket::Core::FileHandle)(new DataStreamPtr(stream));
}
Пример #5
0
Ogre::String TerrainGeometryManager::getPageHeightmap(int x, int z)
{
	DataStreamPtr ds = getPageConfig(x, z);

	if (ds.isNull())
		return "";

	char buf[4096];
	ds->readLine(buf, 4096);
	return String(buf);
}
Пример #6
0
	virtual GpuProgramPtr generateFragmentShader(Perm permutation)
	{
		/// Create shader
		if (mMasterSource.empty())
		{
			DataStreamPtr ptrMasterSource;
            if(GpuProgramManager::getSingleton().isSyntaxSupported("glsles"))
                ptrMasterSource = ResourceGroupManager::getSingleton().openResource("DeferredShading/post/LightMaterial_ps.glsles",
                                                                                    ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
            else
                ptrMasterSource = ResourceGroupManager::getSingleton().openResource("DeferredShading/post/LightMaterial_ps.glsl",
                                                                                    ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);

			assert(ptrMasterSource.isNull()==false);
			mMasterSource = ptrMasterSource->getAsString();
		}

		assert(mMasterSource.empty()==false);

		// Create name
		String name = mBaseName+StringConverter::toString(permutation)+"_ps";

		// Create shader object
		HighLevelGpuProgramPtr ptrProgram;
        if(GpuProgramManager::getSingleton().isSyntaxSupported("glsles"))
        {
            ptrProgram = HighLevelGpuProgramManager::getSingleton().createProgram(name, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
                                                                                  "glsles", GPT_FRAGMENT_PROGRAM);
            ptrProgram->setParameter("profiles", "glsles");
        }
        else
        {
            ptrProgram = HighLevelGpuProgramManager::getSingleton().createProgram(name, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
                                                                                  "glsl", GPT_FRAGMENT_PROGRAM);
            ptrProgram->setParameter("profiles", "glsl150");
        }
        ptrProgram->setSource(mMasterSource);
		// set up the preprocessor defines
		// Important to do this before any call to get parameters, i.e. before the program gets loaded
		ptrProgram->setParameter("preprocessor_defines", getPPDefines(permutation));

		setUpBaseParameters(ptrProgram->getDefaultParameters());

        // Bind samplers
		GpuProgramParametersSharedPtr params = ptrProgram->getDefaultParameters();
        int numSamplers = 0;
        params->setNamedConstant("Tex0", (int)numSamplers++);
        params->setNamedConstant("Tex1", (int)numSamplers++);

        if(permutation & LightMaterialGenerator::MI_SHADOW_CASTER)
            params->setNamedConstant("ShadowTex", (int)numSamplers++);

		return GpuProgramPtr(ptrProgram);
	}
Пример #7
0
bool TestArchive()
{
  //root->addResourceLocation("d:\\a.zip", "Zip");
  root->addResourceLocation("../../media/packs/dragon.zip", "Zip");
  // Pick a sample file
  String tex = "legs.jpg";
  //String tex = "a.h";
  cout << "Opening file: " << tex << endl;

  // Get it from the resource system
  DataStreamPtr data = ResourceGroupManager::getSingleton().openResource(tex, "General");
  if( !data.isNull() )
  {
	cout << "Size: " << data->size() << endl;
	return true;
  }else
  {
	return false;
  }	
}
Пример #8
0
bool LuaScript::LoadTextFile
    (
    const String& fileName,
    String& text,
    const String& resourceGroupName
    )
{
    //Open the file
    try
    {
        DataStreamPtr stream = ResourceGroupManager::getSingleton().openResource(fileName, resourceGroupName);
        if (stream.isNull())
            return false;

        //Get the text file contents
        text = stream->getAsString();
        return true;
    }
    catch (...)
    {
        return false;
    }
}
Пример #9
0
//Implementation---------------------------------------------------------------
void OgreMaxUtilities::LoadXmlDocument(const String& fileName, TiXmlDocument& document, const String& resourceGroupName)
{
    //Open the file
    DataStreamPtr stream = ResourceGroupManager::getSingleton().openResource(fileName, resourceGroupName);
    if (stream.isNull())
    {
        StringUtil::StrStreamType errorMessage;
        errorMessage << "Could not open XML file: " << fileName;

        OGRE_EXCEPT
            (
            Exception::ERR_FILE_NOT_FOUND,
		    errorMessage.str(), 
		    "OgreMaxUtilities::LoadXmlDocument"
            );
    }

    //Get the file contents
    String data = stream->getAsString();
    
    //Parse the XML document
    document.Parse(data.c_str());
    stream.setNull();
    if (document.Error())
    {
        StringUtil::StrStreamType errorMessage;
        errorMessage << "There was an error with the XML file: " << fileName;

        OGRE_EXCEPT
            (
            Exception::ERR_INVALID_STATE,
		    errorMessage.str(), 
		    "OgreMaxUtilities::LoadXmlDocument"
            );
    }
}
Пример #10
0
// if terrain is set, we operate on the already loaded terrain
void TerrainGeometryManager::loadLayers(int x, int z, Terrain *terrain)
{
	if (pageConfigFormat.empty()) return;
	
	DataStreamPtr ds = getPageConfig(x, z);

	if (ds.isNull())
		return;

	char line[4096];
	ds->readLine(line, 4096);
	String heightmapImage = String(line);
	ds->readLine(line, 4096);
	terrainLayers = PARSEINT(String(line));

	if (terrainLayers == 0)
		return;

	Ogre::Terrain::ImportData &defaultimp = mTerrainGroup->getDefaultImportSettings();

	if (!terrain)
		defaultimp.layerList.resize(terrainLayers);

	blendInfo.clear();
	blendInfo.resize(terrainLayers);

	int layer = 0;

	while (!ds->eof())
	{
		size_t ll = ds->readLine(line, 4096);
		if (ll==0 || line[0]=='/' || line[0]==';') continue;

		StringVector args = StringUtil::split(String(line), ",");
		if (args.size() < 3)
		{
			LOG("invalid page config line: '" + String(line) + "'");
			continue;
		}

		StringUtil::trim(args[1]);
		StringUtil::trim(args[2]);

		float worldSize = PARSEREAL(args[0]);
		if (!terrain)
		{
			defaultimp.layerList[layer].worldSize = worldSize;
			defaultimp.layerList[layer].textureNames.push_back(args[1]);
			defaultimp.layerList[layer].textureNames.push_back(args[2]);
		} else
		{
			terrain->setLayerWorldSize(layer, worldSize);
			terrain->setLayerTextureName(layer, 0, args[1]);
			terrain->setLayerTextureName(layer, 1, args[2]);
		}
			
		blendLayerInfo_t &bi = blendInfo[layer];
		bi.blendMode = 'R';
		bi.alpha = 'R';

		if (args.size() > 3)
		{
			StringUtil::trim(args[3]);
			bi.blendMapTextureFilename = args[3];
		}
		if (args.size() > 4)
		{
			StringUtil::trim(args[4]);
			bi.blendMode = args[4][0];
		}
		if (args.size() > 5)
			bi.alpha = PARSEREAL(args[5]);

		layer++;
		if (layer >= terrainLayers)
			break;
	}
	LOG("done loading page: loaded " + TOSTRING(layer) + " layers");
}