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 
00036 #ifndef DRAW_VBUF_H_
00037 #define DRAW_VBUF_H_
00038 
00039 
00040 
00041 struct pipe_rasterizer_state;
00042 struct draw_context;
00043 struct vertex_info;
00044 
00045 
00049 struct vbuf_render {
00050 
00055    unsigned max_indices;
00056    unsigned max_vertex_buffer_bytes;
00057 
00064    boolean (*need_pipeline)(const struct vbuf_render *render,
00065                             const struct pipe_rasterizer_state *rasterizer,
00066                             unsigned int prim );
00067 
00068 
00074    const struct vertex_info *(*get_vertex_info)( struct vbuf_render * );
00075          
00081    void *(*allocate_vertices)( struct vbuf_render *,
00082                                ushort vertex_size,
00083                                ushort nr_vertices );
00084 
00091    boolean (*set_primitive)( struct vbuf_render *, unsigned prim );
00092 
00097    void (*draw)( struct vbuf_render *,
00098                  const ushort *indices,
00099                  uint nr_indices );
00100 
00101    
00102 
00103    void (*draw_arrays)( struct vbuf_render *,
00104                         unsigned start,
00105                         uint nr );
00106 
00110    void (*release_vertices)( struct vbuf_render *,
00111                              void *vertices, 
00112                              unsigned vertex_size,
00113                              unsigned vertices_used );
00114 
00115    void (*destroy)( struct vbuf_render * );
00116 };
00117 
00118 
00119 
00120 struct draw_stage *
00121 draw_vbuf_stage( struct draw_context *draw,
00122                  struct vbuf_render *render );
00123 
00124 
00125 #endif