Lesson 13 ( fonts ) question
I have a question about this procedure:
GLvoid glPrint(const char *fmt, ...) // Custom GL "Print" Routine
{
char text[256]; // Holds Our String
va_list ap; // Pointer To List Of Arguments
if (fmt == NULL) // If There''s No Text
return; // Do Nothing
va_start(ap, fmt); // Parses The String For Variables
vsprintf(text, fmt, ap); // And Converts Symbols To Actual Numbers
va_end(ap); // Results Are Stored In Text
glPushAttrib(GL_LIST_BIT); // Pushes The Display List Bits
glListBase(base - 32); // Sets The Base Character to 32
glCallLists(strlen(text), GL_UNSIGNED_BYTE, text); // Draws The Display List Text
glPopAttrib(); // Pops The Display List Bits
}
where do va_list , va_start, va_end come from???
Well can't tell you if they did something special and non-standard in OpenGL or DirectX with va_list but this is what va_list is all about in standard C/C++.
va_list is used to declare a local state variable which is used to traverse parameters.
So, what does that mean. Well, for example if I have a function that could take in x number of variables like say printf. With printf we use it like
So, finally, to step through the argument list we use the va_arg macro. This is not the best description of va_lists that I have given cause I am not a writer. Best thing you can do is take a look at any GOOD C/C++ book for va_list or va_args.
Edited by - Neuro on June 27, 2000 8:14:00 AM
va_list is used to declare a local state variable which is used to traverse parameters.
So, what does that mean. Well, for example if I have a function that could take in x number of variables like say printf. With printf we use it like
printf("hello %s, how are you on this fine $s morn?\n", name, month);/* See, the number of variable is not really limited. So, the prototype of the function would look something like : */int printf(char *strin, ...); /* And the definition would look like : */int printf(char * strin, ...){ va_list ap; va_start(ap, strin);
So, finally, to step through the argument list we use the va_arg macro. This is not the best description of va_lists that I have given cause I am not a writer. Best thing you can do is take a look at any GOOD C/C++ book for va_list or va_args.
Edited by - Neuro on June 27, 2000 8:14:00 AM
By the way, va_start sets the internal pointer in ap to point to the first argument passed into the function and its from this point that va_arg steps to the next.
va_end does some clear-up (housekeeping) when you reach the end of the arg list with va_arg steps.
va_end does some clear-up (housekeeping) when you reach the end of the arg list with va_arg steps.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement