#pragma once

#include "IShader.h"

/// <summary>
/// Handler für Pass Callbacks.
/// </summary>
/*!
*  \include CallbackHandler.cpp
*/
struct ICallbackHandler
{
	/// <summary>
	/// Der virtuelle Destruktor des Handlers.
	/// </summary>
	virtual ~ICallbackHandler() {}

	/// <summary>
	///	Wird aufgerufen wenn ein Callback behandelt werden soll.
	/// </summary>
	/// <param name="inShader">Der Shader welcher den Handler aufgerufen hat.</param>
	/// <param name="inPassHandle">Ein Handle zum Pass zu dem der Callback gehört.</param>
	/// <returns>Den Wunsch des Handlers auf eine weitere Verfahrensweise mit dem aktuellen Pass.</returns>
	virtual RenderPassReturnValue::Enumeration OnHandle(IShader* inShader, D3DXHANDLE inPassHandle) = 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 Annotationsname nach dem gesucht werden soll welcher den Booleanwert zum benutzen des Callbacks enthält.
	/// </summary>
	/// <returns>Den Annotationnamen.</returns>
	virtual const std::string& get_Name() const = 0;
};
