buffer = CALLOC_STRUCT(hgl_buffer);
assert(buffer);
- // calloc and configure our st_framebuffer interface
- buffer->drawable = CALLOC_STRUCT(pipe_frontend_drawable);
- assert(buffer->drawable);
-
// Prepare our buffer
buffer->visual = context->stVisual;
buffer->screen = context->display->fscreen->screen;
buffer->target = PIPE_TEXTURE_RECT;
// Prepare our frontend interface
- buffer->drawable->flush_front = hgl_st_framebuffer_flush_front;
- buffer->drawable->validate = hgl_st_framebuffer_validate;
- buffer->drawable->visual = context->stVisual;
+ buffer->base.flush_front = hgl_st_framebuffer_flush_front;
+ buffer->base.validate = hgl_st_framebuffer_validate;
+ buffer->base.visual = context->stVisual;
- p_atomic_set(&buffer->drawable->stamp, 1);
- buffer->drawable->ID = p_atomic_inc_return(&hgl_fb_ID);
- buffer->drawable->fscreen = context->display->fscreen;
+ p_atomic_set(&buffer->base.stamp, 1);
+ buffer->base.ID = p_atomic_inc_return(&hgl_fb_ID);
+ buffer->base.fscreen = context->display->fscreen;
return buffer;
}
for (i = 0; i < ST_ATTACHMENT_COUNT; i++)
pipe_resource_reference(&buffer->textures[i], NULL);
- FREE(buffer->drawable);
FREE(buffer);
}
}
// We need to lock and unlock framebuffers before accessing them
- st_api_make_current(context->st, context->buffer->drawable,
- context->buffer->drawable);
+ st_api_make_current(context->st, &context->buffer->base,
+ &context->buffer->base);
Unlock();
return B_OK;
buffer->screen->flush_frontbuffer(buffer->screen, NULL, buffer->textures[ST_ATTACHMENT_BACK_LEFT],
0, 0, buffer->winsysContext, NULL);
std::swap(buffer->textures[ST_ATTACHMENT_FRONT_LEFT], buffer->textures[ST_ATTACHMENT_BACK_LEFT]);
- p_atomic_inc(&buffer->drawable->stamp);
+ p_atomic_inc(&buffer->base.stamp);
}
/* TODO: remove this if the framebuffer state doesn't change. */
fContext[fCurrentContext]->height = height + 1;
// Is this the best way to invalidate?
- p_atomic_inc(&fContext[fCurrentContext]->buffer->drawable->stamp);
+ p_atomic_inc(&fContext[fCurrentContext]->buffer->base.stamp);
}