00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00036 class PG_API pgSprt : public pgDraw
00037 {
00038 public:
00039 struct PG_API SprtData
00040 {
00041 pgVec pos;
00042 pgCol col;
00043 r32 w, h;
00044 r32 u1, v1, u2, v2;
00045 s32 ang;
00046
00047 SprtData();
00048 };
00049
00050 pgSprt();
00051 virtual ~pgSprt();
00052
00053 void init(u16 max_data_num, pgID scr_id);
00054 void init(u16 max_data_num, pgDraw* parent);
00055
00056 void init(SprtData* sprt_data, u16 max_data_num, pgID scr_id);
00057 void init(SprtData* sprt_data, u16 max_data_num, pgDraw* parent);
00058
00059 bool isShareData() const;
00060
00061 u16 getCurDataNum() const;
00062 void setCurDataNum(u16 cur_data_num);
00063 u16 getMaxDataNum() const;
00064 void reallocData(u16 max_data_num);
00065 void copyData(u16 dest_index, const pgSprt* src_sprt, u16 src_index);
00066
00067 pgVec& dataPos(u16 index);
00068 pgCol& dataCol(u16 index);
00069 r32& dataW(u16 index);
00070 r32& dataH(u16 index);
00071 r32& dataU1(u16 index);
00072 r32& dataV1(u16 index);
00073 r32& dataU2(u16 index);
00074 r32& dataV2(u16 index);
00075 s32& dataAng(u16 index);
00076 void setDataSize(u16 index, r32 width, r32 height);
00077 void setDataUV(u16 index, r32 u1, r32 v1, r32 u2, r32 v2);
00078
00079 private:
00080 void init2(bool is_share_data, SprtData* sprt_data, u16 max_data_num, pgID scr_id, pgDraw* parent);
00081
00082 virtual void render(const pgMat& view);
00083 void render_soft(const pgMat& view);
00084 void render_shader(const pgMat& view);
00085
00086 pgType<u8, bool> m_is_share_data;
00087 SprtData* m_sprt_data;
00088 u16 m_cur_data_num;
00089 u16 m_max_data_num;
00090 };