From 97d9154e48ac59c1233edfe4de912022e992e2d4 Mon Sep 17 00:00:00 2001 From: fysx Date: Sat, 3 May 2014 14:13:40 +0200 Subject: [PATCH] updated to latest mobile-common (should fix love.touch index problems) --- jni/love/src/common/Data.h | 2 +- jni/love/src/common/EnumMap.h | 20 ++--- jni/love/src/common/StringMap.h | 43 ++++++----- jni/love/src/common/Variant.h | 3 +- jni/love/src/common/int.h | 35 +++------ jni/love/src/common/runtime.cpp | 2 +- jni/love/src/modules/event/sdl/Event.cpp | 18 ++--- jni/love/src/modules/event/sdl/Event.h | 2 +- .../graphics/opengl/ParticleSystem.cpp | 14 ++-- .../modules/graphics/opengl/ParticleSystem.h | 2 +- .../src/modules/graphics/opengl/Shader.cpp | 64 +++++++++++++--- jni/love/src/modules/graphics/opengl/Shader.h | 55 +++++++++----- .../modules/graphics/opengl/SpriteBatch.cpp | 4 +- .../src/modules/graphics/opengl/wrap_Mesh.cpp | 3 + .../modules/graphics/opengl/wrap_Shader.cpp | 33 +++++++++ .../src/modules/graphics/opengl/wrap_Shader.h | 1 + jni/love/src/modules/joystick/Joystick.cpp | 2 +- jni/love/src/modules/joystick/Joystick.h | 4 +- .../src/modules/keyboard/sdl/Keyboard.cpp | 5 +- jni/love/src/modules/keyboard/sdl/Keyboard.h | 2 + .../src/modules/keyboard/wrap_Keyboard.cpp | 4 +- jni/love/src/modules/math/RandomGenerator.cpp | 7 +- jni/love/src/modules/mouse/sdl/Cursor.cpp | 4 +- jni/love/src/modules/mouse/sdl/Mouse.cpp | 4 +- jni/love/src/modules/mouse/wrap_Cursor.cpp | 2 +- jni/love/src/modules/mouse/wrap_Mouse.cpp | 6 +- .../src/modules/physics/box2d/Physics.cpp | 7 +- jni/love/src/modules/system/wrap_System.cpp | 6 +- jni/love/src/modules/thread/Channel.h | 10 ++- jni/love/src/modules/thread/LuaThread.h | 13 ++-- jni/love/src/modules/thread/Thread.h | 4 +- jni/love/src/modules/thread/sdl/Thread.h | 3 +- jni/love/src/modules/thread/sdl/threads.cpp | 6 ++ jni/love/src/modules/thread/sdl/threads.h | 15 +++- jni/love/src/modules/thread/threads.h | 2 +- jni/love/src/modules/touch/sdl/Touch.cpp | 73 +++++++++---------- jni/love/src/modules/touch/sdl/Touch.h | 18 +++++ jni/love/src/scripts/boot.lua | 7 +- jni/love/src/scripts/boot.lua.h | 11 +-- jni/love/src/scripts/graphics.lua.h | 4 +- 40 files changed, 321 insertions(+), 199 deletions(-) diff --git a/jni/love/src/common/Data.h b/jni/love/src/common/Data.h index 1ba34c49..aa203107 100644 --- a/jni/love/src/common/Data.h +++ b/jni/love/src/common/Data.h @@ -47,7 +47,7 @@ public: * Gets a pointer to the data. This pointer will obviously not * be valid if the Data object is destroyed. **/ - virtual void *getData() const = 0 ; + virtual void *getData() const = 0; /** * Gets the size of the Data in bytes. diff --git a/jni/love/src/common/EnumMap.h b/jni/love/src/common/EnumMap.h index 3586c35e..af666084 100644 --- a/jni/love/src/common/EnumMap.h +++ b/jni/love/src/common/EnumMap.h @@ -26,7 +26,7 @@ namespace love { -template +template class EnumMap { public: @@ -37,14 +37,14 @@ public: U u; }; - EnumMap(Entry *entries, unsigned size) + EnumMap(const Entry *entries, unsigned int size) { - unsigned n = size/sizeof(Entry); + unsigned int n = size / sizeof(Entry); - for (unsigned i = 0; i +template class StringMap { public: @@ -37,18 +37,16 @@ public: T value; }; - StringMap(Entry *entries, unsigned num) + StringMap(const Entry *entries, unsigned int num) { - for (unsigned i = 0; i < SIZE; ++i) - reverse[i] = 0; + for (unsigned int i = 0; i < SIZE; ++i) + reverse[i] = nullptr; - unsigned n = num/sizeof(Entry); + unsigned int n = num / sizeof(Entry); - for (unsigned i = 0; i < n; ++i) - { + for (unsigned int i = 0; i < n; ++i) add(entries[i].key, entries[i].value); - } } bool streq(const char *a, const char *b) @@ -57,6 +55,7 @@ public: { if (*a != *b) return false; + ++a; ++b; } @@ -66,11 +65,11 @@ public: bool find(const char *key, T &t) { - unsigned str_hash = djb2(key); + unsigned int str_hash = djb2(key); - for (unsigned i = 0; i < MAX; ++i) + for (unsigned int i = 0; i < MAX; ++i) { - unsigned str_i = (str_hash + i) % MAX; + unsigned int str_i = (str_hash + i) % MAX; if (!records[str_i].set) return false; @@ -85,14 +84,14 @@ public: return false; } - bool find(T key, const char *&str) + bool find(T key, const char *&str) { - unsigned index = (unsigned)key; + unsigned int index = (unsigned int) key; if (index >= SIZE) return false; - if (reverse[index] != 0) + if (reverse[index] != nullptr) { str = reverse[index]; return true; @@ -105,12 +104,12 @@ public: bool add(const char *key, T value) { - unsigned str_hash = djb2(key); + unsigned int str_hash = djb2(key); bool inserted = false; - for (unsigned i = 0; i < MAX; ++i) + for (unsigned int i = 0; i < MAX; ++i) { - unsigned str_i = (str_hash + i) % MAX; + unsigned int str_i = (str_hash + i) % MAX; if (!records[str_i].set) { @@ -122,11 +121,11 @@ public: } } - unsigned index = (unsigned)value; + unsigned int index = (unsigned int) value; if (index >= SIZE) { - printf("\nConstant %s out of bounds with %i!\n", key, index); + printf("Constant %s out of bounds with %u!\n", key, index); return false; } @@ -135,9 +134,9 @@ public: return inserted; } - unsigned djb2(const char *key) + unsigned int djb2(const char *key) { - unsigned hash = 5381; + unsigned int hash = 5381; int c; while ((c = *key++)) @@ -156,7 +155,7 @@ private: Record() : set(false) {} }; - const static unsigned MAX = SIZE*2; + static const unsigned int MAX = SIZE * 2; Record records[MAX]; const char *reverse[SIZE]; diff --git a/jni/love/src/common/Variant.h b/jni/love/src/common/Variant.h index 4592a2fa..dd8b68fa 100644 --- a/jni/love/src/common/Variant.h +++ b/jni/love/src/common/Variant.h @@ -48,7 +48,6 @@ public: static Variant *fromLua(lua_State *L, int n, bool allowTables = true); void toLua(lua_State *L); -private: enum Type { UNKNOWN = 0, @@ -74,6 +73,8 @@ private: void *userdata; std::vector > *table; } data; + +private: love::Type udatatype; bits flags; diff --git a/jni/love/src/common/int.h b/jni/love/src/common/int.h index ac57f89e..9cffea60 100644 --- a/jni/love/src/common/int.h +++ b/jni/love/src/common/int.h @@ -21,11 +21,10 @@ #ifndef LOVE_INT_H #define LOVE_INT_H -#include "common/config.h" - -#ifndef LOVE_WINDOWS +// C standard sized integer types. +// This header was added to Visual studio in VS 2012, which is LOVE's current +// minimum supported VS version (as of this comment's commit date.) #include -#endif #define LOVE_INT8_MAX 0x7F #define LOVE_UINT8_MAX 0xFF @@ -39,26 +38,14 @@ namespace love { -// Blame Microsoft -#ifdef LOVE_WINDOWS - typedef __int8 int8; - typedef unsigned __int8 uint8; - typedef __int16 int16; - typedef unsigned __int16 uint16; - typedef __int32 int32; - typedef unsigned __int32 uint32; - typedef __int64 int64; - typedef unsigned __int64 uint64; -#else // LOVE_WINDOWS - typedef int8_t int8; - typedef uint8_t uint8; - typedef int16_t int16; - typedef uint16_t uint16; - typedef int32_t int32; - typedef uint32_t uint32; - typedef int64_t int64; - typedef uint64_t uint64; -#endif // LOVE_WINDOWS +typedef int8_t int8; +typedef uint8_t uint8; +typedef int16_t int16; +typedef uint16_t uint16; +typedef int32_t int32; +typedef uint32_t uint32; +typedef int64_t int64; +typedef uint64_t uint64; } // love diff --git a/jni/love/src/common/runtime.cpp b/jni/love/src/common/runtime.cpp index e4da8991..72009017 100644 --- a/jni/love/src/common/runtime.cpp +++ b/jni/love/src/common/runtime.cpp @@ -538,7 +538,7 @@ int luax_insist(lua_State *L, int idx, const char *k) { // Convert to absolute index if necessary. if (idx < 0 && idx > LUA_REGISTRYINDEX) - idx = lua_gettop(L) + ++idx; + idx += lua_gettop(L) + 1; lua_getfield(L, idx, k); diff --git a/jni/love/src/modules/event/sdl/Event.cpp b/jni/love/src/modules/event/sdl/Event.cpp index 5cbf2115..8c3a44d7 100644 --- a/jni/love/src/modules/event/sdl/Event.cpp +++ b/jni/love/src/modules/event/sdl/Event.cpp @@ -24,6 +24,7 @@ #include "mouse/Mouse.h" #include "joystick/JoystickModule.h" #include "joystick/sdl/Joystick.h" +#include "touch/sdl/Touch.h" #include "graphics/Graphics.h" #include "window/Window.h" #include "common/Exception.h" @@ -123,6 +124,7 @@ Message *Event::convert(const SDL_Event &e) const vargs.reserve(4); love::keyboard::Keyboard *kb = nullptr; + love::touch::sdl::Touch *touch = nullptr; love::keyboard::Keyboard::Key key; love::mouse::Mouse::Button button; @@ -214,6 +216,11 @@ Message *Event::convert(const SDL_Event &e) const case SDL_FINGERDOWN: case SDL_FINGERUP: case SDL_FINGERMOTION: + // We need to update the love.touch.sdl internal state from here. + touch = (touch::sdl::Touch *) Module::getInstance("love.touch.sdl"); + if (touch) + touch->onEvent(e.tfinger); + vargs.push_back(new Variant((double) e.tfinger.fingerId)); vargs.push_back(new Variant((double) e.tfinger.x)); vargs.push_back(new Variant((double) e.tfinger.y)); @@ -312,10 +319,7 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy)); vargs.push_back(new Variant((double)(e.jaxis.axis+1))); - float value = e.jaxis.value / 32768.0f; - if (fabsf(value) < 0.001f) value = 0.0f; - if (value < -0.99f) value = -1.0f; - if (value > 0.99f) value = 1.0f; + float value = joystick::Joystick::clampval(e.jaxis.value / 32768.0f); vargs.push_back(new Variant((double) value)); msg = new Message("joystickaxis", vargs); } @@ -364,12 +368,8 @@ Message *Event::convertJoystickEvent(const SDL_Event &e) const break; vargs.push_back(new Variant(JOYSTICK_JOYSTICK_ID, (void *) &proxy)); - vargs.push_back(new Variant(txt, strlen(txt))); - float value = e.jaxis.value / 32768.0f; - if (fabsf(value) < 0.001f) value = 0.0f; - if (value < -0.99f) value = -1.0f; - if (value > 0.99f) value = 1.0f; + float value = joystick::Joystick::clampval(e.caxis.value / 32768.0f); vargs.push_back(new Variant((double) value)); msg = new Message("gamepadaxis", vargs); } diff --git a/jni/love/src/modules/event/sdl/Event.h b/jni/love/src/modules/event/sdl/Event.h index 7b8df4ac..1028a721 100644 --- a/jni/love/src/modules/event/sdl/Event.h +++ b/jni/love/src/modules/event/sdl/Event.h @@ -80,7 +80,7 @@ private: static EnumMap::Entry buttonEntries[]; static EnumMap buttons; -}; // System +}; // Event } // sdl } // event diff --git a/jni/love/src/modules/graphics/opengl/ParticleSystem.cpp b/jni/love/src/modules/graphics/opengl/ParticleSystem.cpp index 4979fc69..6922e347 100644 --- a/jni/love/src/modules/graphics/opengl/ParticleSystem.cpp +++ b/jni/love/src/modules/graphics/opengl/ParticleSystem.cpp @@ -286,8 +286,8 @@ void ParticleSystem::initParticle(Particle *p, float t) min = speedMin; max = speedMax; float speed = (float) rng.random(min, max); - p->speed = love::Vector(cosf(p->direction), sinf(p->direction)); - p->speed *= speed; + p->velocity = love::Vector(cosf(p->direction), sinf(p->direction)); + p->velocity *= speed; p->linearAcceleration.x = (float) rng.random(linearAccelerationMin.x, linearAccelerationMax.x); p->linearAcceleration.y = (float) rng.random(linearAccelerationMin.y, linearAccelerationMax.y); @@ -312,7 +312,7 @@ void ParticleSystem::initParticle(Particle *p, float t) p->angle = p->rotation; if (relativeRotation) - p->angle += atan2f(p->speed.y, p->speed.x); + p->angle += atan2f(p->velocity.y, p->velocity.x); p->color = colors[0]; } @@ -920,11 +920,11 @@ void ParticleSystem::update(float dt) // Resize tangential. tangential *= p->tangentialAcceleration; - // Update position. - p->speed += (radial+tangential+p->linearAcceleration)*dt; + // Update velocity. + p->velocity += (radial + tangential + p->linearAcceleration) * dt; // Modify position. - ppos += p->speed * dt; + ppos += p->velocity * dt; p->position[0] = ppos.getX(); p->position[1] = ppos.getY(); @@ -937,7 +937,7 @@ void ParticleSystem::update(float dt) p->angle = p->rotation; if (relativeRotation) - p->angle += atan2f(p->speed.y, p->speed.x); + p->angle += atan2f(p->velocity.y, p->velocity.x); // Change size according to given intervals: // i = 0 1 2 3 n-1 diff --git a/jni/love/src/modules/graphics/opengl/ParticleSystem.h b/jni/love/src/modules/graphics/opengl/ParticleSystem.h index 97de1ece..fd8470eb 100644 --- a/jni/love/src/modules/graphics/opengl/ParticleSystem.h +++ b/jni/love/src/modules/graphics/opengl/ParticleSystem.h @@ -517,7 +517,7 @@ protected: // Particles gravitate towards this point. love::Vector origin; - love::Vector speed; + love::Vector velocity; love::Vector linearAcceleration; float radialAcceleration; float tangentialAcceleration; diff --git a/jni/love/src/modules/graphics/opengl/Shader.cpp b/jni/love/src/modules/graphics/opengl/Shader.cpp index 8858fd18..bd629da4 100644 --- a/jni/love/src/modules/graphics/opengl/Shader.cpp +++ b/jni/love/src/modules/graphics/opengl/Shader.cpp @@ -193,8 +193,16 @@ void Shader::createProgram(const std::vector &shaderids) if (!GLAD_ES_VERSION_2_0 && i <= int(OpenGL::ATTRIB_COLOR)) continue; + OpenGL::VertexAttrib attrib = (OpenGL::VertexAttrib) i; + + // FIXME: We skip this both because pseudo-instancing is temporarily + // disabled (see graphics.lua), and because binding a non-existant + // attribute name to a location causes a shader linker warning. + if (attrib == OpenGL::ATTRIB_PSEUDO_INSTANCE_ID) + continue; + const char *name = nullptr; - if (attribNames.find((OpenGL::VertexAttrib) i, name)) + if (attribNames.find(attrib, name)) glBindAttribLocation(program, i, (const GLchar *) name); } @@ -254,7 +262,7 @@ void Shader::mapActiveUniforms() } // If this is a built-in (LOVE-created) uniform, store the location. - BuiltinExtern builtin; + BuiltinUniform builtin; if (builtinNames.find(u.name.c_str(), builtin)) builtinUniforms[int(builtin)] = u.location; @@ -685,19 +693,36 @@ int Shader::getTextureUnit(const std::string &name) return texunit; } +Shader::UniformType Shader::getExternVariable(const std::string &name, int &components, int &count) +{ + auto it = uniforms.find(name); + + if (it == uniforms.end()) + { + components = 0; + count = 0; + return UNIFORM_UNKNOWN; + } + + components = getUniformTypeSize(it->second.type); + count = (int) it->second.count; + + return it->second.baseType; +} + bool Shader::hasVertexAttrib(OpenGL::VertexAttrib attrib) const { return vertexAttributes[int(attrib)] != -1; } -bool Shader::hasBuiltinExtern(BuiltinExtern builtin) const +bool Shader::hasBuiltinUniform(BuiltinUniform builtin) const { return builtinUniforms[int(builtin)] != -1; } -bool Shader::sendBuiltinFloat(BuiltinExtern builtin, int size, const GLfloat *vec, int count) +bool Shader::sendBuiltinFloat(BuiltinUniform builtin, int size, const GLfloat *vec, int count) { - if (!hasBuiltinExtern(builtin)) + if (!hasBuiltinUniform(builtin)) return false; GLint location = builtinUniforms[int(builtin)]; @@ -725,9 +750,9 @@ bool Shader::sendBuiltinFloat(BuiltinExtern builtin, int size, const GLfloat *ve return true; } -bool Shader::sendBuiltinMatrix(BuiltinExtern builtin, int size, const GLfloat *m, int count) +bool Shader::sendBuiltinMatrix(BuiltinUniform builtin, int size, const GLfloat *m, int count) { - if (!hasBuiltinExtern(builtin)) + if (!hasBuiltinUniform(builtin)) return false; GLint location = builtinUniforms[GLint(builtin)]; @@ -818,6 +843,16 @@ bool Shader::isSupported() return GLAD_ES_VERSION_2_0 || (GLAD_VERSION_2_0 && getGLSLVersion() >= "1.2"); } +bool Shader::getConstant(const char *in, UniformType &out) +{ + return uniformTypes.find(in, out); +} + +bool Shader::getConstant(UniformType in, const char *&out) +{ + return uniformTypes.find(in, out); +} + StringMap::Entry Shader::typeNameEntries[] = { {"vertex", Shader::TYPE_VERTEX}, @@ -826,6 +861,17 @@ StringMap::Entry Shader::typeNameEntr StringMap Shader::typeNames(Shader::typeNameEntries, sizeof(Shader::typeNameEntries)); +StringMap::Entry Shader::uniformTypeEntries[] = +{ + {"float", Shader::UNIFORM_FLOAT}, + {"int", Shader::UNIFORM_INT}, + {"bool", Shader::UNIFORM_BOOL}, + {"image", Shader::UNIFORM_SAMPLER}, + {"unknown", Shader::UNIFORM_UNKNOWN}, +}; + +StringMap Shader::uniformTypes(Shader::uniformTypeEntries, sizeof(Shader::uniformTypeEntries)); + StringMap::Entry Shader::attribNameEntries[] = { {"VertexPosition", OpenGL::ATTRIB_POS}, @@ -836,7 +882,7 @@ StringMap::Entry Shader::attribNa StringMap Shader::attribNames(Shader::attribNameEntries, sizeof(Shader::attribNameEntries)); -StringMap::Entry Shader::builtinNameEntries[] = +StringMap::Entry Shader::builtinNameEntries[] = { {"TransformMatrix", Shader::BUILTIN_TRANSFORM_MATRIX}, {"ProjectionMatrix", Shader::BUILTIN_PROJECTION_MATRIX}, @@ -845,7 +891,7 @@ StringMap::Entry Shader::builti {"love_ScreenSize", Shader::BUILTIN_SCREEN_SIZE}, }; -StringMap Shader::builtinNames(Shader::builtinNameEntries, sizeof(Shader::builtinNameEntries)); +StringMap Shader::builtinNames(Shader::builtinNameEntries, sizeof(Shader::builtinNameEntries)); } // opengl } // graphics diff --git a/jni/love/src/modules/graphics/opengl/Shader.h b/jni/love/src/modules/graphics/opengl/Shader.h index c5d20ba0..550b50a0 100644 --- a/jni/love/src/modules/graphics/opengl/Shader.h +++ b/jni/love/src/modules/graphics/opengl/Shader.h @@ -60,8 +60,8 @@ public: TYPE_MAX_ENUM }; - // Built-in extern (uniform) variables. - enum BuiltinExtern + // Built-in uniform (extern) variables. + enum BuiltinUniform { BUILTIN_TRANSFORM_MATRIX = 0, BUILTIN_PROJECTION_MATRIX, @@ -71,6 +71,17 @@ public: BUILTIN_MAX_ENUM }; + // Types of potential uniform (extern) variables used in love's shaders. + enum UniformType + { + UNIFORM_FLOAT, + UNIFORM_INT, + UNIFORM_BOOL, + UNIFORM_SAMPLER, + UNIFORM_UNKNOWN, + UNIFORM_MAX_ENUM + }; + // Type for a list of shader source codes in the form of sources[shadertype] = code typedef std::map ShaderSources; @@ -143,13 +154,26 @@ public: **/ void sendTexture(const std::string &name, Texture *texture); + /** + * Gets the type, number of components, and number of array elements of + * an active 'extern' (uniform) variable in the shader. If a uniform + * variable with the specified name doesn't exist, returns UNIFORM_UNKNOWN + * and sets the 'components' and 'count' values to 0. + * + * @param name The name of the uniform variable in the source code. + * @param[out] components Number of components of the variable (2 for vec2.) + * @param[out] count Number of array elements, if the variable is an array. + * @return The base type of the uniform variable. + **/ + UniformType getExternVariable(const std::string &name, int &components, int &count); + /** * Internal use only. **/ bool hasVertexAttrib(OpenGL::VertexAttrib attrib) const; - bool hasBuiltinExtern(BuiltinExtern builtin) const; - bool sendBuiltinMatrix(BuiltinExtern builtin, int size, const GLfloat *m, int count); - bool sendBuiltinFloat(BuiltinExtern builtin, int size, const GLfloat *m, int count); + bool hasBuiltinUniform(BuiltinUniform builtin) const; + bool sendBuiltinMatrix(BuiltinUniform builtin, int size, const GLfloat *m, int count); + bool sendBuiltinFloat(BuiltinUniform builtin, int size, const GLfloat *m, int count); void checkSetScreenParams(); const std::map &getBoundRetainables() const; @@ -160,17 +184,10 @@ public: // Default code used when renderers require code for a shader stage. static ShaderSources defaultCode[Graphics::RENDERER_MAX_ENUM]; -private: + static bool getConstant(const char *in, UniformType &out); + static bool getConstant(UniformType in, const char *&out); - // Types of potential uniform variables used in love's shaders. - enum UniformType - { - UNIFORM_FLOAT, - UNIFORM_INT, - UNIFORM_BOOL, - UNIFORM_SAMPLER, - UNIFORM_UNKNOWN - }; +private: // Represents a single uniform/extern shader variable. struct Uniform @@ -241,13 +258,15 @@ private: static StringMap::Entry typeNameEntries[]; static StringMap typeNames; + static StringMap::Entry uniformTypeEntries[]; + static StringMap uniformTypes; + // Names for the generic vertex attributes used by love. static StringMap::Entry attribNameEntries[]; static StringMap attribNames; - // Names for the built-in uniform variables. - static StringMap::Entry builtinNameEntries[]; - static StringMap builtinNames; + static StringMap::Entry builtinNameEntries[]; + static StringMap builtinNames; }; // Shader diff --git a/jni/love/src/modules/graphics/opengl/SpriteBatch.cpp b/jni/love/src/modules/graphics/opengl/SpriteBatch.cpp index a10f07a7..eb7fd2ff 100644 --- a/jni/love/src/modules/graphics/opengl/SpriteBatch.cpp +++ b/jni/love/src/modules/graphics/opengl/SpriteBatch.cpp @@ -111,7 +111,7 @@ int SpriteBatch::add(float x, float y, float a, float sx, float sy, float ox, fl memcpy(sprite, texture->getVertices(), sizeof(Vertex) * 4); // Transform. - static Matrix t; + Matrix t; t.setTransformation(x, y, a, sx, sy, ox, oy, kx, ky); t.transform(sprite, sprite, 4); @@ -138,7 +138,7 @@ int SpriteBatch::addq(Quad *quad, float x, float y, float a, float sx, float sy, // Needed for colors. memcpy(sprite, quad->getVertices(), sizeof(Vertex) * 4); - static Matrix t; + Matrix t; t.setTransformation(x, y, a, sx, sy, ox, oy, kx, ky); t.transform(sprite, sprite, 4); diff --git a/jni/love/src/modules/graphics/opengl/wrap_Mesh.cpp b/jni/love/src/modules/graphics/opengl/wrap_Mesh.cpp index c70d7970..e075d017 100644 --- a/jni/love/src/modules/graphics/opengl/wrap_Mesh.cpp +++ b/jni/love/src/modules/graphics/opengl/wrap_Mesh.cpp @@ -147,6 +147,9 @@ int w_Mesh_getVertices(lua_State *L) size_t count = t->getVertexCount(); lua_createtable(L, count, 0); + if (count == 0 || vertices == nullptr) + return 1; + for (size_t i = 0; i < count; i++) { // Create vertex table. diff --git a/jni/love/src/modules/graphics/opengl/wrap_Shader.cpp b/jni/love/src/modules/graphics/opengl/wrap_Shader.cpp index dde23fde..ed3ee1ed 100644 --- a/jni/love/src/modules/graphics/opengl/wrap_Shader.cpp +++ b/jni/love/src/modules/graphics/opengl/wrap_Shader.cpp @@ -346,6 +346,38 @@ int w_Shader_send(lua_State *L) return luaL_argerror(L, 3, "number, boolean, table, image, or canvas expected"); } +int w_Shader_getExternVariable(lua_State *L) +{ + Shader *shader = luax_checkshader(L, 1); + const char *name = luaL_checkstring(L, 2); + + int components = 0; + int arrayelements = 0; + Shader::UniformType type = Shader::UNIFORM_UNKNOWN; + + type = shader->getExternVariable(name, components, arrayelements); + + // Check if the variable exists (function will set components to 0 if not.) + if (components > 0) + { + const char *tname = nullptr; + if (!Shader::getConstant(type, tname)) + return luaL_error(L, "Unknown extern variable type name."); + + lua_pushstring(L, tname); + lua_pushinteger(L, components); + lua_pushinteger(L, arrayelements); + } + else + { + lua_pushnil(L); + lua_pushnil(L); + lua_pushnil(L); + } + + return 3; +} + static const luaL_Reg functions[] = { { "getWarnings", w_Shader_getWarnings }, @@ -355,6 +387,7 @@ static const luaL_Reg functions[] = { "sendMatrix", w_Shader_sendMatrix }, { "sendTexture", w_Shader_sendTexture }, { "send", w_Shader_send }, + { "getExternVariable", w_Shader_getExternVariable }, // Deprecated since 0.9.1. { "sendImage", w_Shader_sendTexture }, diff --git a/jni/love/src/modules/graphics/opengl/wrap_Shader.h b/jni/love/src/modules/graphics/opengl/wrap_Shader.h index be7b81db..f8929539 100644 --- a/jni/love/src/modules/graphics/opengl/wrap_Shader.h +++ b/jni/love/src/modules/graphics/opengl/wrap_Shader.h @@ -38,6 +38,7 @@ int w_Shader_sendFloat(lua_State *L); int w_Shader_sendMatrix(lua_State *L); int w_Shader_sendTexture(lua_State *L); int w_Shader_send(lua_State *L); +int w_Shader_getExternVariable(lua_State *L); extern "C" int luaopen_shader(lua_State *L); } // opengl diff --git a/jni/love/src/modules/joystick/Joystick.cpp b/jni/love/src/modules/joystick/Joystick.cpp index 03946abc..fb0b7242 100644 --- a/jni/love/src/modules/joystick/Joystick.cpp +++ b/jni/love/src/modules/joystick/Joystick.cpp @@ -29,7 +29,7 @@ namespace love namespace joystick { -float Joystick::clampval(float x) const +float Joystick::clampval(float x) { if (fabsf(x) < 0.01) return 0.0f; diff --git a/jni/love/src/modules/joystick/Joystick.h b/jni/love/src/modules/joystick/Joystick.h index d2d57fa2..dde6bebd 100644 --- a/jni/love/src/modules/joystick/Joystick.h +++ b/jni/love/src/modules/joystick/Joystick.h @@ -173,9 +173,7 @@ public: static bool getConstant(const char *in, InputType &out); static bool getConstant(InputType in, const char *&out); -protected: - - float clampval(float x) const; + static float clampval(float x); private: diff --git a/jni/love/src/modules/keyboard/sdl/Keyboard.cpp b/jni/love/src/modules/keyboard/sdl/Keyboard.cpp index b8df1645..55082b9a 100644 --- a/jni/love/src/modules/keyboard/sdl/Keyboard.cpp +++ b/jni/love/src/modules/keyboard/sdl/Keyboard.cpp @@ -51,12 +51,11 @@ bool Keyboard::hasKeyRepeat() const bool Keyboard::isDown(Key *keylist) const { - const Uint8 *keystate = SDL_GetKeyboardState(0); - std::map::const_iterator it; + const Uint8 *keystate = SDL_GetKeyboardState(nullptr); for (Key key = *keylist; key != KEY_MAX_ENUM; key = *(++keylist)) { - it = keys.find(key); + auto it = keys.find(key); if (it != keys.end() && keystate[SDL_GetScancodeFromKey(it->second)]) return true; } diff --git a/jni/love/src/modules/keyboard/sdl/Keyboard.h b/jni/love/src/modules/keyboard/sdl/Keyboard.h index 56271b80..9b7a5f2c 100644 --- a/jni/love/src/modules/keyboard/sdl/Keyboard.h +++ b/jni/love/src/modules/keyboard/sdl/Keyboard.h @@ -56,6 +56,8 @@ public: private: + // Whether holding down a key triggers repeated key press events. + // The real implementation is in love::event::sdl::Event::Convert. bool key_repeat; static std::map createKeyMap(); diff --git a/jni/love/src/modules/keyboard/wrap_Keyboard.cpp b/jni/love/src/modules/keyboard/wrap_Keyboard.cpp index fc986b94..da46ba3d 100644 --- a/jni/love/src/modules/keyboard/wrap_Keyboard.cpp +++ b/jni/love/src/modules/keyboard/wrap_Keyboard.cpp @@ -29,7 +29,7 @@ namespace love namespace keyboard { -static Keyboard *instance = 0; +static Keyboard *instance = nullptr; int w_setKeyRepeat(lua_State *L) { @@ -87,7 +87,7 @@ static const luaL_Reg functions[] = extern "C" int luaopen_love_keyboard(lua_State *L) { - if (instance == 0) + if (instance == nullptr) { EXCEPT_GUARD(instance = new love::keyboard::sdl::Keyboard();) } diff --git a/jni/love/src/modules/math/RandomGenerator.cpp b/jni/love/src/modules/math/RandomGenerator.cpp index 0e26d3e8..6b14390f 100644 --- a/jni/love/src/modules/math/RandomGenerator.cpp +++ b/jni/love/src/modules/math/RandomGenerator.cpp @@ -77,10 +77,15 @@ void RandomGenerator::setSeed(RandomGenerator::Seed newseed) { // 0 xor 0 is still 0, so Xorshift can't generate new numbers. if (newseed.b64 == 0) - throw love::Exception("Invalid random seed."); + throw love::Exception("Random seed cannot be 0."); seed = newseed; rng_state = seed; + + // Xorshift's first couple results after seeding will be similar to results + // from very similar seeds, so we immediately discard them here. + for (int i = 0; i < 2; i++) + rand(); } RandomGenerator::Seed RandomGenerator::getSeed() const diff --git a/jni/love/src/modules/mouse/sdl/Cursor.cpp b/jni/love/src/modules/mouse/sdl/Cursor.cpp index 37dea9fb..809cd6a4 100644 --- a/jni/love/src/modules/mouse/sdl/Cursor.cpp +++ b/jni/love/src/modules/mouse/sdl/Cursor.cpp @@ -30,7 +30,7 @@ namespace sdl { Cursor::Cursor(image::ImageData *data, int hotx, int hoty) - : cursor(0) + : cursor(nullptr) , type(CURSORTYPE_IMAGE) , systemType(CURSOR_MAX_ENUM) { @@ -63,7 +63,7 @@ Cursor::Cursor(image::ImageData *data, int hotx, int hoty) } Cursor::Cursor(mouse::Cursor::SystemCursor cursortype) - : cursor(0) + : cursor(nullptr) , type(CURSORTYPE_SYSTEM) , systemType(cursortype) { diff --git a/jni/love/src/modules/mouse/sdl/Mouse.cpp b/jni/love/src/modules/mouse/sdl/Mouse.cpp index 7b1ff67e..0741c346 100644 --- a/jni/love/src/modules/mouse/sdl/Mouse.cpp +++ b/jni/love/src/modules/mouse/sdl/Mouse.cpp @@ -75,7 +75,7 @@ const char *Mouse::getName() const } Mouse::Mouse() - : curCursor(0) + : curCursor(nullptr) { } @@ -191,7 +191,7 @@ void Mouse::setVisible(bool visible) bool Mouse::isDown(Button *buttonlist) const { - Uint32 buttonstate = SDL_GetMouseState(0, 0); + Uint32 buttonstate = SDL_GetMouseState(nullptr, nullptr); for (Button button = *buttonlist; button != BUTTON_MAX_ENUM; button = *(++buttonlist)) { diff --git a/jni/love/src/modules/mouse/wrap_Cursor.cpp b/jni/love/src/modules/mouse/wrap_Cursor.cpp index bb245cfb..240aedb5 100644 --- a/jni/love/src/modules/mouse/wrap_Cursor.cpp +++ b/jni/love/src/modules/mouse/wrap_Cursor.cpp @@ -36,7 +36,7 @@ int w_Cursor_getType(lua_State *L) Cursor *cursor = luax_checkcursor(L, 1); Cursor::CursorType ctype = cursor->getType(); - const char *typestr = 0; + const char *typestr = nullptr; if (ctype == Cursor::CURSORTYPE_IMAGE) mouse::Cursor::getConstant(ctype, typestr); diff --git a/jni/love/src/modules/mouse/wrap_Mouse.cpp b/jni/love/src/modules/mouse/wrap_Mouse.cpp index 1ba9b2bc..ea68f31d 100644 --- a/jni/love/src/modules/mouse/wrap_Mouse.cpp +++ b/jni/love/src/modules/mouse/wrap_Mouse.cpp @@ -30,11 +30,11 @@ namespace love namespace mouse { -static Mouse *instance = 0; +static Mouse *instance = nullptr; int w_newCursor(lua_State *L) { - Cursor *cursor = 0; + Cursor *cursor = nullptr; if (lua_isstring(L, 1) || luax_istype(L, 1, FILESYSTEM_FILE_T) || luax_istype(L, 1, FILESYSTEM_FILE_DATA_T)) luax_convobj(L, 1, "image", "newImageData"); @@ -212,7 +212,7 @@ static const lua_CFunction types[] = extern "C" int luaopen_love_mouse(lua_State *L) { - if (instance == 0) + if (instance == nullptr) { EXCEPT_GUARD(instance = new love::mouse::sdl::Mouse();) } diff --git a/jni/love/src/modules/physics/box2d/Physics.cpp b/jni/love/src/modules/physics/box2d/Physics.cpp index a76aca20..a016c7a0 100644 --- a/jni/love/src/modules/physics/box2d/Physics.cpp +++ b/jni/love/src/modules/physics/box2d/Physics.cpp @@ -133,12 +133,12 @@ int Physics::newPolygonShape(lua_State *L) int Physics::newChainShape(lua_State *L) { int argc = lua_gettop(L)-1; // first argument is looping + if (argc % 2 != 0) + return luaL_error(L, "Number of vertex components must be a multiple of two."); + int vcount = (int)argc/2; - b2ChainShape *s = new b2ChainShape(); - bool loop = luax_toboolean(L, 1); - b2Vec2 *vecs = new b2Vec2[vcount]; for (int i = 0; i // LOVE -#include -#include +#include "common/Variant.h" +#include "threads.h" namespace love { namespace thread { + class Channel : public love::Object { // FOR WRAPPER USE ONLY @@ -40,8 +41,10 @@ friend void retainVariant(Channel *, Variant *); friend void releaseVariant(Channel *, Variant *); public: + Channel(); ~Channel(); + static Channel *getChannel(const std::string &name); unsigned long push(Variant *var); @@ -56,6 +59,7 @@ public: void release(); private: + Channel(const std::string &name); void lockMutex(); void unlockMutex(); @@ -68,7 +72,9 @@ private: unsigned long sent; unsigned long received; + }; // Channel + } // thread } // love diff --git a/jni/love/src/modules/thread/LuaThread.h b/jni/love/src/modules/thread/LuaThread.h index e7eaab6e..e5722a75 100644 --- a/jni/love/src/modules/thread/LuaThread.h +++ b/jni/love/src/modules/thread/LuaThread.h @@ -25,15 +25,16 @@ #include // LOVE -#include -#include -#include -#include +#include "common/Data.h" +#include "common/Object.h" +#include "common/Variant.h" +#include "threads.h" namespace love { namespace thread { + class LuaThread : public love::Object, public Threadable { public: @@ -55,7 +56,9 @@ private: Variant **args; int nargs; -}; + +}; // LuaThread + } // thread } // love diff --git a/jni/love/src/modules/thread/Thread.h b/jni/love/src/modules/thread/Thread.h index 23c82b12..7adaeda9 100644 --- a/jni/love/src/modules/thread/Thread.h +++ b/jni/love/src/modules/thread/Thread.h @@ -22,8 +22,8 @@ #define LOVE_THREAD_THREAD_H // LOVE -#include -#include +#include "common/runtime.h" +#include "common/Object.h" namespace love { diff --git a/jni/love/src/modules/thread/sdl/Thread.h b/jni/love/src/modules/thread/sdl/Thread.h index ac2a860b..ea1f48de 100644 --- a/jni/love/src/modules/thread/sdl/Thread.h +++ b/jni/love/src/modules/thread/sdl/Thread.h @@ -22,7 +22,7 @@ #define LOVE_THREAD_SDL_THREAD_H // LOVE -#include +#include "thread/Thread.h" #include "threads.h" // SDL @@ -34,6 +34,7 @@ namespace thread { namespace sdl { + class Thread : public thread::Thread { public: diff --git a/jni/love/src/modules/thread/sdl/threads.cpp b/jni/love/src/modules/thread/sdl/threads.cpp index 80bec15f..f40cc265 100644 --- a/jni/love/src/modules/thread/sdl/threads.cpp +++ b/jni/love/src/modules/thread/sdl/threads.cpp @@ -27,6 +27,7 @@ namespace thread { namespace sdl { + Mutex::Mutex() { mutex = SDL_CreateMutex(); @@ -81,6 +82,11 @@ bool Conditional::wait(thread::Mutex *_mutex, int timeout) } // sdl + +/** + * Implementations of the functions declared in src/modules/threads.h. + **/ + thread::Mutex *newMutex() { return new sdl::Mutex(); diff --git a/jni/love/src/modules/thread/sdl/threads.h b/jni/love/src/modules/thread/sdl/threads.h index 9521196c..9916784d 100644 --- a/jni/love/src/modules/thread/sdl/threads.h +++ b/jni/love/src/modules/thread/sdl/threads.h @@ -21,8 +21,8 @@ #ifndef LOVE_THREAD_SDL_THREADS_H #define LOVE_THREAD_SDL_THREADS_H -#include -#include +#include "common/config.h" +#include "thread/threads.h" #include @@ -32,11 +32,13 @@ namespace thread { namespace sdl { + class Conditional; class Mutex : public thread::Mutex { public: + Mutex(); ~Mutex(); @@ -44,15 +46,18 @@ public: void unlock(); private: + SDL_mutex *mutex; Mutex(const Mutex&/* mutex*/) {} friend class Conditional; -}; + +}; // Mutex class Conditional : public thread::Conditional { public: + Conditional(); ~Conditional(); @@ -61,8 +66,10 @@ public: bool wait(thread::Mutex *mutex, int timeout=-1); private: + SDL_cond *cond; -}; + +}; // Conditional } // sdl } // thread diff --git a/jni/love/src/modules/thread/threads.h b/jni/love/src/modules/thread/threads.h index 7c1a26c1..f4c887e9 100644 --- a/jni/love/src/modules/thread/threads.h +++ b/jni/love/src/modules/thread/threads.h @@ -21,7 +21,7 @@ #ifndef LOVE_THREAD_THREADS_H #define LOVE_THREAD_THREADS_H -#include +#include "common/config.h" #include "Thread.h" namespace love diff --git a/jni/love/src/modules/touch/sdl/Touch.cpp b/jni/love/src/modules/touch/sdl/Touch.cpp index 9b944352..4dda8d34 100644 --- a/jni/love/src/modules/touch/sdl/Touch.cpp +++ b/jni/love/src/modules/touch/sdl/Touch.cpp @@ -23,9 +23,6 @@ #include "common/Exception.h" #include "Touch.h" -// SDL -#include - namespace love { namespace touch @@ -35,52 +32,25 @@ namespace sdl int Touch::getTouchCount() const { - int count = 0; - - for (int i = 0; i < SDL_GetNumTouchDevices(); i++) - count += SDL_GetNumTouchFingers(SDL_GetTouchDevice(i)); - - return count; + return (int) touches.size(); } Touch::TouchInfo Touch::getTouch(int index) const { - SDL_TouchID deviceID = 0; + if (index < 0) + throw love::Exception("Invalid touch index: %d", index); - int touchcount = 0; - int fingerindex = -1; + std::map::const_iterator it = touches.begin(); - // Find the device and finger index from the given external index. - for (int i = 0; i < SDL_GetNumTouchDevices(); i++) + // We can't do something like "touches.begin() + index", so we get the + // value at the index by iterating from the beginning of the map. + for (int i = 0; i < index; i++) { - deviceID = SDL_GetTouchDevice(i); - int fingercount = SDL_GetNumTouchFingers(deviceID); - - if (index < touchcount + fingercount) - { - fingerindex = index - touchcount; - break; - } - - touchcount += fingercount; + if (++it == touches.end()) + throw love::Exception("Invalid touch index: %d", index); } - if (fingerindex < 0) - throw love::Exception("Invalid touch index."); - - SDL_Finger *finger = SDL_GetTouchFinger(deviceID, fingerindex); - - if (finger == nullptr) - throw love::Exception("Cannot get touch info."); - - TouchInfo info = {}; - - info.id = (int64) finger->id; - info.x = finger->x; - info.y = finger->y; - info.pressure = finger->pressure; - - return info; + return it->second; } const char *Touch::getName() const @@ -88,6 +58,29 @@ const char *Touch::getName() const return "love.touch.sdl"; } +void Touch::onEvent(const SDL_TouchFingerEvent &event) +{ + TouchInfo info = { + (int64) event.fingerId, + event.x, + event.y, + event.pressure + }; + + switch (event.type) + { + case SDL_FINGERDOWN: + case SDL_FINGERMOTION: + touches[info.id] = info; + break; + case SDL_FINGERUP: + touches.erase(info.id); + break; + default: + break; + } +} + } // sdl } // touch } // love diff --git a/jni/love/src/modules/touch/sdl/Touch.h b/jni/love/src/modules/touch/sdl/Touch.h index c1314042..ec730458 100644 --- a/jni/love/src/modules/touch/sdl/Touch.h +++ b/jni/love/src/modules/touch/sdl/Touch.h @@ -24,6 +24,12 @@ // LOVE #include "touch/Touch.h" +// C++ +#include + +// SDL +#include + namespace love { namespace touch @@ -43,6 +49,18 @@ public: // Implements Module. virtual const char *getName() const; + // SDL has functions to query the state of touch presses, but unfortunately + // they are updated on a different thread in some backends, which causes + // issues especially if the user is iterating through the current touches + // when they're updated. So we only update our touch press state in + // love::event::sdl::Event::convert. + void onEvent(const SDL_TouchFingerEvent &event); + +private: + + // All current touches, indexed by their IDs. + std::map touches; + }; // Touch } // sdl diff --git a/jni/love/src/scripts/boot.lua b/jni/love/src/scripts/boot.lua index 51310283..7ea5473c 100644 --- a/jni/love/src/scripts/boot.lua +++ b/jni/love/src/scripts/boot.lua @@ -295,7 +295,7 @@ function love.boot() -- before the save directory (the identity should be appended.) pcall(love.filesystem.setIdentity, identity, true) - if can_has_game and not (love.filesystem.exists("main.lua") or love.filesystem.exists("conf.lua")) then + if can_has_game and not (love.filesystem.isFile("main.lua") or love.filesystem.isFile("conf.lua")) then no_game_code = true end @@ -352,7 +352,7 @@ function love.init() } -- If config file exists, load it and allow it to update config table. - if not love.conf and love.filesystem and love.filesystem.exists("conf.lua") then + if not love.conf and love.filesystem and love.filesystem.isFile("conf.lua") then require("conf") end @@ -434,7 +434,7 @@ function love.init() if love.filesystem then love.filesystem.setIdentity(c.identity or love.filesystem.getIdentity(), c.appendidentity) - if love.filesystem.exists("main.lua") then + if love.filesystem.isFile("main.lua") then require("main") end end @@ -486,7 +486,6 @@ function love.run() if love.math then love.math.setRandomSeed(os.time()) - for i=1,3 do love.math.random() end end if love.event then diff --git a/jni/love/src/scripts/boot.lua.h b/jni/love/src/scripts/boot.lua.h index 617dc82c..6cdf8799 100644 --- a/jni/love/src/scripts/boot.lua.h +++ b/jni/love/src/scripts/boot.lua.h @@ -553,9 +553,9 @@ const unsigned char boot_lua[] = 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x2c, 0x20, 0x74, 0x72, 0x75, 0x65, 0x29, 0x0a, 0x09, 0x69, 0x66, 0x20, 0x63, 0x61, 0x6e, 0x5f, 0x68, 0x61, 0x73, 0x5f, 0x67, 0x61, 0x6d, 0x65, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x28, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, - 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x28, 0x22, 0x6d, 0x61, 0x69, 0x6e, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x69, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6c, 0x75, 0x61, 0x22, 0x29, 0x20, 0x6f, 0x72, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, - 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x28, 0x22, 0x63, 0x6f, + 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x2e, 0x69, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x2e, 0x6c, 0x75, 0x61, 0x22, 0x29, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x09, 0x09, 0x6e, 0x6f, 0x5f, 0x67, 0x61, 0x6d, 0x65, 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x3d, 0x20, 0x74, 0x72, 0x75, 0x65, 0x0a, @@ -639,7 +639,7 @@ const unsigned char boot_lua[] = 0x09, 0x69, 0x66, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x63, 0x6f, 0x6e, 0x66, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, - 0x74, 0x65, 0x6d, 0x2e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x28, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x2e, 0x6c, + 0x74, 0x65, 0x6d, 0x2e, 0x69, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x2e, 0x6c, 0x75, 0x61, 0x22, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x09, 0x09, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x63, 0x6f, 0x6e, 0x66, 0x22, 0x29, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x0a, @@ -775,7 +775,7 @@ const unsigned char boot_lua[] = 0x29, 0x2c, 0x20, 0x63, 0x2e, 0x61, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x74, 0x79, 0x29, 0x0a, 0x09, 0x09, 0x69, 0x66, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x2e, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x28, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6c, 0x75, + 0x65, 0x6d, 0x2e, 0x69, 0x73, 0x46, 0x69, 0x6c, 0x65, 0x28, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x2e, 0x6c, 0x75, 0x61, 0x22, 0x29, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x09, 0x09, 0x09, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x28, 0x22, 0x6d, 0x61, 0x69, 0x6e, 0x22, 0x29, 0x0a, 0x09, 0x09, 0x65, 0x6e, 0x64, 0x0a, @@ -877,9 +877,6 @@ const unsigned char boot_lua[] = 0x09, 0x69, 0x66, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6d, 0x61, 0x74, 0x68, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, 0x09, 0x09, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x73, 0x65, 0x74, 0x52, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x53, 0x65, 0x65, 0x64, 0x28, 0x6f, 0x73, 0x2e, 0x74, 0x69, 0x6d, 0x65, 0x28, 0x29, 0x29, 0x0a, - 0x09, 0x09, 0x66, 0x6f, 0x72, 0x20, 0x69, 0x3d, 0x31, 0x2c, 0x33, 0x20, 0x64, 0x6f, 0x20, 0x6c, 0x6f, 0x76, - 0x65, 0x2e, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x72, 0x61, 0x6e, 0x64, 0x6f, 0x6d, 0x28, 0x29, 0x20, 0x65, 0x6e, - 0x64, 0x0a, 0x09, 0x65, 0x6e, 0x64, 0x0a, 0x09, 0x69, 0x66, 0x20, 0x6c, 0x6f, 0x76, 0x65, 0x2e, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x20, 0x74, 0x68, 0x65, 0x6e, 0x0a, diff --git a/jni/love/src/scripts/graphics.lua.h b/jni/love/src/scripts/graphics.lua.h index ea75ea32..67080b9c 100644 --- a/jni/love/src/scripts/graphics.lua.h +++ b/jni/love/src/scripts/graphics.lua.h @@ -6490,7 +6490,7 @@ const unsigned char graphics_lua[] = 0x09, 0x09, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x53, 0x59, 0x4e, 0x54, 0x41, 0x58, 0x2c, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x56, 0x45, 0x52, 0x54, 0x45, 0x58, 0x2e, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x2c, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x55, 0x4e, 0x49, 0x46, 0x4f, 0x52, 0x4d, 0x53, 0x2c, 0x0a, - 0x09, 0x09, 0x09, 0x22, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x22, 0x2c, 0x0a, + 0x09, 0x09, 0x09, 0x22, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x30, 0x22, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x76, 0x65, 0x72, 0x74, 0x65, 0x78, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x56, 0x45, 0x52, 0x54, 0x45, 0x58, 0x2e, 0x46, 0x4f, 0x4f, 0x54, 0x45, 0x52, 0x2c, 0x0a, @@ -6509,7 +6509,7 @@ const unsigned char graphics_lua[] = 0x09, 0x09, 0x09, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x53, 0x59, 0x4e, 0x54, 0x41, 0x58, 0x2c, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x50, 0x49, 0x58, 0x45, 0x4c, 0x2e, 0x48, 0x45, 0x41, 0x44, 0x45, 0x52, 0x2c, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x55, 0x4e, 0x49, 0x46, 0x4f, 0x52, 0x4d, 0x53, 0x2c, 0x0a, - 0x09, 0x09, 0x09, 0x22, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x31, 0x22, 0x2c, 0x0a, + 0x09, 0x09, 0x09, 0x22, 0x23, 0x6c, 0x69, 0x6e, 0x65, 0x20, 0x30, 0x22, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x70, 0x69, 0x78, 0x65, 0x6c, 0x63, 0x6f, 0x64, 0x65, 0x2c, 0x0a, 0x09, 0x09, 0x09, 0x69, 0x73, 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x6e, 0x76, 0x61, 0x73, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x50, 0x49, 0x58, 0x45, 0x4c, 0x2e, 0x46, 0x4f, 0x4f,