//---------------------------------------------------------------------
	void GpuProgramUsage::loadingComplete(Resource* prog)
	{
		// Need to re-create parameters
		if (mRecreateParams)
			recreateParameters();

	}
	//-----------------------------------------------------------------------------
	void GpuProgramUsage::setProgramName(const String& name, bool resetParams)
	{
		if (!mProgram.isNull())
		{
			mProgram->removeListener(this);
			mRecreateParams = true;
		}

		mProgram = GpuProgramManager::getSingleton().getByName(name);

        if (mProgram.isNull())
        {
			String progType = (mType == GPT_VERTEX_PROGRAM ? "vertex" : 
				(mType == GPT_GEOMETRY_PROGRAM ? "geometry" : "fragment"));
            OGRE_EXCEPT(Exception::ERR_ITEM_NOT_FOUND, 
                "Unable to locate " + progType + " program called " + name + ".",
                "GpuProgramUsage::setProgramName");
        }

        // Reset parameters 
        if (resetParams || mParameters.isNull() || mRecreateParams)
		{
			recreateParameters();
		}

		// Listen in on reload events so we can regenerate params
		mProgram->addListener(this);

	}
    //-----------------------------------------------------------------------------
    void GpuProgramUsage::setProgramName(const String& name, bool resetParams)
    {
        if (!mProgram.isNull())
        {
            mProgram->removeListener(this);
            mRecreateParams = true;
        }

        mProgram = GpuProgramManager::getSingleton().getByName(name, mParent->getResourceGroup());
        
        //Look again without the group if not found
        if (mProgram.isNull())
            mProgram = GpuProgramManager::getSingleton().getByName(name);
        
        if (mProgram.isNull())
        {
            String progType = "fragment";
            if (mType == GPT_VERTEX_PROGRAM)
            {
                progType = "vertex";
            }
            else if (mType == GPT_GEOMETRY_PROGRAM)
            {
                progType = "geometry";
            }
            else if (mType == GPT_DOMAIN_PROGRAM)
            {
                progType = "domain";
            }
            else if (mType == GPT_HULL_PROGRAM)
            {
                progType = "hull";
            }
            else if (mType == GPT_COMPUTE_PROGRAM)
            {
                progType = "compute";
            }

            OGRE_EXCEPT(Exception::ERR_ITEM_NOT_FOUND, 
                "Unable to locate " + progType + " program called " + name + ".",
                "GpuProgramUsage::setProgramName");
        }

        // Reset parameters 
        if (resetParams || mParameters.isNull() || mRecreateParams)
        {
            recreateParameters();
        }

        // Listen in on reload events so we can regenerate params
        mProgram->addListener(this);

    }