void GLAPIENTRY _mesa_GetTexGenfv( GLenum coord, GLenum pname, GLfloat *params ) { struct gl_texture_unit *texUnit; struct gl_texgen *texgen; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureCoordUnits) { _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexGenfv(current unit)"); return; } texUnit = _mesa_get_current_tex_unit(ctx); texgen = get_texgen(texUnit, coord); if (!texgen) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexGenfv(coord)"); return; } switch (pname) { case GL_TEXTURE_GEN_MODE: params[0] = ENUM_TO_FLOAT(texgen->Mode); break; case GL_OBJECT_PLANE: COPY_4V(params, texgen->ObjectPlane); break; case GL_EYE_PLANE: COPY_4V(params, texgen->EyePlane); break; default: _mesa_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(pname)" ); } }
void gl_GetTexEnvfv( GLcontext *ctx, GLenum target, GLenum pname, GLfloat *params ) { if (target!=GL_TEXTURE_ENV) { gl_error( ctx, GL_INVALID_ENUM, "glGetTexEnvfv(target)" ); return; } switch (pname) { case GL_TEXTURE_ENV_MODE: *params = ENUM_TO_FLOAT(ctx->Texture.EnvMode); break; case GL_TEXTURE_ENV_COLOR: COPY_4V( params, ctx->Texture.EnvColor ); break; default: gl_error( ctx, GL_INVALID_ENUM, "glGetTexEnvfv(pname)" ); } }
void GLAPIENTRY _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params ) { struct gl_texture_unit *texUnit; struct gl_texture_object *obj; GLboolean error = GL_FALSE; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); if (ctx->Texture.CurrentUnit >= ctx->Const.MaxTextureImageUnits) { _mesa_error(ctx, GL_INVALID_OPERATION, "glGetTexParameterfv(current unit)"); return; } texUnit = &ctx->Texture.Unit[ctx->Texture.CurrentUnit]; obj = _mesa_select_tex_object(ctx, texUnit, target); if (!obj) { _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexParameterfv(target)"); return; } _mesa_lock_texture(ctx, obj); switch (pname) { case GL_TEXTURE_MAG_FILTER: *params = ENUM_TO_FLOAT(obj->MagFilter); break; case GL_TEXTURE_MIN_FILTER: *params = ENUM_TO_FLOAT(obj->MinFilter); break; case GL_TEXTURE_WRAP_S: *params = ENUM_TO_FLOAT(obj->WrapS); break; case GL_TEXTURE_WRAP_T: *params = ENUM_TO_FLOAT(obj->WrapT); break; case GL_TEXTURE_WRAP_R: *params = ENUM_TO_FLOAT(obj->WrapR); break; case GL_TEXTURE_BORDER_COLOR: params[0] = CLAMP(obj->BorderColor[0], 0.0F, 1.0F); params[1] = CLAMP(obj->BorderColor[1], 0.0F, 1.0F); params[2] = CLAMP(obj->BorderColor[2], 0.0F, 1.0F); params[3] = CLAMP(obj->BorderColor[3], 0.0F, 1.0F); break; case GL_TEXTURE_RESIDENT: { GLboolean resident; if (ctx->Driver.IsTextureResident) resident = ctx->Driver.IsTextureResident(ctx, obj); else resident = GL_TRUE; *params = ENUM_TO_FLOAT(resident); } break; case GL_TEXTURE_PRIORITY: *params = obj->Priority; break; case GL_TEXTURE_MIN_LOD: *params = obj->MinLod; break; case GL_TEXTURE_MAX_LOD: *params = obj->MaxLod; break; case GL_TEXTURE_BASE_LEVEL: *params = (GLfloat) obj->BaseLevel; break; case GL_TEXTURE_MAX_LEVEL: *params = (GLfloat) obj->MaxLevel; break; case GL_TEXTURE_MAX_ANISOTROPY_EXT: if (ctx->Extensions.EXT_texture_filter_anisotropic) { *params = obj->MaxAnisotropy; } else error = 1; break; case GL_TEXTURE_COMPARE_SGIX: if (ctx->Extensions.SGIX_shadow) { *params = (GLfloat) obj->CompareFlag; } else error = 1; break; case GL_TEXTURE_COMPARE_OPERATOR_SGIX: if (ctx->Extensions.SGIX_shadow) { *params = (GLfloat) obj->CompareOperator; } else error = 1; break; case GL_SHADOW_AMBIENT_SGIX: /* aka GL_TEXTURE_COMPARE_FAIL_VALUE_ARB */ if (ctx->Extensions.SGIX_shadow_ambient) { *params = obj->ShadowAmbient; } else error = 1; break; case GL_GENERATE_MIPMAP_SGIS: if (ctx->Extensions.SGIS_generate_mipmap) { *params = (GLfloat) obj->GenerateMipmap; } else error = 1; break; case GL_TEXTURE_COMPARE_MODE_ARB: if (ctx->Extensions.ARB_shadow) { *params = (GLfloat) obj->CompareMode; } else error = 1; break; case GL_TEXTURE_COMPARE_FUNC_ARB: if (ctx->Extensions.ARB_shadow) { *params = (GLfloat) obj->CompareFunc; } else error = 1; break; case GL_DEPTH_TEXTURE_MODE_ARB: if (ctx->Extensions.ARB_depth_texture) { *params = (GLfloat) obj->DepthMode; } else error = 1; break; case GL_TEXTURE_LOD_BIAS: if (ctx->Extensions.EXT_texture_lod_bias) { *params = obj->LodBias; } else error = 1; break; #ifdef FEATURE_OES_draw_texture case GL_TEXTURE_CROP_RECT_OES: params[0] = obj->CropRect[0]; params[1] = obj->CropRect[1]; params[2] = obj->CropRect[2]; params[3] = obj->CropRect[3]; break; #endif default: error = 1; break; } if (error) _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexParameterfv(pname=0x%x)", pname); _mesa_unlock_texture(ctx, obj); }
void GLAPIENTRY _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params ) { struct gl_texture_object *obj; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); obj = get_texobj(ctx, target, GL_TRUE); if (!obj) return; _mesa_lock_texture(ctx, obj); switch (pname) { case GL_TEXTURE_MAG_FILTER: *params = ENUM_TO_FLOAT(obj->Sampler.MagFilter); break; case GL_TEXTURE_MIN_FILTER: *params = ENUM_TO_FLOAT(obj->Sampler.MinFilter); break; case GL_TEXTURE_WRAP_S: *params = ENUM_TO_FLOAT(obj->Sampler.WrapS); break; case GL_TEXTURE_WRAP_T: *params = ENUM_TO_FLOAT(obj->Sampler.WrapT); break; case GL_TEXTURE_WRAP_R: *params = ENUM_TO_FLOAT(obj->Sampler.WrapR); break; case GL_TEXTURE_BORDER_COLOR: if (ctx->NewState & _NEW_BUFFERS) _mesa_update_state_locked(ctx); params[0] = obj->Sampler.BorderColor.f[0]; params[1] = obj->Sampler.BorderColor.f[1]; params[2] = obj->Sampler.BorderColor.f[2]; params[3] = obj->Sampler.BorderColor.f[3]; break; case GL_TEXTURE_RESIDENT: *params = 1.0F; break; case GL_TEXTURE_PRIORITY: *params = obj->Priority; break; case GL_TEXTURE_MAX_ANISOTROPY_EXT: if (!ctx->Extensions.EXT_texture_filter_anisotropic) goto invalid_pname; *params = obj->Sampler.MaxAnisotropy; break; case GL_TEXTURE_IMMUTABLE_FORMAT: if (!ctx->Extensions.ARB_texture_storage) goto invalid_pname; *params = (GLfloat) obj->Immutable; break; default: goto invalid_pname; } /* no error if we get here */ _mesa_unlock_texture(ctx, obj); return; invalid_pname: _mesa_unlock_texture(ctx, obj); _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexParameterfv(pname=0x%x)", pname); }
void GLAPIENTRY _mesa_GetTexParameterfv( GLenum target, GLenum pname, GLfloat *params ) { struct gl_texture_object *obj; GLboolean error = GL_FALSE; GET_CURRENT_CONTEXT(ctx); ASSERT_OUTSIDE_BEGIN_END(ctx); obj = get_texobj(ctx, target, GL_TRUE); if (!obj) return; _mesa_lock_texture(ctx, obj); switch (pname) { case GL_TEXTURE_MAG_FILTER: *params = ENUM_TO_FLOAT(obj->Sampler.MagFilter); break; case GL_TEXTURE_MIN_FILTER: *params = ENUM_TO_FLOAT(obj->Sampler.MinFilter); break; case GL_TEXTURE_WRAP_S: *params = ENUM_TO_FLOAT(obj->Sampler.WrapS); break; case GL_TEXTURE_WRAP_T: *params = ENUM_TO_FLOAT(obj->Sampler.WrapT); break; case GL_TEXTURE_WRAP_R: *params = ENUM_TO_FLOAT(obj->Sampler.WrapR); break; case GL_TEXTURE_BORDER_COLOR: if(ctx->NewState & (_NEW_BUFFERS | _NEW_FRAG_CLAMP)) _mesa_update_state_locked(ctx); if(ctx->Color._ClampFragmentColor) { params[0] = CLAMP(obj->Sampler.BorderColor.f[0], 0.0F, 1.0F); params[1] = CLAMP(obj->Sampler.BorderColor.f[1], 0.0F, 1.0F); params[2] = CLAMP(obj->Sampler.BorderColor.f[2], 0.0F, 1.0F); params[3] = CLAMP(obj->Sampler.BorderColor.f[3], 0.0F, 1.0F); } else { params[0] = obj->Sampler.BorderColor.f[0]; params[1] = obj->Sampler.BorderColor.f[1]; params[2] = obj->Sampler.BorderColor.f[2]; params[3] = obj->Sampler.BorderColor.f[3]; } break; case GL_TEXTURE_RESIDENT: { GLboolean resident; if (ctx->Driver.IsTextureResident) resident = ctx->Driver.IsTextureResident(ctx, obj); else resident = GL_TRUE; *params = ENUM_TO_FLOAT(resident); } break; case GL_TEXTURE_PRIORITY: *params = obj->Priority; break; case GL_TEXTURE_MIN_LOD: *params = obj->Sampler.MinLod; break; case GL_TEXTURE_MAX_LOD: *params = obj->Sampler.MaxLod; break; case GL_TEXTURE_BASE_LEVEL: *params = (GLfloat) obj->BaseLevel; break; case GL_TEXTURE_MAX_LEVEL: *params = (GLfloat) obj->MaxLevel; break; case GL_TEXTURE_MAX_ANISOTROPY_EXT: if (ctx->Extensions.EXT_texture_filter_anisotropic) { *params = obj->Sampler.MaxAnisotropy; } else error = GL_TRUE; break; case GL_TEXTURE_COMPARE_FAIL_VALUE_ARB: if (ctx->Extensions.ARB_shadow_ambient) { *params = obj->Sampler.CompareFailValue; } else error = GL_TRUE; break; case GL_GENERATE_MIPMAP_SGIS: *params = (GLfloat) obj->GenerateMipmap; break; case GL_TEXTURE_COMPARE_MODE_ARB: if (ctx->Extensions.ARB_shadow) { *params = (GLfloat) obj->Sampler.CompareMode; } else error = GL_TRUE; break; case GL_TEXTURE_COMPARE_FUNC_ARB: if (ctx->Extensions.ARB_shadow) { *params = (GLfloat) obj->Sampler.CompareFunc; } else error = GL_TRUE; break; case GL_DEPTH_TEXTURE_MODE_ARB: if (ctx->Extensions.ARB_depth_texture) { *params = (GLfloat) obj->Sampler.DepthMode; } else error = GL_TRUE; break; case GL_TEXTURE_LOD_BIAS: if (ctx->Extensions.EXT_texture_lod_bias) { *params = obj->Sampler.LodBias; } else error = GL_TRUE; break; #if FEATURE_OES_draw_texture case GL_TEXTURE_CROP_RECT_OES: params[0] = obj->CropRect[0]; params[1] = obj->CropRect[1]; params[2] = obj->CropRect[2]; params[3] = obj->CropRect[3]; break; #endif case GL_TEXTURE_SWIZZLE_R_EXT: case GL_TEXTURE_SWIZZLE_G_EXT: case GL_TEXTURE_SWIZZLE_B_EXT: case GL_TEXTURE_SWIZZLE_A_EXT: if (ctx->Extensions.EXT_texture_swizzle) { GLuint comp = pname - GL_TEXTURE_SWIZZLE_R_EXT; *params = (GLfloat) obj->Swizzle[comp]; } else { error = GL_TRUE; } break; case GL_TEXTURE_SWIZZLE_RGBA_EXT: if (ctx->Extensions.EXT_texture_swizzle) { GLuint comp; for (comp = 0; comp < 4; comp++) { params[comp] = (GLfloat) obj->Swizzle[comp]; } } else { error = GL_TRUE; } break; case GL_TEXTURE_CUBE_MAP_SEAMLESS: if (ctx->Extensions.AMD_seamless_cubemap_per_texture) { *params = (GLfloat) obj->Sampler.CubeMapSeamless; } else { error = GL_TRUE; } break; default: error = GL_TRUE; break; } if (error) _mesa_error(ctx, GL_INVALID_ENUM, "glGetTexParameterfv(pname=0x%x)", pname); _mesa_unlock_texture(ctx, obj); }
void gl_GetTexGenfv( GLcontext *ctx, GLenum coord, GLenum pname, GLfloat *params ) { if (INSIDE_BEGIN_END(ctx)) { gl_error( ctx, GL_INVALID_OPERATION, "glGetTexGenfv" ); return; } switch( coord ) { case GL_S: if (pname==GL_TEXTURE_GEN_MODE) { params[0] = ENUM_TO_FLOAT(ctx->Texture.GenModeS); } else if (pname==GL_OBJECT_PLANE) { COPY_4V( params, ctx->Texture.ObjectPlaneS ); } else if (pname==GL_EYE_PLANE) { COPY_4V( params, ctx->Texture.EyePlaneS ); } else { gl_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(pname)" ); return; } break; case GL_T: if (pname==GL_TEXTURE_GEN_MODE) { params[0] = ENUM_TO_FLOAT(ctx->Texture.GenModeT); } else if (pname==GL_OBJECT_PLANE) { COPY_4V( params, ctx->Texture.ObjectPlaneT ); } else if (pname==GL_EYE_PLANE) { COPY_4V( params, ctx->Texture.EyePlaneT ); } else { gl_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(pname)" ); return; } break; case GL_R: if (pname==GL_TEXTURE_GEN_MODE) { params[0] = ENUM_TO_FLOAT(ctx->Texture.GenModeR); } else if (pname==GL_OBJECT_PLANE) { COPY_4V( params, ctx->Texture.ObjectPlaneR ); } else if (pname==GL_EYE_PLANE) { COPY_4V( params, ctx->Texture.EyePlaneR ); } else { gl_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(pname)" ); return; } break; case GL_Q: if (pname==GL_TEXTURE_GEN_MODE) { params[0] = ENUM_TO_FLOAT(ctx->Texture.GenModeQ); } else if (pname==GL_OBJECT_PLANE) { COPY_4V( params, ctx->Texture.ObjectPlaneQ ); } else if (pname==GL_EYE_PLANE) { COPY_4V( params, ctx->Texture.EyePlaneQ ); } else { gl_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(pname)" ); return; } break; default: gl_error( ctx, GL_INVALID_ENUM, "glGetTexGenfv(coord)" ); return; } }
void gl_GetTexParameterfv( GLcontext *ctx, GLenum target, GLenum pname, GLfloat *params ) { switch (target) { case GL_TEXTURE_1D: switch (pname) { case GL_TEXTURE_MAG_FILTER: *params = ENUM_TO_FLOAT(ctx->Texture.Current1D->MagFilter); break; case GL_TEXTURE_MIN_FILTER: *params = ENUM_TO_FLOAT(ctx->Texture.Current1D->MinFilter); break; case GL_TEXTURE_WRAP_S: *params = ENUM_TO_FLOAT(ctx->Texture.Current1D->WrapS); break; case GL_TEXTURE_WRAP_T: *params = ENUM_TO_FLOAT(ctx->Texture.Current1D->WrapT); break; case GL_TEXTURE_BORDER_COLOR: params[0] = ctx->Texture.Current1D->BorderColor[0] / 255.0f; params[1] = ctx->Texture.Current1D->BorderColor[1] / 255.0f; params[2] = ctx->Texture.Current1D->BorderColor[2] / 255.0f; params[3] = ctx->Texture.Current1D->BorderColor[3] / 255.0f; break; case GL_TEXTURE_RESIDENT: *params = ENUM_TO_FLOAT(GL_TRUE); break; case GL_TEXTURE_PRIORITY: *params = ctx->Texture.Current1D->Priority; break; default: gl_error( ctx, GL_INVALID_ENUM, "glGetTexParameterfv(pname)" ); } break; case GL_TEXTURE_2D: switch (pname) { case GL_TEXTURE_MAG_FILTER: *params = ENUM_TO_FLOAT(ctx->Texture.Current2D->MagFilter); break; case GL_TEXTURE_MIN_FILTER: *params = ENUM_TO_FLOAT(ctx->Texture.Current2D->MinFilter); break; case GL_TEXTURE_WRAP_S: *params = ENUM_TO_FLOAT(ctx->Texture.Current2D->WrapS); break; case GL_TEXTURE_WRAP_T: *params = ENUM_TO_FLOAT(ctx->Texture.Current2D->WrapT); break; case GL_TEXTURE_BORDER_COLOR: params[0] = ctx->Texture.Current2D->BorderColor[0] / 255.0f; params[1] = ctx->Texture.Current2D->BorderColor[1] / 255.0f; params[2] = ctx->Texture.Current2D->BorderColor[2] / 255.0f; params[3] = ctx->Texture.Current2D->BorderColor[3] / 255.0f; break; case GL_TEXTURE_RESIDENT: *params = ENUM_TO_FLOAT(GL_TRUE); break; case GL_TEXTURE_PRIORITY: *params = ctx->Texture.Current2D->Priority; break; default: gl_error( ctx, GL_INVALID_ENUM, "glGetTexParameterfv(pname)" ); } break; default: gl_error( ctx, GL_INVALID_ENUM, "glGetTexParameterfv(target)" ); } }