Skip to content

Commit 67ccb40

Browse files
authored
Add public base structs for the main API objects (#61)
Add base structs for the majority of API objects. This allows implementation libraries to cast such objects to pointers to these base structs, providing easier access to the implementation-specific interface data.
1 parent c3063a3 commit 67ccb40

File tree

9 files changed

+69
-48
lines changed

9 files changed

+69
-48
lines changed

include/wpe/renderer-backend-egl.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@ struct wpe_renderer_backend_egl_interface {
6767
void (*_wpe_reserved3)(void);
6868
};
6969

70+
struct wpe_renderer_backend_egl_base {
71+
const struct wpe_renderer_backend_egl_interface* interface;
72+
void* interface_data;
73+
};
74+
7075
struct wpe_renderer_backend_egl_target_interface {
7176
void* (*create)(struct wpe_renderer_backend_egl_target*, int);
7277
void (*destroy)(void*);
@@ -84,6 +89,11 @@ struct wpe_renderer_backend_egl_target_interface {
8489
void (*_wpe_reserved3)(void);
8590
};
8691

92+
struct wpe_renderer_backend_egl_target_base {
93+
const struct wpe_renderer_backend_egl_target_interface* interface;
94+
void* interface_data;
95+
};
96+
8797
struct wpe_renderer_backend_egl_offscreen_target_interface {
8898
void* (*create)();
8999
void (*destroy)(void*);
@@ -98,6 +108,12 @@ struct wpe_renderer_backend_egl_offscreen_target_interface {
98108
void (*_wpe_reserved3)(void);
99109
};
100110

111+
struct wpe_renderer_backend_egl_offscreen_target_base {
112+
const struct wpe_renderer_backend_egl_offscreen_target_interface* interface;
113+
void* interface_data;
114+
};
115+
116+
101117
WPE_EXPORT
102118
struct wpe_renderer_backend_egl*
103119
wpe_renderer_backend_egl_create(int);

include/wpe/renderer-host.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,11 @@ struct wpe_renderer_host_interface {
5858
void (*_wpe_reserved3)(void);
5959
};
6060

61+
struct wpe_renderer_host_base {
62+
const struct wpe_renderer_host_interface* interface;
63+
void* interface_data;
64+
};
65+
6166
WPE_EXPORT
6267
int
6368
wpe_renderer_host_create_client();

include/wpe/view-backend.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,11 @@ struct wpe_view_backend_interface {
7171
void (*_wpe_reserved3)(void);
7272
};
7373

74+
struct wpe_view_backend_base {
75+
const struct wpe_view_backend_interface* interface;
76+
void* interface_data;
77+
};
78+
7479

7580
WPE_EXPORT
7681
struct wpe_view_backend*

src/renderer-backend-egl-private.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,21 +28,18 @@
2828
#define wpe_renderer_backend_egl_private_h
2929

3030
struct wpe_renderer_backend_egl {
31-
const struct wpe_renderer_backend_egl_interface* interface;
32-
void* interface_data;
31+
struct wpe_renderer_backend_egl_base base;
3332
};
3433

3534
struct wpe_renderer_backend_egl_target {
36-
const struct wpe_renderer_backend_egl_target_interface* interface;
37-
void* interface_data;
35+
struct wpe_renderer_backend_egl_target_base base;
3836

3937
const struct wpe_renderer_backend_egl_target_client* client;
4038
void* client_data;
4139
};
4240

4341
struct wpe_renderer_backend_egl_offscreen_target {
44-
const struct wpe_renderer_backend_egl_offscreen_target_interface* interface;
45-
void* interface_data;
42+
struct wpe_renderer_backend_egl_offscreen_target_base base;
4643
};
4744

4845
#endif // wpe_renderer_backend_egl_private_h

src/renderer-backend-egl.c

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -37,37 +37,37 @@ wpe_renderer_backend_egl_create(int host_fd)
3737
if (!backend)
3838
return 0;
3939

40-
backend->interface = wpe_load_object("_wpe_renderer_backend_egl_interface");
41-
if (!backend->interface) {
40+
backend->base.interface = wpe_load_object("_wpe_renderer_backend_egl_interface");
41+
if (!backend->base.interface) {
4242
free(backend);
4343
return 0;
4444
}
4545

46-
backend->interface_data = backend->interface->create(host_fd);
46+
backend->base.interface_data = backend->base.interface->create(host_fd);
4747

4848
return backend;
4949
}
5050

5151
void
5252
wpe_renderer_backend_egl_destroy(struct wpe_renderer_backend_egl* backend)
5353
{
54-
backend->interface->destroy(backend->interface_data);
55-
backend->interface_data = 0;
54+
backend->base.interface->destroy(backend->base.interface_data);
55+
backend->base.interface_data = 0;
5656

5757
free(backend);
5858
}
5959

6060
EGLNativeDisplayType
6161
wpe_renderer_backend_egl_get_native_display(struct wpe_renderer_backend_egl* backend)
6262
{
63-
return backend->interface->get_native_display(backend->interface_data);
63+
return backend->base.interface->get_native_display(backend->base.interface_data);
6464
}
6565

6666
uint32_t
6767
wpe_renderer_backend_egl_get_platform(struct wpe_renderer_backend_egl* backend)
6868
{
69-
if (backend->interface->get_platform)
70-
return backend->interface->get_platform(backend->interface_data);
69+
if (backend->base.interface->get_platform)
70+
return backend->base.interface->get_platform(backend->base.interface_data);
7171
return 0;
7272
}
7373

@@ -78,22 +78,22 @@ wpe_renderer_backend_egl_target_create(int host_fd)
7878
if (!target)
7979
return 0;
8080

81-
target->interface = wpe_load_object("_wpe_renderer_backend_egl_target_interface");
82-
if (!target->interface) {
81+
target->base.interface = wpe_load_object("_wpe_renderer_backend_egl_target_interface");
82+
if (!target->base.interface) {
8383
free(target);
8484
return 0;
8585
}
8686

87-
target->interface_data = target->interface->create(target, host_fd);
87+
target->base.interface_data = target->base.interface->create(target, host_fd);
8888

8989
return target;
9090
}
9191

9292
void
9393
wpe_renderer_backend_egl_target_destroy(struct wpe_renderer_backend_egl_target* target)
9494
{
95-
target->interface->destroy(target->interface_data);
96-
target->interface_data = 0;
95+
target->base.interface->destroy(target->base.interface_data);
96+
target->base.interface_data = 0;
9797

9898
target->client = 0;
9999
target->client_data = 0;
@@ -111,31 +111,31 @@ wpe_renderer_backend_egl_target_set_client(struct wpe_renderer_backend_egl_targe
111111
void
112112
wpe_renderer_backend_egl_target_initialize(struct wpe_renderer_backend_egl_target* target, struct wpe_renderer_backend_egl* backend, uint32_t width, uint32_t height)
113113
{
114-
target->interface->initialize(target->interface_data, backend->interface_data, width, height);
114+
target->base.interface->initialize(target->base.interface_data, backend->base.interface_data, width, height);
115115
}
116116

117117
EGLNativeWindowType
118118
wpe_renderer_backend_egl_target_get_native_window(struct wpe_renderer_backend_egl_target* target)
119119
{
120-
return target->interface->get_native_window(target->interface_data);
120+
return target->base.interface->get_native_window(target->base.interface_data);
121121
}
122122

123123
void
124124
wpe_renderer_backend_egl_target_resize(struct wpe_renderer_backend_egl_target* target, uint32_t width, uint32_t height)
125125
{
126-
target->interface->resize(target->interface_data, width, height);
126+
target->base.interface->resize(target->base.interface_data, width, height);
127127
}
128128

129129
void
130130
wpe_renderer_backend_egl_target_frame_will_render(struct wpe_renderer_backend_egl_target* target)
131131
{
132-
target->interface->frame_will_render(target->interface_data);
132+
target->base.interface->frame_will_render(target->base.interface_data);
133133
}
134134

135135
void
136136
wpe_renderer_backend_egl_target_frame_rendered(struct wpe_renderer_backend_egl_target* target)
137137
{
138-
target->interface->frame_rendered(target->interface_data);
138+
target->base.interface->frame_rendered(target->base.interface_data);
139139
}
140140

141141
struct wpe_renderer_backend_egl_offscreen_target*
@@ -145,36 +145,36 @@ wpe_renderer_backend_egl_offscreen_target_create()
145145
if (!target)
146146
return 0;
147147

148-
target->interface = wpe_load_object("_wpe_renderer_backend_egl_offscreen_target_interface");
149-
if (!target->interface) {
148+
target->base.interface = wpe_load_object("_wpe_renderer_backend_egl_offscreen_target_interface");
149+
if (!target->base.interface) {
150150
free(target);
151151
return 0;
152152
}
153153

154-
target->interface_data = target->interface->create();
154+
target->base.interface_data = target->base.interface->create();
155155

156156
return target;
157157
}
158158

159159
void
160160
wpe_renderer_backend_egl_offscreen_target_destroy(struct wpe_renderer_backend_egl_offscreen_target* target)
161161
{
162-
target->interface->destroy(target->interface_data);
163-
target->interface_data = 0;
162+
target->base.interface->destroy(target->base.interface_data);
163+
target->base.interface_data = 0;
164164

165165
free(target);
166166
}
167167

168168
void
169169
wpe_renderer_backend_egl_offscreen_target_initialize(struct wpe_renderer_backend_egl_offscreen_target* target, struct wpe_renderer_backend_egl* backend)
170170
{
171-
target->interface->initialize(target->interface_data, backend->interface_data);
171+
target->base.interface->initialize(target->base.interface_data, backend->base.interface_data);
172172
}
173173

174174
EGLNativeWindowType
175175
wpe_renderer_backend_egl_offscreen_target_get_native_window(struct wpe_renderer_backend_egl_offscreen_target* target)
176176
{
177-
return target->interface->get_native_window(target->interface_data);
177+
return target->base.interface->get_native_window(target->base.interface_data);
178178
}
179179

180180
void

src/renderer-host-private.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,14 @@
2727
#ifndef wpe_renderer_host_private_h
2828
#define wpe_renderer_host_private_h
2929

30+
#include <wpe/renderer-host.h>
31+
3032
#ifdef __cplusplus
3133
extern "C" {
3234
#endif
3335

3436
struct wpe_renderer_host {
35-
const struct wpe_renderer_host_interface* interface;
36-
void* interface_data;
37+
struct wpe_renderer_host_base base;
3738
};
3839

3940
#ifdef __cplusplus

src/renderer-host.c

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,9 @@
2424
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2525
*/
2626

27-
#include <wpe/renderer-host.h>
27+
#include "renderer-host-private.h"
2828

2929
#include "loader-private.h"
30-
#include "renderer-host-private.h"
3130
#include <stdlib.h>
3231

3332
int
@@ -39,11 +38,11 @@ wpe_renderer_host_create_client()
3938
if (!s_renderer_host)
4039
return -1;
4140

42-
s_renderer_host->interface = wpe_load_object("_wpe_renderer_host_interface");
43-
s_renderer_host->interface_data = s_renderer_host->interface->create();
41+
s_renderer_host->base.interface = wpe_load_object("_wpe_renderer_host_interface");
42+
s_renderer_host->base.interface_data = s_renderer_host->base.interface->create();
4443

4544
// FIXME: atexit() should clean up the object.
4645
}
4746

48-
return s_renderer_host->interface->create_client(s_renderer_host->interface_data);
47+
return s_renderer_host->base.interface->create_client(s_renderer_host->base.interface_data);
4948
}

src/view-backend-private.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,7 @@ extern "C" {
3434
#endif
3535

3636
struct wpe_view_backend {
37-
const struct wpe_view_backend_interface* interface;
38-
void* interface_data;
37+
struct wpe_view_backend_base base;
3938

4039
const struct wpe_view_backend_client* backend_client;
4140
void* backend_client_data;

src/view-backend.c

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,9 @@
2424
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2525
*/
2626

27-
#include <wpe/view-backend.h>
27+
#include "view-backend-private.h"
2828

2929
#include "loader-private.h"
30-
#include "view-backend-private.h"
3130
#include <stdlib.h>
3231

3332

@@ -48,17 +47,17 @@ wpe_view_backend_create_with_backend_interface(struct wpe_view_backend_interface
4847
if (!backend)
4948
return 0;
5049

51-
backend->interface = interface;
52-
backend->interface_data = backend->interface->create(interface_user_data, backend);
50+
backend->base.interface = interface;
51+
backend->base.interface_data = backend->base.interface->create(interface_user_data, backend);
5352

5453
return backend;
5554
}
5655

5756
void
5857
wpe_view_backend_destroy(struct wpe_view_backend* backend)
5958
{
60-
backend->interface->destroy(backend->interface_data);
61-
backend->interface_data = 0;
59+
backend->base.interface->destroy(backend->base.interface_data);
60+
backend->base.interface_data = 0;
6261

6362
backend->backend_client = 0;
6463
backend->backend_client_data = 0;
@@ -97,13 +96,13 @@ wpe_view_backend_set_input_client(struct wpe_view_backend* backend, const struct
9796
void
9897
wpe_view_backend_initialize(struct wpe_view_backend* backend)
9998
{
100-
backend->interface->initialize(backend->interface_data);
99+
backend->base.interface->initialize(backend->base.interface_data);
101100
}
102101

103102
int
104103
wpe_view_backend_get_renderer_host_fd(struct wpe_view_backend* backend)
105104
{
106-
return backend->interface->get_renderer_host_fd(backend->interface_data);
105+
return backend->base.interface->get_renderer_host_fd(backend->base.interface_data);
107106
}
108107

109108
void

0 commit comments

Comments
 (0)