Update to 4.4 - #79

Open
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4
Open

Update to 4.4#79
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4

Conversation

@paddy-exe

Copy link
Copy Markdown
Collaborator

Contains changes to .gitignore file due to the addition of .uid files

Question is if we should add the .uid file?

@paddy-exepaddy-exe added the enhancement New feature or request label Mar 4, 2025
@dsnopek

Copy link
Copy Markdown
Contributor

Question is if we should add the .uid file?

Hm. If uid's are supposed to be unique, then I guess we shouldn't add the .uid files? Otherwise everyone who copies the template gets the same uid's, whereas if we leave them out, then Godot generates new unique ones for each project

@Ivorforce

Ivorforce commented Mar 4, 2025

Copy link
Copy Markdown
Member

I think .uid files should be part of godot-cpp repos. It will likely not matter in most cases, but having consistent IDs across installs will make it more transparent what's happening in possible error reports or when an extension is removed and reinstalled.

If uid's are supposed to be unique [...]

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

@dsnopek

dsnopek commented Mar 4, 2025

Copy link
Copy Markdown
Contributor

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

Well, if the .gdextension file in the template gets a .gdextension.uid, and multiple people make GDExtensions via the template and distribute them on the asset library, we could end up with multiple GDExtensions on the asset library having the same uid in their .gdextension.uid.

I'm not sure it would even actually cause problems, but I think we'd want to try and discourage something like that from happening.

The test project within godot-cpp itself should have it's .uid files saved in the repo, though. I don't think it does currently.

@unvermuthet

unvermuthet commented Mar 5, 2025

Copy link
Copy Markdown
Contributor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

@paddy-exe

paddy-exe commented Mar 5, 2025

Copy link
Copy Markdown
CollaboratorAuthor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

I mean we could alternatively just not commit it here. That would make it easier. The downside is that we will have to make sure it won't ever be committed in the future. Not sure how this might be possible via gitattributes though

Contains changes to .gitignore file due to the addition of .uid files
@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

Alright updated to not include the .uid file as discussed in the GDExtension meeting.

@IvorforceIvorforce left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about editing the min version from the .gdextension file?

@unvermuthet

unvermuthet commented Mar 18, 2025

Copy link
Copy Markdown
Contributor

Not sure about the compatibility_minimum in .gdextension. We expect people to raise that themselves if they use APIs from newer versions, right? The parameter describes itself very well and everyone will touch that file.

@Ivorforce

Ivorforce commented Mar 18, 2025

Copy link
Copy Markdown
Member

godot-cpp-template itself is using an API from 4.4, and the resulting GDExtension is thus compatible only with 4.4+ (before the PR, 4.3+). I think we should raise it because it's just incorrect if we don't.

The parameter describes itself very well and everyone will touch that file.

That's true, but funnily enough I didn't change it myself until a few months after I started working with GDExtension because I thought my extension might be 4.1 compatible and it wouldn't if I changed it. Although that's a problem that will probably be less likely to happen to anyone else once we start expanding the docs about things like these :D

@unvermuthet

Copy link
Copy Markdown
Contributor

Then it seems I misunderstood backward compatibility with GDExtensions.

@dsnopek

Copy link
Copy Markdown
Contributor

It's true that because we're using the 4.4 branch of godot-cpp, the resulting GDExtension would only load on Godot 4.4+ (and give an error message about it on earlier versions)

However, I think it'd be OK to leave the compatibility_minimum it the .gdextension file at 4.1. That way, if a developer wants to support an earlier version, it's only a matter of rolling godot-cpp back to an earlier version, and doesn't require changing the .gdextension file as well

@unvermuthet

Copy link
Copy Markdown
Contributor

I think leaving it lower might be misleading then. Kind of like what @Ivorforce said:

I thought my extension might be 4.1 compatible and it wouldn't if I changed it.

I also thought this was the only safeguard. What's the reason for having this twice?

@dsnopek

dsnopek commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

I also thought this was the only safeguard. What's the reason for having this twice?

The minimum_compatibility is checked by Godot, and it's done before ever trying to load the extension. It's the only way we have to deal with the compatibility break between 4.0 and 4.1, while avoiding crashes.

The second check is done by godot-cpp after the extension has been loaded, but before being initialized. This allows us to automatically derive the compatibility from the extension_api.json that was used, such that the extension developer doesn't need to manually put this into the .gdextension file. Not all extension bindings do something like this

@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

I could alternatively also put some more information into the steps of using the template that godot-cpp should be set to the minimum supported version?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@paddy-exe@dsnopek@Ivorforce@unvermuthet
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Update to 4.4 - #79

Open
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4
Open

Update to 4.4#79
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4

