Add the ability for interleave to test passing invalid format enums

and invalid stride values (see bugzilla #5058).
This commit is contained in:
Ian Romanick 2005-11-15 01:46:49 +00:00
parent e5700a1ba3
commit a163256cc2
1 changed files with 43 additions and 5 deletions

View File

@ -35,6 +35,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <GL/glut.h>
static int Width = 400;
@ -125,7 +126,9 @@ struct interleave_info {
unsigned stride;
};
#define NUM_MODES 14
#define NUM_MODES 14
#define INVALID_MODE 14
#define INVALID_STRIDE 15
struct interleave_info info[ NUM_MODES ][4] = {
{ NONE, NONE, NONE, V2F },
@ -164,7 +167,9 @@ const char * const mode_names[ NUM_MODES ] = {
"GL_T4F_C4F_N3F_V4F",
};
unsigned interleave_mode = 0;
static unsigned interleave_mode = 0;
static GLboolean use_invalid_mode = GL_FALSE;
static GLboolean use_invalid_stride = GL_FALSE;
#define DEREF(item,idx) (void *) & ((char *)curr_info[item].data)[idx * curr_info[item].stride]
@ -178,6 +183,9 @@ static void Display( void )
unsigned i;
unsigned offset;
GLenum err;
GLenum format;
GLsizei stride;
glClearColor(0.2, 0.2, 0.8, 0);
@ -271,8 +279,21 @@ static void Display( void )
glTranslatef(3.0, 0, 0);
glInterleavedArrays( GL_V2F + interleave_mode, 0, data );
glDrawArrays( GL_TRIANGLES, 0, 12 );
format = (use_invalid_mode)
? (rand() & ~0x2A00) : GL_V2F + interleave_mode;
stride = (use_invalid_stride) ? -abs(rand()) : 0;
(void) glGetError();
glInterleavedArrays( format, 0, data );
err = glGetError();
if ( err ) {
printf("glInterleavedArrays(0x%04x, %d, %p) generated the error 0x%04x\n",
format, stride, data, err );
}
else {
glDrawArrays( GL_TRIANGLES, 0, 12 );
}
glPopMatrix();
@ -310,7 +331,19 @@ static void Key( unsigned char key, int x, int y )
static void ModeMenu( int entry )
{
interleave_mode = entry;
if ( entry == INVALID_MODE ) {
use_invalid_mode = GL_TRUE;
use_invalid_stride = GL_FALSE;
}
else if ( entry == INVALID_STRIDE ) {
use_invalid_mode = GL_FALSE;
use_invalid_stride = GL_TRUE;
}
else {
use_invalid_mode = GL_FALSE;
use_invalid_stride = GL_FALSE;
interleave_mode = entry;
}
}
static void Init( void )
@ -343,6 +376,8 @@ int main( int argc, char *argv[] )
{
unsigned i;
srand( time( NULL ) );
glutInit( &argc, argv );
glutInitWindowPosition( 0, 0 );
glutInitWindowSize( Width, Height );
@ -357,6 +392,9 @@ int main( int argc, char *argv[] )
glutAddMenuEntry( mode_names[i], i);
}
glutAddMenuEntry( "Random invalid mode", INVALID_MODE);
glutAddMenuEntry( "Random invalid stride", INVALID_STRIDE);
glutAttachMenu(GLUT_RIGHT_BUTTON);
Init();