CosmosOS / Cosmos

Cosmos is an operating system "construction kit". Build your own OS using managed languages such as C#, VB.NET, and more!
https://www.goCosmos.org
BSD 3-Clause "New" or "Revised" License
2.94k stars 552 forks source link

VBE Canvas - 1366x768 is "tilted" #3010

Open Szymekk44 opened 6 months ago

Szymekk44 commented 6 months ago

Area of Cosmos - What area of Cosmos are we dealing with?

VBE Canvas/Graphics - 1366x768

Expected Behaviour - What do you think that should happen?

It should render normally. (SVGAII 1360x768; 1366 should be supported but its black https://github.com/CosmosOS/Cosmos/blob/8adc6864c20ac616f05e8d85e17b47fd6d986db7/source/Cosmos.System2/Graphics/SVGAIICanvas.cs#L123C1-L123C38) obraz_2024-04-30_201234325

Actual Behaviour - What unexpectedly happens?

obraz_2024-04-30_200529482 yep even rectangles (loading bar) are broken

Reproduction - How did you get this error to appear?

Just create a new 1366x768 VBE Canvas and draw something (a rectangle, bitmap, text, anything)

Version - Were you using the User Kit or Dev Kit? And what User Kit version or Dev Kit commit (Cosmos, IL2CPU, X#)?

Devkit - latest c6155b9

Szymekk44 commented 6 months ago

Also its not vmware, on real hardware it looks the same

ascpixi commented 6 months ago

I haven't looked into this, but it looks like all implementations of Canvas, while having it defined, aren't completely using the stride information. This isn't a problem with resolutions like 1280x720, where the stride is equal to the width - but a resolution like 1366x768 would normally have some padding on each scanline to account for the alignment.

For e.g. 1280x720, each scanline is 1280 pixels long - meaning that two consecutive scanlines are already aligned on a 4 (or even 8!) byte boundary. For 1366px-wide scan-lines, this is no longer the case, so it's very much likely the stride is different than the width.

This could be fixed by making the formula for getting the position of a single pixel $(y * s) + x$, where $s$ is the stride.

zarlo commented 6 months ago

(y * (Mode.width + Mode.padding)) + x so adding padding data to Mode should fix it

DuperNO-Alt commented 4 months ago

i think windows had this kind of problem too

Szymekk44 commented 4 months ago

Update: its creating a 1368x768 canvas, but displaying 1366x768. Padding won't fix it because if you draw something on bottom two lines it is going to crash.

Here are some examples Square 10x10

on x1356 y0 image

x1358 y0 image

and now on x1359 y0 image

if you add in VBECanvas driver (Cosmos.System2) a new mode 1368x768 and set1366x768x32 in vbe resolution (vmware does not support 1368!) when creating a 1368x768 canvas it works. But with the same issue.

gamma63 commented 4 months ago

i think windows had this kind of problem too

Yes (at least on Rectify 11)

ADev531 commented 3 weeks ago

i think windows had this kind of problem too

That's right. Windows is solved by installing VMware tools, but There's no VMware Tools for CosmosOS.