gameprogcpp / code

Game Programming in C++ Code
Other
1.05k stars 355 forks source link

Issue with UI TTF Rendering #54

Open fellonemarco opened 2 years ago

fellonemarco commented 2 years ago

Everything seems to work fine, build and run is ok but the writings are a horrible rendering artifact made by retorts lines in columns. What could be the issue? Maybe something about compatibility? I'm testing on the latest Ubuntu with a Radeon GPU.

Sioniras commented 1 year ago

This sounds like the problem I also encountered, and I found that the implementation of Texture::CreateFromSurface is not completely correct - it works when I boot into Windows, but not in Ubuntu.

The problem is here: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, mWidth, mHeight, 0, GL_BGRA, GL_UNSIGNED_BYTE, surface->pixels); where: mWidth = surface->w;

The pixel data in the rendered surface is in fact NOT surface->w * surface->h pixels, as might be expected, but instead you should use:

mWidth = surface->pitch/4;

The explanation (as I understand it) is that the rendered surface is padded by some bytes in order to reach a "nice" width (seems to be a factor of 16 or something like that), so each row in the pixel data may in fact be longer than "surface->w". And since surface->pitch is defined as number of bytes per row, it should be divided by the number of bytes per pixel (4 channels, i.e. RGBA).