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; }
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; }
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); }
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); }
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); }