added _mesa_init_no_op_table()
authorBrian Paul <brian.paul@tungstengraphics.com>
Sat, 27 Nov 1999 21:40:28 +0000 (21:40 +0000)
committerBrian Paul <brian.paul@tungstengraphics.com>
Sat, 27 Nov 1999 21:40:28 +0000 (21:40 +0000)
src/mesa/main/dispatch.c

index 4ab62ae5206a02ecc1e74862c86ca999924a5d4f..e6c91b97744dad96a06dfb0c07a7226e591db05c 100644 (file)
@@ -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"
 #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.
 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;