dd.h revision 13699463a33c1adf44005125c488e886e074a05b
1/** 2 * \file dd.h 3 * Device driver interfaces. 4 */ 5 6/* 7 * Mesa 3-D graphics library 8 * Version: 6.5.2 9 * 10 * Copyright (C) 1999-2006 Brian Paul All Rights Reserved. 11 * 12 * Permission is hereby granted, free of charge, to any person obtaining a 13 * copy of this software and associated documentation files (the "Software"), 14 * to deal in the Software without restriction, including without limitation 15 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 16 * and/or sell copies of the Software, and to permit persons to whom the 17 * Software is furnished to do so, subject to the following conditions: 18 * 19 * The above copyright notice and this permission notice shall be included 20 * in all copies or substantial portions of the Software. 21 * 22 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 23 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 24 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 25 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 26 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 27 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 28 */ 29 30 31#ifndef DD_INCLUDED 32#define DD_INCLUDED 33 34/* THIS FILE ONLY INCLUDED BY mtypes.h !!!!! */ 35 36struct gl_pixelstore_attrib; 37struct mesa_display_list; 38 39/** 40 * Device driver function table. 41 * Core Mesa uses these function pointers to call into device drivers. 42 * Most of these functions directly correspond to OpenGL state commands. 43 * Core Mesa will call these functions after error checking has been done 44 * so that the drivers don't have to worry about error testing. 45 * 46 * Vertex transformation/clipping/lighting is patched into the T&L module. 47 * Rasterization functions are patched into the swrast module. 48 * 49 * Note: when new functions are added here, the drivers/common/driverfuncs.c 50 * file should be updated too!!! 51 */ 52struct dd_function_table { 53 /** 54 * Return a string as needed by glGetString(). 55 * Only the GL_RENDERER query must be implemented. Otherwise, NULL can be 56 * returned. 57 */ 58 const GLubyte * (*GetString)( GLcontext *ctx, GLenum name ); 59 60 /** 61 * Notify the driver after Mesa has made some internal state changes. 62 * 63 * This is in addition to any state change callbacks Mesa may already have 64 * made. 65 */ 66 void (*UpdateState)( GLcontext *ctx, GLbitfield new_state ); 67 68 /** 69 * Get the width and height of the named buffer/window. 70 * 71 * Mesa uses this to determine when the driver's window size has changed. 72 * XXX OBSOLETE: this function will be removed in the future. 73 */ 74 void (*GetBufferSize)( GLframebuffer *buffer, 75 GLuint *width, GLuint *height ); 76 77 /** 78 * Resize the given framebuffer to the given size. 79 * XXX OBSOLETE: this function will be removed in the future. 80 */ 81 void (*ResizeBuffers)( GLcontext *ctx, GLframebuffer *fb, 82 GLuint width, GLuint height); 83 84 /** 85 * Called whenever an error is generated. 86 * __GLcontextRec::ErrorValue contains the error value. 87 */ 88 void (*Error)( GLcontext *ctx ); 89 90 /** 91 * This is called whenever glFinish() is called. 92 */ 93 void (*Finish)( GLcontext *ctx ); 94 95 /** 96 * This is called whenever glFlush() is called. 97 */ 98 void (*Flush)( GLcontext *ctx ); 99 100 /** 101 * Clear the color/depth/stencil/accum buffer(s). 102 * \param buffers a bitmask of BUFFER_BIT_* flags indicating which 103 * renderbuffers need to be cleared. 104 */ 105 void (*Clear)( GLcontext *ctx, GLbitfield buffers ); 106 107 /** 108 * Execute glAccum command. 109 */ 110 void (*Accum)( GLcontext *ctx, GLenum op, GLfloat value ); 111 112 113 /** 114 * Execute glRasterPos, updating the ctx->Current.Raster fields 115 */ 116 void (*RasterPos)( GLcontext *ctx, const GLfloat v[4] ); 117 118 /** 119 * \name Image-related functions 120 */ 121 /*@{*/ 122 123 /** 124 * Called by glDrawPixels(). 125 * \p unpack describes how to unpack the source image data. 126 */ 127 void (*DrawPixels)( GLcontext *ctx, 128 GLint x, GLint y, GLsizei width, GLsizei height, 129 GLenum format, GLenum type, 130 const struct gl_pixelstore_attrib *unpack, 131 const GLvoid *pixels ); 132 133 /** 134 * Called by glReadPixels(). 135 */ 136 void (*ReadPixels)( GLcontext *ctx, 137 GLint x, GLint y, GLsizei width, GLsizei height, 138 GLenum format, GLenum type, 139 const struct gl_pixelstore_attrib *unpack, 140 GLvoid *dest ); 141 142 /** 143 * Called by glCopyPixels(). 144 */ 145 void (*CopyPixels)( GLcontext *ctx, GLint srcx, GLint srcy, 146 GLsizei width, GLsizei height, 147 GLint dstx, GLint dsty, GLenum type ); 148 149 /** 150 * Called by glBitmap(). 151 */ 152 void (*Bitmap)( GLcontext *ctx, 153 GLint x, GLint y, GLsizei width, GLsizei height, 154 const struct gl_pixelstore_attrib *unpack, 155 const GLubyte *bitmap ); 156 /*@}*/ 157 158 159 /** 160 * \name Texture image functions 161 */ 162 /*@{*/ 163 164 /** 165 * Choose texture format. 166 * 167 * This is called by the \c _mesa_store_tex[sub]image[123]d() fallback 168 * functions. The driver should examine \p internalFormat and return a 169 * pointer to an appropriate gl_texture_format. 170 */ 171 const struct gl_texture_format *(*ChooseTextureFormat)( GLcontext *ctx, 172 GLint internalFormat, GLenum srcFormat, GLenum srcType ); 173 174 /** 175 * Called by glTexImage1D(). 176 * 177 * \param target user specified. 178 * \param format user specified. 179 * \param type user specified. 180 * \param pixels user specified. 181 * \param packing indicates the image packing of pixels. 182 * \param texObj is the target texture object. 183 * \param texImage is the target texture image. It will have the texture \p 184 * width, \p height, \p depth, \p border and \p internalFormat information. 185 * 186 * \p retainInternalCopy is returned by this function and indicates whether 187 * core Mesa should keep an internal copy of the texture image. 188 * 189 * Drivers should call a fallback routine from texstore.c if needed. 190 */ 191 void (*TexImage1D)( GLcontext *ctx, GLenum target, GLint level, 192 GLint internalFormat, 193 GLint width, GLint border, 194 GLenum format, GLenum type, const GLvoid *pixels, 195 const struct gl_pixelstore_attrib *packing, 196 struct gl_texture_object *texObj, 197 struct gl_texture_image *texImage ); 198 199 /** 200 * Called by glTexImage2D(). 201 * 202 * \sa dd_function_table::TexImage1D. 203 */ 204 void (*TexImage2D)( GLcontext *ctx, GLenum target, GLint level, 205 GLint internalFormat, 206 GLint width, GLint height, GLint border, 207 GLenum format, GLenum type, const GLvoid *pixels, 208 const struct gl_pixelstore_attrib *packing, 209 struct gl_texture_object *texObj, 210 struct gl_texture_image *texImage ); 211 212 /** 213 * Called by glTexImage3D(). 214 * 215 * \sa dd_function_table::TexImage1D. 216 */ 217 void (*TexImage3D)( GLcontext *ctx, GLenum target, GLint level, 218 GLint internalFormat, 219 GLint width, GLint height, GLint depth, GLint border, 220 GLenum format, GLenum type, const GLvoid *pixels, 221 const struct gl_pixelstore_attrib *packing, 222 struct gl_texture_object *texObj, 223 struct gl_texture_image *texImage ); 224 225 /** 226 * Called by glTexSubImage1D(). 227 * 228 * \param target user specified. 229 * \param level user specified. 230 * \param xoffset user specified. 231 * \param yoffset user specified. 232 * \param zoffset user specified. 233 * \param width user specified. 234 * \param height user specified. 235 * \param depth user specified. 236 * \param format user specified. 237 * \param type user specified. 238 * \param pixels user specified. 239 * \param packing indicates the image packing of pixels. 240 * \param texObj is the target texture object. 241 * \param texImage is the target texture image. It will have the texture \p 242 * width, \p height, \p border and \p internalFormat information. 243 * 244 * The driver should use a fallback routine from texstore.c if needed. 245 */ 246 void (*TexSubImage1D)( GLcontext *ctx, GLenum target, GLint level, 247 GLint xoffset, GLsizei width, 248 GLenum format, GLenum type, 249 const GLvoid *pixels, 250 const struct gl_pixelstore_attrib *packing, 251 struct gl_texture_object *texObj, 252 struct gl_texture_image *texImage ); 253 254 /** 255 * Called by glTexSubImage2D(). 256 * 257 * \sa dd_function_table::TexSubImage1D. 258 */ 259 void (*TexSubImage2D)( GLcontext *ctx, GLenum target, GLint level, 260 GLint xoffset, GLint yoffset, 261 GLsizei width, GLsizei height, 262 GLenum format, GLenum type, 263 const GLvoid *pixels, 264 const struct gl_pixelstore_attrib *packing, 265 struct gl_texture_object *texObj, 266 struct gl_texture_image *texImage ); 267 268 /** 269 * Called by glTexSubImage3D(). 270 * 271 * \sa dd_function_table::TexSubImage1D. 272 */ 273 void (*TexSubImage3D)( GLcontext *ctx, GLenum target, GLint level, 274 GLint xoffset, GLint yoffset, GLint zoffset, 275 GLsizei width, GLsizei height, GLint depth, 276 GLenum format, GLenum type, 277 const GLvoid *pixels, 278 const struct gl_pixelstore_attrib *packing, 279 struct gl_texture_object *texObj, 280 struct gl_texture_image *texImage ); 281 282 /** 283 * Called by glGetTexImage(). 284 */ 285 void (*GetTexImage)( GLcontext *ctx, GLenum target, GLint level, 286 GLenum format, GLenum type, GLvoid *pixels, 287 struct gl_texture_object *texObj, 288 struct gl_texture_image *texImage ); 289 290 /** 291 * Called by glCopyTexImage1D(). 292 * 293 * Drivers should use a fallback routine from texstore.c if needed. 294 */ 295 void (*CopyTexImage1D)( GLcontext *ctx, GLenum target, GLint level, 296 GLenum internalFormat, GLint x, GLint y, 297 GLsizei width, GLint border ); 298 299 /** 300 * Called by glCopyTexImage2D(). 301 * 302 * Drivers should use a fallback routine from texstore.c if needed. 303 */ 304 void (*CopyTexImage2D)( GLcontext *ctx, GLenum target, GLint level, 305 GLenum internalFormat, GLint x, GLint y, 306 GLsizei width, GLsizei height, GLint border ); 307 308 /** 309 * Called by glCopyTexSubImage1D(). 310 * 311 * Drivers should use a fallback routine from texstore.c if needed. 312 */ 313 void (*CopyTexSubImage1D)( GLcontext *ctx, GLenum target, GLint level, 314 GLint xoffset, 315 GLint x, GLint y, GLsizei width ); 316 /** 317 * Called by glCopyTexSubImage2D(). 318 * 319 * Drivers should use a fallback routine from texstore.c if needed. 320 */ 321 void (*CopyTexSubImage2D)( GLcontext *ctx, GLenum target, GLint level, 322 GLint xoffset, GLint yoffset, 323 GLint x, GLint y, 324 GLsizei width, GLsizei height ); 325 /** 326 * Called by glCopyTexSubImage3D(). 327 * 328 * Drivers should use a fallback routine from texstore.c if needed. 329 */ 330 void (*CopyTexSubImage3D)( GLcontext *ctx, GLenum target, GLint level, 331 GLint xoffset, GLint yoffset, GLint zoffset, 332 GLint x, GLint y, 333 GLsizei width, GLsizei height ); 334 335 /** 336 * Called by glTexImage[123]D when user specifies a proxy texture 337 * target. 338 * 339 * \return GL_TRUE if the proxy test passes, or GL_FALSE if the test fails. 340 */ 341 GLboolean (*TestProxyTexImage)(GLcontext *ctx, GLenum target, 342 GLint level, GLint internalFormat, 343 GLenum format, GLenum type, 344 GLint width, GLint height, 345 GLint depth, GLint border); 346 /*@}*/ 347 348 349 /** 350 * \name Compressed texture functions 351 */ 352 /*@{*/ 353 354 /** 355 * Called by glCompressedTexImage1D(). 356 * 357 * \param target user specified. 358 * \param format user specified. 359 * \param type user specified. 360 * \param pixels user specified. 361 * \param packing indicates the image packing of pixels. 362 * \param texObj is the target texture object. 363 * \param texImage is the target texture image. It will have the texture \p 364 * width, \p height, \p depth, \p border and \p internalFormat information. 365 * 366 * \a retainInternalCopy is returned by this function and indicates whether 367 * core Mesa should keep an internal copy of the texture image. 368 */ 369 void (*CompressedTexImage1D)( GLcontext *ctx, GLenum target, 370 GLint level, GLint internalFormat, 371 GLsizei width, GLint border, 372 GLsizei imageSize, const GLvoid *data, 373 struct gl_texture_object *texObj, 374 struct gl_texture_image *texImage ); 375 /** 376 * Called by glCompressedTexImage2D(). 377 * 378 * \sa dd_function_table::CompressedTexImage1D. 379 */ 380 void (*CompressedTexImage2D)( GLcontext *ctx, GLenum target, 381 GLint level, GLint internalFormat, 382 GLsizei width, GLsizei height, GLint border, 383 GLsizei imageSize, const GLvoid *data, 384 struct gl_texture_object *texObj, 385 struct gl_texture_image *texImage ); 386 /** 387 * Called by glCompressedTexImage3D(). 388 * 389 * \sa dd_function_table::CompressedTexImage3D. 390 */ 391 void (*CompressedTexImage3D)( GLcontext *ctx, GLenum target, 392 GLint level, GLint internalFormat, 393 GLsizei width, GLsizei height, GLsizei depth, 394 GLint border, 395 GLsizei imageSize, const GLvoid *data, 396 struct gl_texture_object *texObj, 397 struct gl_texture_image *texImage ); 398 399 /** 400 * Called by glCompressedTexSubImage1D(). 401 * 402 * \param target user specified. 403 * \param level user specified. 404 * \param xoffset user specified. 405 * \param yoffset user specified. 406 * \param zoffset user specified. 407 * \param width user specified. 408 * \param height user specified. 409 * \param depth user specified. 410 * \param imageSize user specified. 411 * \param data user specified. 412 * \param texObj is the target texture object. 413 * \param texImage is the target texture image. It will have the texture \p 414 * width, \p height, \p depth, \p border and \p internalFormat information. 415 */ 416 void (*CompressedTexSubImage1D)(GLcontext *ctx, GLenum target, GLint level, 417 GLint xoffset, GLsizei width, 418 GLenum format, 419 GLsizei imageSize, const GLvoid *data, 420 struct gl_texture_object *texObj, 421 struct gl_texture_image *texImage); 422 /** 423 * Called by glCompressedTexSubImage2D(). 424 * 425 * \sa dd_function_table::CompressedTexImage3D. 426 */ 427 void (*CompressedTexSubImage2D)(GLcontext *ctx, GLenum target, GLint level, 428 GLint xoffset, GLint yoffset, 429 GLsizei width, GLint height, 430 GLenum format, 431 GLsizei imageSize, const GLvoid *data, 432 struct gl_texture_object *texObj, 433 struct gl_texture_image *texImage); 434 /** 435 * Called by glCompressedTexSubImage3D(). 436 * 437 * \sa dd_function_table::CompressedTexImage3D. 438 */ 439 void (*CompressedTexSubImage3D)(GLcontext *ctx, GLenum target, GLint level, 440 GLint xoffset, GLint yoffset, GLint zoffset, 441 GLsizei width, GLint height, GLint depth, 442 GLenum format, 443 GLsizei imageSize, const GLvoid *data, 444 struct gl_texture_object *texObj, 445 struct gl_texture_image *texImage); 446 447 448 /** 449 * Called by glGetCompressedTexImage. 450 */ 451 void (*GetCompressedTexImage)(GLcontext *ctx, GLenum target, GLint level, 452 GLvoid *img, 453 const struct gl_texture_object *texObj, 454 const struct gl_texture_image *texImage); 455 456 /** 457 * Called to query number of bytes of storage needed to store the 458 * specified compressed texture. 459 */ 460 GLuint (*CompressedTextureSize)( GLcontext *ctx, GLsizei width, 461 GLsizei height, GLsizei depth, 462 GLenum format ); 463 /*@}*/ 464 465 /** 466 * \name Texture object functions 467 */ 468 /*@{*/ 469 470 /** 471 * Called by glBindTexture(). 472 */ 473 void (*BindTexture)( GLcontext *ctx, GLenum target, 474 struct gl_texture_object *tObj ); 475 476 /** 477 * Called to allocate a new texture object. 478 * A new gl_texture_object should be returned. The driver should 479 * attach to it any device-specific info it needs. 480 */ 481 struct gl_texture_object * (*NewTextureObject)( GLcontext *ctx, GLuint name, 482 GLenum target ); 483 /** 484 * Called when a texture object is about to be deallocated. 485 * 486 * Driver should delete the gl_texture_object object and anything 487 * hanging off of it. 488 */ 489 void (*DeleteTexture)( GLcontext *ctx, struct gl_texture_object *tObj ); 490 491 /** 492 * Called to allocate a new texture image object. 493 */ 494 struct gl_texture_image * (*NewTextureImage)( GLcontext *ctx ); 495 496 /** 497 * Called to free tImage->Data. 498 */ 499 void (*FreeTexImageData)( GLcontext *ctx, struct gl_texture_image *tImage ); 500 501 /** 502 * Note: no context argument. This function doesn't initially look 503 * like it belongs here, except that the driver is the only entity 504 * that knows for sure how the texture memory is allocated - via 505 * the above callbacks. There is then an argument that the driver 506 * knows what memcpy paths might be fast. Typically this is invoked with 507 * 508 * to -- a pointer into texture memory allocated by NewTextureImage() above. 509 * from -- a pointer into client memory or a mesa temporary. 510 * sz -- nr bytes to copy. 511 */ 512 void* (*TextureMemCpy)( void *to, const void *from, size_t sz ); 513 514 /** 515 * Called by glAreTextureResident(). 516 */ 517 GLboolean (*IsTextureResident)( GLcontext *ctx, 518 struct gl_texture_object *t ); 519 520 /** 521 * Called by glPrioritizeTextures(). 522 */ 523 void (*PrioritizeTexture)( GLcontext *ctx, struct gl_texture_object *t, 524 GLclampf priority ); 525 526 /** 527 * Called by glActiveTextureARB() to set current texture unit. 528 */ 529 void (*ActiveTexture)( GLcontext *ctx, GLuint texUnitNumber ); 530 531 /** 532 * Called when the texture's color lookup table is changed. 533 * 534 * If \p tObj is NULL then the shared texture palette 535 * gl_texture_object::Palette is to be updated. 536 */ 537 void (*UpdateTexturePalette)( GLcontext *ctx, 538 struct gl_texture_object *tObj ); 539 /*@}*/ 540 541 542 /** 543 * \name Imaging functionality 544 */ 545 /*@{*/ 546 void (*CopyColorTable)( GLcontext *ctx, 547 GLenum target, GLenum internalformat, 548 GLint x, GLint y, GLsizei width ); 549 550 void (*CopyColorSubTable)( GLcontext *ctx, 551 GLenum target, GLsizei start, 552 GLint x, GLint y, GLsizei width ); 553 554 void (*CopyConvolutionFilter1D)( GLcontext *ctx, GLenum target, 555 GLenum internalFormat, 556 GLint x, GLint y, GLsizei width ); 557 558 void (*CopyConvolutionFilter2D)( GLcontext *ctx, GLenum target, 559 GLenum internalFormat, 560 GLint x, GLint y, 561 GLsizei width, GLsizei height ); 562 /*@}*/ 563 564 565 /** 566 * \name Vertex/fragment program functions 567 */ 568 /*@{*/ 569 /** Bind a vertex/fragment program */ 570 void (*BindProgram)(GLcontext *ctx, GLenum target, struct gl_program *prog); 571 /** Allocate a new program */ 572 struct gl_program * (*NewProgram)(GLcontext *ctx, GLenum target, GLuint id); 573 /** Delete a program */ 574 void (*DeleteProgram)(GLcontext *ctx, struct gl_program *prog); 575 /** Notify driver that a program string has been specified. */ 576 void (*ProgramStringNotify)(GLcontext *ctx, GLenum target, 577 struct gl_program *prog); 578 /** Get value of a program register during program execution. */ 579 void (*GetProgramRegister)(GLcontext *ctx, enum register_file file, 580 GLuint index, GLfloat val[4]); 581 582 /** Query if program can be loaded onto hardware */ 583 GLboolean (*IsProgramNative)(GLcontext *ctx, GLenum target, 584 struct gl_program *prog); 585 586 /*@}*/ 587 588 589 /** 590 * \name State-changing functions. 591 * 592 * \note drawing functions are above. 593 * 594 * These functions are called by their corresponding OpenGL API functions. 595 * They are \e also called by the gl_PopAttrib() function!!! 596 * May add more functions like these to the device driver in the future. 597 */ 598 /*@{*/ 599 /** Specify the alpha test function */ 600 void (*AlphaFunc)(GLcontext *ctx, GLenum func, GLfloat ref); 601 /** Set the blend color */ 602 void (*BlendColor)(GLcontext *ctx, const GLfloat color[4]); 603 /** Set the blend equation */ 604 void (*BlendEquationSeparate)(GLcontext *ctx, GLenum modeRGB, GLenum modeA); 605 /** Specify pixel arithmetic */ 606 void (*BlendFuncSeparate)(GLcontext *ctx, 607 GLenum sfactorRGB, GLenum dfactorRGB, 608 GLenum sfactorA, GLenum dfactorA); 609 /** Specify clear values for the color buffers */ 610 void (*ClearColor)(GLcontext *ctx, const GLfloat color[4]); 611 /** Specify the clear value for the depth buffer */ 612 void (*ClearDepth)(GLcontext *ctx, GLclampd d); 613 /** Specify the clear value for the color index buffers */ 614 void (*ClearIndex)(GLcontext *ctx, GLuint index); 615 /** Specify the clear value for the stencil buffer */ 616 void (*ClearStencil)(GLcontext *ctx, GLint s); 617 /** Specify a plane against which all geometry is clipped */ 618 void (*ClipPlane)(GLcontext *ctx, GLenum plane, const GLfloat *equation ); 619 /** Enable and disable writing of frame buffer color components */ 620 void (*ColorMask)(GLcontext *ctx, GLboolean rmask, GLboolean gmask, 621 GLboolean bmask, GLboolean amask ); 622 /** Cause a material color to track the current color */ 623 void (*ColorMaterial)(GLcontext *ctx, GLenum face, GLenum mode); 624 /** Specify whether front- or back-facing facets can be culled */ 625 void (*CullFace)(GLcontext *ctx, GLenum mode); 626 /** Define front- and back-facing polygons */ 627 void (*FrontFace)(GLcontext *ctx, GLenum mode); 628 /** Specify the value used for depth buffer comparisons */ 629 void (*DepthFunc)(GLcontext *ctx, GLenum func); 630 /** Enable or disable writing into the depth buffer */ 631 void (*DepthMask)(GLcontext *ctx, GLboolean flag); 632 /** Specify mapping of depth values from NDC to window coordinates */ 633 void (*DepthRange)(GLcontext *ctx, GLclampd nearval, GLclampd farval); 634 /** Specify the current buffer for writing */ 635 void (*DrawBuffer)( GLcontext *ctx, GLenum buffer ); 636 /** Specify the buffers for writing for fragment programs*/ 637 void (*DrawBuffers)( GLcontext *ctx, GLsizei n, const GLenum *buffers ); 638 /** Enable or disable server-side gl capabilities */ 639 void (*Enable)(GLcontext *ctx, GLenum cap, GLboolean state); 640 /** Specify fog parameters */ 641 void (*Fogfv)(GLcontext *ctx, GLenum pname, const GLfloat *params); 642 /** Specify implementation-specific hints */ 643 void (*Hint)(GLcontext *ctx, GLenum target, GLenum mode); 644 /** Control the writing of individual bits in the color index buffers */ 645 void (*IndexMask)(GLcontext *ctx, GLuint mask); 646 /** Set light source parameters. 647 * Note: for GL_POSITION and GL_SPOT_DIRECTION, params will have already 648 * been transformed to eye-space. 649 */ 650 void (*Lightfv)(GLcontext *ctx, GLenum light, 651 GLenum pname, const GLfloat *params ); 652 /** Set the lighting model parameters */ 653 void (*LightModelfv)(GLcontext *ctx, GLenum pname, const GLfloat *params); 654 /** Specify the line stipple pattern */ 655 void (*LineStipple)(GLcontext *ctx, GLint factor, GLushort pattern ); 656 /** Specify the width of rasterized lines */ 657 void (*LineWidth)(GLcontext *ctx, GLfloat width); 658 /** Specify a logical pixel operation for color index rendering */ 659 void (*LogicOpcode)(GLcontext *ctx, GLenum opcode); 660 void (*PointParameterfv)(GLcontext *ctx, GLenum pname, 661 const GLfloat *params); 662 /** Specify the diameter of rasterized points */ 663 void (*PointSize)(GLcontext *ctx, GLfloat size); 664 /** Select a polygon rasterization mode */ 665 void (*PolygonMode)(GLcontext *ctx, GLenum face, GLenum mode); 666 /** Set the scale and units used to calculate depth values */ 667 void (*PolygonOffset)(GLcontext *ctx, GLfloat factor, GLfloat units); 668 /** Set the polygon stippling pattern */ 669 void (*PolygonStipple)(GLcontext *ctx, const GLubyte *mask ); 670 /* Specifies the current buffer for reading */ 671 void (*ReadBuffer)( GLcontext *ctx, GLenum buffer ); 672 /** Set rasterization mode */ 673 void (*RenderMode)(GLcontext *ctx, GLenum mode ); 674 /** Define the scissor box */ 675 void (*Scissor)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h); 676 /** Select flat or smooth shading */ 677 void (*ShadeModel)(GLcontext *ctx, GLenum mode); 678 /** OpenGL 2.0 two-sided StencilFunc */ 679 void (*StencilFuncSeparate)(GLcontext *ctx, GLenum face, GLenum func, 680 GLint ref, GLuint mask); 681 /** OpenGL 2.0 two-sided StencilMask */ 682 void (*StencilMaskSeparate)(GLcontext *ctx, GLenum face, GLuint mask); 683 /** OpenGL 2.0 two-sided StencilOp */ 684 void (*StencilOpSeparate)(GLcontext *ctx, GLenum face, GLenum fail, 685 GLenum zfail, GLenum zpass); 686 /** Control the generation of texture coordinates */ 687 void (*TexGen)(GLcontext *ctx, GLenum coord, GLenum pname, 688 const GLfloat *params); 689 /** Set texture environment parameters */ 690 void (*TexEnv)(GLcontext *ctx, GLenum target, GLenum pname, 691 const GLfloat *param); 692 /** Set texture parameters */ 693 void (*TexParameter)(GLcontext *ctx, GLenum target, 694 struct gl_texture_object *texObj, 695 GLenum pname, const GLfloat *params); 696 void (*TextureMatrix)(GLcontext *ctx, GLuint unit, const GLmatrix *mat); 697 /** Set the viewport */ 698 void (*Viewport)(GLcontext *ctx, GLint x, GLint y, GLsizei w, GLsizei h); 699 /*@}*/ 700 701 702 /** 703 * \name Vertex array functions 704 * 705 * Called by the corresponding OpenGL functions. 706 */ 707 /*@{*/ 708 void (*VertexPointer)(GLcontext *ctx, GLint size, GLenum type, 709 GLsizei stride, const GLvoid *ptr); 710 void (*NormalPointer)(GLcontext *ctx, GLenum type, 711 GLsizei stride, const GLvoid *ptr); 712 void (*ColorPointer)(GLcontext *ctx, GLint size, GLenum type, 713 GLsizei stride, const GLvoid *ptr); 714 void (*FogCoordPointer)(GLcontext *ctx, GLenum type, 715 GLsizei stride, const GLvoid *ptr); 716 void (*IndexPointer)(GLcontext *ctx, GLenum type, 717 GLsizei stride, const GLvoid *ptr); 718 void (*SecondaryColorPointer)(GLcontext *ctx, GLint size, GLenum type, 719 GLsizei stride, const GLvoid *ptr); 720 void (*TexCoordPointer)(GLcontext *ctx, GLint size, GLenum type, 721 GLsizei stride, const GLvoid *ptr); 722 void (*EdgeFlagPointer)(GLcontext *ctx, GLsizei stride, const GLvoid *ptr); 723 void (*VertexAttribPointer)(GLcontext *ctx, GLuint index, GLint size, 724 GLenum type, GLsizei stride, const GLvoid *ptr); 725 void (*LockArraysEXT)( GLcontext *ctx, GLint first, GLsizei count ); 726 void (*UnlockArraysEXT)( GLcontext *ctx ); 727 /*@}*/ 728 729 730 /** 731 * \name State-query functions 732 * 733 * Return GL_TRUE if query was completed, GL_FALSE otherwise. 734 */ 735 /*@{*/ 736 /** Return the value or values of a selected parameter */ 737 GLboolean (*GetBooleanv)(GLcontext *ctx, GLenum pname, GLboolean *result); 738 /** Return the value or values of a selected parameter */ 739 GLboolean (*GetDoublev)(GLcontext *ctx, GLenum pname, GLdouble *result); 740 /** Return the value or values of a selected parameter */ 741 GLboolean (*GetFloatv)(GLcontext *ctx, GLenum pname, GLfloat *result); 742 /** Return the value or values of a selected parameter */ 743 GLboolean (*GetIntegerv)(GLcontext *ctx, GLenum pname, GLint *result); 744 /** Return the value or values of a selected parameter */ 745 GLboolean (*GetPointerv)(GLcontext *ctx, GLenum pname, GLvoid **result); 746 /*@}*/ 747 748 749 /** 750 * \name Vertex/pixel buffer object functions 751 */ 752#if FEATURE_ARB_vertex_buffer_object 753 /*@{*/ 754 void (*BindBuffer)( GLcontext *ctx, GLenum target, 755 struct gl_buffer_object *obj ); 756 757 struct gl_buffer_object * (*NewBufferObject)( GLcontext *ctx, GLuint buffer, 758 GLenum target ); 759 760 void (*DeleteBuffer)( GLcontext *ctx, struct gl_buffer_object *obj ); 761 762 void (*BufferData)( GLcontext *ctx, GLenum target, GLsizeiptrARB size, 763 const GLvoid *data, GLenum usage, 764 struct gl_buffer_object *obj ); 765 766 void (*BufferSubData)( GLcontext *ctx, GLenum target, GLintptrARB offset, 767 GLsizeiptrARB size, const GLvoid *data, 768 struct gl_buffer_object *obj ); 769 770 void (*GetBufferSubData)( GLcontext *ctx, GLenum target, 771 GLintptrARB offset, GLsizeiptrARB size, 772 GLvoid *data, struct gl_buffer_object *obj ); 773 774 void * (*MapBuffer)( GLcontext *ctx, GLenum target, GLenum access, 775 struct gl_buffer_object *obj ); 776 777 GLboolean (*UnmapBuffer)( GLcontext *ctx, GLenum target, 778 struct gl_buffer_object *obj ); 779 /*@}*/ 780#endif 781 782 /** 783 * \name Functions for GL_EXT_framebuffer_object 784 */ 785#if FEATURE_EXT_framebuffer_object 786 /*@{*/ 787 struct gl_framebuffer * (*NewFramebuffer)(GLcontext *ctx, GLuint name); 788 struct gl_renderbuffer * (*NewRenderbuffer)(GLcontext *ctx, GLuint name); 789 void (*BindFramebuffer)(GLcontext *ctx, GLenum target, 790 struct gl_framebuffer *fb, struct gl_framebuffer *fbread); 791 void (*FramebufferRenderbuffer)(GLcontext *ctx, 792 struct gl_framebuffer *fb, 793 GLenum attachment, 794 struct gl_renderbuffer *rb); 795 void (*RenderTexture)(GLcontext *ctx, 796 struct gl_framebuffer *fb, 797 struct gl_renderbuffer_attachment *att); 798 void (*FinishRenderTexture)(GLcontext *ctx, 799 struct gl_renderbuffer_attachment *att); 800 /*@}*/ 801#endif 802#if FEATURE_EXT_framebuffer_blit 803 void (*BlitFramebuffer)(GLcontext *ctx, 804 GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, 805 GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, 806 GLbitfield mask, GLenum filter); 807#endif 808 809 /** 810 * \name Query objects 811 */ 812 /*@{*/ 813 struct gl_query_object * (*NewQueryObject)(GLcontext *ctx, GLuint id); 814 void (*DeleteQuery)(GLcontext *ctx, struct gl_query_object *q); 815 void (*BeginQuery)(GLcontext *ctx, struct gl_query_object *q); 816 void (*EndQuery)(GLcontext *ctx, struct gl_query_object *q); 817 void (*CheckQuery)(GLcontext *ctx, struct gl_query_object *q); 818 void (*WaitQuery)(GLcontext *ctx, struct gl_query_object *q); 819 /*@}*/ 820 821 822 /** 823 * \name Vertex Array objects 824 */ 825 /*@{*/ 826 struct gl_array_object * (*NewArrayObject)(GLcontext *ctx, GLuint id); 827 void (*DeleteArrayObject)(GLcontext *ctx, struct gl_array_object *obj); 828 void (*BindArrayObject)(GLcontext *ctx, struct gl_array_object *obj); 829 /*@}*/ 830 831 /** 832 * \name GLSL-related functions (ARB extensions and OpenGL 2.x) 833 */ 834 /*@{*/ 835 void (*AttachShader)(GLcontext *ctx, GLuint program, GLuint shader); 836 void (*BindAttribLocation)(GLcontext *ctx, GLuint program, GLuint index, 837 const GLcharARB *name); 838 void (*CompileShader)(GLcontext *ctx, GLuint shader); 839 GLuint (*CreateShader)(GLcontext *ctx, GLenum type); 840 GLuint (*CreateProgram)(GLcontext *ctx); 841 void (*DeleteProgram2)(GLcontext *ctx, GLuint program); 842 void (*DeleteShader)(GLcontext *ctx, GLuint shader); 843 void (*DetachShader)(GLcontext *ctx, GLuint program, GLuint shader); 844 void (*GetActiveAttrib)(GLcontext *ctx, GLuint program, GLuint index, 845 GLsizei maxLength, GLsizei * length, GLint * size, 846 GLenum * type, GLcharARB * name); 847 void (*GetActiveUniform)(GLcontext *ctx, GLuint program, GLuint index, 848 GLsizei maxLength, GLsizei *length, GLint *size, 849 GLenum *type, GLcharARB *name); 850 void (*GetAttachedShaders)(GLcontext *ctx, GLuint program, GLsizei maxCount, 851 GLsizei *count, GLuint *obj); 852 GLint (*GetAttribLocation)(GLcontext *ctx, GLuint program, 853 const GLcharARB *name); 854 GLuint (*GetHandle)(GLcontext *ctx, GLenum pname); 855 void (*GetProgramiv)(GLcontext *ctx, GLuint program, 856 GLenum pname, GLint *params); 857 void (*GetProgramInfoLog)(GLcontext *ctx, GLuint program, GLsizei bufSize, 858 GLsizei *length, GLchar *infoLog); 859 void (*GetShaderiv)(GLcontext *ctx, GLuint shader, 860 GLenum pname, GLint *params); 861 void (*GetShaderInfoLog)(GLcontext *ctx, GLuint shader, GLsizei bufSize, 862 GLsizei *length, GLchar *infoLog); 863 void (*GetShaderSource)(GLcontext *ctx, GLuint shader, GLsizei maxLength, 864 GLsizei *length, GLcharARB *sourceOut); 865 void (*GetUniformfv)(GLcontext *ctx, GLuint program, GLint location, 866 GLfloat *params); 867 GLint (*GetUniformLocation)(GLcontext *ctx, GLuint program, 868 const GLcharARB *name); 869 GLboolean (*IsProgram)(GLcontext *ctx, GLuint name); 870 GLboolean (*IsShader)(GLcontext *ctx, GLuint name); 871 void (*LinkProgram)(GLcontext *ctx, GLuint program); 872 void (*ShaderSource)(GLcontext *ctx, GLuint shader, const GLchar *source); 873 void (*Uniform)(GLcontext *ctx, GLint location, GLsizei count, 874 const GLvoid *values, GLenum type); 875 void (*UniformMatrix)(GLcontext *ctx, GLint cols, GLint rows, 876 GLenum matrixType, GLint location, GLsizei count, 877 GLboolean transpose, const GLfloat *values); 878 void (*UseProgram)(GLcontext *ctx, GLuint program); 879 void (*ValidateProgram)(GLcontext *ctx, GLuint program); 880 /* XXX many more to come */ 881 /*@}*/ 882 883 884 /** 885 * \name Support for multiple T&L engines 886 */ 887 /*@{*/ 888 889 /** 890 * Bitmask of state changes that require the current T&L module to be 891 * validated, using ValidateTnlModule() below. 892 */ 893 GLuint NeedValidate; 894 895 /** 896 * Validate the current T&L module. 897 * 898 * This is called directly after UpdateState() when a state change that has 899 * occurred matches the dd_function_table::NeedValidate bitmask above. This 900 * ensures all computed values are up to date, thus allowing the driver to 901 * decide if the current T&L module needs to be swapped out. 902 * 903 * This must be non-NULL if a driver installs a custom T&L module and sets 904 * the dd_function_table::NeedValidate bitmask, but may be NULL otherwise. 905 */ 906 void (*ValidateTnlModule)( GLcontext *ctx, GLuint new_state ); 907 908 909#define PRIM_OUTSIDE_BEGIN_END GL_POLYGON+1 910#define PRIM_INSIDE_UNKNOWN_PRIM GL_POLYGON+2 911#define PRIM_UNKNOWN GL_POLYGON+3 912 913 /** 914 * Set by the driver-supplied T&L engine. 915 * 916 * Set to PRIM_OUTSIDE_BEGIN_END when outside glBegin()/glEnd(). 917 */ 918 GLuint CurrentExecPrimitive; 919 920 /** 921 * Current state of an in-progress compilation. 922 * 923 * May take on any of the additional values PRIM_OUTSIDE_BEGIN_END, 924 * PRIM_INSIDE_UNKNOWN_PRIM or PRIM_UNKNOWN defined above. 925 */ 926 GLuint CurrentSavePrimitive; 927 928 929#define FLUSH_STORED_VERTICES 0x1 930#define FLUSH_UPDATE_CURRENT 0x2 931 /** 932 * Set by the driver-supplied T&L engine whenever vertices are buffered 933 * between glBegin()/glEnd() objects or __GLcontextRec::Current is not 934 * updated. 935 * 936 * The dd_function_table::FlushVertices call below may be used to resolve 937 * these conditions. 938 */ 939 GLuint NeedFlush; 940 GLuint SaveNeedFlush; 941 942 /** 943 * If inside glBegin()/glEnd(), it should ASSERT(0). Otherwise, if 944 * FLUSH_STORED_VERTICES bit in \p flags is set flushes any buffered 945 * vertices, if FLUSH_UPDATE_CURRENT bit is set updates 946 * __GLcontextRec::Current and gl_light_attrib::Material 947 * 948 * Note that the default T&L engine never clears the 949 * FLUSH_UPDATE_CURRENT bit, even after performing the update. 950 */ 951 void (*FlushVertices)( GLcontext *ctx, GLuint flags ); 952 void (*SaveFlushVertices)( GLcontext *ctx ); 953 954 /** 955 * Give the driver the opportunity to hook in its own vtxfmt for 956 * compiling optimized display lists. This is called on each valid 957 * glBegin() during list compilation. 958 */ 959 GLboolean (*NotifySaveBegin)( GLcontext *ctx, GLenum mode ); 960 961 /** 962 * Notify driver that the special derived value _NeedEyeCoords has 963 * changed. 964 */ 965 void (*LightingSpaceChange)( GLcontext *ctx ); 966 967 /** 968 * Called by glNewList(). 969 * 970 * Let the T&L component know what is going on with display lists 971 * in time to make changes to dispatch tables, etc. 972 */ 973 void (*NewList)( GLcontext *ctx, GLuint list, GLenum mode ); 974 /** 975 * Called by glEndList(). 976 * 977 * \sa dd_function_table::NewList. 978 */ 979 void (*EndList)( GLcontext *ctx ); 980 981 /** 982 * Called by glCallList(s). 983 * 984 * Notify the T&L component before and after calling a display list. 985 */ 986 void (*BeginCallList)( GLcontext *ctx, 987 struct mesa_display_list *dlist ); 988 /** 989 * Called by glEndCallList(). 990 * 991 * \sa dd_function_table::BeginCallList. 992 */ 993 void (*EndCallList)( GLcontext *ctx ); 994 995}; 996 997 998/** 999 * Transform/Clip/Lighting interface 1000 * 1001 * Drivers present a reduced set of the functions possible in 1002 * glBegin()/glEnd() objects. Core mesa provides translation stubs for the 1003 * remaining functions to map down to these entry points. 1004 * 1005 * These are the initial values to be installed into dispatch by 1006 * mesa. If the T&L driver wants to modify the dispatch table 1007 * while installed, it must do so itself. It would be possible for 1008 * the vertexformat to install it's own initial values for these 1009 * functions, but this way there is an obvious list of what is 1010 * expected of the driver. 1011 * 1012 * If the driver wants to hook in entry points other than those 1013 * listed, it must restore them to their original values in 1014 * the disable() callback, below. 1015 */ 1016typedef struct { 1017 /** 1018 * \name Vertex 1019 */ 1020 /*@{*/ 1021 void (GLAPIENTRYP ArrayElement)( GLint ); /* NOTE */ 1022 void (GLAPIENTRYP Color3f)( GLfloat, GLfloat, GLfloat ); 1023 void (GLAPIENTRYP Color3fv)( const GLfloat * ); 1024 void (GLAPIENTRYP Color4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 1025 void (GLAPIENTRYP Color4fv)( const GLfloat * ); 1026 void (GLAPIENTRYP EdgeFlag)( GLboolean ); 1027 void (GLAPIENTRYP EvalCoord1f)( GLfloat ); /* NOTE */ 1028 void (GLAPIENTRYP EvalCoord1fv)( const GLfloat * ); /* NOTE */ 1029 void (GLAPIENTRYP EvalCoord2f)( GLfloat, GLfloat ); /* NOTE */ 1030 void (GLAPIENTRYP EvalCoord2fv)( const GLfloat * ); /* NOTE */ 1031 void (GLAPIENTRYP EvalPoint1)( GLint ); /* NOTE */ 1032 void (GLAPIENTRYP EvalPoint2)( GLint, GLint ); /* NOTE */ 1033 void (GLAPIENTRYP FogCoordfEXT)( GLfloat ); 1034 void (GLAPIENTRYP FogCoordfvEXT)( const GLfloat * ); 1035 void (GLAPIENTRYP Indexf)( GLfloat ); 1036 void (GLAPIENTRYP Indexfv)( const GLfloat * ); 1037 void (GLAPIENTRYP Materialfv)( GLenum face, GLenum pname, const GLfloat * ); /* NOTE */ 1038 void (GLAPIENTRYP MultiTexCoord1fARB)( GLenum, GLfloat ); 1039 void (GLAPIENTRYP MultiTexCoord1fvARB)( GLenum, const GLfloat * ); 1040 void (GLAPIENTRYP MultiTexCoord2fARB)( GLenum, GLfloat, GLfloat ); 1041 void (GLAPIENTRYP MultiTexCoord2fvARB)( GLenum, const GLfloat * ); 1042 void (GLAPIENTRYP MultiTexCoord3fARB)( GLenum, GLfloat, GLfloat, GLfloat ); 1043 void (GLAPIENTRYP MultiTexCoord3fvARB)( GLenum, const GLfloat * ); 1044 void (GLAPIENTRYP MultiTexCoord4fARB)( GLenum, GLfloat, GLfloat, GLfloat, GLfloat ); 1045 void (GLAPIENTRYP MultiTexCoord4fvARB)( GLenum, const GLfloat * ); 1046 void (GLAPIENTRYP Normal3f)( GLfloat, GLfloat, GLfloat ); 1047 void (GLAPIENTRYP Normal3fv)( const GLfloat * ); 1048 void (GLAPIENTRYP SecondaryColor3fEXT)( GLfloat, GLfloat, GLfloat ); 1049 void (GLAPIENTRYP SecondaryColor3fvEXT)( const GLfloat * ); 1050 void (GLAPIENTRYP TexCoord1f)( GLfloat ); 1051 void (GLAPIENTRYP TexCoord1fv)( const GLfloat * ); 1052 void (GLAPIENTRYP TexCoord2f)( GLfloat, GLfloat ); 1053 void (GLAPIENTRYP TexCoord2fv)( const GLfloat * ); 1054 void (GLAPIENTRYP TexCoord3f)( GLfloat, GLfloat, GLfloat ); 1055 void (GLAPIENTRYP TexCoord3fv)( const GLfloat * ); 1056 void (GLAPIENTRYP TexCoord4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 1057 void (GLAPIENTRYP TexCoord4fv)( const GLfloat * ); 1058 void (GLAPIENTRYP Vertex2f)( GLfloat, GLfloat ); 1059 void (GLAPIENTRYP Vertex2fv)( const GLfloat * ); 1060 void (GLAPIENTRYP Vertex3f)( GLfloat, GLfloat, GLfloat ); 1061 void (GLAPIENTRYP Vertex3fv)( const GLfloat * ); 1062 void (GLAPIENTRYP Vertex4f)( GLfloat, GLfloat, GLfloat, GLfloat ); 1063 void (GLAPIENTRYP Vertex4fv)( const GLfloat * ); 1064 void (GLAPIENTRYP CallList)( GLuint ); /* NOTE */ 1065 void (GLAPIENTRYP CallLists)( GLsizei, GLenum, const GLvoid * ); /* NOTE */ 1066 void (GLAPIENTRYP Begin)( GLenum ); 1067 void (GLAPIENTRYP End)( void ); 1068 /* GL_NV_vertex_program */ 1069 void (GLAPIENTRYP VertexAttrib1fNV)( GLuint index, GLfloat x ); 1070 void (GLAPIENTRYP VertexAttrib1fvNV)( GLuint index, const GLfloat *v ); 1071 void (GLAPIENTRYP VertexAttrib2fNV)( GLuint index, GLfloat x, GLfloat y ); 1072 void (GLAPIENTRYP VertexAttrib2fvNV)( GLuint index, const GLfloat *v ); 1073 void (GLAPIENTRYP VertexAttrib3fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z ); 1074 void (GLAPIENTRYP VertexAttrib3fvNV)( GLuint index, const GLfloat *v ); 1075 void (GLAPIENTRYP VertexAttrib4fNV)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); 1076 void (GLAPIENTRYP VertexAttrib4fvNV)( GLuint index, const GLfloat *v ); 1077#if FEATURE_ARB_vertex_program 1078 void (GLAPIENTRYP VertexAttrib1fARB)( GLuint index, GLfloat x ); 1079 void (GLAPIENTRYP VertexAttrib1fvARB)( GLuint index, const GLfloat *v ); 1080 void (GLAPIENTRYP VertexAttrib2fARB)( GLuint index, GLfloat x, GLfloat y ); 1081 void (GLAPIENTRYP VertexAttrib2fvARB)( GLuint index, const GLfloat *v ); 1082 void (GLAPIENTRYP VertexAttrib3fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z ); 1083 void (GLAPIENTRYP VertexAttrib3fvARB)( GLuint index, const GLfloat *v ); 1084 void (GLAPIENTRYP VertexAttrib4fARB)( GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w ); 1085 void (GLAPIENTRYP VertexAttrib4fvARB)( GLuint index, const GLfloat *v ); 1086#endif 1087 /*@}*/ 1088 1089 /* 1090 */ 1091 void (GLAPIENTRYP Rectf)( GLfloat, GLfloat, GLfloat, GLfloat ); 1092 1093 /** 1094 * \name Array 1095 */ 1096 /*@{*/ 1097 void (GLAPIENTRYP DrawArrays)( GLenum mode, GLint start, GLsizei count ); 1098 void (GLAPIENTRYP DrawElements)( GLenum mode, GLsizei count, GLenum type, 1099 const GLvoid *indices ); 1100 void (GLAPIENTRYP DrawRangeElements)( GLenum mode, GLuint start, 1101 GLuint end, GLsizei count, 1102 GLenum type, const GLvoid *indices ); 1103 /*@}*/ 1104 1105 /** 1106 * \name Eval 1107 * 1108 * If you don't support eval, fallback to the default vertex format 1109 * on receiving an eval call and use the pipeline mechanism to 1110 * provide partial T&L acceleration. 1111 * 1112 * Mesa will provide a set of helper functions to do eval within 1113 * accelerated vertex formats, eventually... 1114 */ 1115 /*@{*/ 1116 void (GLAPIENTRYP EvalMesh1)( GLenum mode, GLint i1, GLint i2 ); 1117 void (GLAPIENTRYP EvalMesh2)( GLenum mode, GLint i1, GLint i2, GLint j1, GLint j2 ); 1118 /*@}*/ 1119 1120} GLvertexformat; 1121 1122 1123#endif /* DD_INCLUDED */ 1124