summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/main/dispatch.c34
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;