Feature: allow providing chunked files for AnimatedTextures - #94

Open
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures
Open

Feature: allow providing chunked files for AnimatedTextures#94
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures

Conversation

@lincoln-lm

Copy link
Copy Markdown

AnimatedTextures currently fail to render properly (OpenGL debug message, id=1000, source=API, type=ERROR, severity=HIGH, message=glTexImage2D has generated an error (GL_INVALID_VALUE)) when provided textures > 16384 pixels tall. This limits the length of animations based on the resolution of the image. This PR attempts to allow providing multiple animated texture files that will be displayed one after another to get around this limit and allow animated textures of (theoretically) arbitrary length.

I am not confident this is the most elegant approach to solving the problem (and storing animated images the way MC does is very inefficient storage-wise) but it was the simplest I could think of.

@contariaa

Copy link
Copy Markdown
Owner

I am very worried about the performance impact of this, have you done any testing regarding load times, memory usage and framerate (on wall or ingame)?
If the performance is okay, I'm not opposed to adding something like this, but in general I would prefer to move to gif or webp or whatever file format is appropriate for longer animations, see #40, i also have some work on gif parsing locally, if you're interested I could push that aswell.

Implementation wise I'd prefer adding a seedqueue:columns parameter or something like that to mcmeta to allow for bigger animations in the same texture, since the name-x.png syntax is already used for randomizing locks.
I'm assuming (haven't tested it) that this would limit animations to 16384x16384, but that should be more than enough anyway, probably well above the threshold of causing serious performance issues

@lincoln-lm

Copy link
Copy Markdown
Author

I'm not sure the best way to go about profiling this but in my personal use with a very large animation (2 minutes, 20 fps, 1056x594) I haven't noticed any hiccups, rps drops, or other obvious issues unless the animation is chunked such that the individual .pngs are very large (splitting at a threshold lower than 16384 fixes this). I do think webp or gif support is ideal but it seemed out of my depth wrt java/mc modding. 16384x16384 isn't enough for my particular use case, though I do admit it is likely completely reasonable for more sane packs.

@contariaa

Copy link
Copy Markdown
Owner

If it works performantly enough for you that seems fine then, if it doesnt work well for other people they just wont be able to make use of this.
I don't like how this format clashes with the locked texture randomization, would get very weird if I ever want to implement randomization of other textures (or chunking of locked textures), not sure what the best alternative would be but i could be convinced of a folder structure, so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

@contariaa

Copy link
Copy Markdown
Owner

so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

This wouldnt work great with multiple resourcepacks but neither does lock randomization, probably something i'll look at improving in the eventual customization update

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@lincoln-lm@contariaa
, '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

Feature: allow providing chunked files for AnimatedTextures - #94

Open
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures
Open

Feature: allow providing chunked files for AnimatedTextures#94
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures

Conversation

@lincoln-lm

Copy link
Copy Markdown

AnimatedTextures currently fail to render properly (OpenGL debug message, id=1000, source=API, type=ERROR, severity=HIGH, message=glTexImage2D has generated an error (GL_INVALID_VALUE)) when provided textures > 16384 pixels tall. This limits the length of animations based on the resolution of the image. This PR attempts to allow providing multiple animated texture files that will be displayed one after another to get around this limit and allow animated textures of (theoretically) arbitrary length.

I am not confident this is the most elegant approach to solving the problem (and storing animated images the way MC does is very inefficient storage-wise) but it was the simplest I could think of.

@contariaa

Copy link
Copy Markdown
Owner

I am very worried about the performance impact of this, have you done any testing regarding load times, memory usage and framerate (on wall or ingame)?
If the performance is okay, I'm not opposed to adding something like this, but in general I would prefer to move to gif or webp or whatever file format is appropriate for longer animations, see #40, i also have some work on gif parsing locally, if you're interested I could push that aswell.

Implementation wise I'd prefer adding a seedqueue:columns parameter or something like that to mcmeta to allow for bigger animations in the same texture, since the name-x.png syntax is already used for randomizing locks.
I'm assuming (haven't tested it) that this would limit animations to 16384x16384, but that should be more than enough anyway, probably well above the threshold of causing serious performance issues

@lincoln-lm

Copy link
Copy Markdown
Author

