Tizen 2.0 Release
[profile/ivi/osmesa.git] / src / mesa / vbo / vbo_context.h
1 /*
2  * mesa 3-D graphics library
3  * Version:  6.5
4  *
5  * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
6  *
7  * Permission is hereby granted, free of charge, to any person obtaining a
8  * copy of this software and associated documentation files (the "Software"),
9  * to deal in the Software without restriction, including without limitation
10  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
11  * and/or sell copies of the Software, and to permit persons to whom the
12  * Software is furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be included
15  * in all copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
18  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
20  * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
21  * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
22  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23  */
24
25 /**
26  * \file vbo_context.h
27  * \brief VBO builder module datatypes and definitions.
28  * \author Keith Whitwell
29  */
30
31
32 /**
33  * \mainpage The VBO builder module
34  *
35  * This module hooks into the GL dispatch table and catches all vertex
36  * building and drawing commands, such as glVertex3f, glBegin and
37  * glDrawArrays.  The module stores all incoming vertex data as arrays
38  * in GL vertex buffer objects (VBOs), and translates all drawing
39  * commands into calls to a driver supplied DrawPrimitives() callback.
40  *
41  * The module captures both immediate mode and display list drawing,
42  * and manages the allocation, reference counting and deallocation of
43  * vertex buffer objects itself.
44  * 
45  * The DrawPrimitives() callback can be either implemented by the
46  * driver itself or hooked to the tnl module's _tnl_draw_primitives()
47  * function for hardware without tnl capablilties or during fallbacks.
48  */
49
50
51 #ifndef _VBO_CONTEXT_H
52 #define _VBO_CONTEXT_H
53
54 #include "main/mfeatures.h"
55 #include "vbo.h"
56 #include "vbo_attrib.h"
57 #include "vbo_exec.h"
58 #include "vbo_save.h"
59
60
61 struct vbo_context {
62    struct gl_client_array currval[VBO_ATTRIB_MAX];
63    
64    /* These point into the above.  TODO: remove. 
65     */
66    struct gl_client_array *legacy_currval;
67    struct gl_client_array *generic_currval;
68    struct gl_client_array *mat_currval;
69
70    GLuint map_vp_none[VERT_ATTRIB_MAX];
71    GLuint map_vp_arb[VERT_ATTRIB_MAX];
72
73    GLfloat *current[VBO_ATTRIB_MAX]; /* points into ctx->Current, ctx->Light.Material */
74    GLfloat CurrentFloatEdgeFlag;
75
76
77    struct vbo_exec_context exec;
78 #if FEATURE_dlist
79    struct vbo_save_context save;
80 #endif
81
82    /* Callback into the driver.  This must always succeed, the driver
83     * is responsible for initiating any fallback actions required:
84     */
85    vbo_draw_func draw_prims;
86 };
87
88
89 static INLINE struct vbo_context *vbo_context(struct gl_context *ctx) 
90 {
91    return (struct vbo_context *)(ctx->swtnl_im);
92 }
93
94
95 /**
96  * Return VP_x token to indicate whether we're running fixed-function
97  * vertex transformation, an NV vertex program or ARB vertex program/shader.
98  */
99 static INLINE enum vp_mode
100 get_program_mode( struct gl_context *ctx )
101 {
102    if (!ctx->VertexProgram._Current)
103       return VP_NONE;
104    else if (ctx->VertexProgram._Current == ctx->VertexProgram._TnlProgram)
105       return VP_NONE;
106    else if (ctx->VertexProgram._Current->IsNVProgram)
107       return VP_NV;
108    else
109       return VP_ARB;
110 }
111
112
113 #endif