// Auto-generated with: android/scripts/gen-entries.py --mode=functions android/scripts/tests/gen-entries/t.001/test.entries --output=/tmp/emulator-gen-entries-testing/gen-entries/t.001/test.functions
// DO NOT EDIT THIS FILE

#ifndef RENDER_API_FUNCTIONS_H
#define RENDER_API_FUNCTIONS_H

#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);
#define LIST_RENDER_API_FUNCTIONS(X) \
  X(int, initLibrary, ()) \
  X(int, setStreamMode, (int mode)) \
  X(int, initOpenGLRenderer, (int width, int height, char* addr, size_t addrLen)) \
  X(void, getHardwareStrings, (const char** vendor, const char** renderer, const char** version)) \
  X(void, setPostCallback, (OnPostFn onPost, void* onPostContext)) \
  X(bool, createOpenGLSubwindow, (FBNativeWindowType window, int x, int y, int width, int height, float zRot)) \
  X(bool, destroyOpenGLSubwindow, ()) \
  X(void, setOpenGLDisplayRotation, (float zRot)) \
  X(void, repaintOpenGLDisplay, ()) \
  X(int, stopOpenGLRenderer, ()) \


#endif  // RENDER_API_FUNCTIONS_H
