native_window.h revision ff415149dc5a83a4eb5960daf2cb2c310ef89847
1e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/*
2e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Copyright (C) 2010 The Android Open Source Project
3e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian *
4e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
5e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * you may not use this file except in compliance with the License.
6e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * You may obtain a copy of the License at
7e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian *
8e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
9e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian *
10e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Unless required by applicable law or agreed to in writing, software
11e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
12e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * See the License for the specific language governing permissions and
14e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * limitations under the License.
15e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */
16e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
17bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/**
18bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine * @addtogroup NativeActivity Native Activity
19bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine * @{
20bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine */
21bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine
22bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/**
23bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine * @file native_window.h
24bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine */
25bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine
26e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#ifndef ANDROID_NATIVE_WINDOW_H
27e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#define ANDROID_NATIVE_WINDOW_H
28e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
29494ed550f5aea1332984fb9f0f11036fc58bd716Dan Albert#include <sys/cdefs.h>
30494ed550f5aea1332984fb9f0f11036fc58bd716Dan Albert
31e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#include <android/rect.h>
32e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
33e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#ifdef __cplusplus
34e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianextern "C" {
35e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#endif
36e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
37bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/**
38e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Pixel formats that a window can use.
39e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */
40e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianenum {
41ff415149dc5a83a4eb5960daf2cb2c310ef89847Romain Guy    // NOTE: these values must match the values from graphics/common/x.x/types.hal
42ff415149dc5a83a4eb5960daf2cb2c310ef89847Romain Guy
43bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine    /** Red: 8 bits, Green: 8 bits, Blue: 8 bits, Alpha: 8 bits. **/
44e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    WINDOW_FORMAT_RGBA_8888          = 1,
45bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine    /** Red: 8 bits, Green: 8 bits, Blue: 8 bits, Unused: 8 bits. **/
46e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    WINDOW_FORMAT_RGBX_8888          = 2,
47bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine    /** Red: 5 bits, Green: 6 bits, Blue: 5 bits. **/
48e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    WINDOW_FORMAT_RGB_565            = 4,
49ff415149dc5a83a4eb5960daf2cb2c310ef89847Romain Guy    /** Red: 16 bits, Green: 16 bits, Blue: 16 bits, Alpha: 16 bits. **/
50ff415149dc5a83a4eb5960daf2cb2c310ef89847Romain Guy    WINDOW_FORMAT_RGBA_FP16          = 0x16,
51ff415149dc5a83a4eb5960daf2cb2c310ef89847Romain Guy    /** Red: 16 bits, Green: 16 bits, Blue: 16 bits, Unused: 16 bits. **/
52ff415149dc5a83a4eb5960daf2cb2c310ef89847Romain Guy    WINDOW_FORMAT_RGBX_FP16          = 0x17,
53e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian};
54e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
55e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianstruct ANativeWindow;
56bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/**
57bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine * {@link ANativeWindow} is opaque type that provides access to a native window.
58bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine *
59bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine * A pointer can be obtained using ANativeWindow_fromSurface().
60bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine */
61e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopiantypedef struct ANativeWindow ANativeWindow;
62e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
63bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/**
64bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine * {@link ANativeWindow} is a struct that represents a windows buffer.
65bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine *
66bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine * A pointer can be obtained using ANativeWindow_lock().
67bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine */
68e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopiantypedef struct ANativeWindow_Buffer {
69e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    // The number of pixels that are show horizontally.
70e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    int32_t width;
71e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
72e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    // The number of pixels that are shown vertically.
73e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    int32_t height;
74e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
75e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    // The number of *pixels* that a line in the buffer takes in
76e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    // memory.  This may be >= width.
77e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    int32_t stride;
78e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
79e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    // The format of the buffer.  One of WINDOW_FORMAT_*
80e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    int32_t format;
81e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
82e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    // The actual bits.
83e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    void* bits;
84bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine
85e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    // Do not touch.
86e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian    uint32_t reserved[6];
87e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian} ANativeWindow_Buffer;
88e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
89e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/**
90e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Acquire a reference on the given ANativeWindow object.  This prevents the object
91e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * from being deleted until the reference is removed.
92e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */
93e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianvoid ANativeWindow_acquire(ANativeWindow* window);
94e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
95e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/**
96e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Remove a reference that was previously acquired with ANativeWindow_acquire().
97e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */
98e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianvoid ANativeWindow_release(ANativeWindow* window);
99e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
100bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/**
101e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Return the current width in pixels of the window surface.  Returns a
102e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * negative value on error.
103e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */
104e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_getWidth(ANativeWindow* window);
105e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
106bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/**
107e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Return the current height in pixels of the window surface.  Returns a
108e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * negative value on error.
109e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */
110e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_getHeight(ANativeWindow* window);
111e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
112bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/**
113e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Return the current pixel format of the window surface.  Returns a
114e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * negative value on error.
115e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */
116e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_getFormat(ANativeWindow* window);
117e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
118bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/**
119e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Change the format and size of the window buffers.
120e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian *
121e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * The width and height control the number of pixels in the buffers, not the
122e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * dimensions of the window on screen.  If these are different than the
123e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * window's physical size, then it buffer will be scaled to match that size
124e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * when compositing it to the screen.
125e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian *
126e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * For all of these parameters, if 0 is supplied then the window's base
127e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * value will come back in force.
128e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian *
129e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * width and height must be either both zero or both non-zero.
130e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian *
131e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */
132e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_setBuffersGeometry(ANativeWindow* window,
133e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian        int32_t width, int32_t height, int32_t format);
134e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
135e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/**
136e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Lock the window's next drawing surface for writing.
137e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * inOutDirtyBounds is used as an in/out parameter, upon entering the
138e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * function, it contains the dirty region, that is, the region the caller
139e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * intends to redraw. When the function returns, inOutDirtyBounds is updated
140e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * with the actual area the caller needs to redraw -- this region is often
141e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * extended by ANativeWindow_lock.
142e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */
143e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_lock(ANativeWindow* window, ANativeWindow_Buffer* outBuffer,
144e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian        ARect* inOutDirtyBounds);
145e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
146e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian/**
147e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * Unlock the window's drawing surface after previously locking it,
148e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian * posting the new buffer to the display.
149e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian */
150e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopianint32_t ANativeWindow_unlockAndPost(ANativeWindow* window);
151e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
152e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#ifdef __cplusplus
153e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian};
154e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#endif
155e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian
156e1c61d3cc8458ce9a15d8109f728e60f5248939dMathias Agopian#endif // ANDROID_NATIVE_WINDOW_H
157bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine
158bf6d5e012cd9b15568c2351831f3349cf564bf18Johan Euphrosine/** @} */
159