~gnome3-team/mutter/trunk

« back to all changes in this revision

Viewing changes to cogl/cogl/cogl-wayland-server.h

  • Committer: Rui Matos
  • Date: 2016-04-27 16:36:25 UTC
  • mfrom: (0.87.3184)
  • Revision ID: git-v1:3fcbe1d3ec5c9208dde080f7e9dac24e4c379bc0
Merge cogl's cogl-1.22 branch into mutter

https://bugzilla.gnome.org/show_bug.cgi?id=760439

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
 * Cogl
 
3
 *
 
4
 * A Low Level GPU Graphics and Utilities API
 
5
 *
 
6
 * Copyright (C) 2012 Intel Corporation.
 
7
 *
 
8
 * Permission is hereby granted, free of charge, to any person
 
9
 * obtaining a copy of this software and associated documentation
 
10
 * files (the "Software"), to deal in the Software without
 
11
 * restriction, including without limitation the rights to use, copy,
 
12
 * modify, merge, publish, distribute, sublicense, and/or sell copies
 
13
 * of the Software, and to permit persons to whom the Software is
 
14
 * furnished to do so, subject to the following conditions:
 
15
 *
 
16
 * The above copyright notice and this permission notice shall be
 
17
 * included in all copies or substantial portions of the Software.
 
18
 *
 
19
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 
20
 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 
21
 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 
22
 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
 
23
 * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
 
24
 * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
 
25
 * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 
26
 * SOFTWARE.
 
27
 *
 
28
 */
 
29
 
 
30
#ifndef __COGL_WAYLAND_SERVER_H
 
31
#define __COGL_WAYLAND_SERVER_H
 
32
 
 
33
#include <wayland-server.h>
 
34
 
 
35
/* NB: this is a top-level header that can be included directly but we
 
36
 * want to be careful not to define __COGL_H_INSIDE__ when this is
 
37
 * included internally while building Cogl itself since
 
38
 * __COGL_H_INSIDE__ is used in headers to guard public vs private api
 
39
 * definitions
 
40
 */
 
41
#ifndef COGL_COMPILATION
 
42
 
 
43
/* Note: When building Cogl .gir we explicitly define
 
44
 * __COGL_H_INSIDE__ */
 
45
#ifndef __COGL_H_INSIDE__
 
46
#define __COGL_H_INSIDE__
 
47
#define __COGL_MUST_UNDEF_COGL_H_INSIDE__
 
48
#endif
 
49
 
 
50
#endif /* COGL_COMPILATION */
 
51
 
 
52
#include <cogl/cogl-context.h>
 
53
#include <cogl/cogl-texture-2d.h>
 
54
 
 
55
COGL_BEGIN_DECLS
 
56
 
 
57
/**
 
58
 * cogl_wayland_display_set_compositor_display:
 
59
 * @display: a #CoglDisplay
 
60
 * @wayland_display: A compositor's Wayland display pointer
 
61
 *
 
62
 * Informs Cogl of a compositor's Wayland display pointer. This
 
63
 * enables Cogl to register private wayland extensions required to
 
64
 * pass buffers between the clients and compositor.
 
65
 *
 
66
 * Since: 1.10
 
67
 * Stability: unstable
 
68
 */
 
69
void
 
70
cogl_wayland_display_set_compositor_display (CoglDisplay *display,
 
71
                                          struct wl_display *wayland_display);
 
