//---------------------------------------
    void MaterialExporter::exportCgfxShaderNode ( 
        COLLADASW::InstanceEffect& effectInstance, 
        cgfxShaderNode* shaderNodeCgfx )
    {
        // Get the filename of the current cgfx file
		MString shaderFxFile = cgfxFindFile(shaderNodeCgfx->shaderFxFile());
        String shaderFxFileName = shaderFxFile.asChar(); // check3d.cgfx
        setShaderFxFileUri ( COLLADASW::URI ( COLLADASW::URI::nativePathToUri ( shaderFxFileName ) ) );

        // Get the current technique name
        String techniqueName = shaderNodeCgfx->getTechnique().asChar(); // techniqueName.asChar()

        // Add the technique hint to the collada document.
        effectInstance.addTechniqueHint ( techniqueName, COLLADASW::CSWC::CSW_PLATFORM_PC_OGL );

        // Clear the samplers setParam list.
        mSamplers.clear ();

        // Get the setParams attributes
        CGeffect cgEffect = shaderNodeCgfx->effect();
        CGtechnique cgTechnique = cgGetNamedTechnique( cgEffect, techniqueName.c_str() );
        cgfxAttrDefList* effectAttributes = cgfxAttrDef::attrsFromEffect ( cgEffect, cgTechnique );
        MString sResult, sTemp;
        cgfxAttrDefList::iterator effectIt;
        for ( effectIt=effectAttributes->begin(); effectIt; ++effectIt )
        {
            cgfxAttrDef* effectAttribute = *effectIt;
            setSetParam ( shaderNodeCgfx, effectAttribute );
        }
    }
Beispiel #2
0
/*-------------------------------------------------------------------------

  -------------------------------------------------------------------------*/
bool FilterBox::Initialize(int w, int h)
{
  bufw = w;
  bufh = h;
  //
  // FBO
  //
  glGenFramebuffersEXT(2, fb);
  glGenTextures(2, textureID);
  glGenRenderbuffersEXT(1, &depth_rb);
  initRT(0, w, h);
  initRT(1, w, h);
  //
  // initialize depth renderbuffer
  //
  glBindRenderbufferEXT(GL_RENDERBUFFER_EXT, depth_rb);
  glRenderbufferStorageEXT(GL_RENDERBUFFER_EXT, GL_DEPTH_COMPONENT24, w, h);
  glFramebufferRenderbufferEXT(GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, 
                                GL_RENDERBUFFER_EXT, depth_rb);
  CheckFramebufferStatus();

  glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, 0);
  //
  // CGFX things
  //
  cgContext = cgCreateContext();
  cgGLRegisterStates(cgContext);
  std::string resolved_path;

        cgEffect = cgCreateEffectFromFile(cgContext, "data/shaders/FilterBox.cgfx", NULL);
        if(!cgEffect)
        {
			exit(0);
            const char * pszErrors = NULL;
            fprintf(stderr, "CgFx Parse error : %s", pszErrors);
            const char *listing = cgGetLastListing(cgContext);
            bValid = false;
            return false;
        }
  cgTechnique = cgGetNamedTechnique(cgEffect, "Filter");
  cgPassFilterH = cgGetNamedPass(cgTechnique, "verticalPass");
  cgPassFilterV = cgGetNamedPass(cgTechnique, "horizontalPass");
  cgPassBlend   = cgGetNamedPass(cgTechnique, "drawFinal");
  cgBlendFactor = cgGetNamedEffectParameter(cgEffect, "blendFactor");
  cgGlowFactor  = cgGetNamedEffectParameter(cgEffect, "glowFactor");
  srcSampler    = cgGetNamedEffectParameter(cgEffect, "srcSampler");
  tempSampler   = cgGetNamedEffectParameter(cgEffect, "tempSampler");
  finalSampler  = cgGetNamedEffectParameter(cgEffect, "finalSampler");
  verticalDir   = cgGetNamedEffectParameter(cgEffect, "verticalDir");
  horizontalDir = cgGetNamedEffectParameter(cgEffect, "horizontalDir");

  cgGLSetParameter2f(verticalDir, 0,1.0f/(float)h);
  cgGLSetParameter2f(horizontalDir, 1.0f/(float)w, 0);

  bValid = true;
  return true;
}
Beispiel #3
0
bool cEffect::SetTechnique(const std::string &lacTechnique)
{
	if ( macLastTechnique != lacTechnique )
	{
		// Set technique
		mTechnique = cgGetNamedTechnique( mEffect, lacTechnique.c_str() );
		if ( mTechnique )
		{
			macLastTechnique = lacTechnique;
			return true;
		}
	}
	return false;
}
Beispiel #4
0
    void Effect::load(const char* code)
    {
        effect.reset(cgCreateEffect(context, code, 0), EffectDeleter());

        if (!effect)
        {
            throw std::runtime_error("Could not create effect");
        }

        technique = cgGetNamedTechnique(effect.get(), "High");

        if (technique == 0)
        {
            throw std::runtime_error("Technique not found");
        }

        if (cgValidateTechnique(technique) == false)
        {
            throw std::runtime_error("Technique not valid");
        }
    }