Loading...
Searching...
No Matches
shaderSection.h
1//
2// Copyright 2020 Pixar
3//
4// Licensed under the terms set forth in the LICENSE.txt file available at
5// https://openusd.org/license.
6//
7
8#ifndef PXR_IMAGING_HGI_SHADERSECTION_H
9#define PXR_IMAGING_HGI_SHADERSECTION_H
10
11#include "pxr/pxr.h"
12#include "pxr/imaging/hgi/api.h"
13#include <memory>
14#include <ostream>
15#include <string>
16#include <vector>
17
18PXR_NAMESPACE_OPEN_SCOPE
19
20//struct to hold attribute definitions
21struct HgiShaderSectionAttribute
22{
23 std::string identifier;
24 std::string index;
25};
26
27using HgiShaderSectionAttributeVector =
28 std::vector<HgiShaderSectionAttribute>;
29
39{
40public:
41 HGI_API
42 virtual ~HgiShaderSection();
43
47 HGI_API
48 virtual void WriteType(std::ostream& ss) const;
49
51 HGI_API
52 virtual void WriteIdentifier(std::ostream& ss) const;
53
55 HGI_API
56 virtual void WriteDeclaration(std::ostream& ss) const;
57
59 HGI_API
60 virtual void WriteParameter(std::ostream& ss) const;
61
63 HGI_API
64 virtual void WriteArraySize(std::ostream& ss) const;
65
67 HGI_API
68 virtual void WriteBlockInstanceIdentifier(std::ostream& ss) const;
69
71 const std::string& GetIdentifier() const {
72 return _identifierVar;
73 }
74
76 HGI_API
77 const HgiShaderSectionAttributeVector& GetAttributes() const;
78
80 const std::string& GetArraySize() const {
81 return _arraySize;
82 }
83
86 return !_blockInstanceIdentifier.empty();
87 }
88
89protected:
90 HGI_API
91 explicit HgiShaderSection(
92 const std::string &identifier,
93 const HgiShaderSectionAttributeVector& attributes = {},
94 const std::string &defaultValue = std::string(),
95 const std::string &arraySize = std::string(),
96 const std::string &blockInstanceIdentifier = std::string());
97
98 HGI_API
99 const std::string& _GetDefaultValue() const;
100
101private:
102 const std::string _identifierVar;
103 const HgiShaderSectionAttributeVector _attributes;
104 const std::string _defaultValue;
105 const std::string _arraySize;
106 const std::string _blockInstanceIdentifier;
107};
108
109PXR_NAMESPACE_CLOSE_SCOPE
110
111#endif
A base class for a Shader Section.
Definition: shaderSection.h:39
HGI_API const HgiShaderSectionAttributeVector & GetAttributes() const
Returns the attributes of the section.
virtual HGI_API void WriteType(std::ostream &ss) const
Write out the type, shader section does not hold a type string as how a type is defined is fully cont...
const std::string & GetIdentifier() const
Returns the identifier of the section.
Definition: shaderSection.h:71
virtual HGI_API void WriteIdentifier(std::ostream &ss) const
Writes the unique name of an instance of the section.
virtual HGI_API void WriteArraySize(std::ostream &ss) const
Writes the arraySize to a function.
const std::string & GetArraySize() const
Returns the arraySize of the section.
Definition: shaderSection.h:80
virtual HGI_API void WriteBlockInstanceIdentifier(std::ostream &ss) const
Writes the block instance name of an instance of the section.
virtual HGI_API void WriteParameter(std::ostream &ss) const
Writes the section as a parameter to a function.
bool HasBlockInstanceIdentifier() const
Returns whether the section has a block instance identifier.
Definition: shaderSection.h:85
virtual HGI_API void WriteDeclaration(std::ostream &ss) const
Writes a decleration statement for a member or in global scope.