target == GL_TEXTURE_RECTANGLE_NV ||
target == GL_TEXTURE_1D_ARRAY_EXT ||
target == GL_TEXTURE_2D_ARRAY_EXT ||
+ target == GL_TEXTURE_EXTERNAL_OES ||
target == GL_TEXTURE_BUFFER);
memset(obj, 0, sizeof(*obj));
obj->BaseLevel = 0;
obj->MaxLevel = 1000;
+ /* must be one; no support for (YUV) planes in separate buffers */
+ obj->RequiredTextureImageUnits = 1;
+
/* sampler state */
- if (target == GL_TEXTURE_RECTANGLE_NV) {
+ if (target == GL_TEXTURE_RECTANGLE_NV ||
+ target == GL_TEXTURE_EXTERNAL_OES) {
obj->Sampler.WrapS = GL_CLAMP_TO_EDGE;
obj->Sampler.WrapT = GL_CLAMP_TO_EDGE;
obj->Sampler.WrapR = GL_CLAMP_TO_EDGE;
{
assert(obj->Target == 0);
- if (target == GL_TEXTURE_RECTANGLE_NV) {
+ if (target == GL_TEXTURE_RECTANGLE_NV ||
+ target == GL_TEXTURE_EXTERNAL_OES) {
/* have to init wrap and filter state here - kind of klunky */
obj->Sampler.WrapS = GL_CLAMP_TO_EDGE;
obj->Sampler.WrapT = GL_CLAMP_TO_EDGE;
dest->_Complete = src->_Complete;
COPY_4V(dest->Swizzle, src->Swizzle);
dest->_Swizzle = src->_Swizzle;
+
+ dest->RequiredTextureImageUnits = src->RequiredTextureImageUnits;
}
case GL_TEXTURE_1D_ARRAY_EXT:
case GL_TEXTURE_2D_ARRAY_EXT:
case GL_TEXTURE_BUFFER:
+ case GL_TEXTURE_EXTERNAL_OES:
return GL_TRUE;
case 0x99:
_mesa_problem(NULL, "invalid reference to a deleted texture object");
* The gl_texture_object::Complete flag will be set to GL_TRUE or GL_FALSE
* accordingly.
*
- * XXX TODO: For immutable textures (GL_ARB_texture_storage) we can skip
- * many of the checks below since we know the mipmap images will have
- * consistent sizes.
- *
* \param ctx GL context.
* \param t texture object.
*
t->Image[0][baseLevel]->HeightLog2);
maxLevels = ctx->Const.MaxCubeTextureLevels;
}
- else if (t->Target == GL_TEXTURE_RECTANGLE_NV) {
+ else if (t->Target == GL_TEXTURE_RECTANGLE_NV ||
+ t->Target == GL_TEXTURE_EXTERNAL_OES) {
maxLog2 = 0; /* not applicable */
maxLevels = 1; /* no mipmapping */
}
/* Compute _MaxLambda = q - b (see the 1.2 spec) used during mipmapping */
t->_MaxLambda = (GLfloat) (t->_MaxLevel - t->BaseLevel);
+ if (t->Immutable) {
+ /* This texture object was created with glTexStorage1/2/3D() so we
+ * know that all the mipmap levels are the right size and all cube
+ * map faces are the same size.
+ * We don't need to do any of the additional checks below.
+ */
+ return;
+ }
+
if (t->Target == GL_TEXTURE_CUBE_MAP_ARB) {
/* make sure that all six cube map level 0 images are the same size */
const GLuint w = t->Image[0][baseLevel]->Width2;
return TEXTURE_2D_ARRAY_INDEX;
case GL_TEXTURE_BUFFER_ARB:
return TEXTURE_BUFFER_INDEX;
+ case GL_TEXTURE_EXTERNAL_OES:
+ return TEXTURE_EXTERNAL_INDEX;
default:
return -1;
}