72
 
 
73
/**
 
74
 * cogl_wayland_texture_2d_new_from_buffer:
 
75
 * @ctx: A #CoglContext
 
76
 * @buffer: A Wayland resource for a buffer
 
77
 * @error: A #CoglError for exceptions
 
78
 *
 
79
 * Uploads the @buffer referenced by the given Wayland resource to a
 
80
 * #CoglTexture2D. The buffer resource may refer to a wl_buffer or a
 
81
 * wl_shm_buffer.
 
82
 *
 
83
 * <note>The results are undefined for passing an invalid @buffer
 
84
 * pointer</note>
 
85
 * <note>It is undefined if future updates to @buffer outside the
 
86
 * control of Cogl will affect the allocated #CoglTexture2D. In some
 
87
 * cases the contents of the buffer are copied (such as shm buffers),
 
88
 * and in other cases the underlying storage is re-used directly (such
 
89
 * as drm buffers)</note>
 
90
 *
 
91
 * Returns: A newly allocated #CoglTexture2D, or if Cogl could not
 
92
 *          validate the @buffer in some way (perhaps because of
 
93
 *          an unsupported format) it will return %NULL and set
 
94
 *          @error.
 
95
 *
 
96
 * Since: 1.10
 
97
 * Stability: unstable
 
98
 */
 
99
CoglTexture2D *
 
100
cogl_wayland_texture_2d_new_from_buffer (CoglContext *ctx,
 
101
                                         struct wl_resource *buffer,
 
102
                                         CoglError **error);
 
103
 
 
104
/**
 
105
 * cogl_wayland_texture_set_region_from_shm_buffer:
 
106
 * @texture: a #CoglTexture
 
107
 * @width: The width of the region to copy
 
108
 * @height: The height of the region to copy
 
109
 * @shm_buffer: The source buffer
 
110
 * @src_x: The X offset within the source bufer to copy from
 
111
 * @src_y: The Y offset within the source bufer to copy from
 
112
 * @dst_x: The X offset within the texture to copy to
 
113
 * @dst_y: The Y offset within the texture to copy to
 
114
 * @level: The mipmap level of the texture to copy to
 
115
 * @error: A #CoglError to return exceptional errors
 
116
 *
 
117
 * Sets the pixels in a rectangular subregion of @texture from a
 
118
 * Wayland SHM buffer. Generally this would be used in response to
 
119
 * wl_surface.damage event in a compositor in order to update the
 
120
 * texture with the damaged region. This is just a convenience wrapper
 
121
 * around getting the SHM buffer pointer and calling
 
122
 * cogl_texture_set_region(). See that function for a description of
 
123
 * the level parameter.
 
124
 *
 
125
 * <note>Since the storage for a #CoglTexture is allocated lazily then
 
126
 * if the given @texture has not previously been allocated then this
 
127
 * api can return %FALSE and throw an exceptional @error if there is
 
128
 * not enough memory to allocate storage for @texture.</note>
 
129
 *
 
130
 * Return value: %TRUE if the subregion upload was successful, and
 
131
 *   %FALSE otherwise
 
132
 * Since: 1.18
 
133
 * Stability: unstable
 
134
 */
 
135
CoglBool
 
136
cogl_wayland_texture_set_region_from_shm_buffer (CoglTexture *texture,
 
137
                                                 int src_x,
 
138
                                                 int src_y,
 
139
                                                 int width,
 
140
                                                 int height,
 
141
                                                 struct wl_shm_buffer *
 
142
                                                   shm_buffer,
 
143
                                                 int dst_x,
 
144
                                                 int dst_y,
 
145
                                                 int level,
 
146
                                                 CoglError **error);
 
147
 
 
148
COGL_END_DECLS
 
149
 
 
150
/* The gobject introspection scanner seems to parse public headers in
 
151
 * isolation which means we need to be extra careful about how we
 
152
 * define and undefine __COGL_H_INSIDE__ used to detect when internal
 
153
 * headers are incorrectly included by developers. In the gobject
 
154
 * introspection case we have to manually define __COGL_H_INSIDE__ as
 
155
 * a commandline argument for the scanner which means we must be
 
156
 * careful not to undefine it in a header...
 
157
 */
 
158
#ifdef __COGL_MUST_UNDEF_COGL_H_INSIDE__
 
159
#undef __COGL_H_INSIDE__
 
160
#undef __COGL_MUST_UNDEF_COGL_H_INSIDE__
 
161
#endif
 
162
 
 
163
#endif /* __COGL_WAYLAND_SERVER_H */