blob: 35ef9232a9ad0c75e4c94d3c319a0f64088e8b79 [file] [log] [blame]
!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);