// Copyright 2018 The Amber Authors. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef AMBER_RECIPE_H_ #define AMBER_RECIPE_H_ #include #include #include #include "amber/shader_info.h" namespace amber { /// Internal recipe implementation. class RecipeImpl { public: virtual ~RecipeImpl(); /// Retrieves information on all the shaders in the given recipe. virtual std::vector GetShaderInfo() const = 0; /// Returns required features in the given recipe. virtual std::vector GetRequiredFeatures() const = 0; /// Returns required device extensions in the given recipe. virtual std::vector GetRequiredDeviceExtensions() const = 0; /// Returns required instance extensions in the given recipe. virtual std::vector GetRequiredInstanceExtensions() const = 0; protected: RecipeImpl(); }; /// A recipe is the parsed representation of the input script. class Recipe { public: Recipe(); ~Recipe(); /// Retrieves information on all the shaders in the recipe. std::vector GetShaderInfo() const; RecipeImpl* GetImpl() const { return impl_; } /// Sets the recipe implementation. Ownership transfers to the recipe. void SetImpl(RecipeImpl* impl) { impl_ = impl; } /// Returns required features in the given recipe. std::vector GetRequiredFeatures() const; /// Returns required device extensions in the given recipe. std::vector GetRequiredDeviceExtensions() const; /// Returns required instance extensions in the given recipe. std::vector GetRequiredInstanceExtensions() const; private: RecipeImpl* impl_; }; } // namespace amber #endif // AMBER_RECIPE_H_