Conversation

@paddy-exe

Copy link
Copy Markdown
Collaborator

Contains changes to .gitignore file due to the addition of .uid files

Question is if we should add the .uid file?

@paddy-exepaddy-exe added the enhancement New feature or request label Mar 4, 2025
@dsnopek

Copy link
Copy Markdown
Contributor

Question is if we should add the .uid file?

Hm. If uid's are supposed to be unique, then I guess we shouldn't add the .uid files? Otherwise everyone who copies the template gets the same uid's, whereas if we leave them out, then Godot generates new unique ones for each project

@Ivorforce

Ivorforce commented Mar 4, 2025

Copy link
Copy Markdown
Member

I think .uid files should be part of godot-cpp repos. It will likely not matter in most cases, but having consistent IDs across installs will make it more transparent what's happening in possible error reports or when an extension is removed and reinstalled.

If uid's are supposed to be unique [...]

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

@dsnopek

dsnopek commented Mar 4, 2025

Copy link
Copy Markdown
Contributor

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

Well, if the .gdextension file in the template gets a .gdextension.uid, and multiple people make GDExtensions via the template and distribute them on the asset library, we could end up with multiple GDExtensions on the asset library having the same uid in their .gdextension.uid.

I'm not sure it would even actually cause problems, but I think we'd want to try and discourage something like that from happening.

The test project within godot-cpp itself should have it's .uid files saved in the repo, though. I don't think it does currently.

@unvermuthet

unvermuthet commented Mar 5, 2025

Copy link
Copy Markdown
Contributor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

@paddy-exe

paddy-exe commented Mar 5, 2025

Copy link
Copy Markdown
CollaboratorAuthor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

I mean we could alternatively just not commit it here. That would make it easier. The downside is that we will have to make sure it won't ever be committed in the future. Not sure how this might be possible via gitattributes though

Contains changes to .gitignore file due to the addition of .uid files
@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

Alright updated to not include the .uid file as discussed in the GDExtension meeting.

@IvorforceIvorforce left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about editing the min version from the .gdextension file?

@unvermuthet

unvermuthet commented Mar 18, 2025

Copy link
Copy Markdown
Contributor

Not sure about the compatibility_minimum in .gdextension. We expect people to raise that themselves if they use APIs from newer versions, right? The parameter describes itself very well and everyone will touch that file.

@Ivorforce

Ivorforce commented Mar 18, 2025

Copy link
Copy Markdown
Member

godot-cpp-template itself is using an API from 4.4, and the resulting GDExtension is thus compatible only with 4.4+ (before the PR, 4.3+). I think we should raise it because it's just incorrect if we don't.

The parameter describes itself very well and everyone will touch that file.

That's true, but funnily enough I didn't change it myself until a few months after I started working with GDExtension because I thought my extension might be 4.1 compatible and it wouldn't if I changed it. Although that's a problem that will probably be less likely to happen to anyone else once we start expanding the docs about things like these :D

@unvermuthet

Copy link
Copy Markdown
Contributor

Then it seems I misunderstood backward compatibility with GDExtensions.

@dsnopek

Copy link
Copy Markdown
Contributor

It's true that because we're using the 4.4 branch of godot-cpp, the resulting GDExtension would only load on Godot 4.4+ (and give an error message about it on earlier versions)

However, I think it'd be OK to leave the compatibility_minimum it the .gdextension file at 4.1. That way, if a developer wants to support an earlier version, it's only a matter of rolling godot-cpp back to an earlier version, and doesn't require changing the .gdextension file as well

@unvermuthet

Copy link
Copy Markdown
Contributor

I think leaving it lower might be misleading then. Kind of like what @Ivorforce said:

I thought my extension might be 4.1 compatible and it wouldn't if I changed it.

I also thought this was the only safeguard. What's the reason for having this twice?

@dsnopek

dsnopek commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

I also thought this was the only safeguard. What's the reason for having this twice?

The minimum_compatibility is checked by Godot, and it's done before ever trying to load the extension. It's the only way we have to deal with the compatibility break between 4.0 and 4.1, while avoiding crashes.

The second check is done by godot-cpp after the extension has been loaded, but before being initialized. This allows us to automatically derive the compatibility from the extension_api.json that was used, such that the extension developer doesn't need to manually put this into the .gdextension file. Not all extension bindings do something like this

@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

I could alternatively also put some more information into the steps of using the template that godot-cpp should be set to the minimum supported version?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@paddy-exe@dsnopek@Ivorforce@unvermuthet
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update to 4.4 - #79

Open
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4
Open

Update to 4.4#79
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4

Conversation

@paddy-exe

