67
67
valid_filter_for_float(const struct gl_context *ctx,
68
68
const struct gl_texture_object *obj)
70
switch (obj->Sampler.MagFilter) {
70
switch (obj->Sampler.Attrib.MagFilter) {
72
72
if (obj->_IsHalfFloat && !ctx->Extensions.OES_texture_half_float_linear) {
74
74
} else if (obj->_IsFloat && !ctx->Extensions.OES_texture_float_linear) {
78
79
case GL_NEAREST_MIPMAP_NEAREST:
331
333
/* sampler state */
332
334
if (target == GL_TEXTURE_RECTANGLE_NV ||
333
335
target == GL_TEXTURE_EXTERNAL_OES) {
334
obj->Sampler.WrapS = GL_CLAMP_TO_EDGE;
335
obj->Sampler.WrapT = GL_CLAMP_TO_EDGE;
336
obj->Sampler.WrapR = GL_CLAMP_TO_EDGE;
337
obj->Sampler.MinFilter = GL_LINEAR;
336
obj->Sampler.Attrib.WrapS = GL_CLAMP_TO_EDGE;
337
obj->Sampler.Attrib.WrapT = GL_CLAMP_TO_EDGE;
338
obj->Sampler.Attrib.WrapR = GL_CLAMP_TO_EDGE;
339
obj->Sampler.Attrib.MinFilter = GL_LINEAR;
340
obj->Sampler.WrapS = GL_REPEAT;
341
obj->Sampler.WrapT = GL_REPEAT;
342
obj->Sampler.WrapR = GL_REPEAT;
343
obj->Sampler.MinFilter = GL_NEAREST_MIPMAP_LINEAR;
342
obj->Sampler.Attrib.WrapS = GL_REPEAT;
343
obj->Sampler.Attrib.WrapT = GL_REPEAT;
344
obj->Sampler.Attrib.WrapR = GL_REPEAT;
345
obj->Sampler.Attrib.MinFilter = GL_NEAREST_MIPMAP_LINEAR;
345
obj->Sampler.MagFilter = GL_LINEAR;
346
obj->Sampler.MinLod = -1000.0;
347
obj->Sampler.MaxLod = 1000.0;
348
obj->Sampler.LodBias = 0.0;
349
obj->Sampler.MaxAnisotropy = 1.0;
350
obj->Sampler.CompareMode = GL_NONE; /* ARB_shadow */
351
obj->Sampler.CompareFunc = GL_LEQUAL; /* ARB_shadow */
352
obj->DepthMode = ctx->API == API_OPENGL_CORE ? GL_RED : GL_LUMINANCE;
353
obj->StencilSampling = false;
354
obj->Sampler.CubeMapSeamless = GL_FALSE;
347
obj->Sampler.Attrib.MagFilter = GL_LINEAR;
348
obj->Sampler.Attrib.MinLod = -1000.0;
349
obj->Sampler.Attrib.MaxLod = 1000.0;
350
obj->Sampler.Attrib.LodBias = 0.0;
351
obj->Sampler.Attrib.MaxAnisotropy = 1.0;
352
obj->Sampler.Attrib.CompareMode = GL_NONE; /* ARB_shadow */
353
obj->Sampler.Attrib.CompareFunc = GL_LEQUAL; /* ARB_shadow */
354
obj->Attrib.DepthMode = ctx->API == API_OPENGL_CORE ? GL_RED : GL_LUMINANCE;
355
obj->Attrib.StencilSampling = false;
356
obj->Sampler.Attrib.CubeMapSeamless = GL_FALSE;
355
357
obj->Sampler.HandleAllocated = GL_FALSE;
356
obj->Swizzle[0] = GL_RED;
357
obj->Swizzle[1] = GL_GREEN;
358
obj->Swizzle[2] = GL_BLUE;
359
obj->Swizzle[3] = GL_ALPHA;
360
obj->_Swizzle = SWIZZLE_NOOP;
361
obj->Sampler.sRGBDecode = GL_DECODE_EXT;
358
obj->Attrib.Swizzle[0] = GL_RED;
359
obj->Attrib.Swizzle[1] = GL_GREEN;
360
obj->Attrib.Swizzle[2] = GL_BLUE;
361
obj->Attrib.Swizzle[3] = GL_ALPHA;
362
obj->Attrib._Swizzle = SWIZZLE_NOOP;
363
obj->Sampler.Attrib.sRGBDecode = GL_DECODE_EXT;
362
364
obj->BufferObjectFormat = GL_R8;
363
365
obj->_BufferObjectFormat = MESA_FORMAT_R_UNORM8;
364
366
obj->ImageFormatCompatibilityType = GL_IMAGE_FORMAT_COMPATIBILITY_BY_SIZE;
387
389
case GL_TEXTURE_2D_MULTISAMPLE:
388
390
case GL_TEXTURE_2D_MULTISAMPLE_ARRAY:
389
391
filter = GL_NEAREST;
392
394
case GL_TEXTURE_RECTANGLE_NV:
393
395
case GL_TEXTURE_EXTERNAL_OES:
394
396
/* have to init wrap and filter state here - kind of klunky */
395
obj->Sampler.WrapS = GL_CLAMP_TO_EDGE;
396
obj->Sampler.WrapT = GL_CLAMP_TO_EDGE;
397
obj->Sampler.WrapR = GL_CLAMP_TO_EDGE;
398
obj->Sampler.MinFilter = filter;
399
obj->Sampler.MagFilter = filter;
397
obj->Sampler.Attrib.WrapS = GL_CLAMP_TO_EDGE;
398
obj->Sampler.Attrib.WrapT = GL_CLAMP_TO_EDGE;
399
obj->Sampler.Attrib.WrapR = GL_CLAMP_TO_EDGE;
400
obj->Sampler.Attrib.MinFilter = filter;
401
obj->Sampler.Attrib.MagFilter = filter;
400
402
if (ctx->Driver.TexParameter) {
401
403
/* XXX we probably don't need to make all these calls */
402
404
ctx->Driver.TexParameter(ctx, obj, GL_TEXTURE_WRAP_S);
461
* Copy texture object state from one texture object to another.
462
* Use for glPush/PopAttrib.
464
* \param dest destination texture object.
465
* \param src source texture object.
468
_mesa_copy_texture_object( struct gl_texture_object *dest,
469
const struct gl_texture_object *src )
471
dest->Target = src->Target;
472
dest->TargetIndex = src->TargetIndex;
473
dest->Name = src->Name;
474
dest->Priority = src->Priority;
475
dest->Sampler.BorderColor.f[0] = src->Sampler.BorderColor.f[0];
476
dest->Sampler.BorderColor.f[1] = src->Sampler.BorderColor.f[1];
477
dest->Sampler.BorderColor.f[2] = src->Sampler.BorderColor.f[2];
478
dest->Sampler.BorderColor.f[3] = src->Sampler.BorderColor.f[3];
479
dest->Sampler.WrapS = src->Sampler.WrapS;
480
dest->Sampler.WrapT = src->Sampler.WrapT;
481
dest->Sampler.WrapR = src->Sampler.WrapR;
482
dest->Sampler.MinFilter = src->Sampler.MinFilter;
483
dest->Sampler.MagFilter = src->Sampler.MagFilter;
484
dest->Sampler.MinLod = src->Sampler.MinLod;
485
dest->Sampler.MaxLod = src->Sampler.MaxLod;
486
dest->Sampler.LodBias = src->Sampler.LodBias;
487
dest->BaseLevel = src->BaseLevel;
488
dest->MaxLevel = src->MaxLevel;
489
dest->Sampler.MaxAnisotropy = src->Sampler.MaxAnisotropy;
490
dest->Sampler.CompareMode = src->Sampler.CompareMode;
491
dest->Sampler.CompareFunc = src->Sampler.CompareFunc;
492
dest->Sampler.CubeMapSeamless = src->Sampler.CubeMapSeamless;
493
dest->DepthMode = src->DepthMode;
494
dest->StencilSampling = src->StencilSampling;
495
dest->Sampler.sRGBDecode = src->Sampler.sRGBDecode;
496
dest->_MaxLevel = src->_MaxLevel;
497
dest->_MaxLambda = src->_MaxLambda;
498
dest->GenerateMipmap = src->GenerateMipmap;
499
dest->_BaseComplete = src->_BaseComplete;
500
dest->_MipmapComplete = src->_MipmapComplete;
501
COPY_4V(dest->Swizzle, src->Swizzle);
502
dest->_Swizzle = src->_Swizzle;
503
dest->_IsHalfFloat = src->_IsHalfFloat;
504
dest->_IsFloat = src->_IsFloat;
506
dest->RequiredTextureImageUnits = src->RequiredTextureImageUnits;
511
463
* Free all texture images of the given texture objectm, except for
512
464
* \p retainTexImage.
1170
1122
* of the maximum texture width, height, or depth, the error
1171
1123
* INVALID_VALUE is generated."
1173
if (level < 0 || level > t->MaxLevel) {
1125
if (level < 0 || level > t->Attrib.MaxLevel) {
1174
1126
_mesa_error(ctx, GL_INVALID_VALUE, "%s(level)", name);