diff options
-rw-r--r-- | src/mesa/main/dispatch.c | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/src/mesa/main/dispatch.c b/src/mesa/main/dispatch.c index 4ab62ae5206..e6c91b97744 100644 --- a/src/mesa/main/dispatch.c +++ b/src/mesa/main/dispatch.c @@ -1,4 +1,4 @@ -/* $Id: dispatch.c,v 1.3 1999/11/12 23:38:42 brianp Exp $ */ +/* $Id: dispatch.c,v 1.4 1999/11/27 21:40:28 brianp Exp $ */ /* * Mesa 3-D graphics library @@ -47,6 +47,7 @@ #include "feedback.h" #include "fog.h" #include "get.h" +#include "glapi.h" #include "glmisc.h" #include "imaging.h" #include "light.h" @@ -72,6 +73,28 @@ #endif + +static void +generic_noop(void) +{ +#ifdef DEBUG + gl_problem(NULL, "undefined function dispatch"); +#endif +} + + +void +_mesa_init_no_op_table(struct _glapi_table *exec) +{ + const GLuint n = _glapi_get_dispatch_table_size(); + GLuint i; + void **dispatch = (void **) exec; + for (i = 0; i < n; i++) { + dispatch[i] = (void *) generic_noop; + } +} + + /* * Initialize the given dispatch table with pointers to Mesa's * immediate-mode commands. @@ -79,6 +102,15 @@ void _mesa_init_exec_table(struct _glapi_table *exec) { + /* Check to be sure the dispatcher's table is at least as big as Mesa's. */ + const GLuint size = sizeof(struct _glapi_table) / sizeof(void *); + assert(_glapi_get_dispatch_table_size() >= size); + + + /* first initialize all dispatch slots to no-op */ + _mesa_init_no_op_table(exec); + + /* load the dispatch slots we understand */ exec->Accum = _mesa_Accum; exec->AlphaFunc = _mesa_AlphaFunc; exec->Begin = _mesa_Begin; |