if(context)
{
- es2::Texture *texture = nullptr;
+ es2::Texture *texture = context->getTargetTexture(target);
- switch(target)
+ if(!texture)
{
- case GL_TEXTURE_2D:
- texture = context->getTexture2D();
- break;
- case GL_TEXTURE_CUBE_MAP:
- {
- TextureCubeMap *cube = context->getTextureCubeMap();
- texture = cube;
-
- if(!cube->isCubeComplete())
- {
- return error(GL_INVALID_OPERATION);
- }
- }
- break;
- case GL_TEXTURE_2D_ARRAY:
- texture = context->getTexture2DArray();
- break;
- case GL_TEXTURE_3D:
- texture = context->getTexture3D();
- break;
- case GL_TEXTURE_RECTANGLE_ARB:
- texture = context->getTexture2DRect();
- break;
- default:
- return error(GL_INVALID_ENUM);
+ return;
}
if(!IsMipmappable(texture->getFormat(target, texture->getBaseLevel())))
return error(GL_INVALID_OPERATION);
}
+ if(target == GL_TEXTURE_CUBE_MAP)
+ {
+ TextureCubeMap *cube = context->getTextureCubeMap();
+
+ if(!cube->isCubeComplete())
+ {
+ return error(GL_INVALID_OPERATION);
+ }
+ }
+
+ // [OpenGL ES 3.2]: "Otherwise, if levelbase is not defined, or if any dimension
+ // is zero, all mipmap levels are left unchanged. This is not an error."
+ if(!texture->isBaseLevelDefined())
+ {
+ return;
+ }
+
texture->generateMipmaps();
}
}
if(context)
{
- es2::Texture *texture;
+ es2::Texture *texture = context->getTargetTexture(target);
- switch(target)
+ if(!texture)
{
- case GL_TEXTURE_2D: texture = context->getTexture2D(); break;
- case GL_TEXTURE_2D_ARRAY: texture = context->getTexture2DArray(); break;
- case GL_TEXTURE_3D: texture = context->getTexture3D(); break;
- case GL_TEXTURE_CUBE_MAP: texture = context->getTextureCubeMap(); break;
- case GL_TEXTURE_EXTERNAL_OES: texture = context->getTextureExternal(); break;
- case GL_TEXTURE_RECTANGLE_ARB: texture = context->getTexture2DRect(); break;
- default:
- return error(GL_INVALID_ENUM);
+ return;
}
switch(pname)
if(context)
{
- es2::Texture *texture;
+ es2::Texture *texture = context->getTargetTexture(target);
- switch(target)
+ if(!texture)
{
- case GL_TEXTURE_2D: texture = context->getTexture2D(); break;
- case GL_TEXTURE_2D_ARRAY: texture = context->getTexture2DArray(); break;
- case GL_TEXTURE_3D: texture = context->getTexture3D(); break;
- case GL_TEXTURE_CUBE_MAP: texture = context->getTextureCubeMap(); break;
- case GL_TEXTURE_EXTERNAL_OES: texture = context->getTextureExternal(); break;
- case GL_TEXTURE_RECTANGLE_ARB: texture = context->getTexture2DRect(); break;
- default:
- return error(GL_INVALID_ENUM);
+ return;
}
switch(pname)
if(context)
{
- es2::Texture *texture;
+ es2::Texture *texture = context->getTargetTexture(target);
- switch(target)
+ if(!texture)
{
- case GL_TEXTURE_2D: texture = context->getTexture2D(); break;
- case GL_TEXTURE_2D_ARRAY: texture = context->getTexture2DArray(); break;
- case GL_TEXTURE_3D: texture = context->getTexture3D(); break;
- case GL_TEXTURE_CUBE_MAP: texture = context->getTextureCubeMap(); break;
- case GL_TEXTURE_EXTERNAL_OES: texture = context->getTextureExternal(); break;
- case GL_TEXTURE_RECTANGLE_ARB: texture = context->getTexture2DRect(); break;
- default:
- return error(GL_INVALID_ENUM);
+ return;
}
switch(pname)
if(context)
{
- es2::Texture *texture;
+ es2::Texture *texture = context->getTargetTexture(target);
- switch(target)
+ if(!texture)
{
- case GL_TEXTURE_2D: texture = context->getTexture2D(); break;
- case GL_TEXTURE_2D_ARRAY: texture = context->getTexture2DArray(); break;
- case GL_TEXTURE_3D: texture = context->getTexture3D(); break;
- case GL_TEXTURE_CUBE_MAP: texture = context->getTextureCubeMap(); break;
- case GL_TEXTURE_EXTERNAL_OES: texture = context->getTextureExternal(); break;
- case GL_TEXTURE_RECTANGLE_ARB: texture = context->getTexture2DRect(); break;
- default:
- return error(GL_INVALID_ENUM);
+ return;
}
switch(pname)