<param name="param" type="const GLfloat*" />
</function>
+ <function name="GetMultiTexImageEXT">
+ <param name="texunit" type="GLenum" />
+ <param name="target" type="GLenum" />
+ <param name="level" type="GLint" />
+ <param name="format" type="GLenum" />
+ <param name="type" type="GLenum" />
+ <param name="pixels" type="GLvoid*" />
+ </function>
+
+ <function name="MultiTexImage1DEXT">
+ <param name="texunit" type="GLenum" />
+ <param name="target" type="GLenum" />
+ <param name="level" type="GLint" />
+ <param name="internalformat" type="GLint" />
+ <param name="width" type="GLsizei" />
+ <param name="border" type="GLint" />
+ <param name="format" type="GLenum" />
+ <param name="type" type="GLenum" />
+ <param name="pixels" type="const GLvoid*" />
+ </function>
+
+ <function name="MultiTexImage2DEXT">
+ <param name="texunit" type="GLenum" />
+ <param name="target" type="GLenum" />
+ <param name="level" type="GLint" />
+ <param name="internalformat" type="GLint" />
+ <param name="width" type="GLsizei" />
+ <param name="height" type="GLsizei" />
+ <param name="border" type="GLint" />
+ <param name="format" type="GLenum" />
+ <param name="type" type="GLenum" />
+ <param name="pixels" type="const GLvoid*" />
+ </function>
+
+ <function name="MultiTexImage3DEXT">
+ <param name="texunit" type="GLenum" />
+ <param name="target" type="GLenum" />
+ <param name="level" type="GLint" />
+ <param name="internalformat" type="GLint" />
+ <param name="width" type="GLsizei" />
+ <param name="height" type="GLsizei" />
+ <param name="depth" type="GLsizei" />
+ <param name="border" type="GLint" />
+ <param name="format" type="GLenum" />
+ <param name="type" type="GLenum" />
+ <param name="pixels" type="const GLvoid*" />
+ </function>
+
<!-- OpenGL 1.3 -->
<function name="MatrixLoadTransposefEXT" offset="assign">
"MultiTexParameterivEXT": 1491,
"MultiTexParameterfEXT": 1492,
"MultiTexParameterfvEXT": 1493,
+ "GetMultiTexImageEXT": 1494,
+ "MultiTexImage1DEXT": 1495,
+ "MultiTexImage2DEXT": 1496,
+ "MultiTexImage3DEXT": 1497,
}
functions = [
OPCODE_BIND_MULTITEXTURE,
OPCODE_MULTITEXPARAMETER_F,
OPCODE_MULTITEXPARAMETER_I,
+ OPCODE_MULTITEX_IMAGE1D,
+ OPCODE_MULTITEX_IMAGE2D,
+ OPCODE_MULTITEX_IMAGE3D,
OPCODE_MULTITEXENV,
OPCODE_COMPRESSED_TEXTURE_SUB_IMAGE_2D,
free(get_pointer(&n[3]));
break;
case OPCODE_TEXTURE_IMAGE1D:
+ case OPCODE_MULTITEX_IMAGE1D:
free(get_pointer(&n[9]));
break;
case OPCODE_TEXTURE_IMAGE2D:
+ case OPCODE_MULTITEX_IMAGE2D:
free(get_pointer(&n[10]));
break;
case OPCODE_TEXTURE_IMAGE3D:
+ case OPCODE_MULTITEX_IMAGE3D:
free(get_pointer(&n[11]));
break;
case OPCODE_TEXTURE_SUB_IMAGE1D:
ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
n = alloc_instruction(ctx, OPCODE_TEXTURE_IMAGE1D, 8 + POINTER_DWORDS);
if (n) {
- n[1].e = texture;
+ n[1].ui = texture;
n[2].e = target;
n[3].i = level;
n[4].i = components;
}
+static void GLAPIENTRY
+save_MultiTexImage1DEXT(GLenum texunit, GLenum target,
+ GLint level, GLint components,
+ GLsizei width, GLint border,
+ GLenum format, GLenum type, const GLvoid * pixels)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (target == GL_PROXY_TEXTURE_1D) {
+ /* don't compile, execute immediately */
+ CALL_MultiTexImage1DEXT(ctx->Exec, (texunit, target, level, components, width,
+ border, format, type, pixels));
+ }
+ else {
+ Node *n;
+ ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+ n = alloc_instruction(ctx, OPCODE_MULTITEX_IMAGE1D, 8 + POINTER_DWORDS);
+ if (n) {
+ n[1].e = texunit;
+ n[2].e = target;
+ n[3].i = level;
+ n[4].i = components;
+ n[5].i = (GLint) width;
+ n[6].i = border;
+ n[7].e = format;
+ n[8].e = type;
+ save_pointer(&n[9],
+ unpack_image(ctx, 1, width, 1, 1, format, type,
+ pixels, &ctx->Unpack));
+ }
+ if (ctx->ExecuteFlag) {
+ CALL_MultiTexImage1DEXT(ctx->Exec, (texunit, target, level, components, width,
+ border, format, type, pixels));
+ }
+ }
+}
+
+
+static void GLAPIENTRY
+save_MultiTexImage2DEXT(GLenum texunit, GLenum target,
+ GLint level, GLint components,
+ GLsizei width, GLsizei height, GLint border,
+ GLenum format, GLenum type, const GLvoid * pixels)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (target == GL_PROXY_TEXTURE_2D) {
+ /* don't compile, execute immediately */
+ CALL_MultiTexImage2DEXT(ctx->Exec, (texunit, target, level, components, width,
+ height, border, format, type, pixels));
+ }
+ else {
+ Node *n;
+ ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+ n = alloc_instruction(ctx, OPCODE_MULTITEX_IMAGE2D, 9 + POINTER_DWORDS);
+ if (n) {
+ n[1].e = texunit;
+ n[2].e = target;
+ n[3].i = level;
+ n[4].i = components;
+ n[5].i = (GLint) width;
+ n[6].i = (GLint) height;
+ n[7].i = border;
+ n[8].e = format;
+ n[9].e = type;
+ save_pointer(&n[10],
+ unpack_image(ctx, 2, width, height, 1, format, type,
+ pixels, &ctx->Unpack));
+ }
+ if (ctx->ExecuteFlag) {
+ CALL_MultiTexImage2DEXT(ctx->Exec, (texunit, target, level, components, width,
+ height, border, format, type, pixels));
+ }
+ }
+}
+
+
+static void GLAPIENTRY
+save_MultiTexImage3DEXT(GLenum texunit, GLenum target,
+ GLint level, GLint internalFormat,
+ GLsizei width, GLsizei height, GLsizei depth,
+ GLint border,
+ GLenum format, GLenum type, const GLvoid * pixels)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ if (target == GL_PROXY_TEXTURE_3D) {
+ /* don't compile, execute immediately */
+ CALL_MultiTexImage3DEXT(ctx->Exec, (texunit, target, level, internalFormat, width,
+ height, depth, border, format, type,
+ pixels));
+ }
+ else {
+ Node *n;
+ ASSERT_OUTSIDE_SAVE_BEGIN_END_AND_FLUSH(ctx);
+ n = alloc_instruction(ctx, OPCODE_MULTITEX_IMAGE3D, 10 + POINTER_DWORDS);
+ if (n) {
+ n[1].e = texunit;
+ n[2].e = target;
+ n[3].i = level;
+ n[4].i = (GLint) internalFormat;
+ n[5].i = (GLint) width;
+ n[6].i = (GLint) height;
+ n[7].i = (GLint) depth;
+ n[8].i = border;
+ n[9].e = format;
+ n[10].e = type;
+ save_pointer(&n[11],
+ unpack_image(ctx, 3, width, height, depth, format, type,
+ pixels, &ctx->Unpack));
+ }
+ if (ctx->ExecuteFlag) {
+ CALL_MultiTexImage3DEXT(ctx->Exec, (texunit, target, level, internalFormat,
+ width, height, depth, border, format,
+ type, pixels));
+ }
+ }
+}
+
+
+
static void GLAPIENTRY
save_MultiTexEnvfvEXT(GLenum texunit, GLenum target, GLenum pname, const GLfloat *params)
{
CALL_MultiTexParameterivEXT(ctx->Exec, (n[1].e, n[2].e, n[3].e, params));
}
break;
+ case OPCODE_MULTITEX_IMAGE1D:
+ {
+ const struct gl_pixelstore_attrib save = ctx->Unpack;
+ ctx->Unpack = ctx->DefaultPacking;
+ CALL_MultiTexImage1DEXT(ctx->Exec, (n[1].e, /* texture */
+ n[2].e, /* target */
+ n[3].i, /* level */
+ n[4].i, /* components */
+ n[5].i, /* width */
+ n[6].e, /* border */
+ n[7].e, /* format */
+ n[8].e, /* type */
+ get_pointer(&n[9])));
+ ctx->Unpack = save; /* restore */
+ }
+ break;
+ case OPCODE_MULTITEX_IMAGE2D:
+ {
+ const struct gl_pixelstore_attrib save = ctx->Unpack;
+ ctx->Unpack = ctx->DefaultPacking;
+ CALL_MultiTexImage2DEXT(ctx->Exec, (n[1].e, /* texture */
+ n[2].e, /* target */
+ n[3].i, /* level */
+ n[4].i, /* components */
+ n[5].i, /* width */
+ n[6].i, /* height */
+ n[7].e, /* border */
+ n[8].e, /* format */
+ n[9].e, /* type */
+ get_pointer(&n[10])));
+ ctx->Unpack = save; /* restore */
+ }
+ break;
+ case OPCODE_MULTITEX_IMAGE3D:
+ {
+ const struct gl_pixelstore_attrib save = ctx->Unpack;
+ ctx->Unpack = ctx->DefaultPacking;
+ CALL_MultiTexImage3DEXT(ctx->Exec, (n[1].e, /* texture */
+ n[2].e, /* target */
+ n[3].i, /* level */
+ n[4].i, /* components */
+ n[5].i, /* width */
+ n[6].i, /* height */
+ n[7].i, /* depth */
+ n[8].e, /* border */
+ n[9].e, /* format */
+ n[10].e, /* type */
+ get_pointer(&n[11])));
+ ctx->Unpack = save; /* restore */
+ }
+ break;
case OPCODE_MULTITEXENV:
{
GLfloat params[4];
SET_MultiTexParameterivEXT(table, save_MultiTexParameterivEXT);
SET_MultiTexParameterfEXT(table, save_MultiTexParameterfEXT);
SET_MultiTexParameterfvEXT(table, save_MultiTexParameterfvEXT);
+ SET_MultiTexImage1DEXT(table, save_MultiTexImage1DEXT);
+ SET_MultiTexImage2DEXT(table, save_MultiTexImage2DEXT);
+ SET_MultiTexImage3DEXT(table, save_MultiTexImage3DEXT);
SET_MultiTexEnvfEXT(table, save_MultiTexEnvfEXT);
SET_MultiTexEnvfvEXT(table, save_MultiTexEnvfvEXT);
SET_MultiTexEnviEXT(table, save_MultiTexEnviEXT);
{ "glMultiTexParameterfvEXT", 12, -1 },
{ "glMultiTexParameteriEXT", 12, -1 },
{ "glMultiTexParameterivEXT", 12, -1 },
- //{ "glMultiTexImage1DEXT", 12, -1 },
- //{ "glMultiTexImage2DEXT", 12, -1 },
+ { "glMultiTexImage1DEXT", 12, -1 },
+ { "glMultiTexImage2DEXT", 12, -1 },
//{ "glMultiTexSubImage1DEXT", 12, -1 },
//{ "glMultiTexSubImage2DEXT", 12, -1 },
//{ "glCopyMultiTexImage1DEXT", 12, -1 },
//{ "glCopyMultiTexImage2DEXT", 12, -1 },
//{ "glCopyMultiTexSubImage1DEXT", 12, -1 },
//{ "glCopyMultiTexSubImage2DEXT", 12, -1 },
- //{ "glGetMultiTexImageEXT", 12, -1 },
+ { "glGetMultiTexImageEXT", 12, -1 },
//{ "glGetMultiTexParameterfvEXT", 12, -1 },
//{ "glGetMultiTexParameterivEXT", 12, -1 },
//{ "glGetMultiTexLevelParameterfvEXT", 12, -1 },
//{ "glGetMultiTexLevelParameterivEXT", 12, -1 },
- //{ "glMultiTexImage3DEXT", 12, -1 },
+ { "glMultiTexImage3DEXT", 12, -1 },
//{ "glMultiTexSubImage3DEXT", 12, -1 },
//{ "glCopyMultiTexSubImage3DEXT", 12, -1 },
{ "glEnableClientStateIndexedEXT", 12, -1 },
}
+void GLAPIENTRY
+_mesa_GetMultiTexImageEXT(GLenum texunit, GLenum target, GLint level,
+ GLenum format, GLenum type, GLvoid *pixels)
+{
+ GET_CURRENT_CONTEXT(ctx);
+ GLsizei width, height, depth;
+ static const char *caller = "glGetMultiTexImageEXT";
+
+ struct gl_texture_object *texObj =
+ _mesa_get_texobj_by_target_and_texunit(ctx, target,
+ texunit - GL_TEXTURE0,
+ false,
+ caller);
+
+ if (!texObj) {
+ return;
+ }
+
+ if (!legal_getteximage_target(ctx, texObj->Target, true)) {
+ _mesa_error(ctx, GL_INVALID_OPERATION, "%s", caller);
+ return;
+ }
+
+ get_texture_image_dims(texObj, texObj->Target, level,
+ &width, &height, &depth);
+
+ if (getteximage_error_check(ctx, texObj, texObj->Target, level,
+ width, height, depth,
+ format, type, INT_MAX, pixels, caller)) {
+ return;
+ }
+
+ get_texture_image(ctx, texObj, texObj->Target, level,
+ 0, 0, 0, width, height, depth,
+ format, type, pixels, caller);
+}
+
+
void GLAPIENTRY
_mesa_GetTextureSubImage(GLuint texture, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
_mesa_GetTextureImageEXT( GLuint texture, GLenum target, GLint level,
GLenum format, GLenum type, GLvoid *pixels);
+extern void GLAPIENTRY
+_mesa_GetMultiTexImageEXT(GLenum texunit, GLenum target, GLint level,
+ GLenum format, GLenum type, GLvoid *pixels);
+
extern void GLAPIENTRY
_mesa_GetTextureSubImage(GLuint texture, GLint level,
GLint xoffset, GLint yoffset, GLint zoffset,
width, 1, 1, border, format, type, 0, pixels, false);
}
+void GLAPIENTRY
+_mesa_MultiTexImage1DEXT(GLenum texunit, GLenum target, GLint level,
+ GLint internalFormat, GLsizei width, GLint border,
+ GLenum format, GLenum type, const GLvoid *pixels )
+{
+ struct gl_texture_object* texObj;
+ GET_CURRENT_CONTEXT(ctx);
+
+ texObj = _mesa_get_texobj_by_target_and_texunit(ctx, target,
+ texunit - GL_TEXTURE0,
+ true,
+ "glMultiTexImage1DEXT");
+ if (!texObj)
+ return;
+ teximage(ctx, GL_FALSE, 1, texObj, target, level, internalFormat, width, 1, 1,
+ border, format, type, 0, pixels, false);
+}
+
void GLAPIENTRY
_mesa_TexImage2D( GLenum target, GLint level, GLint internalFormat,
GLsizei width, GLsizei height, GLint border,
width, height, 1, border, format, type, 0, pixels, false);
}
+void GLAPIENTRY
+_mesa_MultiTexImage2DEXT(GLenum texunit, GLenum target, GLint level,
+ GLint internalFormat, GLsizei width, GLsizei height,
+ GLint border,
+ GLenum format, GLenum type, const GLvoid *pixels )
+{
+ struct gl_texture_object* texObj;
+ GET_CURRENT_CONTEXT(ctx);
+
+ texObj = _mesa_get_texobj_by_target_and_texunit(ctx, target,
+ texunit - GL_TEXTURE0,
+ true,
+ "glMultiTexImage2DEXT");
+ if (!texObj)
+ return;
+ teximage(ctx, GL_FALSE, 2, texObj, target, level, internalFormat, width, height, 1,
+ border, format, type, 0, pixels, false);
+}
+
/*
* Called by the API or display list executor.
* Note that width and height include the border.
}
+void GLAPIENTRY
+_mesa_MultiTexImage3DEXT(GLenum texunit, GLenum target, GLint level,
+ GLint internalFormat, GLsizei width, GLsizei height,
+ GLsizei depth, GLint border, GLenum format, GLenum type,
+ const GLvoid *pixels )
+{
+ struct gl_texture_object* texObj;
+ GET_CURRENT_CONTEXT(ctx);
+
+ texObj = _mesa_get_texobj_by_target_and_texunit(ctx, target,
+ texunit - GL_TEXTURE0,
+ true,
+ "glMultiTexImage3DEXT");
+ if (!texObj)
+ return;
+ teximage(ctx, GL_FALSE, 3, texObj, target, level, internalFormat,
+ width, height, depth, border, format, type, 0, pixels, false);
+}
+
+
void GLAPIENTRY
_mesa_TexImage3DEXT( GLenum target, GLint level, GLenum internalFormat,
GLsizei width, GLsizei height, GLsizei depth,
GLint internalformat, GLsizei width, GLint border,
GLenum format, GLenum type, const GLvoid *pixels );
+extern void GLAPIENTRY
+_mesa_MultiTexImage1DEXT( GLenum texture, GLenum target, GLint level,
+ GLint internalformat, GLsizei width, GLint border,
+ GLenum format, GLenum type, const GLvoid *pixels );
+
extern void GLAPIENTRY
_mesa_TexImage2D( GLenum target, GLint level, GLint internalformat,
GLsizei width, GLsizei height, GLint border,
GLint border, GLenum format, GLenum type,
const GLvoid *pixels );
+extern void GLAPIENTRY
+_mesa_MultiTexImage2DEXT(GLenum texture, GLenum target, GLint level,
+ GLint internalFormat, GLsizei width, GLsizei height,
+ GLint border, GLenum format, GLenum type,
+ const GLvoid *pixels );
+
extern void GLAPIENTRY
_mesa_TexImage3D( GLenum target, GLint level, GLint internalformat,
GLsizei width, GLsizei height, GLsizei depth, GLint border,
GLint border, GLenum format, GLenum type,
const GLvoid *pixels );
+extern void GLAPIENTRY
+_mesa_MultiTexImage3DEXT(GLenum texture, GLenum target, GLint level,
+ GLint internalFormat, GLsizei width, GLsizei height,
+ GLsizei depth, GLint border, GLenum format, GLenum type,
+ const GLvoid *pixels );
+
extern void GLAPIENTRY
_mesa_TexImage1D_no_error(GLenum target, GLint level, GLint internalformat,
GLsizei width, GLint border,