• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * mesa 3-D graphics library
3  *
4  * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a
7  * copy of this software and associated documentation files (the "Software"),
8  * to deal in the Software without restriction, including without limitation
9  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  * and/or sell copies of the Software, and to permit persons to whom the
11  * Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included
14  * in all copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
17  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
19  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
20  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22  * OTHER DEALINGS IN THE SOFTWARE.
23  */
24 
25 /**
26  * \brief Array type draw functions, the main workhorse of any OpenGL API
27  * \author Keith Whitwell
28  */
29 
30 
31 #ifndef DRAW_H
32 #define DRAW_H
33 
34 #include <stdbool.h>
35 #include "main/glheader.h"
36 
37 #ifdef __cplusplus
38 extern "C" {
39 #endif
40 
41 struct gl_context;
42 struct gl_vertex_array_object;
43 struct _mesa_prim
44 {
45    GLubyte mode;    /**< GL_POINTS, GL_LINES, GL_QUAD_STRIP, etc */
46 
47    /**
48     * tnl: If true, line stipple emulation will reset the pattern walker.
49     * vbo: If false and the primitive is a line loop, the first vertex is
50     *      the beginning of the line loop and it won't be drawn.
51     *      Instead, it will be moved to the end.
52     */
53    bool begin;
54 
55    /**
56     * tnl: If true and the primitive is a line loop, it will be closed.
57     * vbo: Same as tnl.
58     */
59    bool end;
60 
61    GLuint start;
62    GLuint count;
63    GLint basevertex;
64    GLuint draw_id;
65 };
66 
67 /* Would like to call this a "vbo_index_buffer", but this would be
68  * confusing as the indices are not neccessarily yet in a non-null
69  * buffer object.
70  */
71 struct _mesa_index_buffer
72 {
73    GLuint count;
74    uint8_t index_size_shift; /* logbase2(index_size) */
75    struct gl_buffer_object *obj;
76    const void *ptr;
77 };
78 
79 
80 void
81 _mesa_set_varying_vp_inputs(struct gl_context *ctx, GLbitfield varying_inputs);
82 
83 /**
84  * Set the _DrawVAO and the net enabled arrays.
85  */
86 void
87 _mesa_set_draw_vao(struct gl_context *ctx, struct gl_vertex_array_object *vao,
88                    GLbitfield filter);
89 
90 void
91 _mesa_draw_gallium_fallback(struct gl_context *ctx,
92                             struct pipe_draw_info *info,
93                             unsigned drawid_offset,
94                             const struct pipe_draw_start_count_bias *draws,
95                             unsigned num_draws);
96 
97 void
98 _mesa_draw_gallium_multimode_fallback(struct gl_context *ctx,
99                                      struct pipe_draw_info *info,
100                                      const struct pipe_draw_start_count_bias *draws,
101                                      const unsigned char *mode,
102                                      unsigned num_draws);
103 
104 #ifdef __cplusplus
105 } // extern "C"
106 #endif
107 
108 #endif
109