Copy link
Copy Markdown
Collaborator

Contains changes to .gitignore file due to the addition of .uid files

Question is if we should add the .uid file?

@paddy-exepaddy-exe added the enhancement New feature or request label Mar 4, 2025
@dsnopek

Copy link
Copy Markdown
Contributor

Question is if we should add the .uid file?

Hm. If uid's are supposed to be unique, then I guess we shouldn't add the .uid files? Otherwise everyone who copies the template gets the same uid's, whereas if we leave them out, then Godot generates new unique ones for each project

@Ivorforce

Ivorforce commented Mar 4, 2025

Copy link
Copy Markdown
Member

I think .uid files should be part of godot-cpp repos. It will likely not matter in most cases, but having consistent IDs across installs will make it more transparent what's happening in possible error reports or when an extension is removed and reinstalled.

If uid's are supposed to be unique [...]

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

@dsnopek

dsnopek commented Mar 4, 2025

Copy link
Copy Markdown
Contributor

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

Well, if the .gdextension file in the template gets a .gdextension.uid, and multiple people make GDExtensions via the template and distribute them on the asset library, we could end up with multiple GDExtensions on the asset library having the same uid in their .gdextension.uid.

I'm not sure it would even actually cause problems, but I think we'd want to try and discourage something like that from happening.

The test project within godot-cpp itself should have it's .uid files saved in the repo, though. I don't think it does currently.

@unvermuthet

unvermuthet commented Mar 5, 2025

Copy link
Copy Markdown
Contributor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

@paddy-exe

paddy-exe commented Mar 5, 2025

Copy link
Copy Markdown
CollaboratorAuthor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

I mean we could alternatively just not commit it here. That would make it easier. The downside is that we will have to make sure it won't ever be committed in the future. Not sure how this might be possible via gitattributes though

Contains changes to .gitignore file due to the addition of .uid files
@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

Alright updated to not include the .uid file as discussed in the GDExtension meeting.

@IvorforceIvorforce left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about editing the min version from the .gdextension file?

@unvermuthet

unvermuthet commented Mar 18, 2025

Copy link
Copy Markdown
Contributor

Not sure about the compatibility_minimum in .gdextension. We expect people to raise that themselves if they use APIs from newer versions, right? The parameter describes itself very well and everyone will touch that file.

@Ivorforce

Ivorforce commented Mar 18, 2025

Copy link
Copy Markdown
Member

godot-cpp-template itself is using an API from 4.4, and the resulting GDExtension is thus compatible only with 4.4+ (before the PR, 4.3+). I think we should raise it because it's just incorrect if we don't.

The parameter describes itself very well and everyone will touch that file.

That's true, but funnily enough I didn't change it myself until a few months after I started working with GDExtension because I thought my extension might be 4.1 compatible and it wouldn't if I changed it. Although that's a problem that will probably be less likely to happen to anyone else once we start expanding the docs about things like these :D

@unvermuthet

Copy link
Copy Markdown
Contributor

Then it seems I misunderstood backward compatibility with GDExtensions.

@dsnopek

Copy link
Copy Markdown
Contributor

It's true that because we're using the 4.4 branch of godot-cpp, the resulting GDExtension would only load on Godot 4.4+ (and give an error message about it on earlier versions)

However, I think it'd be OK to leave the compatibility_minimum it the .gdextension file at 4.1. That way, if a developer wants to support an earlier version, it's only a matter of rolling godot-cpp back to an earlier version, and doesn't require changing the .gdextension file as well

@unvermuthet

Copy link
Copy Markdown
Contributor

I think leaving it lower might be misleading then. Kind of like what @Ivorforce said:

I thought my extension might be 4.1 compatible and it wouldn't if I changed it.

I also thought this was the only safeguard. What's the reason for having this twice?

@dsnopek

dsnopek commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

I also thought this was the only safeguard. What's the reason for having this twice?

The minimum_compatibility is checked by Godot, and it's done before ever trying to load the extension. It's the only way we have to deal with the compatibility break between 4.0 and 4.1, while avoiding crashes.

The second check is done by godot-cpp after the extension has been loaded, but before being initialized. This allows us to automatically derive the compatibility from the extension_api.json that was used, such that the extension developer doesn't need to manually put this into the .gdextension file. Not all extension bindings do something like this

@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

I could alternatively also put some more information into the steps of using the template that godot-cpp should be set to the minimum supported version?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@paddy-exe@dsnopek@Ivorforce@unvermuthet
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update to 4.4 - #79

Open
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4
Open

Update to 4.4#79
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4

Conversation

@paddy-exe

Copy link
Copy Markdown
Collaborator

Contains changes to .gitignore file due to the addition of .uid files

