/*
 *	clipcqrd.h
 *
 *	コールバックキューを用いた優先度付き描画
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2001-2017 Naoyuki Sawa
 *
 *	* Sat Jan 30 21:30:05 JST 2016 Naoyuki Sawa
 *	- 1st リリース。
 *	- 特に良く使う描画関数の、優先度付きバージョンを定義しました。
 *	  他にも優先度付き描画を行いたい描画関数が有れば、このモジュールに追加して下さい。
 *	- 当モジュールには特に良く使う描画関数だけを定義したので、当モジュールの関数は既存の描画関数とほぼ1:1に対応しています。
 *	  しかし、コールバックキューによる描画は、必ずしもそのように使う必要は有りません。
 *	  例えば、特定の優先度でコールバックを行い、その時点のフレームバッファに対して、アプリケーション定義のフィルタを掛けるような使い方も出来ます。
 *	  具体例としては、優先度マイナスを背景,優先度プラスを前景として、優先度0でコールバックを掛けて、背景だけにラスタスクロールを掛けたり出来ます。
 *	  上記のような、アプリケーション特有の処理を行う場合は、当モジュール内に機能を追加するよりも、個々のアプリケーションのソース内で定義する方が良いでしょう
 *	* Sun Jan 31 21:43:46 JST 2016 Naoyuki Sawa
 *	- CbkQue_render_set_draw_area()を追加しました。
 *	* Wed Jan 11 21:35:35 JST 2017 Naoyuki Sawa
 *	- CbkQue_render_set_draw_area_full()を追加しました。
 *	* Fri Jan 27 21:01:42 JST 2017 Naoyuki Sawa
 *	- CbkQue_render_rectangle_shadow()を追加しました。
 *	* Sun Aug 06 22:33:03 JST 2017 Naoyuki Sawa
 *	- CbkQue_render_save(),CbkQue_render_restore(),CbkQue_render_set_texture()を追加しました。
 *	- CbkQue_render_ellipse(),CbkQue_render_ellipse_fill()を追加しました。
 *	- CbkQue_render_font(),CbkQue_render_font_framed()を追加しました。
 *	- CbkQue_render_string(),CbkQue_render_string_framed()を追加しました。
 *	- CbkQue_sprite_draw2()を有効にし、clipcqr2.cへ移動しました。
 *	  これまでは、3D関連モジュール(framds25.o等)が無駄にリンクされる事を防ぐために、CbkQue_sprite_draw2()を無効にしていました。
 *	  今回、clipcqr2.cを新規作成して、3D関連モジュールに依存する関数は、clipcqrd.c内ではなく、clipcqr2.cに分離するようにしました。
 *	  上記の変更によって、3D関連モジュールに依存する関数も、追加出来るようになりました。
 *	- CbkQue_render_polygon()を追加しました。
 *	  実装は、clipcqr2.cに有ります。
 */
#ifndef __CLIP_CQRD_H__
#define __CLIP_CQRD_H__
#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus
/****************************************************************************
 *	
 ****************************************************************************/
void CbkQue_surface_clear(ST_CbkQue* pCbkQue, int pri, SURFACE* surface, int color);
void CbkQue_render_save(ST_CbkQue* pCbkQue, int pri, RENDER* render);
void CbkQue_render_restore(ST_CbkQue* pCbkQue, int pri, RENDER* render);
void CbkQue_render_set_texture(ST_CbkQue* pCbkQue, int pri, RENDER* render, TEXTURE* texture/*NULL可*/);
void CbkQue_render_set_draw_area(ST_CbkQue* pCbkQue, int pri, RENDER* render, int left, int top, int right, int bottom);
void CbkQue_render_set_draw_area_full(ST_CbkQue* pCbkQue, int pri, RENDER* render);
void CbkQue_render_point(ST_CbkQue* pCbkQue, int pri, RENDER* render, int x, int y, int color);
void CbkQue_render_line(ST_CbkQue* pCbkQue, int pri, RENDER* render, int x0, int y0, int x1, int y1, int color);
void CbkQue_render_rectangle(ST_CbkQue* pCbkQue, int pri, RENDER* render, int x, int y, int w, int h, int color);
void CbkQue_render_rectangle_fill(ST_CbkQue* pCbkQue, int pri, RENDER* render, int x, int y, int w, int h, int color);
void CbkQue_render_rectangle_shadow(ST_CbkQue* pCbkQue, int pri, RENDER* render, int x, int y, int w, int h, int adjust, int limit);
void CbkQue_render_ellipse(ST_CbkQue* pCbkQue, int pri, RENDER* render, int x, int y, int w, int h, int color);
void CbkQue_render_ellipse_fill(ST_CbkQue* pCbkQue, int pri, RENDER* render, int x, int y, int w, int h, int color);
void CbkQue_render_polygon(ST_CbkQue* pCbkQue, int pri, RENDER* render, const VERTEX* vertices, int n_vertices, int color);	//clipcqr2.c
void CbkQue_render_font(ST_CbkQue* pCbkQue, int pri, RENDER* render, int x, int y, unsigned short code, int type, int color);
void CbkQue_render_string(ST_CbkQue* pCbkQue, int pri, RENDER* render, int x, int y, const char* str, int type, int color);
void CbkQue_render_printf(ST_CbkQue* pCbkQue, int pri, RENDER* render, int x, int y, int type, int color, const char* fmt, ...);
void CbkQue_render_font_framed(ST_CbkQue* pCbkQue, int pri, RENDER* render, int x, int y, unsigned short code, int type, int color);
void CbkQue_render_string_framed(ST_CbkQue* pCbkQue, int pri, RENDER* render, int x, int y, const char* str, int type, int color);
void CbkQue_render_printf_framed(ST_CbkQue* pCbkQue, int pri, RENDER* render, int x, int y, int type, int color, const char* fmt, ...);
void CbkQue_sprite_draw(ST_CbkQue* pCbkQue, int pri, int x, int y, int sprno, int param);
void CbkQue_sprite_draw2(ST_CbkQue* pCbkQue, int pri, int x, int y, int sprno, int param, fixed scale_x, fixed scale_y, fixed rot);	//clipcqr2.c
#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus
#endif//__CLIP_CQRD_H__
