forum

[confirmed] HD to SD Resolution Switch can cause Issues with Skins.

posted
Total Posts
8
Topic Starter
VeilStar
The Issue
  • Upon changing the resolution from 1920x1080 to 800x600 (both fullscreen) the skin textures/sprites are not reloaded, and given that I don't have a cursor.png, but only a cursor@2x.png file in my skin, and I switched from a resolution that uses @2x (HD) files to a resolution that uses SD files, osu! basically didn't re-assign the correct sprite. (Nor did it swap to the default skin's cursor.png either.) Causing an invisible cursor.

    Now, while having an invisible cursor is pretty bad already, I thought i'd have some fun and try to play a map like this, but osu! just crashed giving me a null exception for some texture/sprite stuff (it's pretty obvious why).
Crash Log
System.ArgumentNullException: This method does not accept null for this parameter.
Parameter name: texture
at Microsoft.Xna.Framework.Graphics.SpriteBatch.InternalDraw(Texture2D texture, Vector4& destination, Boolean scaleDestination, Nullable`1& sourceRectangle, Color color, Single rotation, Vector2& origin, SpriteEffects effects, Single depth)
at Microsoft.Xna.Framework.Graphics.SpriteBatch.Draw(Texture2D texture, Vector2 position, Nullable`1 sourceRectangle, Color color, Single rotation, Vector2 origin, Vector2 scale, SpriteEffects effects, Single layerDepth)
at #jj.#om.Draw()
at #jj.#qp.Draw()
at #Di.#Ci.Draw()
at #4h.#3h.#xR()
at #4h.#3h.Draw()
at #tb.#zb.Draw()
at #Lg.#Ng.Draw()
at #tb.#zb.#8s()
at #tb.#zb.#jt(Object , EventArgs )
at #tb.#Db.#Dt()
at #tb.#Tb.#Rv(Object , EventArgs )
at System.Windows.Forms.Application.ThreadContext.System.Windows.Forms.UnsafeNativeMethods.IMsoComponent.FDoIdle(Int32 grfidlef)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at #tb.#Tb.Run()
at #tb.#zb.Run()
at #Lg.#mp.#Hyb(String , Boolean , Boolean )
Video
(Excuse the weird 'cut-off', my Dxtory was still set to record at 1280x720.)

(When the video ends osu! basically just crashed.)

Proper Explanation
  • So let me just explain WHY this happens a bit more clearly...
    For resolutions of 800 pixels in height and above osu! will use @2x (referred to as HD) sprites.
    Resolutions lower than that will use the 'default' files without @2x behind them (referred to as SD).
    Now, because I'm basically telling osu! to switch from a resolution that uses HD sprites to one that uses SD sprites,
    it should re-load the sprites, which it does, as long as there is a SD version of the sprite in the skin folder.
    If there is not, however, it doesn't assign the default sprite to it, like it generally should.
    And what you get is basically what this post is all about.

Replication Steps
  1. Use a resolution higher than ?x800
  2. Use a skin with ONLY a @2x version of the cursor sprite. So DO HAVE a cursor@2x.png and NO cursor.png.
  3. In-game, change the resolution to anything LOWER than ?x800. (So 800x600, for example.)
  4. Observe as bad things happen. (Sprite misalignment, default sprite not getting assigned, and potentially osu! crashing.)

More Information / Notes
  1. I can replicate this on both Stable & CE.
  2. Yes, it's a bit dodgy skinning on my part, but regardless, it should still assign the default skin's sprite if there is none in the skin folder.
  3. Also, this has the same root cause as probably this thread.
    (So if this get fixed, both threads/issues should simultaneously be resolved.)
  4. Also see other people's posts.
Wingman626

VeilStar wrote:

and given that I don't have a cursor.png, but only a cursor@2x.png file in my skin, and I switched from a resolution that uses @2x (HD) files to a resolution that uses SD files, osu! basically didn't re-assign the correct sprite.
well this is going to feel a little akward, but nonetheless, lets move forward
-------------------------
what skin are you using?

also

have you replicated the issue with multiple skins or only one skin?

maybe it's an issue with the skin; either way, ill get back to you on this and see if i can confirm it.

Veilstar wrote:

(Excuse the weird 'cut-off', my Dxtory was still set to record at 1280x720.)
usually with recording software (like OBS Software for example), you can edit/crop the scene you are using so that a 1920x1080 resolution can be downscaled to fit the whole screen of a 1280x720 video format.

does dxtory have that kind of setting you could try? maybe you can, you did say it was still set to record at that resolution. oh well, ive never used dxtory before
Topic Starter
VeilStar

wingman626 wrote:

