static void mgaTexImage2D( GLcontext *ctx, GLenum target, GLint level, GLint internalFormat, GLint width, GLint height, GLint border, GLenum format, GLenum type, const GLvoid *pixels, const struct gl_pixelstore_attrib *packing, struct gl_texture_object *texObj, struct gl_texture_image *texImage ) { driTextureObject * t = (driTextureObject *) texObj->DriverData; if ( t != NULL ) { driSwapOutTextureObject( t ); } else { t = (driTextureObject *) mgaAllocTexObj( texObj ); if ( t == NULL ) { _mesa_error( ctx, GL_OUT_OF_MEMORY, "glTexImage2D" ); return; } } _mesa_store_teximage2d( ctx, target, level, internalFormat, width, height, border, format, type, pixels, packing, texObj, texImage ); level -= t->firstLevel; if (level >= 0) t->dirty_images[0] |= (1UL << level); }
static void mgaTexSubImage2D( GLcontext *ctx, GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels, const struct gl_pixelstore_attrib *packing, struct gl_texture_object *texObj, struct gl_texture_image *texImage ) { driTextureObject * t = (driTextureObject *) texObj->DriverData; assert( t != NULL ); /* this _should_ be true */ if ( t != NULL ) { driSwapOutTextureObject( t ); } else { t = (driTextureObject *) mgaAllocTexObj( texObj ); if ( t == NULL ) { _mesa_error( ctx, GL_OUT_OF_MEMORY, "glTexImage2D" ); return; } } _mesa_store_texsubimage2d(ctx, target, level, xoffset, yoffset, width, height, format, type, pixels, packing, texObj, texImage); level -= t->firstLevel; if (level >= 0) t->dirty_images[0] |= (1UL << level); }
/** * Allocate a new texture object. * Called via ctx->Driver.NewTextureObject. * Note: this function will be called during context creation to * allocate the default texture objects. * Note: we could use containment here to 'derive' the driver-specific * texture object from the core mesa gl_texture_object. Not done at this time. */ static struct gl_texture_object * mgaNewTextureObject( struct gl_context *ctx, GLuint name, GLenum target ) { struct gl_texture_object *obj; obj = _mesa_new_texture_object(ctx, name, target); mgaAllocTexObj( obj ); return obj; }
static void mgaDDBindTexture( GLcontext *ctx, GLenum target, struct gl_texture_object *tObj ) { if ( target == GL_TEXTURE_2D || target == GL_TEXTURE_RECTANGLE_NV ) { if ( tObj->DriverData == NULL ) { mgaAllocTexObj( tObj ); } } }