--- src/mesa/main/texobj.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/mesa/main/texobj.h | 3 +++ 2 files changed, 55 insertions(+)
diff --git a/src/mesa/main/texobj.c b/src/mesa/main/texobj.c index bddbc50..66e2fb0 100644 --- a/src/mesa/main/texobj.c +++ b/src/mesa/main/texobj.c @@ -1686,4 +1686,56 @@ _mesa_InvalidateTexImage(GLuint texture, GLint level) return; } +/** ARB_multi_bind / OpenGL 4.4 */ + +void GLAPIENTRY +_mesa_BindTextures(GLuint first, GLsizei count, const GLuint *textures) +{ + GET_CURRENT_CONTEXT(ctx); + struct GLuint currentTexUnit = 0; + int i = 0; + + currentTexUnit = ctx->Texture.CurrentUnit; + + if(first + count > ctx->Const.MaxCombinedTextureImageUnits) { + _mesa_error(ctx, GL_INVALID_OPERATION, "glBindTextures(first+count)"); + return; + } + + for(i = 0 ; i < count ; i++) { + GLuint texture; + struct gl_texture_object *texObj; + GLenum texTarget; + int j = 0; + + if(textures == NULL) + texture = 0; + else + texture = textures[i]; + + _mesa_ActiveTexture(GL_TEXTURE0 + first + i); + if(texture != 0) { + texObj = _mesa_lookup_texture(ctx, texture); + if(texObj) { + texTarget = texObj->Target; + _mesa_BindTexture(texTarget, texture); + } + else + _mesa_error(ctx, GL_INVALID_OPERATION, + "glBindTextures(textures[%i])", i); + } + else + for(j = 0 ; j < NUM_TEXTURE_TARGETS ; j++) { + GLint index = target_enum_to_index(ctx, j); + if(index >= 0) { + texTarget = index_to_target_enum(index); + _mesa_BindTexture(texTarget, 0); + } + else + continue; + } + } + _mesa_ActiveTexture(GL_TEXTURE0 + currentTexUnit); +} + /*@}*/ diff --git a/src/mesa/main/texobj.h b/src/mesa/main/texobj.h index 55091a6..bbf1e9b 100644 --- a/src/mesa/main/texobj.h +++ b/src/mesa/main/texobj.h @@ -179,6 +179,9 @@ _mesa_InvalidateTexSubImage(GLuint texture, GLint level, GLint xoffset, extern void GLAPIENTRY _mesa_InvalidateTexImage(GLuint texture, GLint level); +extern void GLAPIENTRY +_mesa_BindTextures(GLuint first, GLsizei count, const GLuint *textures); + /*@}*/ -- 1.8.5.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev