Merge pull request #10921 from karroffel/gdnative-MERGE-EVERYTHING
[GDNative] merge of NativeScript and GDNative, new GDNative singletons
This commit is contained in:
commit
e979e50b7d
51 changed files with 295 additions and 164 deletions
|
@ -2,12 +2,16 @@
|
|||
|
||||
Import('env')
|
||||
|
||||
env.add_source_files(env.modules_sources, "*.cpp")
|
||||
env.add_source_files(env.modules_sources, "godot/*.cpp")
|
||||
gdn_env = env.Clone()
|
||||
|
||||
env.Append(CPPFLAGS=['-DGDAPI_BUILT_IN'])
|
||||
env.Append(CPPPATH=['#modules/gdnative/'])
|
||||
gdn_env.add_source_files(env.modules_sources, "*.cpp")
|
||||
gdn_env.add_source_files(env.modules_sources, "gdnative/*.cpp")
|
||||
gdn_env.add_source_files(env.modules_sources, "nativescript/*.cpp")
|
||||
|
||||
gdn_env.Append(CPPFLAGS=['-DGDAPI_BUILT_IN'])
|
||||
gdn_env.Append(CPPPATH=['#modules/gdnative/include/'])
|
||||
|
||||
if "platform" in env and env["platform"] == "x11": # there has to be a better solution?
|
||||
env.Append(LINKFLAGS=["-rdynamic"])
|
||||
|
||||
env.use_ptrcall = True
|
||||
|
|
|
@ -100,6 +100,11 @@ GDNativeLibrary::~GDNativeLibrary() {
|
|||
void GDNativeLibrary::_bind_methods() {
|
||||
ClassDB::bind_method(D_METHOD("set_library_path", "platform", "path"), &GDNativeLibrary::set_library_path);
|
||||
ClassDB::bind_method(D_METHOD("get_library_path", "platform"), &GDNativeLibrary::get_library_path);
|
||||
|
||||
ClassDB::bind_method(D_METHOD("is_singleton_gdnative"), &GDNativeLibrary::is_singleton_gdnative);
|
||||
ClassDB::bind_method(D_METHOD("set_singleton_gdnative", "singleton"), &GDNativeLibrary::set_singleton_gdnative);
|
||||
|
||||
ADD_PROPERTYNZ(PropertyInfo(Variant::BOOL, "singleton_gdnative"), "set_singleton_gdnative", "is_singleton_gdnative");
|
||||
}
|
||||
|
||||
bool GDNativeLibrary::_set(const StringName &p_name, const Variant &p_value) {
|
||||
|
@ -175,7 +180,6 @@ GDNative::GDNative() {
|
|||
}
|
||||
|
||||
GDNative::~GDNative() {
|
||||
// TODO(karroffel): implement ALL the things!
|
||||
}
|
||||
|
||||
extern "C" void _api_anchor();
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
#include "os/thread_safe.h"
|
||||
#include "resource.h"
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include "gdnative/gdnative.h"
|
||||
|
||||
class GDNativeLibrary : public Resource {
|
||||
GDCLASS(GDNativeLibrary, Resource)
|
||||
|
@ -77,6 +77,8 @@ class GDNativeLibrary : public Resource {
|
|||
|
||||
String library_paths[NUM_PLATFORMS];
|
||||
|
||||
bool singleton_gdnative = false;
|
||||
|
||||
protected:
|
||||
bool _set(const StringName &p_name, const Variant &p_value);
|
||||
bool _get(const StringName &p_name, Variant &r_ret) const;
|
||||
|
@ -92,6 +94,9 @@ public:
|
|||
String get_library_path(StringName p_platform) const;
|
||||
|
||||
String get_active_library_path() const;
|
||||
|
||||
_FORCE_INLINE_ bool is_singleton_gdnative() const { return singleton_gdnative; }
|
||||
_FORCE_INLINE_ void set_singleton_gdnative(bool p_singleton) { singleton_gdnative = p_singleton; }
|
||||
};
|
||||
|
||||
typedef godot_variant (*native_call_cb)(void *, godot_string *, godot_array *);
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/array.h>
|
||||
#include "gdnative/array.h"
|
||||
|
||||
#include "core/array.h"
|
||||
#include "core/os/memory.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/basis.h>
|
||||
#include "gdnative/basis.h"
|
||||
|
||||
#include "core/math/matrix3.h"
|
||||
#include "core/variant.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/color.h>
|
||||
#include "gdnative/color.h"
|
||||
|
||||
#include "core/color.h"
|
||||
#include "core/variant.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/dictionary.h>
|
||||
#include "gdnative/dictionary.h"
|
||||
|
||||
#include "core/variant.h"
|
||||
// core/variant.h before to avoid compile errors with MSVC
|
|
@ -27,11 +27,10 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/gdnative.h>
|
||||
#include "gdnative/gdnative.h"
|
||||
|
||||
#include "class_db.h"
|
||||
#include "error_macros.h"
|
||||
#include "gdnative.h"
|
||||
#include "global_constants.h"
|
||||
#include "os/os.h"
|
||||
#include "project_settings.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/node_path.h>
|
||||
#include "gdnative/node_path.h"
|
||||
|
||||
#include "core/node_path.h"
|
||||
#include "core/variant.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/plane.h>
|
||||
#include "gdnative/plane.h"
|
||||
|
||||
#include "core/math/plane.h"
|
||||
#include "core/variant.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/pool_arrays.h>
|
||||
#include "gdnative/pool_arrays.h"
|
||||
|
||||
#include "array.h"
|
||||
#include "core/variant.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/quat.h>
|
||||
#include "gdnative/quat.h"
|
||||
|
||||
#include "core/math/quat.h"
|
||||
#include "core/variant.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/rect2.h>
|
||||
#include "gdnative/rect2.h"
|
||||
|
||||
#include "core/math/math_2d.h"
|
||||
#include "core/variant.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/rect3.h>
|
||||
#include "gdnative/rect3.h"
|
||||
|
||||
#include "core/math/rect3.h"
|
||||
#include "core/variant.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/rid.h>
|
||||
#include "gdnative/rid.h"
|
||||
|
||||
#include "core/resource.h"
|
||||
#include "core/rid.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/string.h>
|
||||
#include "gdnative/string.h"
|
||||
|
||||
#include "core/variant.h"
|
||||
#include "string_db.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/transform.h>
|
||||
#include "gdnative/transform.h"
|
||||
|
||||
#include "core/math/transform.h"
|
||||
#include "core/variant.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/transform2d.h>
|
||||
#include "gdnative/transform2d.h"
|
||||
|
||||
#include "core/math/math_2d.h"
|
||||
#include "core/variant.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/variant.h>
|
||||
#include "gdnative/variant.h"
|
||||
|
||||
#include "core/variant.h"
|
||||
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/vector2.h>
|
||||
#include "gdnative/vector2.h"
|
||||
|
||||
#include "core/math/math_2d.h"
|
||||
#include "core/variant.h"
|
|
@ -27,7 +27,7 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include <godot/vector3.h>
|
||||
#include "gdnative/vector3.h"
|
||||
|
||||
#include "core/variant.h"
|
||||
#include "core/vector.h"
|
|
@ -1,23 +0,0 @@
|
|||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="StreamTexture"
|
||||
path="res://.import/icon.png-aa47d037a37fb38b3b7e7828e4eec407.stex"
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/lossy_quality=0.7
|
||||
compress/hdr_mode=0
|
||||
compress/normal_map=0
|
||||
flags/repeat=0
|
||||
flags/filter=true
|
||||
flags/mipmaps=false
|
||||
flags/anisotropic=false
|
||||
flags/srgb=2
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/HDR_as_SRGB=false
|
||||
stream=false
|
||||
size_limit=0
|
||||
detect_3d=true
|
|
@ -46,10 +46,10 @@ typedef struct {
|
|||
} godot_array;
|
||||
#endif
|
||||
|
||||
#include <godot/pool_arrays.h>
|
||||
#include <godot/variant.h>
|
||||
#include <gdnative/pool_arrays.h>
|
||||
#include <gdnative/variant.h>
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
|
||||
void GDAPI godot_array_new(godot_array *r_dest);
|
||||
void GDAPI godot_array_new_copy(godot_array *r_dest, const godot_array *p_src);
|
|
@ -45,9 +45,9 @@ typedef struct {
|
|||
} godot_basis;
|
||||
#endif
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <godot/quat.h>
|
||||
#include <godot/vector3.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
#include <gdnative/quat.h>
|
||||
#include <gdnative/vector3.h>
|
||||
|
||||
void GDAPI godot_basis_new_with_rows(godot_basis *r_dest, const godot_vector3 *p_x_axis, const godot_vector3 *p_y_axis, const godot_vector3 *p_z_axis);
|
||||
void GDAPI godot_basis_new_with_axis_and_angle(godot_basis *r_dest, const godot_vector3 *p_axis, const godot_real p_phi);
|
|
@ -45,8 +45,8 @@ typedef struct {
|
|||
} godot_color;
|
||||
#endif
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <godot/string.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
#include <gdnative/string.h>
|
||||
|
||||
void GDAPI godot_color_new_rgba(godot_color *r_dest, const godot_real p_r, const godot_real p_g, const godot_real p_b, const godot_real p_a);
|
||||
void GDAPI godot_color_new_rgb(godot_color *r_dest, const godot_real p_r, const godot_real p_g, const godot_real p_b);
|
|
@ -45,9 +45,9 @@ typedef struct {
|
|||
} godot_dictionary;
|
||||
#endif
|
||||
|
||||
#include <godot/array.h>
|
||||
#include <godot/gdnative.h>
|
||||
#include <godot/variant.h>
|
||||
#include <gdnative/array.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
#include <gdnative/variant.h>
|
||||
|
||||
void GDAPI godot_dictionary_new(godot_dictionary *r_dest);
|
||||
void GDAPI godot_dictionary_new_copy(godot_dictionary *r_dest, const godot_dictionary *p_src);
|
|
@ -146,100 +146,74 @@ typedef float godot_real;
|
|||
/////// Object (forward declared)
|
||||
typedef void godot_object;
|
||||
|
||||
/////// Brute force forward declarations for the rest
|
||||
/*
|
||||
typedef struct godot_variant godot_variant;
|
||||
typedef struct godot_string godot_string;
|
||||
typedef struct godot_vector2 godot_vector2;
|
||||
typedef struct godot_rect2 godot_rect2;
|
||||
typedef struct godot_vector3 godot_vector3;
|
||||
typedef struct godot_transform2d godot_transform2d;
|
||||
typedef struct godot_plane godot_plane;
|
||||
typedef struct godot_quat godot_quat;
|
||||
typedef struct godot_rect3 godot_rect3;
|
||||
typedef struct godot_basis godot_basis;
|
||||
typedef struct godot_transform godot_transform;
|
||||
typedef struct godot_color godot_color;
|
||||
typedef struct godot_node_path godot_node_path;
|
||||
typedef struct godot_rid godot_rid;
|
||||
typedef struct godot_dictionary godot_dictionary;
|
||||
typedef struct godot_array godot_array;
|
||||
typedef struct godot_pool_byte_array godot_pool_byte_array;
|
||||
typedef struct godot_pool_int_array godot_pool_int_array;
|
||||
typedef struct godot_pool_real_array godot_pool_real_array;
|
||||
typedef struct godot_pool_string_array godot_pool_string_array;
|
||||
typedef struct godot_pool_vector2_array godot_pool_vector2_array;
|
||||
typedef struct godot_pool_vector3_array godot_pool_vector3_array;
|
||||
typedef struct godot_pool_color_array godot_pool_color_array;
|
||||
*/
|
||||
/////// String
|
||||
|
||||
#include <godot/string.h>
|
||||
#include <gdnative/string.h>
|
||||
|
||||
////// Vector2
|
||||
|
||||
#include <godot/vector2.h>
|
||||
#include <gdnative/vector2.h>
|
||||
|
||||
////// Rect2
|
||||
|
||||
#include <godot/rect2.h>
|
||||
#include <gdnative/rect2.h>
|
||||
|
||||
////// Vector3
|
||||
|
||||
#include <godot/vector3.h>
|
||||
#include <gdnative/vector3.h>
|
||||
|
||||
////// Transform2D
|
||||
|
||||
#include <godot/transform2d.h>
|
||||
#include <gdnative/transform2d.h>
|
||||
|
||||
/////// Plane
|
||||
|
||||
#include <godot/plane.h>
|
||||
#include <gdnative/plane.h>
|
||||
|
||||
/////// Quat
|
||||
|
||||
#include <godot/quat.h>
|
||||
#include <gdnative/quat.h>
|
||||
|
||||
/////// Rect3
|
||||
|
||||
#include <godot/rect3.h>
|
||||
#include <gdnative/rect3.h>
|
||||
|
||||
/////// Basis
|
||||
|
||||
#include <godot/basis.h>
|
||||
#include <gdnative/basis.h>
|
||||
|
||||
/////// Transform
|
||||
|
||||
#include <godot/transform.h>
|
||||
#include <gdnative/transform.h>
|
||||
|
||||
/////// Color
|
||||
|
||||
#include <godot/color.h>
|
||||
#include <gdnative/color.h>
|
||||
|
||||
/////// NodePath
|
||||
|
||||
#include <godot/node_path.h>
|
||||
#include <gdnative/node_path.h>
|
||||
|
||||
/////// RID
|
||||
|
||||
#include <godot/rid.h>
|
||||
#include <gdnative/rid.h>
|
||||
|
||||
/////// Dictionary
|
||||
|
||||
#include <godot/dictionary.h>
|
||||
#include <gdnative/dictionary.h>
|
||||
|
||||
/////// Array
|
||||
|
||||
#include <godot/array.h>
|
||||
#include <gdnative/array.h>
|
||||
|
||||
// single API file for Pool*Array
|
||||
#include <godot/pool_arrays.h>
|
||||
#include <gdnative/pool_arrays.h>
|
||||
|
||||
void GDAPI godot_object_destroy(godot_object *p_o);
|
||||
|
||||
////// Variant
|
||||
|
||||
#include <godot/variant.h>
|
||||
#include <gdnative/variant.h>
|
||||
|
||||
////// Singleton API
|
||||
|
|
@ -45,8 +45,8 @@ typedef struct {
|
|||
} godot_node_path;
|
||||
#endif
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <godot/string.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
#include <gdnative/string.h>
|
||||
|
||||
void GDAPI godot_node_path_new(godot_node_path *r_dest, const godot_string *p_from);
|
||||
void GDAPI godot_node_path_new_copy(godot_node_path *r_dest, const godot_node_path *p_src);
|
|
@ -45,8 +45,8 @@ typedef struct {
|
|||
} godot_plane;
|
||||
#endif
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <godot/vector3.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
#include <gdnative/vector3.h>
|
||||
|
||||
void GDAPI godot_plane_new_with_reals(godot_plane *r_dest, const godot_real p_a, const godot_real p_b, const godot_real p_c, const godot_real p_d);
|
||||
void GDAPI godot_plane_new_with_vectors(godot_plane *r_dest, const godot_vector3 *p_v1, const godot_vector3 *p_v2, const godot_vector3 *p_v3);
|
|
@ -113,12 +113,12 @@ typedef struct {
|
|||
} godot_pool_color_array;
|
||||
#endif
|
||||
|
||||
#include <godot/array.h>
|
||||
#include <godot/color.h>
|
||||
#include <godot/vector2.h>
|
||||
#include <godot/vector3.h>
|
||||
#include <gdnative/array.h>
|
||||
#include <gdnative/color.h>
|
||||
#include <gdnative/vector2.h>
|
||||
#include <gdnative/vector3.h>
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
|
||||
// byte
|
||||
|
|
@ -45,8 +45,8 @@ typedef struct {
|
|||
} godot_quat;
|
||||
#endif
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <godot/vector3.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
#include <gdnative/vector3.h>
|
||||
|
||||
void GDAPI godot_quat_new(godot_quat *r_dest, const godot_real p_x, const godot_real p_y, const godot_real p_z, const godot_real p_w);
|
||||
void GDAPI godot_quat_new_with_axis_angle(godot_quat *r_dest, const godot_vector3 *p_axis, const godot_real p_angle);
|
|
@ -43,8 +43,8 @@ typedef struct godot_rect2 {
|
|||
} godot_rect2;
|
||||
#endif
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <godot/vector2.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
#include <gdnative/vector2.h>
|
||||
|
||||
void GDAPI godot_rect2_new_with_position_and_size(godot_rect2 *r_dest, const godot_vector2 *p_pos, const godot_vector2 *p_size);
|
||||
void GDAPI godot_rect2_new(godot_rect2 *r_dest, const godot_real p_x, const godot_real p_y, const godot_real p_width, const godot_real p_height);
|
|
@ -45,9 +45,9 @@ typedef struct {
|
|||
} godot_rect3;
|
||||
#endif
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <godot/plane.h>
|
||||
#include <godot/vector3.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
#include <gdnative/plane.h>
|
||||
#include <gdnative/vector3.h>
|
||||
|
||||
void GDAPI godot_rect3_new(godot_rect3 *r_dest, const godot_vector3 *p_pos, const godot_vector3 *p_size);
|
||||
|
|
@ -45,7 +45,7 @@ typedef struct {
|
|||
} godot_rid;
|
||||
#endif
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
|
||||
void GDAPI godot_rid_new(godot_rid *r_dest);
|
||||
|
|
@ -46,8 +46,8 @@ typedef struct {
|
|||
} godot_string;
|
||||
#endif
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <godot/variant.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
#include <gdnative/variant.h>
|
||||
|
||||
void GDAPI godot_string_new(godot_string *r_dest);
|
||||
void GDAPI godot_string_new_copy(godot_string *r_dest, const godot_string *p_src);
|
|
@ -45,10 +45,10 @@ typedef struct {
|
|||
} godot_transform;
|
||||
#endif
|
||||
|
||||
#include <godot/basis.h>
|
||||
#include <godot/gdnative.h>
|
||||
#include <godot/variant.h>
|
||||
#include <godot/vector3.h>
|
||||
#include <gdnative/basis.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
#include <gdnative/variant.h>
|
||||
#include <gdnative/vector3.h>
|
||||
|
||||
void GDAPI godot_transform_new_with_axis_origin(godot_transform *r_dest, const godot_vector3 *p_x_axis, const godot_vector3 *p_y_axis, const godot_vector3 *p_z_axis, const godot_vector3 *p_origin);
|
||||
void GDAPI godot_transform_new(godot_transform *r_dest, const godot_basis *p_basis, const godot_vector3 *p_origin);
|
|
@ -45,9 +45,9 @@ typedef struct {
|
|||
} godot_transform2d;
|
||||
#endif
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <godot/variant.h>
|
||||
#include <godot/vector2.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
#include <gdnative/variant.h>
|
||||
#include <gdnative/vector2.h>
|
||||
|
||||
void GDAPI godot_transform2d_new(godot_transform2d *r_dest, const godot_real p_rot, const godot_vector2 *p_pos);
|
||||
void GDAPI godot_transform2d_new_axis_origin(godot_transform2d *r_dest, const godot_vector2 *p_x_axis, const godot_vector2 *p_y_axis, const godot_vector2 *p_origin);
|
|
@ -99,25 +99,25 @@ typedef struct godot_variant_call_error {
|
|||
godot_variant_type expected;
|
||||
} godot_variant_call_error;
|
||||
|
||||
#include <godot/array.h>
|
||||
#include <godot/basis.h>
|
||||
#include <godot/color.h>
|
||||
#include <godot/dictionary.h>
|
||||
#include <godot/node_path.h>
|
||||
#include <godot/plane.h>
|
||||
#include <godot/pool_arrays.h>
|
||||
#include <godot/quat.h>
|
||||
#include <godot/rect2.h>
|
||||
#include <godot/rect3.h>
|
||||
#include <godot/rid.h>
|
||||
#include <godot/string.h>
|
||||
#include <godot/transform.h>
|
||||
#include <godot/transform2d.h>
|
||||
#include <godot/variant.h>
|
||||
#include <godot/vector2.h>
|
||||
#include <godot/vector3.h>
|
||||
#include <gdnative/array.h>
|
||||
#include <gdnative/basis.h>
|
||||
#include <gdnative/color.h>
|
||||
#include <gdnative/dictionary.h>
|
||||
#include <gdnative/node_path.h>
|
||||
#include <gdnative/plane.h>
|
||||
#include <gdnative/pool_arrays.h>
|
||||
#include <gdnative/quat.h>
|
||||
#include <gdnative/rect2.h>
|
||||
#include <gdnative/rect3.h>
|
||||
#include <gdnative/rid.h>
|
||||
#include <gdnative/string.h>
|
||||
#include <gdnative/transform.h>
|
||||
#include <gdnative/transform2d.h>
|
||||
#include <gdnative/variant.h>
|
||||
#include <gdnative/vector2.h>
|
||||
#include <gdnative/vector3.h>
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
|
||||
godot_variant_type GDAPI godot_variant_get_type(const godot_variant *p_v);
|
||||
|
|
@ -45,7 +45,7 @@ typedef struct {
|
|||
} godot_vector2;
|
||||
#endif
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
|
||||
void GDAPI godot_vector2_new(godot_vector2 *r_dest, const godot_real p_x, const godot_real p_y);
|
||||
|
|
@ -45,8 +45,8 @@ typedef struct {
|
|||
} godot_vector3;
|
||||
#endif
|
||||
|
||||
#include <godot/basis.h>
|
||||
#include <godot/gdnative.h>
|
||||
#include <gdnative/basis.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
|
||||
typedef enum {
|
||||
GODOT_VECTOR3_AXIS_X,
|
|
@ -30,7 +30,7 @@
|
|||
#ifndef GODOT_NATIVESCRIPT_H
|
||||
#define GODOT_NATIVESCRIPT_H
|
||||
|
||||
#include <godot/gdnative.h>
|
||||
#include <gdnative/gdnative.h>
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
|
@ -27,17 +27,17 @@
|
|||
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
|
||||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include "godot_nativescript.h"
|
||||
|
||||
#include "nativescript.h"
|
||||
#include "nativescript/godot_nativescript.h"
|
||||
|
||||
#include "class_db.h"
|
||||
#include "error_macros.h"
|
||||
#include "gdnative.h"
|
||||
#include "gdnative/gdnative.h"
|
||||
#include "global_constants.h"
|
||||
#include "project_settings.h"
|
||||
#include "variant.h"
|
||||
|
||||
#include "nativescript.h"
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
|
@ -29,7 +29,7 @@
|
|||
/*************************************************************************/
|
||||
#include "nativescript.h"
|
||||
|
||||
#include "modules/gdnative/godot/gdnative.h"
|
||||
#include "gdnative/gdnative.h"
|
||||
|
||||
#include "global_constants.h"
|
||||
#include "io/file_access_encrypted.h"
|
|
@ -38,8 +38,8 @@
|
|||
#include "script_language.h"
|
||||
#include "self_list.h"
|
||||
|
||||
#include "godot_nativescript.h"
|
||||
#include "modules/gdnative/gdnative.h"
|
||||
#include <nativescript/godot_nativescript.h>
|
||||
|
||||
#ifndef NO_THREADS
|
||||
#include "os/mutex.h"
|
|
@ -28,12 +28,99 @@
|
|||
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
|
||||
/*************************************************************************/
|
||||
#include "register_types.h"
|
||||
#include "gdnative/gdnative.h"
|
||||
|
||||
#include "gdnative.h"
|
||||
|
||||
#include "io/resource_loader.h"
|
||||
#include "io/resource_saver.h"
|
||||
|
||||
#include "nativescript/register_types.h"
|
||||
|
||||
#include "core/engine.h"
|
||||
#include "core/os/os.h"
|
||||
#include "core/project_settings.h"
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
#include "editor/editor_node.h"
|
||||
|
||||
// Class used to discover singleton gdnative files
|
||||
|
||||
void actual_discoverer_handler();
|
||||
|
||||
class GDNativeSingletonDiscover : public Object {
|
||||
// GDCLASS(GDNativeSingletonDiscover, Object)
|
||||
|
||||
virtual String get_class() const {
|
||||
// okay, this is a really dirty hack.
|
||||
// We're overriding get_class so we can connect it to a signal
|
||||
// This works because get_class is a virtual method, so we don't
|
||||
// need to register a new class to ClassDB just for this one
|
||||
// little signal.
|
||||
|
||||
actual_discoverer_handler();
|
||||
|
||||
return "Object";
|
||||
}
|
||||
};
|
||||
|
||||
Set<String> get_gdnative_singletons(EditorFileSystemDirectory *p_dir) {
|
||||
|
||||
Set<String> file_paths;
|
||||
|
||||
// check children
|
||||
|
||||
for (int i = 0; i < p_dir->get_file_count(); i++) {
|
||||
String file_name = p_dir->get_file(i);
|
||||
String file_type = p_dir->get_file_type(i);
|
||||
|
||||
if (file_type != "GDNativeLibrary") {
|
||||
continue;
|
||||
}
|
||||
|
||||
Ref<GDNativeLibrary> lib = ResourceLoader::load(p_dir->get_file_path(i));
|
||||
if (lib.is_valid() && lib->is_singleton_gdnative()) {
|
||||
file_paths.insert(p_dir->get_file_path(i));
|
||||
}
|
||||
}
|
||||
|
||||
// check subdirectories
|
||||
for (int i = 0; i < p_dir->get_subdir_count(); i++) {
|
||||
Set<String> paths = get_gdnative_singletons(p_dir->get_subdir(i));
|
||||
|
||||
for (Set<String>::Element *E = paths.front(); E; E = E->next()) {
|
||||
file_paths.insert(E->get());
|
||||
}
|
||||
}
|
||||
|
||||
return file_paths;
|
||||
}
|
||||
|
||||
void actual_discoverer_handler() {
|
||||
EditorFileSystemDirectory *dir = EditorFileSystem::get_singleton()->get_filesystem();
|
||||
|
||||
Set<String> file_paths = get_gdnative_singletons(dir);
|
||||
|
||||
Array files;
|
||||
files.resize(file_paths.size());
|
||||
int i = 0;
|
||||
for (Set<String>::Element *E = file_paths.front(); E; i++, E = E->next()) {
|
||||
files.set(i, E->get());
|
||||
}
|
||||
|
||||
ProjectSettings::get_singleton()->set("gdnative/singletons", files);
|
||||
|
||||
ProjectSettings::get_singleton()->save();
|
||||
}
|
||||
|
||||
GDNativeSingletonDiscover *discoverer = NULL;
|
||||
|
||||
void discoverer_callback() {
|
||||
discoverer = memnew(GDNativeSingletonDiscover);
|
||||
EditorFileSystem::get_singleton()->connect("filesystem_changed", discoverer, "get_class");
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
godot_variant cb_standard_varcall(void *handle, godot_string *p_procedure, godot_array *p_args) {
|
||||
if (handle == NULL) {
|
||||
|
@ -62,21 +149,110 @@ godot_variant cb_standard_varcall(void *handle, godot_string *p_procedure, godot
|
|||
return proc(NULL, p_args);
|
||||
}
|
||||
|
||||
void cb_singleton_call(
|
||||
void *p_handle,
|
||||
godot_string *p_proc_name,
|
||||
void *p_data,
|
||||
int p_num_args,
|
||||
void **p_args,
|
||||
void *r_return) {
|
||||
if (p_handle == NULL) {
|
||||
ERR_PRINT("No valid library handle, can't call singleton procedure");
|
||||
return;
|
||||
}
|
||||
|
||||
void *singleton_proc;
|
||||
Error err = OS::get_singleton()->get_dynamic_library_symbol_handle(
|
||||
p_handle,
|
||||
*(String *)p_proc_name,
|
||||
singleton_proc);
|
||||
|
||||
if (err != OK) {
|
||||
return;
|
||||
}
|
||||
|
||||
void (*singleton_procedure_ptr)() = (void (*)())singleton_proc;
|
||||
singleton_procedure_ptr();
|
||||
}
|
||||
|
||||
GDNativeCallRegistry *GDNativeCallRegistry::singleton;
|
||||
|
||||
Vector<Ref<GDNative> > singleton_gdnatives;
|
||||
|
||||
void register_gdnative_types() {
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
|
||||
if (Engine::get_singleton()->is_editor_hint()) {
|
||||
EditorNode::add_init_callback(discoverer_callback);
|
||||
}
|
||||
#endif
|
||||
|
||||
ClassDB::register_class<GDNativeLibrary>();
|
||||
ClassDB::register_class<GDNative>();
|
||||
|
||||
GDNativeCallRegistry::singleton = memnew(GDNativeCallRegistry);
|
||||
|
||||
GDNativeCallRegistry::singleton->register_native_call_type("standard_varcall", cb_standard_varcall);
|
||||
|
||||
GDNativeCallRegistry::singleton->register_native_raw_call_type("gdnative_singleton_call", cb_singleton_call);
|
||||
|
||||
register_nativescript_types();
|
||||
|
||||
// run singletons
|
||||
|
||||
Array singletons = ProjectSettings::get_singleton()->get("gdnative/singletons");
|
||||
|
||||
singleton_gdnatives.resize(singletons.size());
|
||||
|
||||
for (int i = 0; i < singletons.size(); i++) {
|
||||
String path = singletons[i];
|
||||
|
||||
Ref<GDNativeLibrary> lib = ResourceLoader::load(path);
|
||||
|
||||
singleton_gdnatives[i].instance();
|
||||
singleton_gdnatives[i]->set_library(lib);
|
||||
|
||||
if (!singleton_gdnatives[i]->initialize()) {
|
||||
// Can't initialize. Don't make a native_call then
|
||||
continue;
|
||||
}
|
||||
|
||||
singleton_gdnatives[i]->call_native_raw(
|
||||
"gdnative_singleton_call",
|
||||
"godot_gdnative_singleton",
|
||||
NULL,
|
||||
0,
|
||||
NULL,
|
||||
NULL);
|
||||
}
|
||||
}
|
||||
|
||||
void unregister_gdnative_types() {
|
||||
|
||||
for (int i = 0; i < singleton_gdnatives.size(); i++) {
|
||||
|
||||
if (singleton_gdnatives[i].is_null()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!singleton_gdnatives[i]->is_initialized()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
singleton_gdnatives[i]->terminate();
|
||||
}
|
||||
|
||||
unregister_nativescript_types();
|
||||
|
||||
memdelete(GDNativeCallRegistry::singleton);
|
||||
|
||||
#ifdef TOOLS_ENABLED
|
||||
if (Engine::get_singleton()->is_editor_hint()) {
|
||||
memdelete(discoverer);
|
||||
}
|
||||
#endif
|
||||
|
||||
// This is for printing out the sizes of the core types
|
||||
|
||||
/*
|
||||
|
|
|
@ -1,8 +0,0 @@
|
|||
|
||||
|
||||
def can_build(platform):
|
||||
return True
|
||||
|
||||
|
||||
def configure(env):
|
||||
env.use_ptrcall = True
|
Loading…
Reference in a new issue