After talking to @touilleMan and @reduz in Paris (it was awesome!!!) I'm writing down this proposal.
GDNative is a nice way to use third party libraries in your game or just optimize performance critical code, but it could also be used to add "extensions" to Godot (for the lack of a better name, "plugin" and "add-on" are already taken ๐ )
A GDNativeScript represents one class in a GDNativeLibrary. To have any effect, this script must be attached to any object. This is cool to write game code or wrap third party code in a class.
The current way to "extend" Godot is via plugins (or more precisely, "editor plugins"). These plugins can do a lot of awesome things, but they all only run in the editor. GDNative scripts can be used to make plugins as well, but they can't do anything that will have an impact on the running game.
Have a new project settings tab for "extensions". Extensions are GDNativeLibraries that don't need to expose any classes, they just get run and that's it.
These extensions get loaded at startup, in the editor as well as in a game.
A regular GDNativeLibrary, but it contains a special function godot_native_extension_init
and godot_native_extension_terminate
that get called at startup and shutdown of Godot.
The C API (modules/gdnative/godot.h and modules/gdnative/godot/*) will contain new functions, like godot_extension_register_importer(godot_extension_importer *importer)
. The godot_extension_importer
type would just be a struct with function pointers.
A new directory called "extensions" containing subfolders for the different extension. In those folders a file "extension.cfg" or something like that. This file specifies the GDNativeLibrary to use to load the extension.
- extensions
- fbx_loader
- extension.cfg
- fbx_library.tres
- python_language
- extension.cfg
- python_library.tres
When the editor or game starts the extensions get loaded.
The Asset Lib could feature a new type of asset: "extension" and install that in the right place.
Once installed then the extension would get initialized, editor restart should not be required. (the Asset Lib downloader needs to initialize the initialization process ๐ )
WDYT?
I think this would be better as something specific to gdnative. We could
call it "native modules" or something like that.
On Apr 24, 2017 2:27 AM, "Thomas Herzog" notifications@github.com wrote:
Extensions
After talking to @touilleMan https://github.com/touilleMan and @reduz
https://github.com/reduz in Paris (it was awesome!!!) I'm writing down
this proposal.GDNative is a nice way to use third party libraries in your game or just
optimize performance critical code, but it could also be used to add
"extensions" to Godot (for the lack of a better name, "plugin" and "add-on"
are already taken ๐ )
Current situationA GDNativeScript represents one class in a GDNativeLibrary. To have any
effect, this script must be attached to any object. This is cool to write
game code or wrap third party code in a class.The current way to "extend" Godot is via plugins (or more precisely,
"editor plugins"). These plugins can do a lot of awesome things, but they
all only run in the editor. GDNative scripts can be used to make plugins as
well, but they can't do anything that will have an impact on the running
game.
Proposal[image: extension]
https://cloud.githubusercontent.com/assets/5209613/25318699/7d9c0810-2894-11e7-865f-c4ceae5f6c84.pngHave a new project settings tab for "extensions". Extensions are
GDNativeLibraries that don't need to expose any classes, they just get run
and that's it.These extensions get loaded at startup, in the editor as well as in a game.
Implementation of an extensionA regular GDNativeLibrary, but it contains a special function
godot_native_extension_init and godot_native_extension_terminate that get
called at startup and shutdown of Godot.The C API (modules/gdnative/godot.h and modules/gdnative/godot/*) will
contain new functions, like godot_extension_register_
importer(godot_extension_importer *importer). The godot_extension_importer
type would just be a struct with function pointers.
Loading and installingA new directory called "extensions" containing subfolders for the
different extension. In those folders a file "extension.cfg" or something
like that. This file specifies the GDNativeLibrary to use to load the
extension.
- extensions
- fbx_loader
- extension.cfg
- fbx_library.tres
- python_language
- extension.cfg
- python_library.tres
When the editor or game starts the extensions get loaded.
The Asset Lib could feature a new type of asset: "extension" and install
that in the right place.
Once installed then the extension would get initialized, editor restart
should not be required. (the Asset Lib downloader needs to initialize the
initialization process ๐ )
Use cases
- downloadable scripting languages in the AssetLib (with editor
support)- new resource importers
- possibly more that I can't think of right now ๐
WDYT?
โ
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/godotengine/godot/issues/8505, or mute the thread
https://github.com/notifications/unsubscribe-auth/AF-Z23Oo0Lp0h6J8Z_LPd2tooQdF_biSks5ry-xogaJpZM4NFlw4
.
Maybe to make them totally clear and avoid confusion, they could be
"gdnative submodules"
On Apr 24, 2017 8:13 AM, "Juan Linietsky" reduzio@gmail.com wrote:
I think this would be better as something specific to gdnative. We could
call it "native modules" or something like that.On Apr 24, 2017 2:27 AM, "Thomas Herzog" notifications@github.com wrote:
Extensions
After talking to @touilleMan https://github.com/touilleMan and @reduz
https://github.com/reduz in Paris (it was awesome!!!) I'm writing down
this proposal.GDNative is a nice way to use third party libraries in your game or just
optimize performance critical code, but it could also be used to add
"extensions" to Godot (for the lack of a better name, "plugin" and "add-on"
are already taken ๐ )
Current situationA GDNativeScript represents one class in a GDNativeLibrary. To have
any effect, this script must be attached to any object. This is cool to
write game code or wrap third party code in a class.The current way to "extend" Godot is via plugins (or more precisely,
"editor plugins"). These plugins can do a lot of awesome things, but they
all only run in the editor. GDNative scripts can be used to make plugins as
well, but they can't do anything that will have an impact on the running
game.
Proposal[image: extension]
https://cloud.githubusercontent.com/assets/5209613/25318699/7d9c0810-2894-11e7-865f-c4ceae5f6c84.pngHave a new project settings tab for "extensions". Extensions are
GDNativeLibraries that don't need to expose any classes, they just get run
and that's it.These extensions get loaded at startup, in the editor as well as in a
game.
Implementation of an extensionA regular GDNativeLibrary, but it contains a special function
godot_native_extension_init and godot_native_extension_terminate that
get called at startup and shutdown of Godot.The C API (modules/gdnative/godot.h and modules/gdnative/godot/*) will
contain new functions, like godot_extension_register_importer(godot_extension_importer
*importer). The godot_extension_importer type would just be a struct
with function pointers.
Loading and installingA new directory called "extensions" containing subfolders for the
different extension. In those folders a file "extension.cfg" or something
like that. This file specifies the GDNativeLibrary to use to load the
extension.
- extensions
- fbx_loader
- extension.cfg
- fbx_library.tres
- python_language
- extension.cfg
- python_library.tres
When the editor or game starts the extensions get loaded.
The Asset Lib could feature a new type of asset: "extension" and install
that in the right place.
Once installed then the extension would get initialized, editor restart
should not be required. (the Asset Lib downloader needs to initialize the
initialization process ๐ )
Use cases
- downloadable scripting languages in the AssetLib (with editor
support)- new resource importers
- possibly more that I can't think of right now ๐
WDYT?
โ
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/godotengine/godot/issues/8505, or mute the thread
https://github.com/notifications/unsubscribe-auth/AF-Z23Oo0Lp0h6J8Z_LPd2tooQdF_biSks5ry-xogaJpZM4NFlw4
.
Oh yeah, "GDNative submodes" sounds good!
Could be shortened to submodules too..
On Apr 24, 2017 9:15 AM, "Thomas Herzog" notifications@github.com wrote:
Oh yeah, "GDNative submodes" sounds good!
โ
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/godotengine/godot/issues/8505#issuecomment-296551528,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AF-Z24hu_l1ZyWEOvUcewZIXIFcxyOGPks5rzEwHgaJpZM4NFlw4
.
Or maybe change "Plugins" to "Script plugins" and add "Native plugins"? That would be the most explicit regarding what they are, and how they are used: both can be plugged into the engine, the former are script-based and interpreted, the latter are native code.
The problem is that plugins are editor plugins, while submodules are
general purpose modules that extend engine support, and not really editor
related.. so they are not quite the same
On Apr 24, 2017 9:52 AM, "Rรฉmi Verschelde" notifications@github.com wrote:
Or maybe change "Plugins" to "Script plugins" and add "Native plugins"?
That would be the most explicit regarding what they are, and how they are
used: both can be plugged into the engine, the former are script-based and
interpreted, the latter are native code.โ
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/godotengine/godot/issues/8505#issuecomment-296563064,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AF-Z21eYqdvTc-KWjgg1yROJfJyyeQosks5rzFSigaJpZM4NFlw4
.
As in, a plugin is on a higher level than a submodule, you could easily
make a plugin that uses a submodule
On Apr 24, 2017 9:57 AM, "Juan Linietsky" reduzio@gmail.com wrote:
The problem is that plugins are editor plugins, while submodules are
general purpose modules that extend engine support, and not really editor
related.. so they are not quite the sameOn Apr 24, 2017 9:52 AM, "Rรฉmi Verschelde" notifications@github.com
wrote:Or maybe change "Plugins" to "Script plugins" and add "Native plugins"?
That would be the most explicit regarding what they are, and how they are
used: both can be plugged into the engine, the former are script-based and
interpreted, the latter are native code.โ
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/godotengine/godot/issues/8505#issuecomment-296563064,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AF-Z21eYqdvTc-KWjgg1yROJfJyyeQosks5rzFSigaJpZM4NFlw4
.
Example of the above: A minecraft like world editor. You can have a
submodule that generates the voxel terrain in C++. At the same time, an
editor plugin which contains an UI to edit it, which is written jn
gdscript. Both are part of a single addon that you get from asset lib.
So the relationship is like:
Addon -> Editor Plugin -> Submodule
On Apr 24, 2017 9:58 AM, "Juan Linietsky" reduzio@gmail.com wrote:
As in, a plugin is on a higher level than a submodule, you could easily
make a plugin that uses a submoduleOn Apr 24, 2017 9:57 AM, "Juan Linietsky" reduzio@gmail.com wrote:
The problem is that plugins are editor plugins, while submodules are
general purpose modules that extend engine support, and not really editor
related.. so they are not quite the sameOn Apr 24, 2017 9:52 AM, "Rรฉmi Verschelde" notifications@github.com
wrote:Or maybe change "Plugins" to "Script plugins" and add "Native plugins"?
That would be the most explicit regarding what they are, and how they are
used: both can be plugged into the engine, the former are script-based and
interpreted, the latter are native code.โ
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/godotengine/godot/issues/8505#issuecomment-296563064,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AF-Z21eYqdvTc-KWjgg1yROJfJyyeQosks5rzFSigaJpZM4NFlw4
.
good example! "Plugins" are actually "Editor plugins", "submodules" (not that sure about the name though, of what are they a sub-part?) are not specific to the editor.
The Minecraft example could make use of a submodule because those are loaded before editor plugins are loaded.
So in the end those are just pluggable "modules", as we understand the stuff in modules/
. Users have already been confused by our choice of terms with modules vs plugins, so it might be a good opportunity to rethink that a bit for 3.0 :)
Yeah, you can still perfectly use gdnative for editor plugins.. this is a
little lower level, so I suppose submodule conveys both that its a module
based off another module.
The main source of confusion is imo the addons folder, which needs to be
there because we can't install modules to custom locations... Which is
something that we can probably do change in 3.0, as we deprecated xml and
the remaining formats (scn and tscn) allow changing dependency location
with little hassle. (This was next to impossible in xml).
So.. for 3.0 we could get rid of the addons folder altogether and let godot
scan the plugins from EditorFilesystem normally.
With addons gone, we would be just left with EditorPlugin and SubModule (or
better name).
Does this sound right?
On Apr 24, 2017 10:28 AM, "Rรฉmi Verschelde" notifications@github.com
wrote:
So in the end those are just pluggable "modules", as we understand the
stuff in modules/. Users have already been confused by our choice of terms
with modules vs plugins, so it might be a good opportunity to rethink that
a bit for 3.0 :)
โ
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/godotengine/godot/issues/8505#issuecomment-296574581,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AF-Z280RaPJ2c5CsX3CDJEr20g74PQS-ks5rzF0PgaJpZM4NFlw4
.
sounds good to me!
I think we should choose the names carefully tough
How is this different than having a regular GDNativeLibrary having an editor version and export version? Why does it need to be a specific thing?
You said plugins can't have an impact on the game, but it's wrong. My gdscript terrain plugin is able to run both in editor and in game. The only issue I had with it is about telling Godot not to export the editor-only part.
Editor just expects you to provide an EditorPlugin. For everything else
it's the same.
On Apr 24, 2017 2:18 PM, "Marc" notifications@github.com wrote:
How is this different than having a regular GDNativeLibrary having an
editor version and export version? Why does it need to be a specific thing?You said plugins can't have an impact on the game, but it's wrong. My
gdscript terrain plugin is able to run both in editor and in game. The only
issue I had with it is about telling Godot not to export the editor-only
part.โ
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/godotengine/godot/issues/8505#issuecomment-296644080,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AF-Z26V6RoEoHVZU75KECFIm1C1jGRoPks5rzJMWgaJpZM4NFlw4
.
What's the issue of breaking compatibility with current plugins, and shipping the more-extensible "extensions"/"plugmodules"/"native plugins" with ability to add EditorPlugin nodes and to be made with GDScript?
That way, we would not be forced to use GDNative for simple importers (e.g. of a custom text-based format), while we can still do everything from the proposal. And, as an additional plus, one would be able to even use C# for import/export/stuff!
Breaking compatibility is only intended to install addons anywhere, and
nothing else...
On Apr 24, 2017 3:30 PM, "Bojidar Marinov" notifications@github.com wrote:
What's the issue of breaking compatibility with current plugins, and
shipping the more-extensible "extensions"/"plugmodules"/"native plugins"
with ability to add EditorPlugin nodes and to be made with GDScript?That way, we would not be forced to use GDNative for simple importers
(e.g. of a custom text-based format), while we can still do everything from
the proposal. And, as an additional plus, one would be able to even use C#
for import/export/stuff!โ
You are receiving this because you were mentioned.
Reply to this email directly, view it on GitHub
https://github.com/godotengine/godot/issues/8505#issuecomment-296668834,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AF-Z2yt9x2P-3SDcZoYfDOMMZbBjs_73ks5rzKP-gaJpZM4NFlw4
.
Installing addons anywhere is already a separate issue though https://github.com/godotengine/godot/issues/6023
Just wanted to know the status (is it being developed or dropped)
@RameshRavone now that my Python binding is working, I'm going to start working on this feature
no promise on the eta though ;-)
@touilleMan I started laying down the basics for that on my fork, if you want you could help develop it there. I wrote you a PM on Discord about that too
how is this going?
@reduz pretty well ^^
You can have a look on my fork and the corresponding Python pluginscript module.
So far I got my Pong example written in Python working :smile:
I still have to bind the editor and debugger functions though.
This gets partially implemented by #10921, there's basically only a proper UI missing and then more APIs to actually use (like pluginscript)
Closed by https://github.com/godotengine/godot/pull/11953 ?
Well it's more like an ongoing effort, PluginScript is only one application, GDNative singletons basically solve this issue.
But you are right, it can be closed now.
Most helpful comment
Or maybe change "Plugins" to "Script plugins" and add "Native plugins"? That would be the most explicit regarding what they are, and how they are used: both can be plugged into the engine, the former are script-based and interpreted, the latter are native code.