Question is if we should add the .uid file?

@paddy-exepaddy-exe added the enhancement New feature or request label Mar 4, 2025
@dsnopek

Copy link
Copy Markdown
Contributor

Question is if we should add the .uid file?

Hm. If uid's are supposed to be unique, then I guess we shouldn't add the .uid files? Otherwise everyone who copies the template gets the same uid's, whereas if we leave them out, then Godot generates new unique ones for each project

@Ivorforce

Ivorforce commented Mar 4, 2025

Copy link
Copy Markdown
Member

I think .uid files should be part of godot-cpp repos. It will likely not matter in most cases, but having consistent IDs across installs will make it more transparent what's happening in possible error reports or when an extension is removed and reinstalled.

If uid's are supposed to be unique [...]

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

@dsnopek

dsnopek commented Mar 4, 2025

Copy link
Copy Markdown
Contributor

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

Well, if the .gdextension file in the template gets a .gdextension.uid, and multiple people make GDExtensions via the template and distribute them on the asset library, we could end up with multiple GDExtensions on the asset library having the same uid in their .gdextension.uid.

I'm not sure it would even actually cause problems, but I think we'd want to try and discourage something like that from happening.

The test project within godot-cpp itself should have it's .uid files saved in the repo, though. I don't think it does currently.

@unvermuthet

unvermuthet commented Mar 5, 2025

Copy link
Copy Markdown
Contributor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

@paddy-exe

paddy-exe commented Mar 5, 2025

Copy link
Copy Markdown
CollaboratorAuthor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

I mean we could alternatively just not commit it here. That would make it easier. The downside is that we will have to make sure it won't ever be committed in the future. Not sure how this might be possible via gitattributes though

Contains changes to .gitignore file due to the addition of .uid files
@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

Alright updated to not include the .uid file as discussed in the GDExtension meeting.

@IvorforceIvorforce left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about editing the min version from the .gdextension file?

@unvermuthet

unvermuthet commented Mar 18, 2025

Copy link
Copy Markdown
Contributor

Not sure about the compatibility_minimum in .gdextension. We expect people to raise that themselves if they use APIs from newer versions, right? The parameter describes itself very well and everyone will touch that file.

@Ivorforce

Ivorforce commented Mar 18, 2025

Copy link
Copy Markdown
Member

godot-cpp-template itself is using an API from 4.4, and the resulting GDExtension is thus compatible only with 4.4+ (before the PR, 4.3+). I think we should raise it because it's just incorrect if we don't.

The parameter describes itself very well and everyone will touch that file.

That's true, but funnily enough I didn't change it myself until a few months after I started working with GDExtension because I thought my extension might be 4.1 compatible and it wouldn't if I changed it. Although that's a problem that will probably be less likely to happen to anyone else once we start expanding the docs about things like these :D

@unvermuthet

Copy link
Copy Markdown
Contributor

Then it seems I misunderstood backward compatibility with GDExtensions.

@dsnopek

Copy link
Copy Markdown
Contributor

It's true that because we're using the 4.4 branch of godot-cpp, the resulting GDExtension would only load on Godot 4.4+ (and give an error message about it on earlier versions)

However, I think it'd be OK to leave the compatibility_minimum it the .gdextension file at 4.1. That way, if a developer wants to support an earlier version, it's only a matter of rolling godot-cpp back to an earlier version, and doesn't require changing the .gdextension file as well

@unvermuthet

Copy link
Copy Markdown
Contributor

I think leaving it lower might be misleading then. Kind of like what @Ivorforce said:

I thought my extension might be 4.1 compatible and it wouldn't if I changed it.

I also thought this was the only safeguard. What's the reason for having this twice?

@dsnopek

dsnopek commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

I also thought this was the only safeguard. What's the reason for having this twice?

The minimum_compatibility is checked by Godot, and it's done before ever trying to load the extension. It's the only way we have to deal with the compatibility break between 4.0 and 4.1, while avoiding crashes.

The second check is done by godot-cpp after the extension has been loaded, but before being initialized. This allows us to automatically derive the compatibility from the extension_api.json that was used, such that the extension developer doesn't need to manually put this into the .gdextension file. Not all extension bindings do something like this

@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

I could alternatively also put some more information into the steps of using the template that godot-cpp should be set to the minimum supported version?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@paddy-exe@dsnopek@Ivorforce@unvermuthet
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Update to 4.4 - #79

Open
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4
Open

Update to 4.4#79
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4

Conversation

@paddy-exe

Copy link
Copy Markdown
Collaborator

Contains changes to .gitignore file due to the addition of .uid files

Question is if we should add the .uid file?

