24 #ifndef HDST_CODE_GEN_H
25 #define HDST_CODE_GEN_H
28 #include "pxr/imaging/hdSt/api.h"
29 #include "pxr/imaging/hd/version.h"
30 #include "pxr/imaging/hdSt/resourceBinder.h"
31 #include "pxr/imaging/hdSt/glslProgram.h"
33 #include <boost/shared_ptr.hpp>
39 PXR_NAMESPACE_OPEN_SCOPE
42 typedef boost::shared_ptr<class HdStShaderCode> HdStShaderCodeSharedPtr;
43 typedef boost::shared_ptr<class HdSt_GeometricShader> HdSt_GeometricShaderPtr;
44 typedef std::vector<HdStShaderCodeSharedPtr> HdStShaderCodeSharedPtrVector;
58 HdSt_CodeGen(HdSt_GeometricShaderPtr
const &geometricShader,
59 HdStShaderCodeSharedPtrVector
const &shaders);
65 HdSt_CodeGen(HdStShaderCodeSharedPtrVector
const &shaders);
69 ID ComputeHash()
const;
73 HdStGLSLProgramSharedPtr Compile();
91 HdStGLSLProgramSharedPtr CompileComputeProgram();
94 const std::string &GetVertexShaderSource()
const {
return _vsSource; }
97 const std::string &GetTessControlShaderSource()
const {
return _tcsSource; }
100 const std::string &GetTessEvalShaderSource()
const {
return _tesSource; }
103 const std::string &GetGeometryShaderSource()
const {
return _gsSource; }
106 const std::string &GetFragmentShaderSource()
const {
return _fsSource; }
109 const std::string &GetComputeShaderSource()
const {
return _csSource; }
112 HdSt_ResourceBinder::MetaData *GetMetaData() {
return &_metaData; }
115 void _GenerateDrawingCoord();
116 void _GenerateConstantPrimvar();
117 void _GenerateInstancePrimvar();
118 void _GenerateElementPrimvar();
119 void _GenerateVertexAndFaceVaryingPrimvar(
bool hasGS);
120 void _GenerateShaderParameters();
121 void _GenerateTopologyVisibilityParameters();
123 HdSt_ResourceBinder::MetaData _metaData;
124 HdSt_GeometricShaderPtr _geometricShader;
125 HdStShaderCodeSharedPtrVector _shaders;
128 std::stringstream _genCommon, _genVS, _genTCS, _genTES;
129 std::stringstream _genGS, _genFS, _genCS;
130 std::stringstream _procVS, _procTCS, _procTES, _procGS;
133 std::string _vsSource;
134 std::string _tcsSource;
135 std::string _tesSource;
136 std::string _gsSource;
137 std::string _fsSource;
138 std::string _csSource;
142 PXR_NAMESPACE_CLOSE_SCOPE
144 #endif // HDST_CODE_GEN_H