diff --git a/Saphirefile.lua b/Saphirefile.lua index 34c847c..08ec00d 100644 --- a/Saphirefile.lua +++ b/Saphirefile.lua @@ -32,10 +32,13 @@ local cflags = os.getenv "CFLAGS" or "-O2 -s" local ldflags = os.getenv "LDFLAGS" or "-O2 -s -lm" local modules = "raymath rlgl easings gestures physac raygui" +local graphics = os.getenv "GRAPHICS" or "GRAPHICS_API_OPENGL_33" cflags = cflags .. " -Iluajit/src -Iraygui/src -Iraylib/src" ldflags = ldflags .. " luajit/src/libluajit.a raylib/src/libraylib.a luajit/src/libluajit.a" +cflags = cflags .. " -D" .. graphics + local exe_ldflags = "" if los.type() == "linux" then @@ -102,7 +105,7 @@ local raylua_src = { }, true) end) } -local raylua_obj = c.compile(raylua_src, cflags, "raylua", cc) +local raylua_obj = c.compile(raylua_src, cflags .. " -D" .. graphics, "raylua", cc) local libraylua = c.lib("libraylua.a", raylua_obj, "raylua", ar) diff --git a/build/buildRaylib.lua b/build/buildRaylib.lua index f969a62..c8990c2 100644 --- a/build/buildRaylib.lua +++ b/build/buildRaylib.lua @@ -23,7 +23,7 @@ local vars = saphire.map({ { "RAYLIB_LIB_NAME", "raylib" }, { "RAYLIB_RES_FILE", "./raylib.dll.rc.data" }, { "PLATFORM", "PLATFORM_DESKTOP" }, - { "GRAPHICS", "GRAPHICS_API_OPENGL_43" }, + { "GRAPHICS", "GRAPHICS_API_OPENGL_33" }, { "USE_EXTERNAL_GLFW", "FALSE" }, { "USE_WAYLAND_DISPLAY", "FALSE" } }, function (v) diff --git a/makefile b/makefile index 705f777..d7ff55b 100644 --- a/makefile +++ b/makefile @@ -6,14 +6,16 @@ LUA ?= luajit/src/luajit WINDRES ?= windres -CFLAGS += -Iluajit/src -Iraylib/src -Iraygui/src -DSUPPORT_COMPUTE_SHADERS +CFLAGS += -Iluajit/src -Iraylib/src -Iraygui/src LDFLAGS += luajit/src/libluajit.a raylib/src/libraylib.a MODULES := raymath rlgl easings gestures physac raygui # raylib settings PLATFORM ?= PLATFORM_DESKTOP -GRAPHICS ?= GRAPHICS_API_OPENGL_43 +GRAPHICS ?= GRAPHICS_API_OPENGL_33 + +CFLAGS += -D$(GRAPHICS) USE_WAYLAND_DISPLAY ?= FALSE USE_EXTERNAL_GLFW ?= FALSE diff --git a/tools/genbind.lua b/tools/genbind.lua index 7e73461..d9779e8 100644 --- a/tools/genbind.lua +++ b/tools/genbind.lua @@ -31,11 +31,15 @@ local functions = {} local proto = {} local counter = 0 +local file = io.open(arg[1], "wb") +local modules = { "api" } +local funcname local custom_support = { ["rlgl"] = function (line) return line:gsub("([%s*]+)(rl%w+)", function (pre, part) functions[#functions + 1] = part + funcname = part counter = counter + 1 if counter == 2 then @@ -47,66 +51,10 @@ local custom_support = { end } -local file = io.open(arg[1], "wb") -local modules = { "api" } - for i=2,#arg do modules[i] = arg[i] end -for _,modname in ipairs(modules) do - for line in io.lines("tools/" .. modname .. ".h") do - if line:sub(0, 2) ~= "//" then - if custom_support[modname] then - line = custom_support[modname](line) - end - - line = line:gsub("(%W)([%l%d][%w_]*)", function (before, part) - for i,keyword in ipairs(keywords) do - if part == keyword - or part == "t" then -- uintX_t workaround - return before .. part - end - end - - for i,s in ipairs(rl_structs) do - if part == s then - return before .. part - end - end - - return before - end) - - line = line:gsub("%u%w+", function (part) - for i,struct in ipairs(structs) do - if part == struct then - return part - end - end - - functions[#functions + 1] = part - counter = counter + 1 - - if count == 2 then - print("WARN: Multiple matches for: " .. line) - end - - return "(*)" - end) - - -- Strip spaces - line = line:gsub("([(),*.])%s+(%w)", function (a, b) return a .. b end) - line = line:gsub("(%w)%s+([(),*.])", function (a, b) return a .. b end) - - proto[#proto + 1] = line - end - end -end - -assert(#proto == #functions, "Mismatching proto and function count : " .. - #proto .. " ~= " .. #functions) - file:write [[ struct raylua_bind_entry { const char *name; @@ -117,12 +65,76 @@ struct raylua_bind_entry { struct raylua_bind_entry raylua_entries[] = { ]] -for i=1,#proto do - local name, proto = functions[i], proto[i] - file:write(string.format('{ "%s", "%s", &%s },\n', name, proto, name)) +for _,modname in ipairs(modules) do + for line in io.lines("tools/" .. modname .. ".h") do + if line:sub(1, 2) ~= "//" then + if line:sub(1, 1) == "#" then + file:write(" " .. line .. "\n") + else + counter = 0 + funcname = nil + + if custom_support[modname] then + line = custom_support[modname](line) + end + + line = line:gsub("(%W)([%l%d][%w_]*)", function (before, part) + for i,keyword in ipairs(keywords) do + if part == keyword + or part == "t" then -- uintX_t workaround + return before .. part + end + end + + for i,s in ipairs(rl_structs) do + if part == s then + return before .. part + end + end + + return before + end) + + line = line:gsub("%u%w+", function (part) + for i,struct in ipairs(structs) do + if part == struct then + return part + end + end + + functions[#functions + 1] = part + funcname = part + counter = counter + 1 + + if counter == 2 then + print("WARN: Multiple matches for: " .. line) + end + + return "(*)" + end) + + -- Strip spaces + line = line:gsub("([(),*.])%s+(%w)", function (a, b) return a .. b end) + line = line:gsub("(%w)%s+([(),*.])", function (a, b) return a .. b end) + + proto[#proto + 1] = line + + if funcname and line then + file:write(string.format(' { "%s", "%s", &%s },\n', funcname, line, funcname)) + elseif counter == 0 then + print("WARN: Invalid entry", funcname, line) + end + end + end + end end -file:write '{ NULL, NULL, NULL },\n' +assert(#proto == #functions, "Mismatching proto and function count : " .. + #proto .. " ~= " .. #functions) + +print(string.format("Bound %d functions.", #proto)) + +file:write ' { NULL, NULL, NULL },\n' file:write "};\n" file:close() diff --git a/tools/rlgl.h b/tools/rlgl.h index ae314f1..2c4aecd 100644 --- a/tools/rlgl.h +++ b/tools/rlgl.h @@ -27,6 +27,10 @@ void rlEnableVertexBufferElement(unsigned int id) void rlDisableVertexBufferElement(void) void rlEnableVertexAttribute(unsigned int index) void rlDisableVertexAttribute(unsigned int index) +#if defined(GRAPHICS_API_OPENGL_11) +void rlEnableStatePointer(int vertexAttribType, void *buffer) +void rlDisableStatePointer(int vertexAttribType) +#endif void rlActiveTextureSlot(int slot) void rlEnableTexture(unsigned int id) void rlDisableTexture(void) @@ -116,6 +120,7 @@ void rlSetUniform(int locIndex, const void *value, int uniformType, int count) void rlSetUniformMatrix(int locIndex, Matrix mat) void rlSetUniformSampler(int locIndex, unsigned int textureId) void rlSetShader(unsigned int id, int *locs) +#if defined(GRAPHICS_API_OPENGL_43) unsigned int rlLoadComputeShaderProgram(int shaderId) void rlComputeShaderDispatch(unsigned int groupX, unsigned int groupY, unsigned int groupZ) unsigned int rlLoadShaderBuffer(unsigned long long size, const void *data, int usageHint) @@ -126,6 +131,7 @@ void rlReadShaderBufferElements(unsigned int id, void *dest, unsigned long long void rlBindShaderBuffer(unsigned int id, unsigned int index) void rlCopyBuffersElements(unsigned int destId, unsigned int srcId, unsigned long long destOffset, unsigned long long srcOffset, unsigned long long count) void rlBindImageTexture(unsigned int id, unsigned int index, unsigned int format, int readonly) +#endif Matrix rlGetMatrixModelview(void) Matrix rlGetMatrixProjection(void) Matrix rlGetMatrixTransform(void)