@paddy-exepaddy-exe added the enhancement New feature or request label Mar 4, 2025
@dsnopek

Copy link
Copy Markdown
Contributor

Question is if we should add the .uid file?

Hm. If uid's are supposed to be unique, then I guess we shouldn't add the .uid files? Otherwise everyone who copies the template gets the same uid's, whereas if we leave them out, then Godot generates new unique ones for each project

@Ivorforce

Ivorforce commented Mar 4, 2025

Copy link
Copy Markdown
Member

I think .uid files should be part of godot-cpp repos. It will likely not matter in most cases, but having consistent IDs across installs will make it more transparent what's happening in possible error reports or when an extension is removed and reinstalled.

If uid's are supposed to be unique [...]

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

@dsnopek

dsnopek commented Mar 4, 2025

Copy link
Copy Markdown
Contributor

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

Well, if the .gdextension file in the template gets a .gdextension.uid, and multiple people make GDExtensions via the template and distribute them on the asset library, we could end up with multiple GDExtensions on the asset library having the same uid in their .gdextension.uid.

I'm not sure it would even actually cause problems, but I think we'd want to try and discourage something like that from happening.

The test project within godot-cpp itself should have it's .uid files saved in the repo, though. I don't think it does currently.

@unvermuthet

unvermuthet commented Mar 5, 2025

Copy link
Copy Markdown
Contributor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

@paddy-exe

paddy-exe commented Mar 5, 2025

Copy link
Copy Markdown
CollaboratorAuthor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

I mean we could alternatively just not commit it here. That would make it easier. The downside is that we will have to make sure it won't ever be committed in the future. Not sure how this might be possible via gitattributes though

Contains changes to .gitignore file due to the addition of .uid files
@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

Alright updated to not include the .uid file as discussed in the GDExtension meeting.

@IvorforceIvorforce left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about editing the min version from the .gdextension file?

@unvermuthet

unvermuthet commented Mar 18, 2025

Copy link
Copy Markdown
Contributor

Not sure about the compatibility_minimum in .gdextension. We expect people to raise that themselves if they use APIs from newer versions, right? The parameter describes itself very well and everyone will touch that file.

@Ivorforce

Ivorforce commented Mar 18, 2025

Copy link
Copy Markdown
Member

godot-cpp-template itself is using an API from 4.4, and the resulting GDExtension is thus compatible only with 4.4+ (before the PR, 4.3+). I think we should raise it because it's just incorrect if we don't.

The parameter describes itself very well and everyone will touch that file.

That's true, but funnily enough I didn't change it myself until a few months after I started working with GDExtension because I thought my extension might be 4.1 compatible and it wouldn't if I changed it. Although that's a problem that will probably be less likely to happen to anyone else once we start expanding the docs about things like these :D

@unvermuthet

Copy link
Copy Markdown
Contributor

Then it seems I misunderstood backward compatibility with GDExtensions.

@dsnopek

Copy link
Copy Markdown
Contributor

It's true that because we're using the 4.4 branch of godot-cpp, the resulting GDExtension would only load on Godot 4.4+ (and give an error message about it on earlier versions)

However, I think it'd be OK to leave the compatibility_minimum it the .gdextension file at 4.1. That way, if a developer wants to support an earlier version, it's only a matter of rolling godot-cpp back to an earlier version, and doesn't require changing the .gdextension file as well

@unvermuthet

Copy link
Copy Markdown
Contributor

I think leaving it lower might be misleading then. Kind of like what @Ivorforce said:

I thought my extension might be 4.1 compatible and it wouldn't if I changed it.

I also thought this was the only safeguard. What's the reason for having this twice?

@dsnopek

dsnopek commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

I also thought this was the only safeguard. What's the reason for having this twice?

The minimum_compatibility is checked by Godot, and it's done before ever trying to load the extension. It's the only way we have to deal with the compatibility break between 4.0 and 4.1, while avoiding crashes.

The second check is done by godot-cpp after the extension has been loaded, but before being initialized. This allows us to automatically derive the compatibility from the extension_api.json that was used, such that the extension developer doesn't need to manually put this into the .gdextension file. Not all extension bindings do something like this

@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

I could alternatively also put some more information into the steps of using the template that godot-cpp should be set to the minimum supported version?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@paddy-exe@dsnopek@Ivorforce@unvermuthet
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update to 4.4 - #79

Open
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4
Open

Update to 4.4#79
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4

Conversation

@paddy-exe

Copy link
Copy Markdown
Collaborator

Contains changes to .gitignore file due to the addition of .uid files

Question is if we should add the .uid file?

@paddy-exepaddy-exe added the enhancement New feature or request label Mar 4, 2025
@dsnopek

