This allows texture state to be resettable to default state.
Not allowed according to the spec, but allowed by all other OpenGL libs.
/*
* Compute floor(log_base_2(n)).
- * If n <= 0 return -1.
+ * If n < 0 return -1.
*/
static int
logbase2( int n )
GLint i = 1;
GLint log2 = 0;
- if (n <= 0) {
+ if (n < 0)
return -1;
- }
+
+ if (n == 0)
+ return 0;
while ( n > i ) {
i *= 2;
return GL_TRUE;
}
- if (width < 1 || height < 1 || depth < 1) {
+ if (width < 0 || height < 0 || depth < 0) {
if (!isProxy) {
_mesa_error(ctx, GL_INVALID_VALUE,
- "glTexImage%dD(width, height or depth < 1)", dimensions);
+ "glTexImage%dD(width, height or depth < 0)", dimensions);
}
return GL_TRUE;
}
return;
}
+ /* Check width/height/depth for zero */
+ if (t->Image[baseLevel]->Width == 0 ||
+ t->Image[baseLevel]->Height == 0 ||
+ t->Image[baseLevel]->Depth == 0) {
+ incomplete(t, "texture width = 0");
+ t->Complete = GL_FALSE;
+ return;
+ }
+
/* Compute _MaxLevel */
if (t->Target == GL_TEXTURE_1D) {
maxLog2 = t->Image[baseLevel]->WidthLog2;
}
else if (t->Target == GL_TEXTURE_RECTANGLE_NV) {
/* XXX special checking? */
-
}
else {
/* Target = ??? */
struct gl_texture_unit *texUnit = &ctx->Texture.Unit[unit];
GLuint enableBits;
+ texUnit->_Current = NULL;
texUnit->_ReallyEnabled = 0;
texUnit->_GenFlags = 0;
}
if (!texUnit->_ReallyEnabled) {
- texUnit->_Current = NULL;
- continue;
+ continue;
}
if (texUnit->_ReallyEnabled)
texDestFormat == GL_COLOR_INDEX ||
texDestFormat == GL_DEPTH_COMPONENT);
ASSERT(texDestAddr);
- ASSERT(srcWidth >= 1);
- ASSERT(srcHeight >= 1);
- ASSERT(srcDepth >= 1);
+ ASSERT(srcWidth >= 0);
+ ASSERT(srcHeight >= 0);
+ ASSERT(srcDepth >= 0);
ASSERT(dstXoffset >= 0);
ASSERT(dstYoffset >= 0);
ASSERT(dstZoffset >= 0);