what skin are you using?
The one linked on my user-page. It's self-made for the most part.

wingman626 wrote:

have you replicated the issue with multiple skins or only one skin?
This works with any skin with the same 'structure'. (As in not having SD sprites but only HD files.)

wingman626 wrote:

usually with a program like OBS Software, you can edit/crop the scene you are using so that a 1920x1080 resolution can be downscaled to fit the whole screen of a 1280x720 video format.
I could have changed it and re-recorded, but I couldn't be bothered. It shows what it has to show anyway.

Added this to OP
So let me just explain WHY this happens a bit more clearly...
For resolutions of 800 pixels in height and above osu! will use @2x (referred to as HD) sprites.
Resolutions lower than that will use the 'default' files without @2x behind them (referred to as SD).
Now, because I'm basically telling osu! to switch from a resolution that uses HD sprites to one that uses SD sprites,
it should re-load the sprites, which it does, as long as there is a SD version of the sprite in the skin folder.
If there is not, however, it doesn't assign the default sprite to it, like it generally should.
And when you get is basically what this post is all about.

Yes, it's a bit dodgy skinning on my part, but regardless, it should still assign the default skin's sprite if there is none in the beatmap folder.


Also, this is probably related to this thread aswell.
(As in that they probably have the same root issue. I'm saying this partly because I unintentionally replicated it while doing this.)
DENKOUSEKKA

Not sure if this is related but the explanation leads me to believe it is
Wingman626


i can replicate this and i am confirming

NOTES below::

notes
so the issue is:

certain skins like the one on Veilstars front page, has only one cursor file which is labled "cursor@2x" but there is no regular "cursor" file.

the "cursor@2x" is supposed to be the HD texture for the cursor whenever your running high resolutions. if a lower resolution is used, the game switches to the "cursor" file if the skin has it, which is supposed to be the SD version of the HD one.

when no "cursor" file is present in the skin your using, the game should switch to the default "cursor" which is used in the osu! defualt skin, but it doesn't for some odd reason. which you can see in the beginning of the video that the cursor doesn't appear/load but you are able to go through menu options like if you had one.

once you load a beatmap with the invisible cursor, this causes osu to receive the crash.

[i should mention that Veilstar has replicated this issue switching from a 1920x1080 resolution to a 800x600 one. my laptop has an aspect ratio of 16:9 and can only go up to 1600x900, but the issue still replicates either way, so specific resolutions is not a factor for this error]

on the second attempt, i tried using a different skin with the same environment (same files) as the previous skin, only this one had a trail to give it that cool snake type look when you move your cursor pretty fast. the same issue occurred, but the trail underneath the cursor did not disappear along with it. when i loaded a beatmap, the game played normally like it should've be doing.

i dont know if the "trail" is supposed to have an HD version like the "cursor@2x" file. if it doesn't, then the second attempt can be confirmed as well. if an HD file has to be with the trail along with the cursor, then i may have made a mistake with that and you should disregard the second attempt.

im also noticing a weird issue with the interface voice when osu starts. in the beginning of the video, everything sounds normal, but after the issues occur and i open osu again (notice how resolution is still 800x600 and the defualt cursor shows when osu restarts) the interface voice is either quiet or not playing at all.

this can be Replicated and confirmed (UPDATE:: in all three versions; stable, beta, and cutting edge)

all in all, i dont know who would be running 800x600 resolution in this timeline, but i guess you have to support our brethren who still use legacy hardware or low-end systems to this day. also, i seem to have been saying "cursor@2k" instead of "cursor@2x". my bad, i have changed the spelling.

if anyone else can replicate this issue using the steps written above and from this video, please post your results here either in a video format like mine or in screenshots (or however you can show us) so we can hopefully send this off as a confirmed issue.
Topic Starter
VeilStar
Just a small correction...

wingman626 wrote:

im also noticing a weird issue with the interface voice when osu starts. in the beginning of the video, everything sounds normal, but after the issues occur and i open osu again (notice how resolution is still 800x600 and the defualt cursor shows when osu restarts) the interface voice is either quiet or not playing at all.
This was probably due to my skin still being loaded up, and me having empty welcome.wav & seeya.wav files.
(Because I like the intro/outro animations but don't want any voices.)

Anyhow, as I said before, it's a bit dodgy skinning on my part (or who ever creates a skin with only @2x files), but yeah...

Also, it's @2x, not @2k. hehe
Topic Starter
VeilStar
Moving to low priority for now.
tripleblue
this is still a problem why is this still not fixed ? cant be too hard i think.
i have the same problem with almost all my skins cant play letterbox now and my screen is too big.
Please sign in to reply.

New reply