Copy link
Copy Markdown
Contributor

Question is if we should add the .uid file?

Hm. If uid's are supposed to be unique, then I guess we shouldn't add the .uid files? Otherwise everyone who copies the template gets the same uid's, whereas if we leave them out, then Godot generates new unique ones for each project

@Ivorforce

Ivorforce commented Mar 4, 2025

Copy link
Copy Markdown
Member

I think .uid files should be part of godot-cpp repos. It will likely not matter in most cases, but having consistent IDs across installs will make it more transparent what's happening in possible error reports or when an extension is removed and reinstalled.

If uid's are supposed to be unique [...]

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

@dsnopek

dsnopek commented Mar 4, 2025

Copy link
Copy Markdown
Contributor

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

Well, if the .gdextension file in the template gets a .gdextension.uid, and multiple people make GDExtensions via the template and distribute them on the asset library, we could end up with multiple GDExtensions on the asset library having the same uid in their .gdextension.uid.

I'm not sure it would even actually cause problems, but I think we'd want to try and discourage something like that from happening.

The test project within godot-cpp itself should have it's .uid files saved in the repo, though. I don't think it does currently.

@unvermuthet

unvermuthet commented Mar 5, 2025

Copy link
Copy Markdown
Contributor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

@paddy-exe

paddy-exe commented Mar 5, 2025

Copy link
Copy Markdown
CollaboratorAuthor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

I mean we could alternatively just not commit it here. That would make it easier. The downside is that we will have to make sure it won't ever be committed in the future. Not sure how this might be possible via gitattributes though

Contains changes to .gitignore file due to the addition of .uid files
@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

Alright updated to not include the .uid file as discussed in the GDExtension meeting.

@IvorforceIvorforce left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about editing the min version from the .gdextension file?

@unvermuthet

unvermuthet commented Mar 18, 2025

Copy link
Copy Markdown
Contributor

Not sure about the compatibility_minimum in .gdextension. We expect people to raise that themselves if they use APIs from newer versions, right? The parameter describes itself very well and everyone will touch that file.

@Ivorforce

Ivorforce commented Mar 18, 2025

Copy link
Copy Markdown
Member

godot-cpp-template itself is using an API from 4.4, and the resulting GDExtension is thus compatible only with 4.4+ (before the PR, 4.3+). I think we should raise it because it's just incorrect if we don't.

The parameter describes itself very well and everyone will touch that file.

That's true, but funnily enough I didn't change it myself until a few months after I started working with GDExtension because I thought my extension might be 4.1 compatible and it wouldn't if I changed it. Although that's a problem that will probably be less likely to happen to anyone else once we start expanding the docs about things like these :D

@unvermuthet

Copy link
Copy Markdown
Contributor

Then it seems I misunderstood backward compatibility with GDExtensions.

@dsnopek

Copy link
Copy Markdown
Contributor

It's true that because we're using the 4.4 branch of godot-cpp, the resulting GDExtension would only load on Godot 4.4+ (and give an error message about it on earlier versions)

However, I think it'd be OK to leave the compatibility_minimum it the .gdextension file at 4.1. That way, if a developer wants to support an earlier version, it's only a matter of rolling godot-cpp back to an earlier version, and doesn't require changing the .gdextension file as well

@unvermuthet

Copy link
Copy Markdown
Contributor

I think leaving it lower might be misleading then. Kind of like what @Ivorforce said:

I thought my extension might be 4.1 compatible and it wouldn't if I changed it.

I also thought this was the only safeguard. What's the reason for having this twice?

@dsnopek

dsnopek commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

I also thought this was the only safeguard. What's the reason for having this twice?

The minimum_compatibility is checked by Godot, and it's done before ever trying to load the extension. It's the only way we have to deal with the compatibility break between 4.0 and 4.1, while avoiding crashes.

The second check is done by godot-cpp after the extension has been loaded, but before being initialized. This allows us to automatically derive the compatibility from the extension_api.json that was used, such that the extension developer doesn't need to manually put this into the .gdextension file. Not all extension bindings do something like this

@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

I could alternatively also put some more information into the steps of using the template that godot-cpp should be set to the minimum supported version?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@paddy-exe@dsnopek@Ivorforce@unvermuthet
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Update to 4.4 - #79

Open
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4
Open

Update to 4.4#79
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4

Conversation

@paddy-exe

Copy link
Copy Markdown
Collaborator

Contains changes to .gitignore file due to the addition of .uid files

Question is if we should add the .uid file?

@paddy-exepaddy-exe added the enhancement New feature or request label Mar 4, 2025
@dsnopek

Copy link
Copy Markdown
Contributor

