#ifndef _TNL_VERTEX_H
#define _TNL_VERTEX_H
#include "mtypes.h"
#include "t_context.h"
enum tnl_attr_format {
EMIT_1F,
EMIT_2F,
EMIT_3F,
EMIT_4F,
EMIT_2F_VIEWPORT,
EMIT_3F_VIEWPORT,
EMIT_4F_VIEWPORT,
EMIT_3F_XYW,
EMIT_1UB_1F,
EMIT_3UB_3F_RGB,
EMIT_3UB_3F_BGR,
EMIT_4UB_4F_RGBA,
EMIT_4UB_4F_BGRA,
EMIT_4UB_4F_ARGB,
EMIT_4UB_4F_ABGR,
EMIT_4CHAN_4F_RGBA,
EMIT_PAD,
EMIT_MAX
};
struct tnl_attr_map {
GLuint attrib;
enum tnl_attr_format format;
GLuint offset;
};
struct tnl_format_info {
const char *name;
tnl_extract_func extract;
tnl_insert_func insert[4];
const GLuint attrsize;
};
extern const struct tnl_format_info _tnl_format_info[EMIT_MAX];
extern void _tnl_interp( GLcontext *ctx,
GLfloat t,
GLuint edst, GLuint eout, GLuint ein,
GLboolean force_boundary );
extern void _tnl_copy_pv( GLcontext *ctx, GLuint edst, GLuint esrc );
extern void _tnl_get_attr( GLcontext *ctx, const void *vertex, GLenum attrib,
GLfloat *dest );
extern void _tnl_set_attr( GLcontext *ctx, void *vout, GLenum attrib,
const GLfloat *src );
extern void *_tnl_get_vertex( GLcontext *ctx, GLuint nr );
extern GLuint _tnl_install_attrs( GLcontext *ctx,
const struct tnl_attr_map *map,
GLuint nr, const GLfloat *vp,
GLuint unpacked_size );
extern void _tnl_free_vertices( GLcontext *ctx );
extern void _tnl_init_vertices( GLcontext *ctx,
GLuint vb_size,
GLuint max_vertex_size );
extern void *_tnl_emit_vertices_to_buffer( GLcontext *ctx,
GLuint start,
GLuint end,
void *dest );
extern void _tnl_build_vertices( GLcontext *ctx,
GLuint start,
GLuint end,
GLuint newinputs );
extern void _tnl_invalidate_vertices( GLcontext *ctx, GLuint newinputs );
extern void _tnl_invalidate_vertex_state( GLcontext *ctx, GLuint new_state );
extern void _tnl_notify_pipeline_output_change( GLcontext *ctx );
#define GET_VERTEX_STATE(ctx) &(TNL_CONTEXT(ctx)->clipspace)
void _tnl_register_fastpath( struct tnl_clipspace *vtx,
GLboolean match_strides );
void _tnl_generic_copy_pv_extras( GLcontext *ctx,
GLuint dst, GLuint src );
void _tnl_generic_interp_extras( GLcontext *ctx,
GLfloat t,
GLuint dst, GLuint out, GLuint in,
GLboolean force_boundary );
void _tnl_generic_copy_pv( GLcontext *ctx, GLuint edst, GLuint esrc );
void _tnl_generic_interp( GLcontext *ctx,
GLfloat t,
GLuint edst, GLuint eout, GLuint ein,
GLboolean force_boundary );
void _tnl_generic_emit( GLcontext *ctx,
GLuint count,
GLubyte *v );
void _tnl_generate_hardwired_emit( GLcontext *ctx );
void _tnl_generate_sse_emit( GLcontext *ctx );
#endif