예제 #1
0
파일: CCMaterial.cpp 프로젝트: Alprog/LHR2
bool Material::initWithGLProgramState(cocos2d::GLProgramState *state)
{
    auto technique = Technique::createWithGLProgramState(this, state);
    if (technique) {
		setTechnique(0, technique);

        // weak pointer
        _currentTechnique = technique;

        return true;
    }
    return false;
}
예제 #2
0
파일: CCMaterial.cpp 프로젝트: Alprog/LHR2
Material* Material::clone() const
{
    auto material = new (std::nothrow) Material();
    if (material)
    {
        RenderState::cloneInto(material);

        for (const auto& pair: _techniques)
        {
			material->setTechnique(pair.first, pair.second->clone());
        }

		material->_currentTechnique = material->_techniques.at(0);

        material->autorelease();
    }
    return material;
}
예제 #3
0
	void cWaterUberShader::setMaterialParam(cMaterial const* mtl)
	{
		setTechnique(m_handle[H_TUBER]);

		if (m_handle[H_DIFFUSE_TEXTURE])
		{
			cTexture* tex = _getTextureMgr()->getTexture(mtl->m_mapBuid[cMaterial::DIFFUSE]);
			setTexture(m_handle[H_DIFFUSE_TEXTURE], tex);
		}
		if (m_handle[H_NORMAL_TEXTURE])
		{
			cTexture* tex = _getTextureMgr()->getTexture(m_normalTexBuid);
			setTexture(m_handle[H_NORMAL_TEXTURE], tex);
		}
		if (m_handle[H_ENVIRONMENT_TEXTURE])
		{
			cTexture* tex = _getTextureMgr()->getTexture(m_environmentTexBuid);
			setTexture(m_handle[H_ENVIRONMENT_TEXTURE], tex);
		}

		if (m_handle[H_TIMER])
		{
			setFloat(m_handle[H_TIMER], m_time);
		}

		setVector(_T("textureScale"),  &m_textureScale);
		setFloat(_T("waveFreq"), m_waveFreq);
		setFloat(_T("waveAmp"), m_waveAmp);
		setFloat(_T("bumpScale"), m_bumpScale);
		setVector(_T("bumpSpeed"), &m_bumpSpeed);
		setVector(_T("deepColor"), &m_deepColor);
		setVector(_T("shallowColor"), &m_shallowColor);
		setFloat(_T("waterAmount"), m_waterAmount);
		setVector(_T("reflectionColor"), &m_reflectionColor);
		setFloat(_T("reflectionAmount"), m_reflectionAmount);
		setFloat(_T("reflectionBlur"), m_reflectionBlur);
		setFloat(_T("fresnelPower"), m_fresnelPower);
		setFloat(_T("fresnelBias"), m_fresnelBias);
		setFloat(_T("hdrMultiplier"), m_hdrMultiplier);
	}
예제 #4
0
void SaAoRenderer::reloadShaders() {
	if (geometryPassShader) delete geometryPassShader;
	if (processingPassShader) delete processingPassShader;
	if (filteringPassShader) delete filteringPassShader;

	/*
	geometryPassShader = new SaAoGeometryPassShader();
	processingPassShader = new SaAoProcessingPassShader(shadersCompileConstants);
	filteringPassShader = new SaAoFilteringPassShader();
	*/

	initShaderPrograms();

	VSGLInfoLib::getUniformsInfo(processingPassShader->getId());

	screenSpaceRayOrigin = glm::vec2(0,0);
	screenSpaceEmisphereCenter = glm::vec2(0,0);

	setTextureMapping(isTextureMappingEnabled());
	setNormalMapping(isNormalMappingEnabled());
	setSpecularMapping(isSpecularMappingEnabled());
	setOpacityMapping(isOpacityMappingEnabled());

	setShowingGBuffer(isShowingGBuffer());

	/*
	setShowingArea(isShowingArea());
	setShowingSampling(isShowingSampling());
	setShowingSamplingDensity(isShowingSamplingDensity());
	setShowingZoomedArea(isShowingZoomedArea());
	*/

	setAoSamplingRadius(getAoSamplingRadius());
	setAoAngleBias(getAoAngleBias());
	setAoMaxDistance(getAoMaxDistance());
	setAoNumSamples(getAoNumSamples());

	setSamplingPatternId(getSamplingPatternId());

	setAoMultiplier(getAoMultiplier());
	setAreaMultiplier(getAreaMultiplier());
	setSolidAngleMultiplier(getSolidAngleMultiplier());

	setHemisphereSamplingMode(getHemisphereSamplingMode());

	setAlbedoEnabled(isAlbedoEnabled());
	setAoEnabled(isAoEnabled());
	
	setAmbientEnabled(isAmbientEnabled());
	setDirectEnabled(isDirectEnabled());

	setAoComputationId(getAoComputationId());	
	setAreaComputationId(getAreaComputationId());

	setBlurEnabled(isBlurEnabled());
	setBlurKdepth(getBlurKdepth());
	setBlurKnormal(getBlurKnormal());
	setBlurKernelSize(getBlurKernelSize());

	setAlchemyK(getAlchemyK());
	setAlchemyRO(getAlchemyRO());
	setAlchemyU(getAlchemyU());

	setTechnique(getTechnique());

	reshape(winW, winH);
}
예제 #5
0
void SaAoRenderer::init(int awinW, int awinH) {
	printf("initializing %s\n", getLabel().c_str());

	winW = awinW;
	winH = awinH;

	initMrtBuffers(winW, winH);
	initShaderPrograms();
	ssd.init();

	// when depth test enabled, accept fragment if closer to the camera than the former one
	glDepthFunc(GL_LESS);

	//glEnable(GL_CULL_FACE);

	// disable blending
	glDisable(GL_BLEND);



	VSGLInfoLib::getCurrentTextureInfo();

	screenSpaceRayOrigin = glm::vec2(0,0);
	screenSpaceEmisphereCenter = glm::vec2(300,300);

	setTextureMapping(true);
	setNormalMapping(true);
	setSpecularMapping(true);
	setOpacityMapping(true);

	setShowingGBuffer(false);

/*	setShowingArea(false);
	setShowingSampling(false);
	setShowingSamplingDensity(false);
	setShowingZoomedArea(false);
*/

	setAoSamplingRadius(DEFAULT_SAMPLINGRADIUS);
	setAoAngleBias(DEFAULT_ANGLEBIAS);
	setAoMaxDistance(DEFAULT_MAXDIST);
	setAoNumSamples(DEFAULT_NUMSAMPLES);

	setAoMultiplier(1.0f);
	setAreaMultiplier(1.0f);
	setSolidAngleMultiplier(1.0f);

	setAlchemyK(1.0);
	setAlchemyRO(1.0);
	setAlchemyU(0.0001);

	setSamplingPatternId(SamplingPatternShaderSub::emisphere);
	setHemisphereSamplingMode(HemisphereSampling::HEMISPHERE_RANDOM);
	setUniformSamplingRadius(false);

	setTechnique(SaAoProcessingPassShader::SASSAO);

	
	setAoComputationId(D2DaoShaderSub::dssao);	
	setAreaComputationId(AreaCalculatorShaderSub::circumscribedCircleArea);


	setAlbedoEnabled(true);
	setAoEnabled(true);
	setAmbientEnabled(true);
	setDirectEnabled(true);

	setBlurEnabled(true);
	setBlurKdepth(10.0);
	setBlurKnormal(20.0);
	setBlurKernelSize(3);

	// init full screen quad
	quad = new FullScreenQuad();

	reshape(awinW, awinH);
}