Ich bin momentan an einem Fontrenderingsystem in C++ auf Basis von Freetype dran.
Eigentlich funktioniert auch das meiste schon, aber die hochgeladen Buchstabentexturen sind teilweise verzerrt. Genauer gesagt unterschiedlich stark nach oben rechts geschert, wobei die Pixel die links fehlen wieder rechts hereinkommen und anders herum.
Der Code um die Textur(Größe: 4096²) zu Erstellen sieht so aus...
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
FontManagementTexture* MTex = new FontManagementTexture(new RectPacker<int>(Size), true);
this->Textures.push_back(MTex);
glGenTextures(1, &(MTex->ID));
glBindTexture(GL_TEXTURE_2D, MTex->ID);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_FALSE);
//GL_R3_G3_B2, GL_RGB, GL_RGB4, GL_RGB5, 3
//GL_LUMINANCE4, GL_LUMINANCE8, 1
glTexImage2D(GL_TEXTURE_2D, 0, Subpixel ? GL_RGB5 : GL_LUMINANCE4, Size.X, Size.Y, 0, Subpixel ? GL_RGB : GL_LUMINANCE, GL_UNSIGNED_BYTE, 0); // Subpixel ist immer aus...
GLCSHOWERROR();
|
Und der Code um die Buchstabenbitmaps in die große OpenGL Textur zu laden...
|
C-/C++-Quelltext
|
1
2
3
4
|
Rect<int>& TexArea = MTex_.Packer->operator[](MLetter.RectID).Rect;
const char* BmpFilename = (string("..\\test") + StringConv<int>::ToString(i++) + ".bmp").c_str();
SOIL_save_image(BmpFilename, SOIL_SAVE_TYPE_BMP, TexArea.X2 - TexArea.X1, TexArea.Y2 - TexArea.Y1, 1, MLetter.BmpPixels);
glTexSubImage2D(GL_TEXTURE_2D, 0, TexArea.X1, TexArea.Y1, TexArea.X2 - TexArea.X1, TexArea.Y2 - TexArea.Y1, MLetter.BmpColored ? GL_RGB : GL_LUMINANCE, GL_UNSIGNED_BYTE, MLetter.BmpPixels);
|
Da ich wie man hier sieht die einzelnen Buchstaben testweise als Bmp ausgebe und dort keine Fehler zu sehen sind, vermute ich stark ein Problem bei "
glTexSubImage2D". Die Buchstaben wie sie sein sollten habe ich auch mal angehängt.
Wenn ich unmittelbar danach den Texturinhalt wieder auslesen lasse, dann ist der Fehler bereits da.
So hole ich den Textureninhalt wieder von der Grafikkarte...
|
C-/C++-Quelltext
|
1
2
3
4
|
unsigned char* TexData = new unsigned char[4096*4096];
glGetTexImage(GL_TEXTURE_2D, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, TexData);
SOIL_save_image("..\\testcomplete.bmp", SOIL_SAVE_TYPE_BMP, 4096, 4096, 1, TexData);
GLCSHOWERROR();
|
Das Problem tritt unverändert auch auf, wenn man eine kleinere Fonttextur anlegt.
Über dem angehängten Bild in dem man im Hintergrund ein Fenster in der GUI erkennt, sollte eigentlich "The Fontmanager is working! :-)" stehen.
(Crosspost zu http://www.delphigl.com/forum/viewtopic.…&p=93417#p93417)