Exemple #1
0
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;
}
Exemple #2
0
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;
}
Exemple #3
0
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;
}
Exemple #4
0
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;
}
Exemple #5
0
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;
}
Exemple #6
0
// 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();
}
Exemple #8
0
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( &macros );

   MatTextureTargetRef prepassTarget = MatTextureTarget::findTargetByName( "prepass" );
   if ( prepassTarget )
      prepassTarget->getTargetShaderMacros( &macros );

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