api_validate.c revision 61bac6014aa15e0bec134e290aebac18f9815299
1/* $Id: api_validate.c,v 1.6 2002/04/21 21:04:46 brianp Exp $ */ 2 3/* 4 * Mesa 3-D graphics library 5 * Version: 4.1 6 * 7 * Copyright (C) 1999-2002 Brian Paul All Rights Reserved. 8 * 9 * Permission is hereby granted, free of charge, to any person obtaining a 10 * copy of this software and associated documentation files (the "Software"), 11 * to deal in the Software without restriction, including without limitation 12 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 13 * and/or sell copies of the Software, and to permit persons to whom the 14 * Software is furnished to do so, subject to the following conditions: 15 * 16 * The above copyright notice and this permission notice shall be included 17 * in all copies or substantial portions of the Software. 18 * 19 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 20 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 22 * BRIAN PAUL BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN 23 * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 24 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 25 */ 26 27#include "glheader.h" 28#include "api_validate.h" 29#include "context.h" 30#include "mtypes.h" 31#include "state.h" 32 33 34GLboolean 35_mesa_validate_DrawElements(GLcontext *ctx, 36 GLenum mode, GLsizei count, GLenum type, 37 const GLvoid *indices) 38{ 39 ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); 40 41 if (count <= 0) { 42 if (count < 0) 43 _mesa_error(ctx, GL_INVALID_VALUE, "glDrawElements(count)" ); 44 return GL_FALSE; 45 } 46 47 if (mode < 0 || 48 mode > GL_POLYGON) { 49 _mesa_error(ctx, GL_INVALID_ENUM, "glDrawArrays(mode)" ); 50 return GL_FALSE; 51 } 52 53 if (type != GL_UNSIGNED_INT && 54 type != GL_UNSIGNED_BYTE && 55 type != GL_UNSIGNED_SHORT) 56 { 57 _mesa_error(ctx, GL_INVALID_ENUM, "glDrawElements(type)" ); 58 return GL_FALSE; 59 } 60 61 if (ctx->NewState) 62 _mesa_update_state( ctx ); 63 64 if (ctx->Array.Vertex.Enabled 65 || (ctx->VertexProgram.Enabled && ctx->Array.VertexAttrib[0].Enabled)) 66 return GL_TRUE; 67 else 68 return GL_FALSE; 69 70 return GL_TRUE; 71} 72 73 74GLboolean 75_mesa_validate_DrawRangeElements(GLcontext *ctx, GLenum mode, 76 GLuint start, GLuint end, 77 GLsizei count, GLenum type, 78 const GLvoid *indices) 79{ 80 ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); 81 82 if (count <= 0) { 83 if (count < 0) 84 _mesa_error(ctx, GL_INVALID_VALUE, "glDrawElements(count)" ); 85 return GL_FALSE; 86 } 87 88 if (mode < 0 || mode > GL_POLYGON) { 89 _mesa_error(ctx, GL_INVALID_ENUM, "glDrawArrays(mode)" ); 90 return GL_FALSE; 91 } 92 93 if (end < start) { 94 _mesa_error(ctx, GL_INVALID_VALUE, "glDrawRangeElements(end<start)"); 95 return GL_FALSE; 96 } 97 98 if (type != GL_UNSIGNED_INT && 99 type != GL_UNSIGNED_BYTE && 100 type != GL_UNSIGNED_SHORT) { 101 _mesa_error(ctx, GL_INVALID_ENUM, "glDrawElements(type)" ); 102 return GL_FALSE; 103 } 104 105 if (ctx->NewState) 106 _mesa_update_state( ctx ); 107 108 if (ctx->Array.Vertex.Enabled 109 || (ctx->VertexProgram.Enabled && ctx->Array.VertexAttrib[0].Enabled)) 110 return GL_TRUE; 111 else 112 return GL_FALSE; 113} 114 115 116 117GLboolean 118_mesa_validate_DrawArrays(GLcontext *ctx, 119 GLenum mode, GLint start, GLsizei count) 120{ 121 ASSERT_OUTSIDE_BEGIN_END_WITH_RETVAL(ctx, GL_FALSE); 122 123 if (count<0) { 124 _mesa_error(ctx, GL_INVALID_VALUE, "glDrawArrays(count)" ); 125 return GL_FALSE; 126 } 127 128 if (mode < 0 || mode > GL_POLYGON) { 129 _mesa_error(ctx, GL_INVALID_ENUM, "glDrawArrays(mode)" ); 130 return GL_FALSE; 131 } 132 133 if (ctx->NewState) 134 _mesa_update_state( ctx ); 135 136 if (ctx->Array.Vertex.Enabled 137 || (ctx->VertexProgram.Enabled && ctx->Array.VertexAttrib[0].Enabled)) 138 return GL_TRUE; 139 else 140 return GL_FALSE; 141} 142