// Auto-generated with: android/scripts/gen-entries.py --mode=funcargs android/scripts/tests/gen-entries/t.001/test.entries --output=/tmp/emulator-gen-entries-testing/gen-entries/t.001/test.funcargs
// 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), (mode)) \
  X(int, initOpenGLRenderer, (int width, int height, char* addr, size_t addrLen), (width, height, addr, addrLen)) \
  X(void, getHardwareStrings, (const char** vendor, const char** renderer, const char** version), (vendor, renderer, version)) \
  X(void, setPostCallback, (OnPostFn onPost, void* onPostContext), (onPost, onPostContext)) \
  X(bool, createOpenGLSubwindow, (FBNativeWindowType window, int x, int y, int width, int height, float zRot), (window, x, y, width, height, zRot)) \
  X(bool, destroyOpenGLSubwindow, (), ()) \
  X(void, setOpenGLDisplayRotation, (float zRot), (zRot)) \
  X(void, repaintOpenGLDisplay, (), ()) \
  X(int, stopOpenGLRenderer, (), ()) \


#endif  // RENDER_API_FUNCTIONS_H