I'm not sure the best way to go about profiling this but in my personal use with a very large animation (2 minutes, 20 fps, 1056x594) I haven't noticed any hiccups, rps drops, or other obvious issues unless the animation is chunked such that the individual .pngs are very large (splitting at a threshold lower than 16384 fixes this). I do think webp or gif support is ideal but it seemed out of my depth wrt java/mc modding. 16384x16384 isn't enough for my particular use case, though I do admit it is likely completely reasonable for more sane packs.

@contariaa

Copy link
Copy Markdown
Owner

If it works performantly enough for you that seems fine then, if it doesnt work well for other people they just wont be able to make use of this.
I don't like how this format clashes with the locked texture randomization, would get very weird if I ever want to implement randomization of other textures (or chunking of locked textures), not sure what the best alternative would be but i could be convinced of a folder structure, so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

@contariaa

Copy link
Copy Markdown
Owner

so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

This wouldnt work great with multiple resourcepacks but neither does lock randomization, probably something i'll look at improving in the eventual customization update

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@lincoln-lm@contariaa
, '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

Feature: allow providing chunked files for AnimatedTextures - #94

Open
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures
Open

Feature: allow providing chunked files for AnimatedTextures#94
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures

Conversation

@lincoln-lm

Copy link
Copy Markdown

AnimatedTextures currently fail to render properly (OpenGL debug message, id=1000, source=API, type=ERROR, severity=HIGH, message=glTexImage2D has generated an error (GL_INVALID_VALUE)) when provided textures > 16384 pixels tall. This limits the length of animations based on the resolution of the image. This PR attempts to allow providing multiple animated texture files that will be displayed one after another to get around this limit and allow animated textures of (theoretically) arbitrary length.

I am not confident this is the most elegant approach to solving the problem (and storing animated images the way MC does is very inefficient storage-wise) but it was the simplest I could think of.

@contariaa

Copy link
Copy Markdown
Owner

I am very worried about the performance impact of this, have you done any testing regarding load times, memory usage and framerate (on wall or ingame)?
If the performance is okay, I'm not opposed to adding something like this, but in general I would prefer to move to gif or webp or whatever file format is appropriate for longer animations, see #40, i also have some work on gif parsing locally, if you're interested I could push that aswell.

Implementation wise I'd prefer adding a seedqueue:columns parameter or something like that to mcmeta to allow for bigger animations in the same texture, since the name-x.png syntax is already used for randomizing locks.
I'm assuming (haven't tested it) that this would limit animations to 16384x16384, but that should be more than enough anyway, probably well above the threshold of causing serious performance issues

@lincoln-lm

Copy link
Copy Markdown
Author

I'm not sure the best way to go about profiling this but in my personal use with a very large animation (2 minutes, 20 fps, 1056x594) I haven't noticed any hiccups, rps drops, or other obvious issues unless the animation is chunked such that the individual .pngs are very large (splitting at a threshold lower than 16384 fixes this). I do think webp or gif support is ideal but it seemed out of my depth wrt java/mc modding. 16384x16384 isn't enough for my particular use case, though I do admit it is likely completely reasonable for more sane packs.

@contariaa

Copy link
Copy Markdown
Owner

If it works performantly enough for you that seems fine then, if it doesnt work well for other people they just wont be able to make use of this.
I don't like how this format clashes with the locked texture randomization, would get very weird if I ever want to implement randomization of other textures (or chunking of locked textures), not sure what the best alternative would be but i could be convinced of a folder structure, so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

@contariaa

Copy link
Copy Markdown
Owner

so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

This wouldnt work great with multiple resourcepacks but neither does lock randomization, probably something i'll look at improving in the eventual customization update

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@lincoln-lm@contariaa
, '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

Feature: allow providing chunked files for AnimatedTextures - #94

Open
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures
Open

Feature: allow providing chunked files for AnimatedTextures#94
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures

Conversation

@lincoln-lm

Copy link
Copy Markdown

AnimatedTextures currently fail to render properly (OpenGL debug message, id=1000, source=API, type=ERROR, severity=HIGH, message=glTexImage2D has generated an error (GL_INVALID_VALUE)) when provided textures > 16384 pixels tall. This limits the length of animations based on the resolution of the image. This PR attempts to allow providing multiple animated texture files that will be displayed one after another to get around this limit and allow animated textures of (theoretically) arbitrary length.

