204class SoShaderObject :
public SoNode
207 SO_NODE_ABSTRACT_HEADER(SoShaderObject);
291 template<
typename UniformParamType,
typename ParamValueType>
338 template<
typename UniformParamType,
typename ParamValueType>
341#ifndef HIDDEN_FROM_DOC
343#define MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(ParamType)\
345 template<typename ParamValueType>\
347 setShaderParameter ## ParamType(const SbString& name, ParamValueType val)\
349 setShaderParameter<SoShaderParameter ## ParamType>(name, val);\
351 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(1i)
352 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(2i)
353 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(3i)
354 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(4i)
355 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(1f)
356 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(2f)
357 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(3f)
358 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(4f)
359 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array1f)
360 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array2f)
361 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array3f)
362 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array4f)
363 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array1i)
364 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array2i)
365 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array3i)
366 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Array4i)
367 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Matrix)
368 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(Matrix3)
369 MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER(MatrixArray)
370#undef MAKE_HELPHER_FUNC_SET_SHADER_PARAMETER
373#define MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(ParamType)\
375 template<typename ParamValueType>\
376 SoShaderParameter ## ParamType *\
377 addShaderParameter ## ParamType(const SbString& name, ParamValueType val)\
379 return addShaderParameter<SoShaderParameter ## ParamType>(name, val);\
381 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(1i)
382 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(2i)
383 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(3i)
384 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(4i)
385 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(1f)
386 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(2f)
387 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(3f)
388 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(4f)
389 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array1f)
390 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array2f)
391 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array3f)
392 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array4f)
393 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array1i)
394 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array2i)
395 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array3i)
396 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Array4i)
397 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Matrix)
398 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(Matrix3)
399 MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER(MatrixArray)
400#undef MAKE_HELPHER_FUNC_ADD_SHADER_PARAMETER
413 static void initClass();
414 static void exitClass() ;
420 SbBool isInternal()
const;
423 SbBool containStateMatrixParameters()
const
424 {
return (m_stateMatrixParameters.getLength() != 0) ; }
426 const SbString& getSourceProgram()
const
427 {
return m_sourceProgram;}
432 inline bool isFileFound()
const;
435 inline bool needUpdate()
const {
return m_needUpdate; }
441 void setDefine(
const char* name,
const char* value);
442 void setDefine(
const char* name,
const SbString& value)
443 { setDefine(name,value.toLatin1()); }
446 void removeDefine(
const char* name);
449 void checkValidity();
452 inline void setVersion(
const SbString& version) { m_version = version; }
455 const SbString& getVersion();
458 const SbString& getProfile();
461 inline void setProfile(
const SbString& profile) { m_profile = profile; }
464 static bool isShaderObjectAvailable(SoState* state);
467 static bool isGLSLLanguageAvailable(SoState* state);
470 static bool isRayTracingAvailable(SoState* state);
473 void invalidateSource();
476 void buildSourceToLoad(SbString &builtSource);
479 SbString getFileAbsolutePath(
const SbString& filename);
482 virtual void notify(SoNotList *list);
485 void getHeaderFilenames( std::vector<SbString>& filenames );
488 void setIsFixedPipeline(
bool isFixedPipelineShader)
490 m_isFixedPipelineShader = isFixedPipelineShader;
494 bool isFixedPipeline()
const
496 return m_isFixedPipelineShader;
503 typedef SbConstCharMap<SbString> DefineMap;
504 typedef DefineMap::iterator DefineMapIt;
507 typedef std::vector<SbString> SbStringVector;
510 void setGlobalDefine(
const DefineMap& map);
513 void setDefine(DefineMap::value_type& p);
516 bool hasDefine(
const char* name)
const;
519 typedef std::set<SbString> HeaderSet;
520 typedef HeaderSet::iterator HeaderSetIt;
523 void setGlobalHeader(
const HeaderSet& map);
534 virtual ~SoShaderObject();
537 virtual void getDefaultExtensions(std::vector<SbString>& defaultExtensions);
540 SoShaderParser* m_parser;
547 typedef std::map<std::string, std::string> ExtensionMap;
548 ExtensionMap m_extensionList;
550 typedef std::map<SbString, SbString> StrStrMap;
562 bool isEmptyLine(
const std::string& line)
const;
565 static SbString definesExtension(
const SbString& source,
const ExtensionMap::value_type& p);
568 static SbString definesAcc(
const SbString& source,
const DefineMap::value_type& p);
572 void getSourceFilename(std::vector<SbString>& filenames)
const;
575 DefineMap m_defineMap;
578 DefineMap m_defineGlobalMap;
581 HeaderSet m_headerGlobalSet;
584 SbStringVector m_includeSourceVector;
587 SbStringVector m_includeFilenameVector;
593 void updateStateMatrixList() ;
607 bool m_isFixedPipelineShader;
610 static StrStrMap s_shadersPaths;
612 static bool s_debugCache;