Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
1901 serge 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
/**
27
 * \file swrast/swrast.h
28
 * \brief Public interface to the software rasterization functions.
29
 * \author Keith Whitwell 
30
 */
31
 
32
#ifndef SWRAST_H
33
#define SWRAST_H
34
 
35
#include "main/mtypes.h"
36
 
37
/**
38
 * \struct SWvertex
39
 * \brief Data-structure to handle vertices in the software rasterizer.
40
 *
41
 * The software rasterizer now uses this format for vertices.  Thus a
42
 * 'RasterSetup' stage or other translation is required between the
43
 * tnl module and the swrast rasterization functions.  This serves to
44
 * isolate the swrast module from the internals of the tnl module, and
45
 * improve its usefulness as a fallback mechanism for hardware
46
 * drivers.
47
 *
48
 * wpos = attr[FRAG_ATTRIB_WPOS] and MUST BE THE FIRST values in the
49
 * vertex because of the tnl clipping code.
50
 
51
 * wpos[0] and [1] are the screen-coords of SWvertex.
52
 * wpos[2] is the z-buffer coord (if 16-bit Z buffer, in range [0,65535]).
53
 * wpos[3] is 1/w where w is the clip-space W coord.  This is the value
54
 * that clip{XYZ} were multiplied by to get ndc{XYZ}.
55
 *
56
 * Full software drivers:
57
 *   - Register the rastersetup and triangle functions from
58
 *     utils/software_helper.
59
 *   - On statechange, update the rasterization pointers in that module.
60
 *
61
 * Rasterization hardware drivers:
62
 *   - Keep native rastersetup.
63
 *   - Implement native twoside,offset and unfilled triangle setup.
64
 *   - Implement a translator from native vertices to swrast vertices.
65
 *   - On partial fallback (mix of accelerated and unaccelerated
66
 *   prims), call a pass-through function which translates native
67
 *   vertices to SWvertices and calls the appropriate swrast function.
68
 *   - On total fallback (vertex format insufficient for state or all
69
 *     primitives unaccelerated), hook in swrast_setup instead.
70
 */
71
typedef struct {
72
   GLfloat attrib[FRAG_ATTRIB_MAX][4];
73
   GLchan color[4];   /** integer color */
74
   GLfloat pointSize;
75
} SWvertex;
76
 
77
 
78
#define FRAG_ATTRIB_CI FRAG_ATTRIB_COL0
79
 
80
 
81
struct swrast_device_driver;
82
 
83
 
84
/* These are the public-access functions exported from swrast.
85
 */
86
 
87
extern GLboolean
88
_swrast_CreateContext( struct gl_context *ctx );
89
 
90
extern void
91
_swrast_DestroyContext( struct gl_context *ctx );
92
 
93
/* Get a (non-const) reference to the device driver struct for swrast.
94
 */
95
extern struct swrast_device_driver *
96
_swrast_GetDeviceDriverReference( struct gl_context *ctx );
97
 
98
extern void
99
_swrast_Bitmap( struct gl_context *ctx,
100
		GLint px, GLint py,
101
		GLsizei width, GLsizei height,
102
		const struct gl_pixelstore_attrib *unpack,
103
		const GLubyte *bitmap );
104
 
105
extern void
106
_swrast_CopyPixels( struct gl_context *ctx,
107
		    GLint srcx, GLint srcy,
108
		    GLint destx, GLint desty,
109
		    GLsizei width, GLsizei height,
110
		    GLenum type );
111
 
112
extern void
113
_swrast_DrawPixels( struct gl_context *ctx,
114
		    GLint x, GLint y,
115
		    GLsizei width, GLsizei height,
116
		    GLenum format, GLenum type,
117
		    const struct gl_pixelstore_attrib *unpack,
118
		    const GLvoid *pixels );
119
 
120
extern void
121
_swrast_ReadPixels( struct gl_context *ctx,
122
		    GLint x, GLint y, GLsizei width, GLsizei height,
123
		    GLenum format, GLenum type,
124
		    const struct gl_pixelstore_attrib *unpack,
125
		    GLvoid *pixels );
126
 
127
extern void
128
_swrast_BlitFramebuffer(struct gl_context *ctx,
129
                        GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
130
                        GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
131
                        GLbitfield mask, GLenum filter);
132
 
133
extern void
134
_swrast_Clear(struct gl_context *ctx, GLbitfield buffers);
135
 
136
extern void
137
_swrast_Accum(struct gl_context *ctx, GLenum op, GLfloat value);
138
 
139
 
140
 
141
/* Reset the stipple counter
142
 */
143
extern void
144
_swrast_ResetLineStipple( struct gl_context *ctx );
145
 
146
/**
147
 * Indicates front/back facing for subsequent points/lines when drawing
148
 * unfilled polygons.  Needed for two-side stencil.
149
 */
150
extern void
151
_swrast_SetFacing(struct gl_context *ctx, GLuint facing);
152
 
153
/* These will always render the correct point/line/triangle for the
154
 * current state.
155
 *
156
 * For flatshaded primitives, the provoking vertex is the final one.
157
 */
158
extern void
159
_swrast_Point( struct gl_context *ctx, const SWvertex *v );
160
 
161
extern void
162
_swrast_Line( struct gl_context *ctx, const SWvertex *v0, const SWvertex *v1 );
163
 
164
extern void
165
_swrast_Triangle( struct gl_context *ctx, const SWvertex *v0,
166
                  const SWvertex *v1, const SWvertex *v2 );
167
 
168
extern void
169
_swrast_Quad( struct gl_context *ctx,
170
              const SWvertex *v0, const SWvertex *v1,
171
	      const SWvertex *v2,  const SWvertex *v3);
172
 
173
extern void
174
_swrast_flush( struct gl_context *ctx );
175
 
176
extern void
177
_swrast_render_primitive( struct gl_context *ctx, GLenum mode );
178
 
179
extern void
180
_swrast_render_start( struct gl_context *ctx );
181
 
182
extern void
183
_swrast_render_finish( struct gl_context *ctx );
184
 
185
/* Tell the software rasterizer about core state changes.
186
 */
187
extern void
188
_swrast_InvalidateState( struct gl_context *ctx, GLbitfield new_state );
189
 
190
/* Configure software rasterizer to match hardware rasterizer characteristics:
191
 */
192
extern void
193
_swrast_allow_vertex_fog( struct gl_context *ctx, GLboolean value );
194
 
195
extern void
196
_swrast_allow_pixel_fog( struct gl_context *ctx, GLboolean value );
197
 
198
/* Debug:
199
 */
200
extern void
201
_swrast_print_vertex( struct gl_context *ctx, const SWvertex *v );
202
 
203
 
204
 
205
extern void
206
_swrast_eject_texture_images(struct gl_context *ctx);
207
 
208
 
209
 
210
/**
211
 * The driver interface for the software rasterizer.
212
 * XXX this may go away.
213
 * We may move these functions to ctx->Driver.RenderStart, RenderEnd.
214
 */
215
struct swrast_device_driver {
216
   /*
217
    * These are called before and after accessing renderbuffers during
218
    * software rasterization.
219
    *
220
    * These are a suitable place for grabbing/releasing hardware locks.
221
    *
222
    * NOTE: The swrast triangle/line/point routines *DO NOT* call
223
    * these functions.  Locking in that case must be organized by the
224
    * driver by other mechanisms.
225
    */
226
   void (*SpanRenderStart)(struct gl_context *ctx);
227
   void (*SpanRenderFinish)(struct gl_context *ctx);
228
};
229
 
230
 
231
 
232
#endif