Question is if we should add the .uid file?

Hm. If uid's are supposed to be unique, then I guess we shouldn't add the .uid files? Otherwise everyone who copies the template gets the same uid's, whereas if we leave them out, then Godot generates new unique ones for each project

@Ivorforce

Ivorforce commented Mar 4, 2025

Copy link
Copy Markdown
Member

I think .uid files should be part of godot-cpp repos. It will likely not matter in most cases, but having consistent IDs across installs will make it more transparent what's happening in possible error reports or when an extension is removed and reinstalled.

If uid's are supposed to be unique [...]

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

@dsnopek

dsnopek commented Mar 4, 2025

Copy link
Copy Markdown
Contributor

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

Well, if the .gdextension file in the template gets a .gdextension.uid, and multiple people make GDExtensions via the template and distribute them on the asset library, we could end up with multiple GDExtensions on the asset library having the same uid in their .gdextension.uid.

I'm not sure it would even actually cause problems, but I think we'd want to try and discourage something like that from happening.

The test project within godot-cpp itself should have it's .uid files saved in the repo, though. I don't think it does currently.

@unvermuthet

unvermuthet commented Mar 5, 2025

Copy link
Copy Markdown
Contributor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

@paddy-exe

paddy-exe commented Mar 5, 2025

Copy link
Copy Markdown
CollaboratorAuthor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

I mean we could alternatively just not commit it here. That would make it easier. The downside is that we will have to make sure it won't ever be committed in the future. Not sure how this might be possible via gitattributes though

Contains changes to .gitignore file due to the addition of .uid files
@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

Alright updated to not include the .uid file as discussed in the GDExtension meeting.

@IvorforceIvorforce left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about editing the min version from the .gdextension file?

@unvermuthet

unvermuthet commented Mar 18, 2025

Copy link
Copy Markdown
Contributor

Not sure about the compatibility_minimum in .gdextension. We expect people to raise that themselves if they use APIs from newer versions, right? The parameter describes itself very well and everyone will touch that file.

@Ivorforce

Ivorforce commented Mar 18, 2025

Copy link
Copy Markdown
Member

godot-cpp-template itself is using an API from 4.4, and the resulting GDExtension is thus compatible only with 4.4+ (before the PR, 4.3+). I think we should raise it because it's just incorrect if we don't.

The parameter describes itself very well and everyone will touch that file.

That's true, but funnily enough I didn't change it myself until a few months after I started working with GDExtension because I thought my extension might be 4.1 compatible and it wouldn't if I changed it. Although that's a problem that will probably be less likely to happen to anyone else once we start expanding the docs about things like these :D

@unvermuthet

Copy link
Copy Markdown
Contributor

Then it seems I misunderstood backward compatibility with GDExtensions.

@dsnopek

Copy link
Copy Markdown
Contributor

It's true that because we're using the 4.4 branch of godot-cpp, the resulting GDExtension would only load on Godot 4.4+ (and give an error message about it on earlier versions)

However, I think it'd be OK to leave the compatibility_minimum it the .gdextension file at 4.1. That way, if a developer wants to support an earlier version, it's only a matter of rolling godot-cpp back to an earlier version, and doesn't require changing the .gdextension file as well

@unvermuthet

Copy link
Copy Markdown
Contributor

I think leaving it lower might be misleading then. Kind of like what @Ivorforce said:

I thought my extension might be 4.1 compatible and it wouldn't if I changed it.

I also thought this was the only safeguard. What's the reason for having this twice?

@dsnopek

dsnopek commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

I also thought this was the only safeguard. What's the reason for having this twice?

The minimum_compatibility is checked by Godot, and it's done before ever trying to load the extension. It's the only way we have to deal with the compatibility break between 4.0 and 4.1, while avoiding crashes.

The second check is done by godot-cpp after the extension has been loaded, but before being initialized. This allows us to automatically derive the compatibility from the extension_api.json that was used, such that the extension developer doesn't need to manually put this into the .gdextension file. Not all extension bindings do something like this

@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

I could alternatively also put some more information into the steps of using the template that godot-cpp should be set to the minimum supported version?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@paddy-exe@dsnopek@Ivorforce@unvermuthet
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Update to 4.4 - #79

Open
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4
Open

Update to 4.4#79
paddy-exe wants to merge 1 commit into
godotengine:mainfrom
paddy-exe:update-4.4

Conversation

@paddy-exe

Copy link
Copy Markdown
Collaborator

Contains changes to .gitignore file due to the addition of .uid files

Question is if we should add the .uid file?

@paddy-exepaddy-exe added the enhancement New feature or request label Mar 4, 2025
@dsnopek

Copy link
Copy Markdown
Contributor

