204class SoShaderObject :
public SoNode
207 SO_NODE_ABSTRACT_HEADER(SoShaderObject);
291 template<
typename UniformParamType,
typename ParamValueType>
328 template<
typename UniformParamType,
typename ParamValueType>
331#ifndef HIDDEN_FROM_DOC
333#define MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(ParamType)\
335 template<typename ParamValueType>\
337 setShaderParameter ## ParamType(const SbString& name, ParamValueType val)\
339 setShaderParameter<SoShaderParameter ## ParamType>(name, val);\
341 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(1i)
342 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(2i)
343 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(3i)
344 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(4i)
345 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(1f)
346 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(2f)
347 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(3f)
348 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(4f)
349 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array1f)
350 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array2f)
351 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array3f)
352 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array4f)
353 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array1i)
354 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array2i)
355 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array3i)
356 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array4i)
357 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Matrix)
358 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Matrix3)
359 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(MatrixArray)
360#undef MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER
363#define MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(ParamType)\
365 template<typename ParamValueType>\
366 SoShaderParameter ## ParamType *\
367 addShaderParameter ## ParamType(const SbString& name, ParamValueType val)\
369 return addShaderParameter<SoShaderParameter ## ParamType>(name, val);\
371 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(1i)
372 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(2i)
373 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(3i)
374 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(4i)
375 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(1f)
376 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(2f)
377 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(3f)
378 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(4f)
379 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array1f)
380 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array2f)
381 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array3f)
382 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array4f)
383 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array1i)
384 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array2i)
385 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array3i)
386 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array4i)
387 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Matrix)
388 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Matrix3)
389 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(MatrixArray)
390#undef MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER
403 static void initClass();
404 static void exitClass() ;
410 SbBool isInternal()
const;
413 SbBool containStateMatrixParameters()
const
414 {
return (m_stateMatrixParameters.getLength() != 0) ; }
416 const SbString& getSourceProgram()
const
417 {
return m_sourceProgram;}
422 inline bool isFileFound()
const;
425 inline bool needUpdate()
const {
return m_needUpdate; }
431 void setDefine(
const char* name,
const char* value);
432 void setDefine(
const char* name,
const SbString& value)
433 { setDefine(name,value.toLatin1()); }
436 void removeDefine(
const char* name);
439 void checkValidity();
442 inline void setVersion(
const SbString& version) { m_version = version; }
445 const SbString& getVersion();
448 const SbString& getProfile();
451 inline void setProfile(
const SbString& profile) { m_profile = profile; }
454 static bool isShaderObjectAvailable(SoState* state);
457 static bool isGLSLLanguageAvailable(SoState* state);
460 void invalidateSource();
463 void buildSourceToLoad(SbString &builtSource);
466 SbString getFileAbsolutePath(
const SbString& filename);
469 virtual void notify(SoNotList *list);
472 void getHeaderFilenames( std::vector<SbString>& filenames );
475 void setIsFixedPipeline(
bool isFixedPipelineShader)
477 m_isFixedPipelineShader = isFixedPipelineShader;
481 bool isFixedPipeline()
const
483 return m_isFixedPipelineShader;
490 typedef SbConstCharMap<SbString> DefineMap;
491 typedef DefineMap::iterator DefineMapIt;
494 typedef std::vector<SbString> SbStringVector;
497 void setGlobalDefine(
const DefineMap& map);
500 void setDefine(DefineMap::value_type& p);
503 bool hasDefine(
const char* name)
const;
506 typedef std::set<SbString> HeaderSet;
507 typedef HeaderSet::iterator HeaderSetIt;
510 void setGlobalHeader(
const HeaderSet& map);
521 virtual ~SoShaderObject();
524 SoShaderParser* m_parser;
531 typedef std::map<std::string, std::string> ExtensionMap;
532 ExtensionMap m_extensionList;
534 typedef std::map<SbString, SbString> StrStrMap;
546 bool isEmptyLine(
const std::string& line)
const;
549 static SbString definesExtension(
const SbString& source,
const ExtensionMap::value_type& p);
552 static SbString definesAcc(
const SbString& source,
const DefineMap::value_type& p);
556 void getSourceFilename(std::vector<SbString>& filenames)
const;
559 DefineMap m_defineMap;
562 DefineMap m_defineGlobalMap;
565 HeaderSet m_headerGlobalSet;
568 SbStringVector m_includeSourceVector;
571 SbStringVector m_includeFilenameVector;
577 void updateStateMatrixList() ;
591 bool m_isFixedPipelineShader;
594 static StrStrMap s_shadersPaths;
596 static bool s_debugCache;