mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 13:28:06 +02:00
main: Added entry point for glGenerateTextureMipmap.
Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
This commit is contained in:
parent
239e3fb876
commit
91089d6d65
4 changed files with 62 additions and 20 deletions
|
|
@ -179,6 +179,10 @@
|
|||
<param name="param" type="const GLint *" />
|
||||
</function>
|
||||
|
||||
<function name="GenerateTextureMipmap" offset="assign">
|
||||
<param name="texture" type="GLuint" />
|
||||
</function>
|
||||
|
||||
<function name="BindTextureUnit" offset="assign">
|
||||
<param name="unit" type="GLuint" />
|
||||
<param name="texture" type="GLuint" />
|
||||
|
|
|
|||
|
|
@ -36,21 +36,20 @@
|
|||
#include "mtypes.h"
|
||||
#include "teximage.h"
|
||||
#include "texobj.h"
|
||||
|
||||
#include "hash.h"
|
||||
|
||||
/**
|
||||
* Generate all the mipmap levels below the base level.
|
||||
* Note: this GL function would be more useful if one could specify a
|
||||
* cube face, a set of array slices, etc.
|
||||
* Implements glGenerateMipmap and glGenerateTextureMipmap.
|
||||
* Generates all the mipmap levels below the base level.
|
||||
*/
|
||||
void GLAPIENTRY
|
||||
_mesa_GenerateMipmap(GLenum target)
|
||||
void
|
||||
_mesa_generate_texture_mipmap(struct gl_context *ctx,
|
||||
struct gl_texture_object *texObj, GLenum target,
|
||||
bool dsa)
|
||||
{
|
||||
struct gl_texture_image *srcImage;
|
||||
struct gl_texture_object *texObj;
|
||||
GLboolean error;
|
||||
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
const char *suffix = dsa ? "Texture" : "";
|
||||
|
||||
FLUSH_VERTICES(ctx, 0);
|
||||
|
||||
|
|
@ -83,13 +82,11 @@ _mesa_GenerateMipmap(GLenum target)
|
|||
}
|
||||
|
||||
if (error) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGenerateMipmapEXT(target=%s)",
|
||||
_mesa_lookup_enum_by_nr(target));
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glGenerate%sMipmap(target=%s)",
|
||||
suffix, _mesa_lookup_enum_by_nr(target));
|
||||
return;
|
||||
}
|
||||
|
||||
texObj = _mesa_get_current_tex_object(ctx, target);
|
||||
|
||||
if (texObj->BaseLevel >= texObj->MaxLevel) {
|
||||
/* nothing to do */
|
||||
return;
|
||||
|
|
@ -98,7 +95,7 @@ _mesa_GenerateMipmap(GLenum target)
|
|||
if (texObj->Target == GL_TEXTURE_CUBE_MAP &&
|
||||
!_mesa_cube_complete(texObj)) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glGenerateMipmap(incomplete cube map)");
|
||||
"glGenerate%sMipmap(incomplete cube map)", suffix);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -108,7 +105,7 @@ _mesa_GenerateMipmap(GLenum target)
|
|||
if (!srcImage) {
|
||||
_mesa_unlock_texture(ctx, texObj);
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glGenerateMipmap(zero size base image)");
|
||||
"glGenerate%sMipmap(zero size base image)", suffix);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -117,19 +114,53 @@ _mesa_GenerateMipmap(GLenum target)
|
|||
_mesa_is_stencil_format(srcImage->InternalFormat)) {
|
||||
_mesa_unlock_texture(ctx, texObj);
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glGenerateMipmap(invalid internal format)");
|
||||
"glGenerate%sMipmap(invalid internal format)", suffix);
|
||||
return;
|
||||
}
|
||||
|
||||
if (target == GL_TEXTURE_CUBE_MAP) {
|
||||
GLuint face;
|
||||
for (face = 0; face < 6; face++)
|
||||
ctx->Driver.GenerateMipmap(ctx,
|
||||
GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB + face,
|
||||
texObj);
|
||||
for (face = 0; face < 6; face++) {
|
||||
ctx->Driver.GenerateMipmap(ctx,
|
||||
GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB + face, texObj);
|
||||
}
|
||||
}
|
||||
else {
|
||||
ctx->Driver.GenerateMipmap(ctx, target, texObj);
|
||||
}
|
||||
_mesa_unlock_texture(ctx, texObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate all the mipmap levels below the base level.
|
||||
* Note: this GL function would be more useful if one could specify a
|
||||
* cube face, a set of array slices, etc.
|
||||
*/
|
||||
void GLAPIENTRY
|
||||
_mesa_GenerateMipmap(GLenum target)
|
||||
{
|
||||
struct gl_texture_object *texObj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
texObj = _mesa_get_current_tex_object(ctx, target);
|
||||
if (!texObj)
|
||||
return;
|
||||
|
||||
_mesa_generate_texture_mipmap(ctx, texObj, target, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate all the mipmap levels below the base level.
|
||||
*/
|
||||
void GLAPIENTRY
|
||||
_mesa_GenerateTextureMipmap(GLuint texture)
|
||||
{
|
||||
struct gl_texture_object *texObj;
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
texObj = _mesa_lookup_texture_err(ctx, texture, "glGenerateTextureMipmap");
|
||||
if (!texObj)
|
||||
return;
|
||||
|
||||
_mesa_generate_texture_mipmap(ctx, texObj, texObj->Target, true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -28,9 +28,15 @@
|
|||
|
||||
#include "glheader.h"
|
||||
|
||||
extern void
|
||||
_mesa_generate_texture_mipmap(struct gl_context *ctx,
|
||||
struct gl_texture_object *texObj, GLenum target,
|
||||
bool dsa);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_GenerateMipmap(GLenum target);
|
||||
|
||||
extern void GLAPIENTRY
|
||||
_mesa_GenerateTextureMipmap(GLuint texture);
|
||||
|
||||
#endif /* GENMIPMAP_H */
|
||||
|
|
|
|||
|
|
@ -983,6 +983,7 @@ const struct function gl_core_functions_possible[] = {
|
|||
{ "glCompressedTextureSubImage1D", 45, -1 },
|
||||
{ "glCompressedTextureSubImage2D", 45, -1 },
|
||||
{ "glCompressedTextureSubImage3D", 45, -1 },
|
||||
{ "glGenerateTextureMipmap", 45, -1 },
|
||||
|
||||
{ NULL, 0, -1 }
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue