Qt3DCore::QBackendNode *RenderShaderDataFunctor::create(const Qt3DCore::QNodeCreatedChangeBasePtr &change) const { ShaderData *backend = m_managers->shaderDataManager()->getOrCreateResource(change->subjectId()); backend->setManagers(m_managers); backend->setRenderer(m_renderer); return backend; }
bool TerrainBlock::_initBaseShader() { ShaderData *shaderData = NULL; if ( !Sim::findObject( "TerrainBlendShader", shaderData ) || !shaderData ) return false; mBaseShader = shaderData->getShader(); mBaseShaderConsts = mBaseShader->allocConstBuffer(); mBaseTexScaleConst = mBaseShader->getShaderConstHandle( "$texScale" ); mBaseTexIdConst = mBaseShader->getShaderConstHandle( "$texId" ); mBaseLayerSizeConst = mBaseShader->getShaderConstHandle( "$layerSize" ); mBaseTarget = GFX->allocRenderToTextureTarget(); GFXStateBlockDesc desc; desc.samplersDefined = true; desc.samplers[0] = GFXSamplerStateDesc::getClampPoint(); desc.samplers[1] = GFXSamplerStateDesc::getWrapLinear(); desc.zDefined = true; desc.zWriteEnable = false; desc.zEnable = false; desc.setBlend( true, GFXBlendSrcAlpha, GFXBlendOne ); desc.cullDefined = true; desc.cullMode = GFXCullNone; desc.colorWriteAlpha = false; mBaseShaderSB = GFX->createStateBlock( desc ); return true; }
bool CloudLayer::onAdd() { if ( !Parent::onAdd() ) return false; setGlobalBounds(); resetWorldBox(); addToScene(); if ( isClientObject() ) { _initTexture(); _initBuffers(); // Find ShaderData ShaderData *shaderData; mShader = Sim::findObject( "CloudLayerShader", shaderData ) ? shaderData->getShader() : NULL; if ( !mShader ) { Con::errorf( "CloudLayer::onAdd - could not find CloudLayerShader" ); return false; } // Create ShaderConstBuffer and Handles mShaderConsts = mShader->allocConstBuffer(); mModelViewProjSC = mShader->getShaderConstHandle( "$modelView" ); mEyePosWorldSC = mShader->getShaderConstHandle( "$eyePosWorld" ); mSunVecSC = mShader->getShaderConstHandle( "$sunVec" ); mTexOffsetSC[0] = mShader->getShaderConstHandle( "$texOffset0" ); mTexOffsetSC[1] = mShader->getShaderConstHandle( "$texOffset1" ); mTexOffsetSC[2] = mShader->getShaderConstHandle( "$texOffset2" ); mTexScaleSC = mShader->getShaderConstHandle( "$texScale" ); mAmbientColorSC = mShader->getShaderConstHandle( "$ambientColor" ); mSunColorSC = mShader->getShaderConstHandle( "$sunColor" ); mCoverageSC = mShader->getShaderConstHandle( "$cloudCoverage" ); mExposureSC = mShader->getShaderConstHandle( "$cloudExposure" ); mBaseColorSC = mShader->getShaderConstHandle( "$cloudBaseColor" ); mNormalHeightMapSC = mShader->getShaderConstHandle( "$normalHeightMap" ); // Create StateBlocks GFXStateBlockDesc desc; desc.setCullMode( GFXCullNone ); desc.setBlend( true ); desc.setZReadWrite( false, false ); desc.samplersDefined = true; desc.samplers[0].addressModeU = GFXAddressWrap; desc.samplers[0].addressModeV = GFXAddressWrap; desc.samplers[0].addressModeW = GFXAddressWrap; desc.samplers[0].magFilter = GFXTextureFilterLinear; desc.samplers[0].minFilter = GFXTextureFilterLinear; desc.samplers[0].mipFilter = GFXTextureFilterLinear; desc.samplers[0].textureColorOp = GFXTOPModulate; mStateblock = GFX->createStateBlock( desc ); } return true; }
bool BasicClouds::onAdd() { if ( !Parent::onAdd() ) return false; setGlobalBounds(); resetWorldBox(); addToScene(); if ( isClientObject() ) { _initTexture(); _initBuffers(); // Find ShaderData ShaderData *shaderData; mShader = Sim::findObject( "BasicCloudsShader", shaderData ) ? shaderData->getShader() : NULL; if ( !mShader ) { Con::errorf( "BasicClouds::onAdd - could not find BasicCloudsShader" ); return false; } // Create ShaderConstBuffer and Handles mShaderConsts = mShader->allocConstBuffer(); mModelViewProjSC = mShader->getShaderConstHandle( "$modelView" ); mTimeSC = mShader->getShaderConstHandle( "$accumTime" ); mTexScaleSC = mShader->getShaderConstHandle( "$texScale" ); mTexDirectionSC = mShader->getShaderConstHandle( "$texDirection" ); mTexOffsetSC = mShader->getShaderConstHandle( "$texOffset" ); mDiffuseMapSC = mShader->getShaderConstHandle( "$diffuseMap" ); // Create StateBlocks GFXStateBlockDesc desc; desc.setCullMode( GFXCullNone ); desc.setBlend( true ); desc.setZReadWrite( false, false ); desc.samplersDefined = true; desc.samplers[0].addressModeU = GFXAddressWrap; desc.samplers[0].addressModeV = GFXAddressWrap; desc.samplers[0].addressModeW = GFXAddressWrap; desc.samplers[0].magFilter = GFXTextureFilterLinear; desc.samplers[0].minFilter = GFXTextureFilterLinear; desc.samplers[0].mipFilter = GFXTextureFilterLinear; desc.samplers[0].textureColorOp = GFXTOPModulate; mStateblock = GFX->createStateBlock( desc ); } return true; }
bool ScatterSky::_initShader() { ShaderData *shaderData; if ( !Sim::findObject( "ScatterSkyShaderData", shaderData ) ) { Con::warnf( "ScatterSky::_initShader - failed to locate shader ScatterSkyShaderData!" ); return false; } Vector<GFXShaderMacro> macros; if ( mColorizeAmt ) macros.push_back( GFXShaderMacro( "USE_COLORIZE" ) ); mShader = shaderData->getShader( macros ); if ( !mShader ) return false; if ( mStateBlock.isNull() ) { GFXStateBlockData *data = NULL; if ( !Sim::findObject( "ScatterSkySBData", data ) ) Con::warnf( "ScatterSky::_initShader - failed to locate ScatterSkySBData!" ); else mStateBlock = GFX->createStateBlock( data->getState() ); } if ( !mStateBlock ) return false; mShaderConsts = mShader->allocConstBuffer(); mModelViewProjSC = mShader->getShaderConstHandle( "$modelView" ); // Camera height, cam height squared, scale and scale over depth. mMiscSC = mShader->getShaderConstHandle( "$misc" ); // Inner and out radius, and inner and outer radius squared. mSphereRadiiSC = mShader->getShaderConstHandle( "$sphereRadii" ); // Rayleigh sun brightness, mie sun brightness and 4 * PI * coefficients. mScatteringCoefficientsSC = mShader->getShaderConstHandle( "$scatteringCoeffs" ); mCamPosSC = mShader->getShaderConstHandle( "$camPos" ); mLightDirSC = mShader->getShaderConstHandle( "$lightDir" ); mSunDirSC = mShader->getShaderConstHandle( "$sunDir" ); mNightColorSC = mShader->getShaderConstHandle( "$nightColor" ); mInverseWavelengthSC = mShader->getShaderConstHandle( "$invWaveLength" ); mNightInterpolantAndExposureSC = mShader->getShaderConstHandle( "$nightInterpAndExposure" ); mUseCubemapSC = mShader->getShaderConstHandle( "$useCubemap" ); mColorizeSC = mShader->getShaderConstHandle( "$colorize" ); return true; }
// Call by cleanup job (single thread) void ShaderData::clearUpdatedProperties() { m_updatedProperties.clear(); const QHash<QString, QVariant>::const_iterator end = m_nestedShaderDataProperties.end(); QHash<QString, QVariant>::const_iterator it = m_nestedShaderDataProperties.begin(); while (it != end) { if (it.value().userType() == QMetaType::QVariantList) { Q_FOREACH (const QVariant &v, it.value().value<QVariantList>()) { ShaderData *nested = lookupResource(v.value<QNodeId>()); if (nested != Q_NULLPTR) nested->clearUpdatedProperties(); } } else {
void ClipMapBlenderCache::initialize( ClipMap *cm ) { mOwningClipMap = cm; mClipMapSize = cm->mClipMapSize; mLightmapScratchTextures.push_back(GTexHandle( mClipMapSize, mClipMapSize, GFormatR8G8B8X8, &ClipMapTextureProfile, avar("%s() - mLightmapScratchTextures (line %d)", __FUNCTION__, __LINE__), 1 )); if (GRAPHIC->getPixelShaderVersion() == 0.0f) { mFixedfunction = true; // Fixed function stateblock GStateBlockDesc sbFF; sbFF.samplersDefined = true; sbFF.samplers[0] = GSamplerStateDesc::getClampLinear(); sbFF.samplers[0].textureColorOp = GTOPSelectARG1; sbFF.samplers[0].colorArg1 = GTATexture; sbFF.samplers[1] = GSamplerStateDesc::getWrapLinear(); mFFBaseLayerSB = GRAPHIC->createStateBlock(sbFF); sbFF.setBlend(true, GBlendOne, GBlendOne); mFFAdditionalLayersSB = GRAPHIC->createStateBlock(sbFF); sbFF.setBlend(true, GBlendDestColor, GBlendSrcColor); sbFF.samplers[1].textureColorOp = GTOPDisable; mFFLightmapSB = GRAPHIC->createStateBlock(sbFF); } else { mFixedfunction = false; // Find and init shaders. ShaderData *sd = NULL; if(GRAPHIC->getPixelShaderVersion() >= 2.0f) { if(!Sim::findObject( ( mLM1 ? "AtlasBlender20ShaderLM1" : "AtlasBlender20Shader" ), sd) || (sd->mShader == NULL)) { Con::errorf("ClipMapBlenderCache::initialize - " "Couldn't find shader 'AtlasBlender20Shader'! Terrain will not blend properly on SM2.0 cards!"); } else { mOnePass = sd->mShader; if (mOnePass) mShaderConsts = mOnePass->allocConstBuffer(); if (mShaderConsts) sd->mapSamplerNames(mShaderConsts); } } else { if(!Sim::findObject( ( mLM1 ? "AtlasBlender11AShaderLM1" : "AtlasBlendeer11AShader" ), sd) || (sd->mShader == NULL)) { Con::errorf("ClipMapBlenderCache::initialize - " "Couldn't find shader 'AtlasBlender11AShader'! Terrain will not blend properly on SM1.0 cards!"); } else { mTwoPass[0] = sd->mShader; if (mTwoPass[0]) mShaderConsts = mTwoPass[0]->allocConstBuffer(); if (mShaderConsts) sd->mapSamplerNames(mShaderConsts); } if(!Sim::findObject( ( mLM1 ? "AtlasBlender11BShaderLM1" : "AtlasBlender11BShader" ), sd) || (sd->mShader == NULL)) { Con::errorf("ClipMapBlenderCache::initialize - " "Couldn't find shader 'AtlasBlender11BShader'! Terrain will not blend properly on SM1.0 cards!"); } else { mTwoPass[1] = sd->mShader; } } if (mShaderConsts) { mModelViewProjSC = mShaderConsts->getShader()->getShaderConstHandle(ShaderVars::modelview); mOpacityMapSC = mShaderConsts->getShader()->getShaderConstHandle("$opacity"); mLightMapSC = mShaderConsts->getShader()->getShaderConstHandle("$lightMap"); mTex1SC = mShaderConsts->getShader()->getShaderConstHandle("$tex1"); mTex2SC = mShaderConsts->getShader()->getShaderConstHandle("$tex2"); mTex3SC = mShaderConsts->getShader()->getShaderConstHandle("$tex3"); mTex4SC = mShaderConsts->getShader()->getShaderConstHandle("$tex4"); mSourceTexScalesSC = mShaderConsts->getShader()->getShaderConstHandle("$sourceTexScales"); } // Init state blocks GStateBlockDesc sbd; sbd.setCullMode(GCullNone); sbd.setZEnable(false); sbd.zWriteEnable = false; sbd.samplersDefined = true; sbd.samplers[0] = GSamplerStateDesc::getClampLinear(); sbd.samplers[1] = GSamplerStateDesc::getClampLinear(); sbd.samplers[2] = GSamplerStateDesc::getWrapLinear(); sbd.samplers[3] = GSamplerStateDesc::getWrapLinear(); sbd.samplers[4] = GSamplerStateDesc::getWrapLinear(); sbd.samplers[5] = GSamplerStateDesc::getWrapLinear(); mOnePassSB = GRAPHIC->createStateBlock(sbd); sbd.setBlend(true, GBlendOne, GBlendOne); mTwoPassSB = GRAPHIC->createStateBlock(sbd); } createOpacityScratchTextures(); }
void GFXGLDevice::setupGenericShaders( GenericShaderType type ) { AssertFatal(type != GSTargetRestore, ""); if( mGenericShader[GSColor] == NULL ) { ShaderData *shaderData; shaderData = new ShaderData(); shaderData->setField("OGLVertexShaderFile", "shaders/common/fixedFunction/gl/colorV.glsl"); shaderData->setField("OGLPixelShaderFile", "shaders/common/fixedFunction/gl/colorP.glsl"); shaderData->setField("pixVersion", "2.0"); shaderData->registerObject(); mGenericShader[GSColor] = shaderData->getShader(); mGenericShaderBuffer[GSColor] = mGenericShader[GSColor]->allocConstBuffer(); mModelViewProjSC[GSColor] = mGenericShader[GSColor]->getShaderConstHandle( "$modelView" ); Sim::getRootGroup()->addObject(shaderData); shaderData = new ShaderData(); shaderData->setField("OGLVertexShaderFile", "shaders/common/fixedFunction/gl/modColorTextureV.glsl"); shaderData->setField("OGLPixelShaderFile", "shaders/common/fixedFunction/gl/modColorTextureP.glsl"); shaderData->setSamplerName("$diffuseMap", 0); shaderData->setField("pixVersion", "2.0"); shaderData->registerObject(); mGenericShader[GSModColorTexture] = shaderData->getShader(); mGenericShaderBuffer[GSModColorTexture] = mGenericShader[GSModColorTexture]->allocConstBuffer(); mModelViewProjSC[GSModColorTexture] = mGenericShader[GSModColorTexture]->getShaderConstHandle( "$modelView" ); Sim::getRootGroup()->addObject(shaderData); shaderData = new ShaderData(); shaderData->setField("OGLVertexShaderFile", "shaders/common/fixedFunction/gl/addColorTextureV.glsl"); shaderData->setField("OGLPixelShaderFile", "shaders/common/fixedFunction/gl/addColorTextureP.glsl"); shaderData->setSamplerName("$diffuseMap", 0); shaderData->setField("pixVersion", "2.0"); shaderData->registerObject(); mGenericShader[GSAddColorTexture] = shaderData->getShader(); mGenericShaderBuffer[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->allocConstBuffer(); mModelViewProjSC[GSAddColorTexture] = mGenericShader[GSAddColorTexture]->getShaderConstHandle( "$modelView" ); Sim::getRootGroup()->addObject(shaderData); shaderData = new ShaderData(); shaderData->setField("OGLVertexShaderFile", "shaders/common/fixedFunction/gl/textureV.glsl"); shaderData->setField("OGLPixelShaderFile", "shaders/common/fixedFunction/gl/textureP.glsl"); shaderData->setSamplerName("$diffuseMap", 0); shaderData->setField("pixVersion", "2.0"); shaderData->registerObject(); mGenericShader[GSTexture] = shaderData->getShader(); mGenericShaderBuffer[GSTexture] = mGenericShader[GSTexture]->allocConstBuffer(); mModelViewProjSC[GSTexture] = mGenericShader[GSTexture]->getShaderConstHandle( "$modelView" ); Sim::getRootGroup()->addObject(shaderData); } MatrixF tempMatrix = mProjectionMatrix * mViewMatrix * mWorldMatrix[mWorldStackSize]; mGenericShaderBuffer[type]->setSafe(mModelViewProjSC[type], tempMatrix); setShader( mGenericShader[type] ); setShaderConstBuffer( mGenericShaderBuffer[type] ); }
bool RenderImposterMgr::ShaderState::init( const String &shaderName, const GFXStateBlockDesc *desc ) { ShaderData *shaderData; if ( !Sim::findObject( shaderName, shaderData ) ) { Con::warnf( "TSImposterRenderMgr - failed to locate shader '%s'!", shaderName.c_str() ); return false; } // We're adding both the lightinfo uncondition and the // prepass conditioner to the shader... we usually only // use one of them, but the extra macros doesn't hurt. Vector<GFXShaderMacro> macros; mLightTarget = MatTextureTarget::findTargetByName( "lightinfo" ); if ( mLightTarget ) mLightTarget->getTargetShaderMacros( ¯os ); MatTextureTargetRef prepassTarget = MatTextureTarget::findTargetByName( "prepass" ); if ( prepassTarget ) prepassTarget->getTargetShaderMacros( ¯os ); // Get the shader. mShader = shaderData->getShader( macros ); if ( !mShader ) return false; mConsts = mShader->allocConstBuffer(); mWorldViewProjectSC = mShader->getShaderConstHandle( "$modelViewProj" ); mCamPosSC = mShader->getShaderConstHandle( "$camPos" ); mCamRightSC = mShader->getShaderConstHandle( "$camRight" ); mCamUpSC = mShader->getShaderConstHandle( "$camUp" ); mSunDirSC = mShader->getShaderConstHandle( "$sunDir" ); mFogDataSC = mShader->getShaderConstHandle( "$fogData" ); mParamsSC = mShader->getShaderConstHandle( "$params" ); mUVsSC = mShader->getShaderConstHandle( "$uvs" ); mLightColorSC = mShader->getShaderConstHandle( "$lightColor" ); mAmbientSC = mShader->getShaderConstHandle( "$ambient" ); mLightTexRT = mShader->getShaderConstHandle( "$lightTexRT" ); GFXStateBlockDesc d; d.cullDefined = true; d.cullMode = GFXCullNone; d.samplersDefined = true; d.samplers[0] = GFXSamplerStateDesc::getClampLinear(); d.samplers[1] = GFXSamplerStateDesc::getClampLinear(); d.samplers[2] = GFXSamplerStateDesc::getClampLinear(); // We clip in the shader! //d.alphaDefined = true; //d.alphaTestEnable = true; //d.alphaTestRef = 84; //d.alphaTestFunc = GFXCmpGreater; d.zDefined = true; d.zEnable = true; d.zWriteEnable = true; if ( desc ) d.addDesc( *desc ); mSB = GFX->createStateBlock(d); return true; }