mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 17:30:12 +01:00
mesa: add support for glBindMultiTextureEXT
Reviewed-by: Marek Olšák <marek.olsak@amd.com> Signed-off-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
c37f03d464
commit
0972b0b059
5 changed files with 47 additions and 11 deletions
|
|
@ -100,6 +100,14 @@
|
|||
<param name="matrixMode" type="GLenum" />
|
||||
</function>
|
||||
|
||||
<!-- OpenGL 1.2.1 -->
|
||||
|
||||
<function name="BindMultiTextureEXT">
|
||||
<param name="texunit" type="GLenum" />
|
||||
<param name="target" type="GLenum" />
|
||||
<param name="texture" type="GLuint" />
|
||||
</function>
|
||||
|
||||
<!-- OpenGL 1.3 -->
|
||||
|
||||
<function name="MatrixLoadTransposefEXT" offset="assign">
|
||||
|
|
@ -122,5 +130,5 @@
|
|||
<param name="m" type="const GLdouble *" />
|
||||
</function>
|
||||
</category>
|
||||
|
||||
</category>
|
||||
</OpenGLAPI>
|
||||
|
|
|
|||
|
|
@ -1473,6 +1473,7 @@ offsets = {
|
|||
"MatrixLoadTransposedEXT": 1437,
|
||||
"MatrixMultTransposefEXT": 1438,
|
||||
"MatrixMultTransposedEXT": 1439,
|
||||
"BindMultiTextureEXT": 1440,
|
||||
}
|
||||
|
||||
functions = [
|
||||
|
|
|
|||
|
|
@ -1056,7 +1056,7 @@ const struct function common_desktop_functions_possible[] = {
|
|||
//{ "glTextureSubImage3DEXT", 12, -1 },
|
||||
//{ "glCopyTextureSubImage3DEXT", 12, -1 },
|
||||
/* GL_EXT_direct_state_access - GL 1.2.1 */
|
||||
//{ "glBindMultiTextureEXT", 12, -1 },
|
||||
{ "glBindMultiTextureEXT", 12, -1 },
|
||||
//{ "glMultiTexCoordPointerEXT", 12, -1 },
|
||||
//{ "glMultiTexEnvfEXT", 12, -1 },
|
||||
//{ "glMultiTexEnvfvEXT", 12, -1 },
|
||||
|
|
|
|||
|
|
@ -1709,17 +1709,18 @@ _mesa_bind_texture(struct gl_context *ctx, GLenum target,
|
|||
*
|
||||
* \param target texture target.
|
||||
* \param texName texture name.
|
||||
* \param texunit texture unit.
|
||||
*/
|
||||
static ALWAYS_INLINE void
|
||||
bind_texture(struct gl_context *ctx, GLenum target, GLuint texName,
|
||||
bool no_error)
|
||||
GLenum texunit, bool no_error, const char *caller)
|
||||
{
|
||||
struct gl_texture_object *newTexObj = NULL;
|
||||
int targetIndex;
|
||||
|
||||
targetIndex = _mesa_tex_target_to_index(ctx, target);
|
||||
if (!no_error && targetIndex < 0) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glBindTexture(target = %s)",
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "%s(target = %s)", caller,
|
||||
_mesa_enum_to_string(target));
|
||||
return;
|
||||
}
|
||||
|
|
@ -1741,8 +1742,8 @@ bind_texture(struct gl_context *ctx, GLenum target, GLuint texName,
|
|||
/* The named texture object's target doesn't match the
|
||||
* given target
|
||||
*/
|
||||
_mesa_error( ctx, GL_INVALID_OPERATION,
|
||||
"glBindTexture(target mismatch)" );
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"%s(target mismatch)", caller);
|
||||
return;
|
||||
}
|
||||
if (newTexObj->Target == 0) {
|
||||
|
|
@ -1752,14 +1753,14 @@ bind_texture(struct gl_context *ctx, GLenum target, GLuint texName,
|
|||
else {
|
||||
if (!no_error && ctx->API == API_OPENGL_CORE) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
"glBindTexture(non-gen name)");
|
||||
"%s(non-gen name)", caller);
|
||||
return;
|
||||
}
|
||||
|
||||
/* if this is a new texture id, allocate a texture object now */
|
||||
newTexObj = ctx->Driver.NewTextureObject(ctx, texName, target);
|
||||
if (!newTexObj) {
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "glBindTexture");
|
||||
_mesa_error(ctx, GL_OUT_OF_MEMORY, "%s", caller);
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -1771,14 +1772,15 @@ bind_texture(struct gl_context *ctx, GLenum target, GLuint texName,
|
|||
assert(newTexObj->Target == target);
|
||||
assert(newTexObj->TargetIndex == targetIndex);
|
||||
|
||||
bind_texture_object(ctx, ctx->Texture.CurrentUnit, newTexObj);
|
||||
bind_texture_object(ctx, texunit, newTexObj);
|
||||
}
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_BindTexture_no_error(GLenum target, GLuint texName)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
bind_texture(ctx, target, texName, true);
|
||||
bind_texture(ctx, target, texName, ctx->Texture.CurrentUnit, true,
|
||||
"glBindTexture");
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1791,7 +1793,29 @@ _mesa_BindTexture(GLenum target, GLuint texName)
|
|||
_mesa_debug(ctx, "glBindTexture %s %d\n",
|
||||
_mesa_enum_to_string(target), (GLint) texName);
|
||||
|
||||
bind_texture(ctx, target, texName, false);
|
||||
bind_texture(ctx, target, texName, ctx->Texture.CurrentUnit, false,
|
||||
"glBindTexture");
|
||||
}
|
||||
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_BindMultiTextureEXT(GLenum texunit, GLenum target, GLuint texture)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
unsigned unit = texunit - GL_TEXTURE0;
|
||||
|
||||
if (texunit < GL_TEXTURE0 || unit >= _mesa_max_tex_unit(ctx)) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glBindMultiTextureEXT(texunit=%s)",
|
||||
_mesa_enum_to_string(texunit));
|
||||
return;
|
||||
}
|
||||
|
||||
if (MESA_VERBOSE & (VERBOSE_API|VERBOSE_TEXTURE))
|
||||
_mesa_debug(ctx, "glBindMultiTextureEXT %s %d\n",
|
||||
_mesa_enum_to_string(texunit), (GLint) texture);
|
||||
|
||||
bind_texture(ctx, target, texture, unit, false, "glBindMultiTextureEXT");
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -208,6 +208,9 @@ _mesa_BindTexture_no_error(GLenum target, GLuint texture);
|
|||
extern void GLAPIENTRY
|
||||
_mesa_BindTexture( GLenum target, GLuint texture );
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_BindMultiTextureEXT(GLenum texunit, GLenum target, GLuint texture);
|
||||
|
||||
void GLAPIENTRY
|
||||
_mesa_BindTextureUnit_no_error(GLuint unit, GLuint texture);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue