// Copyright (c) 2023 Dominic Masters // // This software is released under the MIT License. // https://opensource.org/licenses/MIT #pragma once #include "dawnlibs.hpp" namespace Dawn { enum class ShaderParameterType { VEC2, VEC3, VEC4, MAT3, MAT4, COLOR, FLOAT, INT, TEXTURE, BOOLEAN }; class IShaderBase { public: virtual ~IShaderBase() { } }; template class IShader : public IShaderBase { protected: T data; public: /** * Returns the currently uploaded data on the Shader. * * @return The uploaded data. */ T getData() { return data; } /** * Sets the entire data to be uploaded. * * @param data Data to be uploaded. */ void setData(const T data) { this->data = data; } /** * Initializes the shader, this needs to be called before the shader can * be used. */ virtual void init() = 0; /** * Binds the shader as the current one, does not upload any data, somewhat * relies on something else uploading the data. */ virtual void bind() = 0; /** * Uploads the data to the GPU. */ virtual void upload() = 0; /** * Disposes of the shader. */ virtual ~IShader() { } }; }