I am not confident this is the most elegant approach to solving the problem (and storing animated images the way MC does is very inefficient storage-wise) but it was the simplest I could think of.

@contariaa

Copy link
Copy Markdown
Owner

I am very worried about the performance impact of this, have you done any testing regarding load times, memory usage and framerate (on wall or ingame)?
If the performance is okay, I'm not opposed to adding something like this, but in general I would prefer to move to gif or webp or whatever file format is appropriate for longer animations, see #40, i also have some work on gif parsing locally, if you're interested I could push that aswell.

Implementation wise I'd prefer adding a seedqueue:columns parameter or something like that to mcmeta to allow for bigger animations in the same texture, since the name-x.png syntax is already used for randomizing locks.
I'm assuming (haven't tested it) that this would limit animations to 16384x16384, but that should be more than enough anyway, probably well above the threshold of causing serious performance issues

@lincoln-lm

Copy link
Copy Markdown
Author

I'm not sure the best way to go about profiling this but in my personal use with a very large animation (2 minutes, 20 fps, 1056x594) I haven't noticed any hiccups, rps drops, or other obvious issues unless the animation is chunked such that the individual .pngs are very large (splitting at a threshold lower than 16384 fixes this). I do think webp or gif support is ideal but it seemed out of my depth wrt java/mc modding. 16384x16384 isn't enough for my particular use case, though I do admit it is likely completely reasonable for more sane packs.

@contariaa

Copy link
Copy Markdown
Owner

If it works performantly enough for you that seems fine then, if it doesnt work well for other people they just wont be able to make use of this.
I don't like how this format clashes with the locked texture randomization, would get very weird if I ever want to implement randomization of other textures (or chunking of locked textures), not sure what the best alternative would be but i could be convinced of a folder structure, so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

@contariaa

Copy link
Copy Markdown
Owner

so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

This wouldnt work great with multiple resourcepacks but neither does lock randomization, probably something i'll look at improving in the eventual customization update

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@lincoln-lm@contariaa
, '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

Feature: allow providing chunked files for AnimatedTextures - #94

Open
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures
Open

Feature: allow providing chunked files for AnimatedTextures#94
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures

Conversation

@lincoln-lm

Copy link
Copy Markdown

AnimatedTextures currently fail to render properly (OpenGL debug message, id=1000, source=API, type=ERROR, severity=HIGH, message=glTexImage2D has generated an error (GL_INVALID_VALUE)) when provided textures > 16384 pixels tall. This limits the length of animations based on the resolution of the image. This PR attempts to allow providing multiple animated texture files that will be displayed one after another to get around this limit and allow animated textures of (theoretically) arbitrary length.

I am not confident this is the most elegant approach to solving the problem (and storing animated images the way MC does is very inefficient storage-wise) but it was the simplest I could think of.

@contariaa

Copy link
Copy Markdown
Owner

I am very worried about the performance impact of this, have you done any testing regarding load times, memory usage and framerate (on wall or ingame)?
If the performance is okay, I'm not opposed to adding something like this, but in general I would prefer to move to gif or webp or whatever file format is appropriate for longer animations, see #40, i also have some work on gif parsing locally, if you're interested I could push that aswell.

Implementation wise I'd prefer adding a seedqueue:columns parameter or something like that to mcmeta to allow for bigger animations in the same texture, since the name-x.png syntax is already used for randomizing locks.
I'm assuming (haven't tested it) that this would limit animations to 16384x16384, but that should be more than enough anyway, probably well above the threshold of causing serious performance issues

@lincoln-lm

Copy link
Copy Markdown
Author

I'm not sure the best way to go about profiling this but in my personal use with a very large animation (2 minutes, 20 fps, 1056x594) I haven't noticed any hiccups, rps drops, or other obvious issues unless the animation is chunked such that the individual .pngs are very large (splitting at a threshold lower than 16384 fixes this). I do think webp or gif support is ideal but it seemed out of my depth wrt java/mc modding. 16384x16384 isn't enough for my particular use case, though I do admit it is likely completely reasonable for more sane packs.

@contariaa

Copy link
Copy Markdown
Owner

If it works performantly enough for you that seems fine then, if it doesnt work well for other people they just wont be able to make use of this.
I don't like how this format clashes with the locked texture randomization, would get very weird if I ever want to implement randomization of other textures (or chunking of locked textures), not sure what the best alternative would be but i could be convinced of a folder structure, so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

