| !render_api |
| |
| %#include "render_api_platform_types.h" |
| %#include <stdbool.h> |
| %#include <stddef.h> |
| %#include <stdint.h> |
| |
| %typedef void (*OnPostFn)(void* context, int width, int height, int ydir, |
| % int format, int type, unsigned char* pixels); |
| |
| # Initialize the library and tries to load the corresponding EGL/GLES |
| # translation libraries. Must be called before anything else to ensure that |
| # everything works. Returns 0 on success, error code otherwise. |
| # If it returns an error, you cannot use the library at all. |
| int initLibrary(void); |
| |
| # Change the stream mode. This must be called before initOpenGLRenderer() |
| # |mode| is one of STREAM_DEFAULT, STREAM_UNIX, STREAM_TCP or STREAM_PIPE. |
| int setStreamMode(int mode); |
| |
| |
| # initOpenGLRenderer - initialize the OpenGL renderer process. |
| # |
| # width and height are the framebuffer dimensions that will be reported to the |
| # guest display driver. |
| # |
| # addr is a buffer of addrLen bytes that will receive the address that clients |
| # should connect to. The interpretation depends on the transport: |
| # - TCP: The buffer contains the port number as a string. The server is |
| # listening only on the loopback address. |
| # - Win32 and UNIX named pipes: The buffer contains the full path clients |
| # should connect to. |
| # |
| # This function is *NOT* thread safe and should be called first |
| # to initialize the renderer after initLibrary(). |
| int initOpenGLRenderer(int width, int height, char* addr, size_t addrLen); |
| |
| # getHardwareStrings - describe the GPU hardware and driver. |
| # The underlying GL's vendor/renderer/version strings are returned to the |
| # caller. The pointers become invalid after a call to stopOpenGLRenderer(). |
| void getHardwareStrings(const char** vendor, const char** renderer, const char** version); |
| |
| # A per-frame callback can be registered with setPostCallback(); to remove it |
| # pass NULL for both parameters. While a callback is registered, the renderer |
| # will call it just before each new frame is displayed, providing a copy of |
| # the framebuffer contents. |
| # |
| # The callback will be called from one of the renderer's threads, so will |
| # probably need synchronization on any data structures it modifies. The |
| # pixels buffer may be overwritten as soon as the callback returns; if it |
| # needs the pixels afterwards it must copy them. |
| # |
| # The pixels buffer is intentionally not const: the callback may modify the |
| # data without copying to another buffer if it wants, e.g. in-place RGBA to |
| # RGB conversion, or in-place y-inversion. |
| # |
| # Parameters are: |
| # context The pointer optionally provided when the callback was |
| # registered. The client can use this to pass whatever |
| # information it wants to the callback. |
| # width, height Dimensions of the image, in pixels. Rows are tightly |
| # packed; there is no inter-row padding. |
| # ydir Indicates row order: 1 means top-to-bottom order, -1 means |
| # bottom-to-top order. |
| # format, type Format and type GL enums, as used in glTexImage2D() or |
| # glReadPixels(), describing the pixel format. |
| # pixels The framebuffer image. |
| # |
| # In the first implementation, ydir is always -1 (bottom to top), format and |
| # type are always GL_RGBA and GL_UNSIGNED_BYTE, and the width and height will |
| # always be the same as the ones passed to initOpenGLRenderer(). |
| void setPostCallback(OnPostFn onPost, void* onPostContext); |
| |
| # createOpenGLSubwindow - |
| # Create a native subwindow which is a child of 'window' |
| # to be used for framebuffer display. |
| # x,y,width,height are the dimensions of the rendering subwindow. |
| # zRot is the rotation to apply on the framebuffer display image. |
| # |
| # Return true on success, false on failure, which can happen when using |
| # a software-only renderer like OSMesa. In this case, the client should |
| # call setPostCallback to get the content of each new frame when it is |
| # posted, and will be responsible for displaying it. |
| bool createOpenGLSubwindow(FBNativeWindowType window, int x, int y, int width, int height, float zRot); |
| |
| # destroyOpenGLSubwindow - |
| # destroys the created native subwindow. Once destroyed, |
| # Framebuffer content will not be visible until a new |
| # subwindow will be created. |
| # Return true on success, false otherwise. |
| bool destroyOpenGLSubwindow(void); |
| |
| # setOpenGLDisplayRotation - |
| # set the framebuffer display image rotation in units |
| # of degrees around the z axis |
| void setOpenGLDisplayRotation(float zRot); |
| |
| # repaintOpenGLDisplay - |
| # causes the OpenGL subwindow to get repainted with the |
| # latest framebuffer content. |
| void repaintOpenGLDisplay(void); |
| |
| # stopOpenGLRenderer - stops the OpenGL renderer process. |
| # This functions is#NOT* thread safe and should be called |
| # only if previous initOpenGLRenderer has returned true. |
| int stopOpenGLRenderer(void); |