[waffle] [RFC] waffle: support for swap completion callback
Emil Velikov
emil.l.velikov at gmail.com
Wed Feb 4 05:13:21 PST 2015
On 4 February 2015 at 06:20, Tapani Pälli <tapani.palli at intel.com> wrote:
>
>
> On 02/03/2015 07:32 PM, Emil Velikov wrote:
>>
>> On 2 February 2015 at 13:08, Tapani Pälli <tapani.palli at intel.com> wrote:
>>>
>>> Patch introduces a new API that enables application to register
>>> a callback to be called when swapbuffers has finished. This can be
>>> used to throttle rendering loop.
>>>
>> [...]
>>>
>>> @@ -173,6 +174,9 @@ bool
>>> waffle_is_extension_in_string(const char *extension_string,
>>> const char *extension_name);
>>>
>>> +bool
>>> +waffle_register_swap_callback(waffle_swapbuffers_cb func);
>>> +
>>
>> Perhaps inlining the typedef in there, and wrapping it in
>> WAFFLE_API_VERSION (alongside the function prototype) ?
>
>
> I put it in separate header so that wcore_platform.h would not need to
> include whole "waffle.h" but if that feels ok then typedef can be moved
> here.
>
Hmm good point. I would leave the final decision to Chad, but imho
things will be better if we're compacted.
>> Fwiw changing the func prototype to something like the following will
>> be more consistent, and less likely to abuse.
>>
>> bool
>> waffle_window_register_swap_callback(struct waffle_window *window,
>> waffle_swapbuffers_cb func);
>
>
> This means that callback would be window specific. I think this is ok,
> although then user needs to register callback for each window separately and
> window argument could be removed from the actual callback.
>
True, and I don't think it can be seen as a problem.
>> On the topic of the OML triple (ust, msc, sbc), I cannot really
>> comment as I've never had the pleasure.
>>
>>> diff --git a/src/waffle/api/waffle_gl_misc.c
>>> b/src/waffle/api/waffle_gl_misc.c
>>> index 138974d..ac155c0 100644
>>> --- a/src/waffle/api/waffle_gl_misc.c
>>> +++ b/src/waffle/api/waffle_gl_misc.c
>>> @@ -108,3 +108,20 @@ waffle_get_proc_address(const char *name)
>>>
>>> return api_platform->vtbl->get_proc_address(api_platform, name);
>>> }
>>> +
>>> +WAFFLE_API bool
>>> +waffle_register_swap_callback(waffle_swapbuffers_cb func)
>>> +{
>>> + const struct api_object *obj_list[] = {
>>> + (void*) func,
>>> + };
>>> +
>>> + if (!api_check_entry(obj_list, 1))
>>> + return false;
>>> +
>>
>> With the "struct waffle_window *" in you can use it so that one does
>> not abuse the API too much :)
>
>
> I'm now sure what would be the abuse case?
>
Maybe "misuse" is a better word - iirc api_check_entry confirms that
all the objects in obj_list are linked/attached to each other.
Although as you brought it up I'm not sure how it works when there is
only a single object.
-Emil
More information about the waffle
mailing list