Merge branch '12.0-development' of https://github.com/nikeinikei/love into 12.0-development

This commit is contained in:
niki
2022-10-27 14:22:46 +02:00
4 changed files with 77 additions and 7 deletions
+22
View File
@@ -141,6 +141,21 @@ enum DoneAction
DONE_RESTART,
};
static void print_usage()
{
// when editing this message, change it at boot.lua too
printf("LÖVE is an *awesome* framework you can use to make 2D games in Lua\n"
"https://love2d.org\n"
"\n"
"usage:\n"
" love --version prints LÖVE version and quits\n"
" love --help prints this message and quits\n"
" love path/to/gamedir runs the game from the given directory which contains a main.lua file\n"
" love path/to/packagedgame.love runs the packaged game from the provided .love file\n"
" love path/to/file.lua runs the game from the given .lua file\n"
);
}
static DoneAction runlove(int argc, char **argv, int &retval, love::Variant &restartvalue)
{
// Oh, you just want the version? Okay!
@@ -155,6 +170,13 @@ static DoneAction runlove(int argc, char **argv, int &retval, love::Variant &res
return DONE_QUIT;
}
if (argc > 1 && strcmp(argv[1], "--help") == 0)
{
print_usage();
retval = 0;
return DONE_QUIT;
}
// Create the virtual machine.
lua_State *L = luaL_newstate();
luaL_openlibs(L);
+12 -7
View File
@@ -305,10 +305,11 @@ File *luax_getfile(lua_State *L, int idx)
return file;
}
FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror)
FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror, int &nresults)
{
FileData *data = nullptr;
File *file = nullptr;
nresults = 0;
if (lua_isstring(L, idx) || luax_istype(L, idx, File::type))
{
@@ -322,7 +323,7 @@ FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror)
if (!data && !file)
{
luaL_argerror(L, idx, "filename, File, or FileData expected");
nresults = luaL_argerror(L, idx, "filename, File, or FileData expected");
return nullptr; // Never reached.
}
else if (file && !data)
@@ -335,10 +336,10 @@ FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror)
{
file->release();
if (ioerror)
luax_ioError(L, "%s", e.what());
nresults = luax_ioError(L, "%s", e.what());
else
luaL_error(L, "%s", e.what());
return nullptr; // Never reached.
nresults = luaL_error(L, "%s", e.what());
return nullptr; // Never reached if ioerror is false.
}
file->release();
@@ -349,7 +350,8 @@ FileData *luax_getfiledata(lua_State *L, int idx, bool ioerror)
FileData *luax_getfiledata(lua_State *L, int idx)
{
return luax_getfiledata(L, idx, false);
int nresults = 0;
return luax_getfiledata(L, idx, false, nresults);
}
Data *luax_getdata(lua_State *L, int idx)
@@ -404,7 +406,10 @@ int w_newFileData(lua_State *L)
// Single argument: treat as filepath or File.
if (lua_gettop(L) == 1)
{
FileData *data = luax_getfiledata(L, 1, true);
int nresults = 0;
FileData *data = luax_getfiledata(L, 1, true, nresults);
if (data == nullptr)
return nresults;
luax_pushtype(L, data);
data->release();
return 1;
+32
View File
@@ -31,6 +31,11 @@
#import <QuartzCore/CAMetalLayer.h>
#ifdef LOVE_MACOS
// Needed for the GPU dynamic switching hack below.
#import <Cocoa/Cocoa.h>
#endif
namespace love
{
namespace graphics
@@ -291,6 +296,33 @@ Graphics::Graphics()
throw love::Exception("LOVE's Metal graphics backend requires macOS 10.15+ or iOS 13+.");
}
#ifdef LOVE_MACOS
// On multi-GPU macOS systems with a low and high power GPU (e.g. a 2016
// Macbook Pro), the OS doesn't activate the high power GPU for final
// monitor blitting even when MTLCreateSystemDefaultDevice is called, on
// newer macOS versions. https://developer.apple.com/forums/thread/675411
// But it does when an OpenGL context is created, so this big hack forces it
// when we want it to happen.
if (!device.isLowPower && MTLCopyAllDevices().count > 1)
{
NSOpenGLPixelFormatAttribute attributes[] =
{
NSOpenGLPFADoubleBuffer,
NSOpenGLPFAOpenGLProfile, NSOpenGLProfileVersion3_2Core,
NSOpenGLPFAColorSize, 24,
NSOpenGLPFAAlphaSize, 8,
NSOpenGLPFADepthSize, 24,
NSOpenGLPFAStencilSize, 8,
NSOpenGLPFASampleBuffers, 0,
0,
};
auto pixelformat = [[NSOpenGLPixelFormat alloc] initWithAttributes:attributes];
auto glcontext = [[NSOpenGLContext alloc] initWithFormat:pixelformat shareContext:nullptr];
LOVE_UNUSED(glcontext);
}
#endif
commandQueue = [device newCommandQueue];
passDesc = [MTLRenderPassDescriptor new];
+11
View File
@@ -135,6 +135,17 @@ function love.boot()
end
if not can_has_game then
-- when editing this message, change it at love.cpp too
print([[LÖVE is an *awesome* framework you can use to make 2D games in Lua
https://love2d.org
usage:
love --version prints LÖVE version and quits
love --help prints this message and quits
love path/to/gamedir runs the game from the given directory which contains a main.lua file
love path/to/packagedgame.love runs the packaged game from the provided .love file
love path/to/file.lua runs the game from the given .lua file
]]);
local nogame = require("love.nogame")
nogame()
end