/*
 *	clipdda.h
 *
 *	汎用DDA処理
 *
 *	* Sun Jun 04 22:03:50 JST 2017 Naoyuki Sawa
 *	- 1st リリース。
 *	  当モジュールを作成した理由は、以下の通りです。
 *	- これまでは、clipmisc.hにてDDA構造体だけを定義し、各モジュールにて個別に処理を実装していました。
 *	  そうしていた理由は、レジスタの退避を減らしたりレジスタの使い回しを工夫して高速化するためでした。
 *	  しかし、極端に高速化が要求されない場合は、汎用DDA処理が有る方が手間が省けて便利だと思いました。
 *	  そこで、汎用DDA処理として当モジュールを作成する事にしました。
 *	- 今後、極端な高速化が不要で、特別な計算方法も必要無い場合は、当モジュールを使うようにして下さい。
 *	  ちなみに、極端な高速化が必要な場合とは、既存のframds15.cモジュール等です。
 *	  また、特別な計算方法が必要な場合とは、既存のframrodg.cのRodGen_DrawLine1()です。(誤差項の初期値をずらしています)
 *	  上記のような特別な場合は、当モジュールを使わずに、これまで通り各モジュール個別にDDA処理を実装する必要が有ります。
 */
#ifndef __CLIP_DDA_H__
#define __CLIP_DDA_H__
#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus
//*****************************************************************************
//	構造体
//*****************************************************************************
struct dda {		//アセンブラ版から参照するのでレイアウト固定です。
	int	i;	//+ 0,4 現在値(+/-)
	int	e;	//+ 4,4 誤差項(+)
	int	u;	//+ 8,4 現在値の固定変化量(+/-)
	int	n;	//+12,4 誤差項の固定減少量(+)
	int	v;	//+16,4 誤差項が0以下になった時の現在値の変化量(+/-)
	int	f;	//+20,4 誤差項が0以下になった時の誤差項の増加量(+)
};			//+24
//*****************************************************************************
//	グローバル関数
//*****************************************************************************
void dda_setup(struct dda* dda, int dx, int y1, int y2);
int dda_step(struct dda* dda);
#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus
#endif//__CLIP_DDA_H__
