@zarfaz

Как отрисовать glyph (freetype) попиксельно?

Использую пиксельный buffer который имеет 3 байта на каждый пиксель (rgb) и организован построчно.
game.viewWidth - ширина экрана в пикселях.
buffer - это выходное изображение которое отрисовывается на экране.
Инициализирую freetype библиотеки и пытаюсь отрисовать маленькую букву 'a'.
Но вместо 'a' получаю какие-то линии наискосок:
5fed87698ef9b235812774.jpeg

Убил 6 часов, ничего не понял. Что я делаю не так? Все туториалы говорят такой код должен работать.
FT_Library ft;
	FT_Face face;

	if (FT_Init_FreeType(&ft))
		std::cout << "ERROR::FREETYPE: Could not init FreeType Library" << std::endl;

	if (FT_New_Face(ft, "fonts/arial.ttf", 0, &face))
		std::cout << "ERROR::FREETYPE: Failed to load font" << std::endl;

	FT_Set_Pixel_Sizes(face, 0, 72);

	FT_Load_Char(face, 'a', FT_LOAD_RENDER))
		std::cout << "ERROR::FREETYTPE: Failed to load Glyph" << std::endl;

	FT_GlyphSlot ch = face->glyph;
	for (int rows = 0; rows < ch->bitmap.rows; rows++)
		{
			for (int yi = 0; yi < ch->bitmap.width; yi++)
			{				
				buffer[rows*game.viewWidth * 3 + yi * 3] = ch->bitmap..buffer[(rows * ch->bitmap.pitch + yi) ];
				buffer[rows*game.viewWidth * 3 + yi * 3 + 1] = ch->bitmap.buffer[(rows * ch->bitmap.pitch + yi)];
				buffer[rows*game.viewWidth * 3 + yi * 3 + 2] = ch->bitmap.buffer[(rows * ch->bitmap.pitch + yi)];				
			}
		}
  • Вопрос задан
  • 54 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы