Need to store vendor and renderer strings in the context.
authorBrian <brian.paul@tungstengraphics.com>
Thu, 23 Aug 2007 00:35:50 +0000 (18:35 -0600)
committerBrian <brian.paul@tungstengraphics.com>
Thu, 23 Aug 2007 00:52:40 +0000 (18:52 -0600)
As it was, we always returned the same pointer.  So glxinfo, which calls
glGetString() before printing anything, was printing the same string for
both vendor and renderer.

src/mesa/state_tracker/st_cb_strings.c
src/mesa/state_tracker/st_context.h

index ac1a8b1..776f518 100644 (file)
@@ -46,8 +46,6 @@ st_get_string(GLcontext * ctx, GLenum name)
 {
    struct st_context *st = st_context(ctx);
    struct pipe_context *pipe = st->pipe;
-   static char buffer[128];
-
 
    switch (name) {
    case GL_VENDOR: {
@@ -59,20 +57,20 @@ st_get_string(GLcontext * ctx, GLenum name)
        * additional string allows "and XyzCorp" to reflect this.
        */
       if (vendor && strcmp(vendor, tungsten) != 0)
-        snprintf(buffer, sizeof(buffer), "%s and %s",  tungsten, vendor);
+        snprintf(st->vendor, sizeof(st->vendor),
+                  "%s and %s", tungsten, vendor);
       else
-        snprintf(buffer, sizeof(buffer), "%s", tungsten);
+        snprintf(st->vendor, sizeof(st->vendor), "%s", tungsten);
 
-      return (GLubyte *) buffer;
-      break;
+      return (GLubyte *) st->vendor;
    }
 
    case GL_RENDERER:
-      snprintf(buffer, sizeof(buffer), "TG3D, %s on %s", 
+      snprintf(st->renderer, sizeof(st->renderer), "TG3D, %s on %s", 
               pipe->get_name( pipe ),
               pipe->winsys->get_name( pipe->winsys ));
 
-      return (GLubyte *) buffer;
+      return (GLubyte *) st->renderer;
 
    default:
       return NULL;
index 38d6a3e..13ea282 100644 (file)
@@ -97,6 +97,9 @@ struct st_context
       GLuint frontbuffer_dirty:1;
    } flags;
 
+   char vendor[100];
+   char renderer[100];
+
    /* State to be validated:
     */
    struct st_tracked_state **atoms;