#ifndef _PASS_H #define _PASS_H #include "object.h" #define MAX_TEXTURES 8 namespace Mauri { enum PassStage { EFFECT0_PASS = 0, EFFECT1_PASS, MATERIAL_PASS, MATERIAL_ONLY_PASS }; enum PassCommand { DRAW = 0, COPY }; enum TextureType { STATIC = 0, PREVIOUS }; struct UniformOverride { vec4 value; std::string name; }; class Pass { public: Pass() = default; ~Pass(); bool intermediate; PassCommand command = DRAW; std::string target; std::string source; Object *object; Effect *effect; bool depthtest; bool depthwrite; std::string shader; std::array binds = {}; std::array textures = {}; bool model; bool combine; std::vector uniforms; std::vector combos; static auto parse(Parser &pr, const json &root, PassStage stage) -> Pass *; auto load(Engine *engine, PassStage stage, Pass *pass) -> void; private: Material *material = nullptr; }; class RenderPass { public: RenderPass(Engine *engine, Pass *pass); ~RenderPass(); bool model; bool combine; bool depth; Shader *shader = nullptr; mat4x4 *mat; RenderObject *render_object; std::array textures = {}; std::array texture_types = {}; auto draw(Engine *engine) -> void; private: PassCommand command; Object *object; Framebuffer *target; Framebuffer *source; RenderShader *render_shader; }; } // namespace Mauri #endif // _PASS_H