00001 #ifndef INCLUDED_TASK_DRAW_SPAN 00002 #define INCLUDED_TASK_DRAW_SPAN 00003 00004 #ifndef INCLUDED_SCHED_TASK 00005 # include "SchedTask.h" 00006 #endif 00007 00008 #ifndef INCLUDED_TAPESTRY 00009 # include "Tapestry.h" 00010 #endif 00011 00012 #ifndef INCLUDED_SPAN_PACK 00013 # include "SpanPack.h" 00014 #endif 00015 00016 #ifndef INCLUDED_TEXTURE_HASH 00017 # include "TileHash.h" 00018 #endif 00019 00020 class DrawSpan : public SchedTask { 00021 public: 00022 SchedConstructor(DrawSpan); 00023 00024 int *linebuf; 00025 float *zRow; 00026 TileHashPtr hash; 00027 TileListPtr tileList; 00028 int doneWrite; 00029 00030 ~DrawSpan(void); 00031 00032 int run(void *rbuf, void *wbuf); 00033 00034 int* linebuf_init(int width, int height, int rgb); 00035 float* zRow_init(int width, int height); 00036 void set_rgb(uint32 *addr, int wait_tag); 00037 void set_rgbs(uint32 *addr, uint32 *max_addr, int wait_tag); 00038 uint32 get_rgb(int tx, int ty, uint32 *addr); 00039 TilePtr isAvailableTile(uint32 *addr); 00040 uint32* getTile(int tx, int ty, int tw, uint32 *tex_addr_top); 00041 int getTexBlock(int tx, int ty, int twidth); 00042 void writebuffer(unsigned int display, int width, int height, 00043 int screen_width); 00044 void updateBuffer(float zpos, int rangex, int x, int y, 00045 int tex_x, int tex_y, uint32 *tex_addr); 00046 00047 00048 void reboot(SpanPackPtr spack, int cur_span_x); 00049 00050 int drawDot1(SpanPtr span, int startx, int endx, int wait_tag); 00051 void drawDot2(SpanPtr span, int startx, int endx, int js, int wait_tag); 00052 int drawLine1(SpanPtr span, int startx, int endx, int wait_tag); 00053 void drawLine2(SpanPtr span, int startx, int endx, int js, int wait_tag); 00054 }; 00055 00056 typedef struct { 00057 uint32 display; 00058 int screen_width; 00059 int rangex_start; 00060 int rangex_end; 00061 int rangey; 00062 } DrawSpanArg, *DrawSpanArgPtr; 00063 00064 #endif