Question is if we should add the .uid file?

Hm. If uid's are supposed to be unique, then I guess we shouldn't add the .uid files? Otherwise everyone who copies the template gets the same uid's, whereas if we leave them out, then Godot generates new unique ones for each project

@Ivorforce

Ivorforce commented Mar 4, 2025

Copy link
Copy Markdown
Member

I think .uid files should be part of godot-cpp repos. It will likely not matter in most cases, but having consistent IDs across installs will make it more transparent what's happening in possible error reports or when an extension is removed and reinstalled.

If uid's are supposed to be unique [...]

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

@dsnopek

dsnopek commented Mar 4, 2025

Copy link
Copy Markdown
Contributor

I think it's fine as long as they're unique within one project. I don't see a reason to have them be unique outside of it. Though perhaps I'm missing something about their design that would warrant that.

Well, if the .gdextension file in the template gets a .gdextension.uid, and multiple people make GDExtensions via the template and distribute them on the asset library, we could end up with multiple GDExtensions on the asset library having the same uid in their .gdextension.uid.

I'm not sure it would even actually cause problems, but I think we'd want to try and discourage something like that from happening.

The test project within godot-cpp itself should have it's .uid files saved in the repo, though. I don't think it does currently.

@unvermuthet

unvermuthet commented Mar 5, 2025

Copy link
Copy Markdown
Contributor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

@paddy-exe

paddy-exe commented Mar 5, 2025

Copy link
Copy Markdown
CollaboratorAuthor

I think they should be excluded from the template and regenerated. But adding them to the .gitignore seems like a bad idea. They should be committed once regenerated by the user. Is the a way to do this in .gitattributes?

I mean we could alternatively just not commit it here. That would make it easier. The downside is that we will have to make sure it won't ever be committed in the future. Not sure how this might be possible via gitattributes though

Contains changes to .gitignore file due to the addition of .uid files
@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

Alright updated to not include the .uid file as discussed in the GDExtension meeting.

@IvorforceIvorforce left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How about editing the min version from the .gdextension file?

@unvermuthet

unvermuthet commented Mar 18, 2025

Copy link
Copy Markdown
Contributor

Not sure about the compatibility_minimum in .gdextension. We expect people to raise that themselves if they use APIs from newer versions, right? The parameter describes itself very well and everyone will touch that file.

@Ivorforce

Ivorforce commented Mar 18, 2025

Copy link
Copy Markdown
Member

godot-cpp-template itself is using an API from 4.4, and the resulting GDExtension is thus compatible only with 4.4+ (before the PR, 4.3+). I think we should raise it because it's just incorrect if we don't.

The parameter describes itself very well and everyone will touch that file.

That's true, but funnily enough I didn't change it myself until a few months after I started working with GDExtension because I thought my extension might be 4.1 compatible and it wouldn't if I changed it. Although that's a problem that will probably be less likely to happen to anyone else once we start expanding the docs about things like these :D

@unvermuthet

Copy link
Copy Markdown
Contributor

Then it seems I misunderstood backward compatibility with GDExtensions.

@dsnopek

Copy link
Copy Markdown
Contributor

It's true that because we're using the 4.4 branch of godot-cpp, the resulting GDExtension would only load on Godot 4.4+ (and give an error message about it on earlier versions)

However, I think it'd be OK to leave the compatibility_minimum it the .gdextension file at 4.1. That way, if a developer wants to support an earlier version, it's only a matter of rolling godot-cpp back to an earlier version, and doesn't require changing the .gdextension file as well

@unvermuthet

Copy link
Copy Markdown
Contributor

I think leaving it lower might be misleading then. Kind of like what @Ivorforce said:

I thought my extension might be 4.1 compatible and it wouldn't if I changed it.

I also thought this was the only safeguard. What's the reason for having this twice?

@dsnopek

dsnopek commented Mar 19, 2025

Copy link
Copy Markdown
Contributor

I also thought this was the only safeguard. What's the reason for having this twice?

The minimum_compatibility is checked by Godot, and it's done before ever trying to load the extension. It's the only way we have to deal with the compatibility break between 4.0 and 4.1, while avoiding crashes.

The second check is done by godot-cpp after the extension has been loaded, but before being initialized. This allows us to automatically derive the compatibility from the extension_api.json that was used, such that the extension developer doesn't need to manually put this into the .gdextension file. Not all extension bindings do something like this

@paddy-exe

Copy link
Copy Markdown
CollaboratorAuthor

I could alternatively also put some more information into the steps of using the template that godot-cpp should be set to the minimum supported version?

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancementNew feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@paddy-exe@dsnopek@Ivorforce@unvermuthet