-
- Downloads
Introduce a ProgramExtension class, as well as ProgramWrapper
A ProgramExtension is much smarter than the previously introduced programConf. A programConf can only be used to preprocess a shader. But we could also need to add uniforms in a shader and populate program instance data during rendering, for instance. A ProgramExtension not only defines a programConf but also implements 'hooks' called by Program. A 'ProgramExtension*' can be added as a second parameter to setShaderProgram() and to setMaterial(). Ownership is taken, hence the need to pass a pointer... For instance : ProgramExtension* extension = new ProgramExtension(R"( { "fragment" : { "defines" : { "FOO" : 1 } } })"); mesh->setShaderProgram("Texture", extension); ProgramExtensions can be linked to create a chain of extensions. The program configs are merged together. For instance : ProgramExtension* extension = new ProgramExtension(R"( { "fragment" : { "defines" : { "FOO" : 1 } } })"); extension->linkExtension(new ProgramExtension(R"( { "fragment" : { "defines" : { "BAR" : 1 } } })")); ----------------------- Second part of the commit --- ProgramExtensions can have instance data just as Programs. Currently a Program's instance data (ProgramData) is stored in the Renderer by Node::render(), and a bit later retrieved by Program::setInstanceUniforms(). This can not easily be extended for ProgramExtension's instance data, given that a Program can have several linked extensions. This commit introduces ProgramWrapper, used as a FlyWeight containing the actual Program (shared pointer), and all other shader related data as well as the instance data. A Primitive now only contain a ProgramWrapper. Given that a ProgramWrapper contains the program instance data, it is no more needed to send them through the Renderer.
Showing
- assets/shaders/base/fullMaterialVS.vert 15 additions, 6 deletionsassets/shaders/base/fullMaterialVS.vert
- assets/shaders/base/materialTexturedFS.frag 17 additions, 6 deletionsassets/shaders/base/materialTexturedFS.frag
- assets/shaders/base/materialVS.vert 20 additions, 10 deletionsassets/shaders/base/materialVS.vert
- src/CMakeLists.txt 4 additions, 0 deletionssrc/CMakeLists.txt
- src/HardwareSet/OpenVRSet/DistortionProgram.cpp 1 addition, 2 deletionssrc/HardwareSet/OpenVRSet/DistortionProgram.cpp
- src/Modules/DataField/DataField.inl 3 additions, 3 deletionssrc/Modules/DataField/DataField.inl
- src/Modules/DataField/Program.cpp 5 additions, 2 deletionssrc/Modules/DataField/Program.cpp
- src/Modules/DataField/Program.hpp 1 addition, 0 deletionssrc/Modules/DataField/Program.hpp
- src/Modules/GUI/GUI2D/Program.cpp 6 additions, 8 deletionssrc/Modules/GUI/GUI2D/Program.cpp
- src/Modules/GUI/GUI2D/Program.hpp 2 additions, 2 deletionssrc/Modules/GUI/GUI2D/Program.hpp
- src/Renderer/Primitive.hpp 3 additions, 8 deletionssrc/Renderer/Primitive.hpp
- src/Renderer/Primitive.inl 17 additions, 24 deletionssrc/Renderer/Primitive.inl
- src/Renderer/Program.cpp 32 additions, 38 deletionssrc/Renderer/Program.cpp
- src/Renderer/Program.hpp 13 additions, 15 deletionssrc/Renderer/Program.hpp
- src/Renderer/ProgramExtension.cpp 30 additions, 0 deletionssrc/Renderer/ProgramExtension.cpp
- src/Renderer/ProgramExtension.hpp 105 additions, 0 deletionssrc/Renderer/ProgramExtension.hpp
- src/Renderer/ProgramWrapper.cpp 90 additions, 0 deletionssrc/Renderer/ProgramWrapper.cpp
- src/Renderer/ProgramWrapper.hpp 52 additions, 0 deletionssrc/Renderer/ProgramWrapper.hpp
- src/Renderer/RenderProgram/FlatQuadProgram.cpp 1 addition, 2 deletionssrc/Renderer/RenderProgram/FlatQuadProgram.cpp
- src/Renderer/RenderProgram/WaBProgram.cpp 3 additions, 6 deletionssrc/Renderer/RenderProgram/WaBProgram.cpp
Loading
Please register or sign in to comment