소스 검색

gbm: add gbm_bo_get/set_user_data()

This allows the user to associate some data to a gbm_bo and get a
callback when the bo is destroyed.
tags/i965-primitive-restart-v2
Ander Conselvan de Oliveira 13 년 전
부모
커밋
310d8d189d
3개의 변경된 파일41개의 추가작업 그리고 0개의 파일을 삭제
  1. 32
    0
      src/gbm/main/gbm.c
  2. 7
    0
      src/gbm/main/gbm.h
  3. 2
    0
      src/gbm/main/gbmint.h

+ 32
- 0
src/gbm/main/gbm.c 파일 보기

@@ -231,6 +231,35 @@ gbm_bo_get_handle(struct gbm_bo *bo)
return bo->handle;
}

/** Set the user data associated with a buffer object
*
* \param bo The buffer object
* \param data The data to associate to the buffer object
* \param destroy_user_data A callback (which may be %NULL) that will be
* called prior to the buffer destruction
*/
GBM_EXPORT void
gbm_bo_set_user_data(struct gbm_bo *bo, void *data,
void (*destroy_user_data)(struct gbm_bo *, void *))
{
bo->user_data = data;
bo->destroy_user_data = destroy_user_data;
}

/** Get the user data associated with a buffer object
*
* \param bo The buffer object
* \return Returns the user data associated with the buffer object or %NULL
* if no data was associated with it
*
* \sa gbm_bo_set_user_data()
*/
GBM_EXPORT void *
gbm_bo_get_user_data(struct gbm_bo *bo)
{
return bo->user_data;
}

/**
* Destroys the given buffer object and frees all resources associated with
* it.
@@ -240,6 +269,9 @@ gbm_bo_get_handle(struct gbm_bo *bo)
GBM_EXPORT void
gbm_bo_destroy(struct gbm_bo *bo)
{
if (bo->destroy_user_data)
bo->destroy_user_data(bo, bo->user_data);

bo->gbm->bo_destroy(bo);
}


+ 7
- 0
src/gbm/main/gbm.h 파일 보기

@@ -245,6 +245,13 @@ gbm_bo_get_format(struct gbm_bo *bo);
union gbm_bo_handle
gbm_bo_get_handle(struct gbm_bo *bo);

void
gbm_bo_set_user_data(struct gbm_bo *bo, void *data,
void (*destroy_user_data)(struct gbm_bo *, void *));

void *
gbm_bo_get_user_data(struct gbm_bo *bo);

void
gbm_bo_destroy(struct gbm_bo *bo);


+ 2
- 0
src/gbm/main/gbmint.h 파일 보기

@@ -94,6 +94,8 @@ struct gbm_bo {
uint32_t pitch;
uint32_t format;
union gbm_bo_handle handle;
void *user_data;
void (*destroy_user_data)(struct gbm_bo *, void *);
};

struct gbm_surface {

Loading…
취소
저장