@contariaa

Copy link
Copy Markdown
Owner

so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

This wouldnt work great with multiple resourcepacks but neither does lock randomization, probably something i'll look at improving in the eventual customization update

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@lincoln-lm@contariaa
, '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

Feature: allow providing chunked files for AnimatedTextures - #94

Open
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures
Open

Feature: allow providing chunked files for AnimatedTextures#94
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures

Conversation

@lincoln-lm

Copy link
Copy Markdown

AnimatedTextures currently fail to render properly (OpenGL debug message, id=1000, source=API, type=ERROR, severity=HIGH, message=glTexImage2D has generated an error (GL_INVALID_VALUE)) when provided textures > 16384 pixels tall. This limits the length of animations based on the resolution of the image. This PR attempts to allow providing multiple animated texture files that will be displayed one after another to get around this limit and allow animated textures of (theoretically) arbitrary length.

I am not confident this is the most elegant approach to solving the problem (and storing animated images the way MC does is very inefficient storage-wise) but it was the simplest I could think of.

@contariaa

Copy link
Copy Markdown
Owner

I am very worried about the performance impact of this, have you done any testing regarding load times, memory usage and framerate (on wall or ingame)?
If the performance is okay, I'm not opposed to adding something like this, but in general I would prefer to move to gif or webp or whatever file format is appropriate for longer animations, see #40, i also have some work on gif parsing locally, if you're interested I could push that aswell.

Implementation wise I'd prefer adding a seedqueue:columns parameter or something like that to mcmeta to allow for bigger animations in the same texture, since the name-x.png syntax is already used for randomizing locks.
I'm assuming (haven't tested it) that this would limit animations to 16384x16384, but that should be more than enough anyway, probably well above the threshold of causing serious performance issues

@lincoln-lm

Copy link
Copy Markdown
Author

I'm not sure the best way to go about profiling this but in my personal use with a very large animation (2 minutes, 20 fps, 1056x594) I haven't noticed any hiccups, rps drops, or other obvious issues unless the animation is chunked such that the individual .pngs are very large (splitting at a threshold lower than 16384 fixes this). I do think webp or gif support is ideal but it seemed out of my depth wrt java/mc modding. 16384x16384 isn't enough for my particular use case, though I do admit it is likely completely reasonable for more sane packs.

@contariaa

Copy link
Copy Markdown
Owner

If it works performantly enough for you that seems fine then, if it doesnt work well for other people they just wont be able to make use of this.
I don't like how this format clashes with the locked texture randomization, would get very weird if I ever want to implement randomization of other textures (or chunking of locked textures), not sure what the best alternative would be but i could be convinced of a folder structure, so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

@contariaa

Copy link
Copy Markdown
Owner

so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

This wouldnt work great with multiple resourcepacks but neither does lock randomization, probably something i'll look at improving in the eventual customization update

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@lincoln-lm@contariaa
, '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

Feature: allow providing chunked files for AnimatedTextures - #94

Open
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures
Open

Feature: allow providing chunked files for AnimatedTextures#94
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures

Conversation

@lincoln-lm

Copy link
Copy Markdown

AnimatedTextures currently fail to render properly (OpenGL debug message, id=1000, source=API, type=ERROR, severity=HIGH, message=glTexImage2D has generated an error (GL_INVALID_VALUE)) when provided textures > 16384 pixels tall. This limits the length of animations based on the resolution of the image. This PR attempts to allow providing multiple animated texture files that will be displayed one after another to get around this limit and allow animated textures of (theoretically) arbitrary length.

I am not confident this is the most elegant approach to solving the problem (and storing animated images the way MC does is very inefficient storage-wise) but it was the simplest I could think of.

@contariaa

Copy link
Copy Markdown
Owner

I am very worried about the performance impact of this, have you done any testing regarding load times, memory usage and framerate (on wall or ingame)?
If the performance is okay, I'm not opposed to adding something like this, but in general I would prefer to move to gif or webp or whatever file format is appropriate for longer animations, see #40, i also have some work on gif parsing locally, if you're interested I could push that aswell.

