#pragma once

#include <string>

struct IShader;
struct IShaderParameter;

/// <summary>
/// Handler für Semantics.
/// </summary>
/*!
*  \include SemanticHandler.cpp
*/
struct ISemanticHandler
{
	/// <summary>
	/// Der virtuelle Destruktor des Handlers.
	/// </summary>
	virtual ~ISemanticHandler() {}

	/// <summary>
	///	Wird aufgerufen wenn eine Semantic behandelt werden soll.
	/// </summary>
	/// <param name="inShader">Der Shader welcher den Handler aufgerufen hat.</param>
	/// <param name="inParameter">Ein Handle zum zu verarbeitenden Parameter.</param>
	virtual void OnHandle(IShader* inShader, IShaderParameter* inParameter) = 0;

	/// <summary>
	///	Wird aufgerufen wenn eine ShaderSystem Refresh geschehen ist.
	/// </summary>
	/// <param name="inShader">Der Shader der sich auffrischen soll.</param>
	virtual void OnShaderSystemRefresh(IShader* inShader) = 0;

	/// <summary>
	///	Der Semanticname nach dem gesucht werden soll.
	/// </summary>
	/// <returns>Den Semanticname.</returns>
	virtual const std::string& get_Name() const = 0;
};
