raylib-lua-legacy/src/raylib.lua

1423 lines
34 KiB
Lua

--[[
Copyright (C) 2020 Astie Teddy
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
]]
print "RAYLUA: Raylua boot script"
print("RAYLUA: Lua Version: " .. _VERSION)
if jit then
print("RAYLUA: Lua JIT: " .. jit.version)
end
local ffi = require "ffi"
local C = ffi.C
local rl = {}
setmetatable(rl, rl)
-- structs definition
ffi.cdef [[
typedef struct Vector2 {
float x;
float y;
} Vector2;
typedef struct Vector3 {
float x;
float y;
float z;
} Vector3;
typedef struct Vector4 {
float x;
float y;
float z;
float w;
} Vector4;
typedef Vector4 Quaternion;
typedef struct Matrix {
float m0, m4, m8, m12;
float m1, m5, m9, m13;
float m2, m6, m10, m14;
float m3, m7, m11, m15;
} Matrix;
typedef struct Color {
unsigned char r;
unsigned char g;
unsigned char b;
unsigned char a;
} Color;
typedef struct Rectangle {
float x;
float y;
float width;
float height;
} Rectangle;
typedef struct Image {
void *data;
int width;
int height;
int mipmaps;
int format;
} Image;
typedef struct Texture {
unsigned int id;
int width;
int height;
int mipmaps;
int format;
} Texture;
typedef Texture Texture2D;
typedef Texture TextureCubemap;
typedef struct RenderTexture {
unsigned int id;
Texture texture;
Texture depth;
} RenderTexture;
typedef RenderTexture RenderTexture2D;
typedef struct NPatchInfo {
Rectangle sourceRec;
int left;
int top;
int right;
int bottom;
int layout;
} NPatchInfo;
typedef struct GlyphInfo {
int value;
int offsetX;
int offsetY;
int advanceX;
Image image;
} GlyphInfo;
typedef struct Font {
int baseSize;
int glyphCount;
int glyphPadding;
Texture2D texture;
Rectangle *recs;
GlyphInfo *glyphs;
} Font;
typedef Font SpriteFont;
typedef struct Camera3D {
Vector3 position;
Vector3 target;
Vector3 up;
float fovy;
int projection;
} Camera3D;
typedef Camera3D Camera;
typedef struct Camera2D {
Vector2 offset;
Vector2 target;
float rotation;
float zoom;
} Camera2D;
typedef struct Mesh {
int vertexCount;
int triangleCount;
float *vertices;
float *texcoords;
float *texcoords2;
float *normals;
float *tangents;
unsigned char *colors;
unsigned short *indices;
float *animVertices;
float *animNormals;
int *boneIds;
float *boneWeights;
unsigned int vaoId;
unsigned int *vboId;
} Mesh;
typedef struct Shader {
unsigned int id;
int *locs;
} Shader;
typedef struct MaterialMap {
Texture2D texture;
Color color;
float value;
} MaterialMap;
typedef struct Material {
Shader shader;
MaterialMap *maps;
float params[4];
} Material;
typedef struct Transform {
Vector3 translation;
Quaternion rotation;
Vector3 scale;
} Transform;
typedef struct BoneInfo {
char name[32];
int parent;
} BoneInfo;
typedef struct Model {
Matrix transform;
int meshCount;
int materialCount;
Mesh *meshes;
Material *materials;
int *meshMaterial;
int boneCount;
BoneInfo *bones;
Transform *bindPose;
} Model;
typedef struct ModelAnimation {
int boneCount;
int frameCount;
BoneInfo *bones;
Transform **framePoses;
} ModelAnimation;
typedef struct Ray {
Vector3 position;
Vector3 direction;
} Ray;
typedef struct RayCollision {
bool hit;
float distance;
Vector3 point;
Vector3 normal;
} RayCollision;
typedef struct BoundingBox {
Vector3 min;
Vector3 max;
} BoundingBox;
typedef struct Wave {
unsigned int frameCount;
unsigned int sampleRate;
unsigned int sampleSize;
unsigned int channels;
void *data;
} Wave;
typedef struct rAudioBuffer rAudioBuffer;
typedef struct rAudioProcessor rAudioProcessor;
typedef struct AudioStream {
rAudioBuffer *buffer;
rAudioProcessor *processor;
unsigned int sampleRate;
unsigned int sampleSize;
unsigned int channels;
} AudioStream;
typedef struct Sound {
AudioStream stream;
unsigned int frameCount;
} Sound;
typedef struct Music {
AudioStream stream;
unsigned int frameCount;
bool looping;
int ctxType;
void *ctxData;
} Music;
typedef struct VrDeviceInfo {
int hResolution;
int vResolution;
float hScreenSize;
float vScreenSize;
float vScreenCenter;
float eyeToScreenDistance;
float lensSeparationDistance;
float interpupillaryDistance;
float lensDistortionValues[4];
float chromaAbCorrection[4];
} VrDeviceInfo;
typedef struct VrStereoConfig {
Matrix projection[2];
Matrix viewOffset[2];
float leftLensCenter[2];
float rightLensCenter[2];
float leftScreenCenter[2];
float rightScreenCenter[2];
float scale[2];
float scaleIn[2];
} VrStereoConfig;
typedef enum {
FLAG_VSYNC_HINT = 0x00000040,
FLAG_FULLSCREEN_MODE = 0x00000002,
FLAG_WINDOW_RESIZABLE = 0x00000004,
FLAG_WINDOW_UNDECORATED = 0x00000008,
FLAG_WINDOW_HIDDEN = 0x00000080,
FLAG_WINDOW_MINIMIZED = 0x00000200,
FLAG_WINDOW_MAXIMIZED = 0x00000400,
FLAG_WINDOW_UNFOCUSED = 0x00000800,
FLAG_WINDOW_TOPMOST = 0x00001000,
FLAG_WINDOW_ALWAYS_RUN = 0x00000100,
FLAG_WINDOW_TRANSPARENT = 0x00000010,
FLAG_WINDOW_HIGHDPI = 0x00002000,
FLAG_MSAA_4X_HINT = 0x00000020,
FLAG_INTERLACED_HINT = 0x00010000
} ConfigFlags;
typedef enum {
LOG_ALL = 0,
LOG_TRACE,
LOG_DEBUG,
LOG_INFO,
LOG_WARNING,
LOG_ERROR,
LOG_FATAL,
LOG_NONE
} TraceLogLevel;
typedef enum {
KEY_NULL = 0,
KEY_APOSTROPHE = 39,
KEY_COMMA = 44,
KEY_MINUS = 45,
KEY_PERIOD = 46,
KEY_SLASH = 47,
KEY_ZERO = 48,
KEY_ONE = 49,
KEY_TWO = 50,
KEY_THREE = 51,
KEY_FOUR = 52,
KEY_FIVE = 53,
KEY_SIX = 54,
KEY_SEVEN = 55,
KEY_EIGHT = 56,
KEY_NINE = 57,
KEY_SEMICOLON = 59,
KEY_EQUAL = 61,
KEY_A = 65,
KEY_B = 66,
KEY_C = 67,
KEY_D = 68,
KEY_E = 69,
KEY_F = 70,
KEY_G = 71,
KEY_H = 72,
KEY_I = 73,
KEY_J = 74,
KEY_K = 75,
KEY_L = 76,
KEY_M = 77,
KEY_N = 78,
KEY_O = 79,
KEY_P = 80,
KEY_Q = 81,
KEY_R = 82,
KEY_S = 83,
KEY_T = 84,
KEY_U = 85,
KEY_V = 86,
KEY_W = 87,
KEY_X = 88,
KEY_Y = 89,
KEY_Z = 90,
KEY_LEFT_BRACKET = 91,
KEY_BACKSLASH = 92,
KEY_RIGHT_BRACKET = 93,
KEY_GRAVE = 96,
KEY_SPACE = 32,
KEY_ESCAPE = 256,
KEY_ENTER = 257,
KEY_TAB = 258,
KEY_BACKSPACE = 259,
KEY_INSERT= 260,
KEY_DELETE= 261,
KEY_RIGHT = 262,
KEY_LEFT = 263,
KEY_DOWN = 264,
KEY_UP = 265,
KEY_PAGE_UP = 266,
KEY_PAGE_DOWN = 267,
KEY_HOME = 268,
KEY_END = 269,
KEY_CAPS_LOCK = 280,
KEY_SCROLL_LOCK = 281,
KEY_NUM_LOCK = 282,
KEY_PRINT_SCREEN = 283,
KEY_PAUSE = 284,
KEY_F1 = 290,
KEY_F2 = 291,
KEY_F3 = 292,
KEY_F4 = 293,
KEY_F5 = 294,
KEY_F6 = 295,
KEY_F7 = 296,
KEY_F8 = 297,
KEY_F9 = 298,
KEY_F10 = 299,
KEY_F11 = 300,
KEY_F12 = 301,
KEY_LEFT_SHIFT = 340,
KEY_LEFT_CONTROL = 341,
KEY_LEFT_ALT = 342,
KEY_LEFT_SUPER = 343,
KEY_RIGHT_SHIFT = 344,
KEY_RIGHT_CONTROL = 345,
KEY_RIGHT_ALT = 346,
KEY_RIGHT_SUPER = 347,
KEY_KB_MENU = 348,
KEY_KP_0 = 320,
KEY_KP_1 = 321,
KEY_KP_2 = 322,
KEY_KP_3 = 323,
KEY_KP_4 = 324,
KEY_KP_5 = 325,
KEY_KP_6 = 326,
KEY_KP_7 = 327,
KEY_KP_8 = 328,
KEY_KP_9 = 329,
KEY_KP_DECIMAL = 330,
KEY_KP_DIVIDE = 331,
KEY_KP_MULTIPLY = 332,
KEY_KP_SUBTRACT = 333,
KEY_KP_ADD = 334,
KEY_KP_ENTER = 335,
KEY_KP_EQUAL = 336,
/* Android key buttons */
KEY_BACK = 4,
KEY_MENU = 82,
KEY_VOLUME_UP = 24,
KEY_VOLUME_DOWN = 25
} KeyboardKey;
typedef enum {
MOUSE_BUTTON_LEFT = 0,
MOUSE_BUTTON_RIGHT = 1,
MOUSE_BUTTON_MIDDLE = 2,
MOUSE_BUTTON_SIDE = 3,
MOUSE_BUTTON_EXTRA = 4,
MOUSE_BUTTON_FORWARD = 5,
MOUSE_BUTTON_BACK = 6
} MouseButton;
typedef enum {
MOUSE_CURSOR_DEFAULT = 0,
MOUSE_CURSOR_ARROW = 1,
MOUSE_CURSOR_IBEAM = 2,
MOUSE_CURSOR_CROSSHAIR = 3,
MOUSE_CURSOR_POINTING_HAND = 4,
MOUSE_CURSOR_RESIZE_EW = 5,
MOUSE_CURSOR_RESIZE_NS = 6,
MOUSE_CURSOR_RESIZE_NWSE = 7,
MOUSE_CURSOR_RESIZE_NESW = 8,
MOUSE_CURSOR_RESIZE_ALL = 9,
MOUSE_CURSOR_NOT_ALLOWED = 10
} MouseCursor;
typedef enum {
GAMEPAD_BUTTON_UNKNOWN = 0,
GAMEPAD_BUTTON_LEFT_FACE_UP,
GAMEPAD_BUTTON_LEFT_FACE_RIGHT,
GAMEPAD_BUTTON_LEFT_FACE_DOWN,
GAMEPAD_BUTTON_LEFT_FACE_LEFT,
GAMEPAD_BUTTON_RIGHT_FACE_UP,
GAMEPAD_BUTTON_RIGHT_FACE_RIGHT,
GAMEPAD_BUTTON_RIGHT_FACE_DOWN,
GAMEPAD_BUTTON_RIGHT_FACE_LEFT,
GAMEPAD_BUTTON_LEFT_TRIGGER_1,
GAMEPAD_BUTTON_LEFT_TRIGGER_2,
GAMEPAD_BUTTON_RIGHT_TRIGGER_1,
GAMEPAD_BUTTON_RIGHT_TRIGGER_2,
GAMEPAD_BUTTON_MIDDLE_LEFT,
GAMEPAD_BUTTON_MIDDLE,
GAMEPAD_BUTTON_MIDDLE_RIGHT,
GAMEPAD_BUTTON_LEFT_THUMB,
GAMEPAD_BUTTON_RIGHT_THUMB
} GamepadButton;
typedef enum {
GAMEPAD_AXIS_UNKNOWN = 0,
GAMEPAD_AXIS_LEFT_X,
GAMEPAD_AXIS_LEFT_Y,
GAMEPAD_AXIS_RIGHT_X,
GAMEPAD_AXIS_RIGHT_Y,
GAMEPAD_AXIS_LEFT_TRIGGER,
GAMEPAD_AXIS_RIGHT_TRIGGER
} GamepadAxis;
typedef enum {
MATERIAL_MAP_ALBEDO = 0,
MATERIAL_MAP_METALNESS,
MATERIAL_MAP_NORMAL,
MATERIAL_MAP_ROUGHNESS,
MATERIAL_MAP_OCCLUSION,
MATERIAL_MAP_EMISSION,
MATERIAL_MAP_HEIGHT,
MATERIAL_MAP_CUBEMAP,
MATERIAL_MAP_IRRADIANCE,
MATERIAL_MAP_PREFILTER,
MATERIAL_MAP_BRDF,
} MaterialMapIndex;
typedef enum {
SHADER_LOC_VERTEX_POSITION = 0,
SHADER_LOC_VERTEX_TEXCOORD01,
SHADER_LOC_VERTEX_TEXCOORD02,
SHADER_LOC_VERTEX_NORMAL,
SHADER_LOC_VERTEX_TANGENT,
SHADER_LOC_VERTEX_COLOR,
SHADER_LOC_MATRIX_MVP,
SHADER_LOC_MATRIX_VIEW,
SHADER_LOC_MATRIX_PROJECTION,
SHADER_LOC_MATRIX_MODEL,
SHADER_LOC_MATRIX_NORMAL,
SHADER_LOC_VECTOR_VIEW,
SHADER_LOC_COLOR_DIFFUSE,
SHADER_LOC_COLOR_SPECULAR,
SHADER_LOC_COLOR_AMBIENT,
SHADER_LOC_MAP_ALBEDO,
SHADER_LOC_MAP_METALNESS,
SHADER_LOC_MAP_NORMAL,
SHADER_LOC_MAP_ROUGHNESS,
SHADER_LOC_MAP_OCCLUSION,
SHADER_LOC_MAP_EMISSION,
SHADER_LOC_MAP_HEIGHT,
SHADER_LOC_MAP_CUBEMAP,
SHADER_LOC_MAP_IRRADIANCE,
SHADER_LOC_MAP_PREFILTER,
SHADER_LOC_MAP_BRDF
} ShaderLocationIndex;
typedef enum {
SHADER_UNIFORM_FLOAT = 0,
SHADER_UNIFORM_VEC2,
SHADER_UNIFORM_VEC3,
SHADER_UNIFORM_VEC4,
SHADER_UNIFORM_INT,
SHADER_UNIFORM_IVEC2,
SHADER_UNIFORM_IVEC3,
SHADER_UNIFORM_IVEC4,
SHADER_UNIFORM_SAMPLER2D
} ShaderUniformDataType;
typedef enum {
SHADER_ATTRIB_FLOAT = 0,
SHADER_ATTRIB_VEC2,
SHADER_ATTRIB_VEC3,
SHADER_ATTRIB_VEC4
} ShaderAttributeDataType;
typedef enum {
PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1,
PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA,
PIXELFORMAT_UNCOMPRESSED_R5G6B5,
PIXELFORMAT_UNCOMPRESSED_R8G8B8,
PIXELFORMAT_UNCOMPRESSED_R5G5B5A1,
PIXELFORMAT_UNCOMPRESSED_R4G4B4A4,
PIXELFORMAT_UNCOMPRESSED_R8G8B8A8,
PIXELFORMAT_UNCOMPRESSED_R32,
PIXELFORMAT_UNCOMPRESSED_R32G32B32,
PIXELFORMAT_UNCOMPRESSED_R32G32B32A32,
PIXELFORMAT_COMPRESSED_DXT1_RGB,
PIXELFORMAT_COMPRESSED_DXT1_RGBA,
PIXELFORMAT_COMPRESSED_DXT3_RGBA,
PIXELFORMAT_COMPRESSED_DXT5_RGBA,
PIXELFORMAT_COMPRESSED_ETC1_RGB,
PIXELFORMAT_COMPRESSED_ETC2_RGB,
PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA,
PIXELFORMAT_COMPRESSED_PVRT_RGB,
PIXELFORMAT_COMPRESSED_PVRT_RGBA,
PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA,
PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA
} PixelFormat;
typedef enum {
TEXTURE_FILTER_POINT = 0,
TEXTURE_FILTER_BILINEAR,
TEXTURE_FILTER_TRILINEAR,
TEXTURE_FILTER_ANISOTROPIC_4X,
TEXTURE_FILTER_ANISOTROPIC_8X,
TEXTURE_FILTER_ANISOTROPIC_16X,
} TextureFilter;
typedef enum {
TEXTURE_WRAP_REPEAT = 0,
TEXTURE_WRAP_CLAMP,
TEXTURE_WRAP_MIRROR_REPEAT,
TEXTURE_WRAP_MIRROR_CLAMP
} TextureWrapMode;
typedef enum {
CUBEMAP_LAYOUT_AUTO_DETECT = 0,
CUBEMAP_LAYOUT_LINE_VERTICAL,
CUBEMAP_LAYOUT_LINE_HORIZONTAL,
CUBEMAP_LAYOUT_CROSS_THREE_BY_FOUR,
CUBEMAP_LAYOUT_CROSS_FOUR_BY_THREE,
CUBEMAP_LAYOUT_PANORAMA
} CubemapLayout;
typedef enum {
FONT_DEFAULT = 0,
FONT_BITMAP,
FONT_SDF
} FontType;
typedef enum {
BLEND_ALPHA = 0,
BLEND_ADDITIVE,
BLEND_MULTIPLIED,
BLEND_ADD_COLORS,
BLEND_SUBTRACT_COLORS,
BLEND_ALPHA_PREMUL,
BLEND_CUSTOM
} BlendMode;
typedef enum {
GESTURE_NONE = 0,
GESTURE_TAP = 1,
GESTURE_DOUBLETAP = 2,
GESTURE_HOLD = 4,
GESTURE_DRAG = 8,
GESTURE_SWIPE_RIGHT = 16,
GESTURE_SWIPE_LEFT = 32,
GESTURE_SWIPE_UP = 64,
GESTURE_SWIPE_DOWN = 128,
GESTURE_PINCH_IN = 256,
GESTURE_PINCH_OUT = 512
} Gesture;
typedef enum {
CAMERA_CUSTOM = 0,
CAMERA_FREE,
CAMERA_ORBITAL,
CAMERA_FIRST_PERSON,
CAMERA_THIRD_PERSON
} CameraMode;
typedef enum {
CAMERA_PERSPECTIVE = 0,
CAMERA_ORTHOGRAPHIC
} CameraProjection;
typedef enum {
NPATCH_NINE_PATCH = 0,
NPATCH_THREE_PATCH_VERTICAL,
NPATCH_THREE_PATCH_HORIZONTAL
} NPatchLayout;
typedef void (*TraceLogCallback)(int logLevel, const char *text, va_list args);
typedef void (*AudioCallback)(void *bufferData, unsigned int frames);
]]
-- raymath cdef
ffi.cdef [[
typedef struct float3 { float v[3]; } float3;
typedef struct float16 { float v[16]; } float16;
]]
-- rlgl cdef
ffi.cdef [[
typedef enum {
OPENGL_11 = 1,
OPENGL_21,
OPENGL_33,
OPENGL_43,
OPENGL_ES_20
} rlGlVersion;
typedef enum {
RL_LOG_ALL = 0,
RL_LOG_TRACE,
RL_LOG_DEBUG,
RL_LOG_INFO,
RL_LOG_WARNING,
RL_LOG_ERROR,
RL_LOG_FATAL,
RL_LOG_NONE
} rlTraceLogLevel;
typedef enum {
RL_PIXELFORMAT_UNCOMPRESSED_GRAYSCALE = 1,
RL_PIXELFORMAT_UNCOMPRESSED_GRAY_ALPHA,
RL_PIXELFORMAT_UNCOMPRESSED_R5G6B5,
RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8,
RL_PIXELFORMAT_UNCOMPRESSED_R5G5B5A1,
RL_PIXELFORMAT_UNCOMPRESSED_R4G4B4A4,
RL_PIXELFORMAT_UNCOMPRESSED_R8G8B8A8,
RL_PIXELFORMAT_UNCOMPRESSED_R32,
RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32,
RL_PIXELFORMAT_UNCOMPRESSED_R32G32B32A32,
RL_PIXELFORMAT_COMPRESSED_DXT1_RGB,
RL_PIXELFORMAT_COMPRESSED_DXT1_RGBA,
RL_PIXELFORMAT_COMPRESSED_DXT3_RGBA,
RL_PIXELFORMAT_COMPRESSED_DXT5_RGBA,
RL_PIXELFORMAT_COMPRESSED_ETC1_RGB,
RL_PIXELFORMAT_COMPRESSED_ETC2_RGB,
RL_PIXELFORMAT_COMPRESSED_ETC2_EAC_RGBA,
RL_PIXELFORMAT_COMPRESSED_PVRT_RGB,
RL_PIXELFORMAT_COMPRESSED_PVRT_RGBA,
RL_PIXELFORMAT_COMPRESSED_ASTC_4x4_RGBA,
RL_PIXELFORMAT_COMPRESSED_ASTC_8x8_RGBA
} rlPixelFormat;
typedef enum {
RL_TEXTURE_FILTER_POINT = 0,
RL_TEXTURE_FILTER_BILINEAR,
RL_TEXTURE_FILTER_TRILINEAR,
RL_TEXTURE_FILTER_ANISOTROPIC_4X,
RL_TEXTURE_FILTER_ANISOTROPIC_8X,
RL_TEXTURE_FILTER_ANISOTROPIC_16X,
} rlTextureFilter;
typedef enum {
RL_BLEND_ALPHA = 0,
RL_BLEND_ADDITIVE,
RL_BLEND_MULTIPLIED,
RL_BLEND_ADD_COLORS,
RL_BLEND_SUBTRACT_COLORS,
RL_BLEND_ALPHA_PREMUL,
RL_BLEND_CUSTOM
} rlBlendMode;
typedef enum {
RL_SHADER_LOC_VERTEX_POSITION = 0,
RL_SHADER_LOC_VERTEX_TEXCOORD01,
RL_SHADER_LOC_VERTEX_TEXCOORD02,
RL_SHADER_LOC_VERTEX_NORMAL,
RL_SHADER_LOC_VERTEX_TANGENT,
RL_SHADER_LOC_VERTEX_COLOR,
RL_SHADER_LOC_MATRIX_MVP,
RL_SHADER_LOC_MATRIX_VIEW,
RL_SHADER_LOC_MATRIX_PROJECTION,
RL_SHADER_LOC_MATRIX_MODEL,
RL_SHADER_LOC_MATRIX_NORMAL,
RL_SHADER_LOC_VECTOR_VIEW,
RL_SHADER_LOC_COLOR_DIFFUSE,
RL_SHADER_LOC_COLOR_SPECULAR,
RL_SHADER_LOC_COLOR_AMBIENT,
RL_SHADER_LOC_MAP_ALBEDO,
RL_SHADER_LOC_MAP_METALNESS,
RL_SHADER_LOC_MAP_NORMAL,
RL_SHADER_LOC_MAP_ROUGHNESS,
RL_SHADER_LOC_MAP_OCCLUSION,
RL_SHADER_LOC_MAP_EMISSION,
RL_SHADER_LOC_MAP_HEIGHT,
RL_SHADER_LOC_MAP_CUBEMAP,
RL_SHADER_LOC_MAP_IRRADIANCE,
RL_SHADER_LOC_MAP_PREFILTER,
RL_SHADER_LOC_MAP_BRDF
} rlShaderLocationIndex;
typedef enum {
RL_SHADER_UNIFORM_FLOAT = 0,
RL_SHADER_UNIFORM_VEC2,
RL_SHADER_UNIFORM_VEC3,
RL_SHADER_UNIFORM_VEC4,
RL_SHADER_UNIFORM_INT,
RL_SHADER_UNIFORM_IVEC2,
RL_SHADER_UNIFORM_IVEC3,
RL_SHADER_UNIFORM_IVEC4,
RL_SHADER_UNIFORM_SAMPLER2D
} rlShaderUniformDataType;
typedef enum {
RL_SHADER_ATTRIB_FLOAT = 0,
RL_SHADER_ATTRIB_VEC2,
RL_SHADER_ATTRIB_VEC3,
RL_SHADER_ATTRIB_VEC4
} rlShaderAttributeDataType;
typedef enum {
RL_ATTACHMENT_COLOR_CHANNEL0 = 0,
RL_ATTACHMENT_COLOR_CHANNEL1,
RL_ATTACHMENT_COLOR_CHANNEL2,
RL_ATTACHMENT_COLOR_CHANNEL3,
RL_ATTACHMENT_COLOR_CHANNEL4,
RL_ATTACHMENT_COLOR_CHANNEL5,
RL_ATTACHMENT_COLOR_CHANNEL6,
RL_ATTACHMENT_COLOR_CHANNEL7,
RL_ATTACHMENT_DEPTH = 100,
RL_ATTACHMENT_STENCIL = 200,
} rlFramebufferAttachType;
typedef enum {
RL_ATTACHMENT_CUBEMAP_POSITIVE_X = 0,
RL_ATTACHMENT_CUBEMAP_NEGATIVE_X,
RL_ATTACHMENT_CUBEMAP_POSITIVE_Y,
RL_ATTACHMENT_CUBEMAP_NEGATIVE_Y,
RL_ATTACHMENT_CUBEMAP_POSITIVE_Z,
RL_ATTACHMENT_CUBEMAP_NEGATIVE_Z,
RL_ATTACHMENT_TEXTURE2D = 100,
RL_ATTACHMENT_RENDERBUFFER = 200,
} rlFramebufferAttachTextureType;
/* NOTE: Assumes non-ES OpenGL. */
typedef struct rlVertexBuffer {
int elementCount;
float *vertices;
float *texcoords;
unsigned char *colors;
unsigned int *indices;
unsigned int vaoId;
unsigned int vboId[4];
} rlVertexBuffer;
typedef struct rlDrawCall {
int mode;
int vertexCount;
int vertexAlignment;
//unsigned int vaoId;
//unsigned int shaderId;
unsigned int textureId;
//Matrix projection;
//Matrix modelview;
} rlDrawCall;
typedef struct rlRenderBatch {
int bufferCount;
int currentBuffer;
rlVertexBuffer *vertexBuffer;
rlDrawCall *draws;
int drawCounter;
float currentDepth;
} rlRenderBatch;
]]
-- rlgl defines
rl.RL_TEXTURE_WRAP_S = 0x2802
rl.RL_TEXTURE_WRAP_T = 0x2803
rl.RL_TEXTURE_MAG_FILTER = 0x2800
rl.RL_TEXTURE_MIN_FILTER = 0x2801
rl.RL_TEXTURE_FILTER_NEAREST = 0x2600
rl.RL_TEXTURE_FILTER_LINEAR = 0x2601
rl.RL_TEXTURE_FILTER_MIP_NEAREST = 0x2700
rl.RL_TEXTURE_FILTER_NEAREST_MIP_LINEAR = 0x2702
rl.RL_TEXTURE_FILTER_LINEAR_MIP_NEAREST = 0x2701
rl.RL_TEXTURE_FILTER_MIP_LINEAR = 0x2703
rl.RL_TEXTURE_FILTER_ANISOTROPIC = 0x3000
rl.RL_TEXTURE_WRAP_REPEAT = 0x2901
rl.RL_TEXTURE_WRAP_CLAMP = 0x812F
rl.RL_TEXTURE_WRAP_MIRROR_REPEAT = 0x8370
rl.RL_TEXTURE_WRAP_MIRROR_CLAMP = 0x8742
rl.RL_MODELVIEW = 0x1700
rl.RL_PROJECTION = 0x1701
rl.RL_TEXTURE = 0x1702
rl.RL_LINES = 0x0001
rl.RL_TRIANGLES = 0x0004
rl.RL_QUADS = 0x0007
rl.RL_UNSIGNED_BYTE = 0x1401
rl.RL_FLOAT = 0x1406
rl.RL_STREAM_DRAW = 0x88E0
rl.RL_STREAM_READ = 0x88E1
rl.RL_STREAM_COPY = 0x88E2
rl.RL_STATIC_DRAW = 0x88E4
rl.RL_STATIC_READ = 0x88E5
rl.RL_STATIC_COPY = 0x88E6
rl.RL_DYNAMIC_DRAW = 0x88E8
rl.RL_DYNAMIC_READ = 0x88E9
rl.RL_DYNAMIC_COPY = 0x88EA
rl.RL_FRAGMENT_SHADER = 0x8B30
rl.RL_VERTEX_SHADER = 0x8B31
rl.RL_COMPUTE_SHADER = 0x91B9
-- Physac cdef
ffi.cdef [[
typedef enum PhysicsShapeType { PHYSICS_CIRCLE = 0, PHYSICS_POLYGON } PhysicsShapeType;
typedef struct PhysicsBodyData *PhysicsBody;
typedef struct Matrix2x2 {
float m00;
float m01;
float m10;
float m11;
} Matrix2x2;
typedef struct PhysicsVertexData {
unsigned int vertexCount;
Vector2 positions[24];
Vector2 normals[24];
} PhysicsVertexData;
typedef struct PhysicsShape {
PhysicsShapeType type;
PhysicsBody body;
PhysicsVertexData vertexData;
float radius;
Matrix2x2 transform;
} PhysicsShape;
typedef struct PhysicsBodyData {
unsigned int id;
bool enabled;
Vector2 position;
Vector2 velocity;
Vector2 force;
float angularVelocity;
float torque;
float orient;
float inertia;
float inverseInertia;
float mass;
float inverseMass;
float staticFriction;
float dynamicFriction;
float restitution;
bool useGravity;
bool isGrounded;
bool freezeOrient;
PhysicsShape shape;
} PhysicsBodyData;
typedef struct PhysicsManifoldData {
unsigned int id;
PhysicsBody bodyA;
PhysicsBody bodyB;
float penetration;
Vector2 normal;
Vector2 contacts[2];
unsigned int contactsCount;
float restitution;
float dynamicFriction;
float staticFriction;
} PhysicsManifoldData, *PhysicsManifold;
]]
-- gestures cdef
ffi.cdef [[
typedef enum {
TOUCH_ACTION_UP = 0,
TOUCH_ACTION_DOWN,
TOUCH_ACTION_MOVE,
TOUCH_ACTION_CANCEL
} TouchAction;
typedef struct {
int touchAction;
int pointCount;
int pointerId[8]; // CONST
Vector2 position[8]; // CONST
} GestureEvent;
]]
-- raygui cdef
ffi.cdef [[
typedef struct GuiStyleProp {
unsigned short controlId;
unsigned short propertyId;
int propertyValue;
} GuiStyleProp;
typedef enum {
GUI_STATE_NORMAL = 0,
GUI_STATE_FOCUSED,
GUI_STATE_PRESSED,
GUI_STATE_DISABLED,
} GuiControlState;
typedef enum {
GUI_TEXT_ALIGN_LEFT = 0,
GUI_TEXT_ALIGN_CENTER,
GUI_TEXT_ALIGN_RIGHT,
} GuiTextAlignment;
typedef enum {
DEFAULT = 0,
LABEL,
BUTTON,
TOGGLE,
SLIDER,
PROGRESSBAR,
CHECKBOX,
COMBOBOX,
DROPDOWNBOX,
TEXTBOX,
VALUEBOX,
SPINNER,
LISTVIEW,
COLORPICKER,
SCROLLBAR,
STATUSBAR
} GuiControl;
typedef enum {
BORDER_COLOR_NORMAL = 0,
BASE_COLOR_NORMAL,
TEXT_COLOR_NORMAL,
BORDER_COLOR_FOCUSED,
BASE_COLOR_FOCUSED,
TEXT_COLOR_FOCUSED,
BORDER_COLOR_PRESSED,
BASE_COLOR_PRESSED,
TEXT_COLOR_PRESSED,
BORDER_COLOR_DISABLED,
BASE_COLOR_DISABLED,
TEXT_COLOR_DISABLED,
BORDER_WIDTH,
TEXT_PADDING,
TEXT_ALIGNMENT,
RESERVED
} GuiControlProperty;
typedef enum {
TEXT_SIZE = 16,
TEXT_SPACING,
LINE_COLOR,
BACKGROUND_COLOR,
} GuiDefaultProperty;
typedef enum {
GROUP_PADDING = 16,
} GuiToggleProperty;
typedef enum {
SLIDER_WIDTH = 16,
SLIDER_PADDING
} GuiSliderProperty;
typedef enum {
PROGRESS_PADDING = 16,
} GuiProgressBarProperty;
typedef enum {
ARROWS_SIZE = 16,
ARROWS_VISIBLE,
SCROLL_SLIDER_PADDING,
SCROLL_SLIDER_SIZE,
SCROLL_PADDING,
SCROLL_SPEED,
} GuiScrollBarProperty;
typedef enum {
CHECK_PADDING = 16
} GuiCheckBoxProperty;
typedef enum {
COMBO_BUTTON_WIDTH = 16,
COMBO_BUTTON_PADDING
} GuiComboBoxProperty;
typedef enum {
ARROW_PADDING = 16,
DROPDOWN_ITEMS_SPACING
} GuiDropdownBoxProperty;
typedef enum {
TEXT_INNER_PADDING = 16,
TEXT_LINES_SPACING
} GuiTextBoxProperty;
typedef enum {
SPIN_BUTTON_WIDTH = 16,
SPIN_BUTTON_SPACING,
} GuiSpinnerProperty;
typedef enum {
SCROLLBAR_LEFT_SIDE = 0,
SCROLLBAR_RIGHT_SIDE
} GuiScrollBarSide;
typedef enum {
LIST_ITEMS_HEIGHT = 16,
LIST_ITEMS_SPACING,
SCROLLBAR_WIDTH,
SCROLLBAR_SIDE,
} GuiListViewProperty;
typedef enum {
COLOR_SELECTOR_SIZE = 16,
HUEBAR_WIDTH,
HUEBAR_PADDING,
HUEBAR_SELECTOR_HEIGHT,
HUEBAR_SELECTOR_OVERFLOW
} GuiColorPickerProperty;
typedef struct GuiTextBoxState {
int cursor;
int start;
int index;
int select;
} GuiTextBoxState;
typedef enum {
RAYGUI_ICON_NONE = 0,
RAYGUI_ICON_FOLDER_FILE_OPEN = 1,
RAYGUI_ICON_FILE_SAVE_CLASSIC = 2,
RAYGUI_ICON_FOLDER_OPEN = 3,
RAYGUI_ICON_FOLDER_SAVE = 4,
RAYGUI_ICON_FILE_OPEN = 5,
RAYGUI_ICON_FILE_SAVE = 6,
RAYGUI_ICON_FILE_EXPORT = 7,
RAYGUI_ICON_FILE_ADD = 8,
RAYGUI_ICON_FILE_DELETE = 9,
RAYGUI_ICON_FILETYPE_TEXT = 10,
RAYGUI_ICON_FILETYPE_AUDIO = 11,
RAYGUI_ICON_FILETYPE_IMAGE = 12,
RAYGUI_ICON_FILETYPE_PLAY = 13,
RAYGUI_ICON_FILETYPE_VIDEO = 14,
RAYGUI_ICON_FILETYPE_INFO = 15,
RAYGUI_ICON_FILE_COPY = 16,
RAYGUI_ICON_FILE_CUT = 17,
RAYGUI_ICON_FILE_PASTE = 18,
RAYGUI_ICON_CURSOR_HAND = 19,
RAYGUI_ICON_CURSOR_POINTER = 20,
RAYGUI_ICON_CURSOR_CLASSIC = 21,
RAYGUI_ICON_PENCIL = 22,
RAYGUI_ICON_PENCIL_BIG = 23,
RAYGUI_ICON_BRUSH_CLASSIC = 24,
RAYGUI_ICON_BRUSH_PAINTER = 25,
RAYGUI_ICON_WATER_DROP = 26,
RAYGUI_ICON_COLOR_PICKER = 27,
RAYGUI_ICON_RUBBER = 28,
RAYGUI_ICON_COLOR_BUCKET = 29,
RAYGUI_ICON_TEXT_T = 30,
RAYGUI_ICON_TEXT_A = 31,
RAYGUI_ICON_SCALE = 32,
RAYGUI_ICON_RESIZE = 33,
RAYGUI_ICON_FILTER_POINT = 34,
RAYGUI_ICON_FILTER_BILINEAR = 35,
RAYGUI_ICON_CROP = 36,
RAYGUI_ICON_CROP_ALPHA = 37,
RAYGUI_ICON_SQUARE_TOGGLE = 38,
RAYGUI_ICON_SYMMETRY = 39,
RAYGUI_ICON_SYMMETRY_HORIZONTAL = 40,
RAYGUI_ICON_SYMMETRY_VERTICAL = 41,
RAYGUI_ICON_LENS = 42,
RAYGUI_ICON_LENS_BIG = 43,
RAYGUI_ICON_EYE_ON = 44,
RAYGUI_ICON_EYE_OFF = 45,
RAYGUI_ICON_FILTER_TOP = 46,
RAYGUI_ICON_FILTER = 47,
RAYGUI_ICON_TARGET_POINT = 48,
RAYGUI_ICON_TARGET_SMALL = 49,
RAYGUI_ICON_TARGET_BIG = 50,
RAYGUI_ICON_TARGET_MOVE = 51,
RAYGUI_ICON_CURSOR_MOVE = 52,
RAYGUI_ICON_CURSOR_SCALE = 53,
RAYGUI_ICON_CURSOR_SCALE_RIGHT = 54,
RAYGUI_ICON_CURSOR_SCALE_LEFT = 55,
RAYGUI_ICON_UNDO = 56,
RAYGUI_ICON_REDO = 57,
RAYGUI_ICON_REREDO = 58,
RAYGUI_ICON_MUTATE = 59,
RAYGUI_ICON_ROTATE = 60,
RAYGUI_ICON_REPEAT = 61,
RAYGUI_ICON_SHUFFLE = 62,
RAYGUI_ICON_EMPTYBOX = 63,
RAYGUI_ICON_TARGET = 64,
RAYGUI_ICON_TARGET_SMALL_FILL = 65,
RAYGUI_ICON_TARGET_BIG_FILL = 66,
RAYGUI_ICON_TARGET_MOVE_FILL = 67,
RAYGUI_ICON_CURSOR_MOVE_FILL = 68,
RAYGUI_ICON_CURSOR_SCALE_FILL = 69,
RAYGUI_ICON_CURSOR_SCALE_RIGHT_FILL = 70,
RAYGUI_ICON_CURSOR_SCALE_LEFT_FILL = 71,
RAYGUI_ICON_UNDO_FILL = 72,
RAYGUI_ICON_REDO_FILL = 73,
RAYGUI_ICON_REREDO_FILL = 74,
RAYGUI_ICON_MUTATE_FILL = 75,
RAYGUI_ICON_ROTATE_FILL = 76,
RAYGUI_ICON_REPEAT_FILL = 77,
RAYGUI_ICON_SHUFFLE_FILL = 78,
RAYGUI_ICON_EMPTYBOX_SMALL = 79,
RAYGUI_ICON_BOX = 80,
RAYGUI_ICON_BOX_TOP = 81,
RAYGUI_ICON_BOX_TOP_RIGHT = 82,
RAYGUI_ICON_BOX_RIGHT = 83,
RAYGUI_ICON_BOX_BOTTOM_RIGHT = 84,
RAYGUI_ICON_BOX_BOTTOM = 85,
RAYGUI_ICON_BOX_BOTTOM_LEFT = 86,
RAYGUI_ICON_BOX_LEFT = 87,
RAYGUI_ICON_BOX_TOP_LEFT = 88,
RAYGUI_ICON_BOX_CENTER = 89,
RAYGUI_ICON_BOX_CIRCLE_MASK = 90,
RAYGUI_ICON_POT = 91,
RAYGUI_ICON_ALPHA_MULTIPLY = 92,
RAYGUI_ICON_ALPHA_CLEAR = 93,
RAYGUI_ICON_DITHERING = 94,
RAYGUI_ICON_MIPMAPS = 95,
RAYGUI_ICON_BOX_GRID = 96,
RAYGUI_ICON_GRID = 97,
RAYGUI_ICON_BOX_CORNERS_SMALL = 98,
RAYGUI_ICON_BOX_CORNERS_BIG = 99,
RAYGUI_ICON_FOUR_BOXES = 100,
RAYGUI_ICON_GRID_FILL = 101,
RAYGUI_ICON_BOX_MULTISIZE = 102,
RAYGUI_ICON_ZOOM_SMALL = 103,
RAYGUI_ICON_ZOOM_MEDIUM = 104,
RAYGUI_ICON_ZOOM_BIG = 105,
RAYGUI_ICON_ZOOM_ALL = 106,
RAYGUI_ICON_ZOOM_CENTER = 107,
RAYGUI_ICON_BOX_DOTS_SMALL = 108,
RAYGUI_ICON_BOX_DOTS_BIG = 109,
RAYGUI_ICON_BOX_CONCENTRIC = 110,
RAYGUI_ICON_BOX_GRID_BIG = 111,
RAYGUI_ICON_OK_TICK = 112,
RAYGUI_ICON_CROSS = 113,
RAYGUI_ICON_ARROW_LEFT = 114,
RAYGUI_ICON_ARROW_RIGHT = 115,
RAYGUI_ICON_ARROW_DOWN = 116,
RAYGUI_ICON_ARROW_UP = 117,
RAYGUI_ICON_ARROW_LEFT_FILL = 118,
RAYGUI_ICON_ARROW_RIGHT_FILL = 119,
RAYGUI_ICON_ARROW_DOWN_FILL = 120,
RAYGUI_ICON_ARROW_UP_FILL = 121,
RAYGUI_ICON_AUDIO = 122,
RAYGUI_ICON_FX = 123,
RAYGUI_ICON_WAVE = 124,
RAYGUI_ICON_WAVE_SINUS = 125,
RAYGUI_ICON_WAVE_SQUARE = 126,
RAYGUI_ICON_WAVE_TRIANGULAR = 127,
RAYGUI_ICON_CROSS_SMALL = 128,
RAYGUI_ICON_PLAYER_PREVIOUS = 129,
RAYGUI_ICON_PLAYER_PLAY_BACK = 130,
RAYGUI_ICON_PLAYER_PLAY = 131,
RAYGUI_ICON_PLAYER_PAUSE = 132,
RAYGUI_ICON_PLAYER_STOP = 133,
RAYGUI_ICON_PLAYER_NEXT = 134,
RAYGUI_ICON_PLAYER_RECORD = 135,
RAYGUI_ICON_MAGNET = 136,
RAYGUI_ICON_LOCK_CLOSE = 137,
RAYGUI_ICON_LOCK_OPEN = 138,
RAYGUI_ICON_CLOCK = 139,
RAYGUI_ICON_TOOLS = 140,
RAYGUI_ICON_GEAR = 141,
RAYGUI_ICON_GEAR_BIG = 142,
RAYGUI_ICON_BIN = 143,
RAYGUI_ICON_HAND_POINTER = 144,
RAYGUI_ICON_LASER = 145,
RAYGUI_ICON_COIN = 146,
RAYGUI_ICON_EXPLOSION = 147,
RAYGUI_ICON_1UP = 148,
RAYGUI_ICON_PLAYER = 149,
RAYGUI_ICON_PLAYER_JUMP = 150,
RAYGUI_ICON_KEY = 151,
RAYGUI_ICON_DEMON = 152,
RAYGUI_ICON_TEXT_POPUP = 153,
RAYGUI_ICON_GEAR_EX = 154,
RAYGUI_ICON_CRACK = 155,
RAYGUI_ICON_CRACK_POINTS = 156,
RAYGUI_ICON_STAR = 157,
RAYGUI_ICON_DOOR = 158,
RAYGUI_ICON_EXIT = 159,
RAYGUI_ICON_MODE_2D = 160,
RAYGUI_ICON_MODE_3D = 161,
RAYGUI_ICON_CUBE = 162,
RAYGUI_ICON_CUBE_FACE_TOP = 163,
RAYGUI_ICON_CUBE_FACE_LEFT = 164,
RAYGUI_ICON_CUBE_FACE_FRONT = 165,
RAYGUI_ICON_CUBE_FACE_BOTTOM = 166,
RAYGUI_ICON_CUBE_FACE_RIGHT = 167,
RAYGUI_ICON_CUBE_FACE_BACK = 168,
RAYGUI_ICON_CAMERA = 169,
RAYGUI_ICON_SPECIAL = 170,
RAYGUI_ICON_LINK_NET = 171,
RAYGUI_ICON_LINK_BOXES = 172,
RAYGUI_ICON_LINK_MULTI = 173,
RAYGUI_ICON_LINK = 174,
RAYGUI_ICON_LINK_BROKE = 175,
RAYGUI_ICON_TEXT_NOTES = 176,
RAYGUI_ICON_NOTEBOOK = 177,
RAYGUI_ICON_SUITCASE = 178,
RAYGUI_ICON_SUITCASE_ZIP = 179,
RAYGUI_ICON_MAILBOX = 180,
RAYGUI_ICON_MONITOR = 181,
RAYGUI_ICON_PRINTER = 182,
RAYGUI_ICON_PHOTO_CAMERA = 183,
RAYGUI_ICON_PHOTO_CAMERA_FLASH = 184,
RAYGUI_ICON_HOUSE = 185,
RAYGUI_ICON_HEART = 186,
RAYGUI_ICON_CORNER = 187,
RAYGUI_ICON_VERTICAL_BARS = 188,
RAYGUI_ICON_VERTICAL_BARS_FILL = 189,
RAYGUI_ICON_LIFE_BARS = 190,
RAYGUI_ICON_INFO = 191,
RAYGUI_ICON_CROSSLINE = 192,
RAYGUI_ICON_HELP = 193,
RAYGUI_ICON_FILETYPE_ALPHA = 194,
RAYGUI_ICON_FILETYPE_HOME = 195,
RAYGUI_ICON_LAYERS_VISIBLE = 196,
RAYGUI_ICON_LAYERS = 197,
RAYGUI_ICON_WINDOW = 198,
RAYGUI_ICON_HIDPI = 199,
RAYGUI_ICON_FILETYPE_BINARY = 200,
RAYGUI_ICON_HEX = 201,
RAYGUI_ICON_SHIELD = 202,
RAYGUI_ICON_FILE_NEW = 203,
RAYGUI_ICON_FOLDER_ADD = 204,
RAYGUI_ICON_205 = 205,
RAYGUI_ICON_206 = 206,
RAYGUI_ICON_207 = 207,
RAYGUI_ICON_208 = 208,
RAYGUI_ICON_209 = 209,
RAYGUI_ICON_210 = 210,
RAYGUI_ICON_211 = 211,
RAYGUI_ICON_212 = 212,
RAYGUI_ICON_213 = 213,
RAYGUI_ICON_214 = 214,
RAYGUI_ICON_215 = 215,
RAYGUI_ICON_216 = 216,
RAYGUI_ICON_217 = 217,
RAYGUI_ICON_218 = 218,
RAYGUI_ICON_219 = 219,
RAYGUI_ICON_220 = 220,
RAYGUI_ICON_221 = 221,
RAYGUI_ICON_222 = 222,
RAYGUI_ICON_223 = 223,
RAYGUI_ICON_224 = 224,
RAYGUI_ICON_225 = 225,
RAYGUI_ICON_226 = 226,
RAYGUI_ICON_227 = 227,
RAYGUI_ICON_228 = 228,
RAYGUI_ICON_229 = 229,
RAYGUI_ICON_230 = 230,
RAYGUI_ICON_231 = 231,
RAYGUI_ICON_232 = 232,
RAYGUI_ICON_233 = 233,
RAYGUI_ICON_234 = 234,
RAYGUI_ICON_235 = 235,
RAYGUI_ICON_236 = 236,
RAYGUI_ICON_237 = 237,
RAYGUI_ICON_238 = 238,
RAYGUI_ICON_239 = 239,
RAYGUI_ICON_240 = 240,
RAYGUI_ICON_241 = 241,
RAYGUI_ICON_242 = 242,
RAYGUI_ICON_243 = 243,
RAYGUI_ICON_244 = 244,
RAYGUI_ICON_245 = 245,
RAYGUI_ICON_246 = 246,
RAYGUI_ICON_247 = 247,
RAYGUI_ICON_248 = 248,
RAYGUI_ICON_249 = 249,
RAYGUI_ICON_250 = 250,
RAYGUI_ICON_251 = 251,
RAYGUI_ICON_252 = 252,
RAYGUI_ICON_253 = 253,
RAYGUI_ICON_254 = 254,
RAYGUI_ICON_255 = 255,
} guiIconName;
]]
-- Load bind entry
ffi.cdef [[
struct raylua_bind_entry {
const char *name;
const char *proto;
void *ptr;
};
]]
do
local entries = ffi.cast("struct raylua_bind_entry *", raylua.bind_entries)
local i = ffi.new("size_t", 0)
local NULL = ffi.new("void *", nil)
print "RAYLUA: Loading FFI binding entries."
while entries[i].name ~= NULL do
local name, proto = ffi.string(entries[i].name), ffi.string(entries[i].proto)
if rl[name] then
print("RAYLUA: Warn: Duplicated FFI entry : " .. name)
end
rl[name] = ffi.cast(proto, entries[i].ptr)
i = i + 1
end
print("RAYLUA: Loaded " .. tonumber(i) .. " FFI entries.")
end
-- colors
local function new_color(r, g, b, a)
return ffi.new("Color", r, g, b, a)
end
rl.LIGHTGRAY = new_color(200, 200, 200, 255)
rl.GRAY = new_color(130, 130, 130, 255)
rl.DARKGRAY = new_color(80, 80, 80, 255)
rl.YELLOW = new_color(253, 249, 0, 255)
rl.GOLD = new_color(255, 203, 0, 255)
rl.ORANGE = new_color(255, 161, 0, 255)
rl.PINK = new_color(255, 109, 194, 255)
rl.RED = new_color(230, 41, 55, 255)
rl.MAROON = new_color(190, 33, 55, 255)
rl.GREEN = new_color(0, 228, 48, 255)
rl.LIME = new_color(0, 158, 47, 255)
rl.DARKGREEN = new_color(0, 117, 44, 255)
rl.SKYBLUE = new_color(102, 191, 255, 255)
rl.BLUE = new_color(0, 121, 241, 255)
rl.DARKBLUE = new_color(0, 82, 172, 255)
rl.PURPLE = new_color(200, 122, 255, 255)
rl.VIOLET = new_color(135, 60, 190, 255)
rl.DARKPURPLE = new_color(112, 31, 126, 255)
rl.BEIGE = new_color(211, 176, 131, 255)
rl.BROWN = new_color(127, 106, 79, 255)
rl.DARKBROWN = new_color(76, 63, 47, 255)
rl.WHITE = new_color(255, 255, 255, 255)
rl.BLACK = new_color(0, 0, 0, 255)
rl.BLANK = new_color(0, 0, 0, 0)
rl.MAGENTA = new_color(255, 0, 255, 255)
rl.RAYWHITE = new_color(245, 245, 245, 255)
rl.SHADER_LOC_MAP_DIFFUSE = C.SHADER_LOC_MAP_ALBEDO
rl.SHADER_LOC_MAP_SPECULAR = C.SHADER_LOC_MAP_METALNESS
rl.MATERIAL_MAP_DIFFUSE = C.MATERIAL_MAP_ALBEDO
rl.MATERIAL_MAP_SPECULAR = C.MATERIAL_MAP_METALNESS
function rl.ref(obj)
return ffi.cast(ffi.typeof("$ *", obj), obj)
end
rl.new = ffi.new
rl.__index = function (self, key)
return C[key]
end
rl.__newindex = function ()
error "rl table is readonly"
end
_G.rl = rl