Implementation wise I'd prefer adding a seedqueue:columns parameter or something like that to mcmeta to allow for bigger animations in the same texture, since the name-x.png syntax is already used for randomizing locks.
I'm assuming (haven't tested it) that this would limit animations to 16384x16384, but that should be more than enough anyway, probably well above the threshold of causing serious performance issues

@lincoln-lm

Copy link
Copy Markdown
Author

I'm not sure the best way to go about profiling this but in my personal use with a very large animation (2 minutes, 20 fps, 1056x594) I haven't noticed any hiccups, rps drops, or other obvious issues unless the animation is chunked such that the individual .pngs are very large (splitting at a threshold lower than 16384 fixes this). I do think webp or gif support is ideal but it seemed out of my depth wrt java/mc modding. 16384x16384 isn't enough for my particular use case, though I do admit it is likely completely reasonable for more sane packs.

@contariaa

Copy link
Copy Markdown
Owner

If it works performantly enough for you that seems fine then, if it doesnt work well for other people they just wont be able to make use of this.
I don't like how this format clashes with the locked texture randomization, would get very weird if I ever want to implement randomization of other textures (or chunking of locked textures), not sure what the best alternative would be but i could be convinced of a folder structure, so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

@contariaa

Copy link
Copy Markdown
Owner

so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

This wouldnt work great with multiple resourcepacks but neither does lock randomization, probably something i'll look at improving in the eventual customization update

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@lincoln-lm@contariaa
, '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

Feature: allow providing chunked files for AnimatedTextures - #94

Open
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures
Open

Feature: allow providing chunked files for AnimatedTextures#94
lincoln-lm wants to merge 1 commit into
contariaa:mainfrom
lincoln-lm:chunked-animated-textures

Conversation

@lincoln-lm

Copy link
Copy Markdown

AnimatedTextures currently fail to render properly (OpenGL debug message, id=1000, source=API, type=ERROR, severity=HIGH, message=glTexImage2D has generated an error (GL_INVALID_VALUE)) when provided textures > 16384 pixels tall. This limits the length of animations based on the resolution of the image. This PR attempts to allow providing multiple animated texture files that will be displayed one after another to get around this limit and allow animated textures of (theoretically) arbitrary length.

I am not confident this is the most elegant approach to solving the problem (and storing animated images the way MC does is very inefficient storage-wise) but it was the simplest I could think of.

@contariaa

Copy link
Copy Markdown
Owner

I am very worried about the performance impact of this, have you done any testing regarding load times, memory usage and framerate (on wall or ingame)?
If the performance is okay, I'm not opposed to adding something like this, but in general I would prefer to move to gif or webp or whatever file format is appropriate for longer animations, see #40, i also have some work on gif parsing locally, if you're interested I could push that aswell.

Implementation wise I'd prefer adding a seedqueue:columns parameter or something like that to mcmeta to allow for bigger animations in the same texture, since the name-x.png syntax is already used for randomizing locks.
I'm assuming (haven't tested it) that this would limit animations to 16384x16384, but that should be more than enough anyway, probably well above the threshold of causing serious performance issues

@lincoln-lm

Copy link
Copy Markdown
Author

I'm not sure the best way to go about profiling this but in my personal use with a very large animation (2 minutes, 20 fps, 1056x594) I haven't noticed any hiccups, rps drops, or other obvious issues unless the animation is chunked such that the individual .pngs are very large (splitting at a threshold lower than 16384 fixes this). I do think webp or gif support is ideal but it seemed out of my depth wrt java/mc modding. 16384x16384 isn't enough for my particular use case, though I do admit it is likely completely reasonable for more sane packs.

@contariaa

Copy link
Copy Markdown
Owner

If it works performantly enough for you that seems fine then, if it doesnt work well for other people they just wont be able to make use of this.
I don't like how this format clashes with the locked texture randomization, would get very weird if I ever want to implement randomization of other textures (or chunking of locked textures), not sure what the best alternative would be but i could be convinced of a folder structure, so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

@contariaa

Copy link
Copy Markdown
Owner

so /textures/gui/wall/background.png would just be the single image and to get multiple youd do /textures/gui/wall/background/0.png, /textures/gui/wall/background/1.png, ...

This wouldnt work great with multiple resourcepacks but neither does lock randomization, probably something i'll look at improving in the eventual customization update

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@lincoln-lm@contariaa