44#ifndef INCLUDED_OCIO_GPUSHADERCLASSWRAPPER_H
55#define INCLUDED_OCIO_GPUSHADERCLASSWRAPPER_H
66
7+ #include < memory>
78#include < sstream>
89#include < utility>
910#include < vector>
10- #include < memory>
1111
1212#include < OpenColorIO/OpenColorIO.h>
1313
1616namespace OCIO_NAMESPACE
1717{
1818
19+ // Pure virtual base class for any specific class wrapper.
1920class GpuShaderClassWrapper
2021{
2122public:
22- virtual void prepareClassWrapper (const std::string& resourcePrefix,
23- const std::string& functionName,
24- const std::string& originalHeader) = 0;
25- virtual std::string getClassWrapperHeader (const std::string& originalHeader) = 0;
26- virtual std::string getClassWrapperFooter (const std::string& originalFooter) = 0;
27-
23+
24+ // Factory method to blindly get the right class wrapper.
25+ static std::unique_ptr<GpuShaderClassWrapper> CreateClassWrapper (GpuLanguage language);
26+
27+ virtual void prepareClassWrapper (const std::string & resourcePrefix,
28+ const std::string & functionName,
29+ const std::string & originalHeader) = 0;
30+ virtual std::string getClassWrapperHeader (const std::string & originalHeader) = 0;
31+ virtual std::string getClassWrapperFooter (const std::string & originalFooter) = 0;
32+
2833 virtual std::unique_ptr<GpuShaderClassWrapper> clone () const = 0;
29-
34+
3035 virtual ~GpuShaderClassWrapper () = default ;
3136};
3237
3338class NullGpuShaderClassWrapper : public GpuShaderClassWrapper
3439{
3540public:
36- void prepareClassWrapper (const std::string& /* resourcePrefix*/ ,
37- const std::string& /* functionName*/ ,
38- const std::string& /* originalHeader*/ ) final {}
39- std::string getClassWrapperHeader (const std::string& originalHeader) final { return originalHeader; }
40- std::string getClassWrapperFooter (const std::string& originalFooter) final { return originalFooter; }
41-
42- std::unique_ptr<GpuShaderClassWrapper> clone () const final
41+ void prepareClassWrapper (const std::string & /* resourcePrefix*/ ,
42+ const std::string & /* functionName*/ ,
43+ const std::string & /* originalHeader*/ ) final
44+ {
45+ }
46+ std::string getClassWrapperHeader (const std::string & originalHeader) final
47+ {
48+ return originalHeader;
49+ }
50+ std::string getClassWrapperFooter (const std::string & originalFooter) final
51+ {
52+ return originalFooter;
53+ }
54+
55+ std::unique_ptr<GpuShaderClassWrapper> clone () const final ;
56+ };
57+
58+ class OSLShaderClassWrapper : public GpuShaderClassWrapper
59+ {
60+ public:
61+ void prepareClassWrapper (const std::string & /* resourcePrefix*/ ,
62+ const std::string & functionName,
63+ const std::string & /* originalHeader*/ ) final
4364 {
44- return std::unique_ptr<NullGpuShaderClassWrapper>( new NullGpuShaderClassWrapper ()) ;
65+ m_functionName = functionName ;
4566 }
67+
68+ std::string getClassWrapperHeader (const std::string & originalHeader) final ;
69+ std::string getClassWrapperFooter (const std::string & originalFooter) final ;
70+
71+ std::unique_ptr<GpuShaderClassWrapper> clone () const final ;
72+
73+ private:
74+ std::string m_functionName;
4675};
4776
4877class MetalShaderClassWrapper : public GpuShaderClassWrapper
4978{
5079public:
51- void prepareClassWrapper (const std::string& resourcePrefix,
52- const std::string& functionName,
53- const std::string& originalHeader) final ;
54- std::string getClassWrapperHeader (const std::string& originalHeader) final ;
55- std::string getClassWrapperFooter (const std::string& originalFooter) final ;
56-
80+ void prepareClassWrapper (const std::string & resourcePrefix,
81+ const std::string & functionName,
82+ const std::string & originalHeader) final ;
83+ std::string getClassWrapperHeader (const std::string & originalHeader) final ;
84+ std::string getClassWrapperFooter (const std::string & originalFooter) final ;
85+
5786 std::unique_ptr<GpuShaderClassWrapper> clone () const final ;
5887 MetalShaderClassWrapper& operator =(const MetalShaderClassWrapper& rhs);
59-
88+
6089private:
6190 struct FunctionParam
6291 {
@@ -72,12 +101,12 @@ class MetalShaderClassWrapper : public GpuShaderClassWrapper
72101 std::string m_name;
73102 bool m_isArray;
74103 };
75-
76- std::string getClassWrapperName (const std::string &resourcePrefix, const std::string& functionName);
104+
105+ static std::string getClassWrapperName (const std::string &resourcePrefix, const std::string & functionName);
77106 void extractFunctionParameters (const std::string& declaration);
78107 std::string generateClassWrapperHeader (GpuShaderText& st) const ;
79108 std::string generateClassWrapperFooter (GpuShaderText& st, const std::string &ocioFunctionName) const ;
80-
109+
81110 std::string m_className;
82111 std::string m_functionName;
83112 std::vector<FunctionParam> m_functionParameters;
0 commit comments