içinde bir yazı tipi yüklemiyor Bir pencereye metin işlemek için FreeType kullanan bir uygulama yazdım. Visual Studio 2015'ten her ikisini de çalıştıran hata ayıklama ve sürüm sürümünü oluşturdum. Çalışma zaman kütüphanemi/MDd'ye bağlantı için ayarlamamı sağladım. Ayrıca kaynak dosyalarında OCRAEXT.TTF yazı tipini de ekledim. Ben kod bu satırları içeren bir initialise fonksiyonu var benim Oyun sınıftaNeden Freetype benim .exe
TextRenderer::TextRenderer(GLuint width, GLuint height)
{
//Load and configure shader
this->TextShader = ResourceManager::LoadShader("VertexText.vert", "FragmentText.frag", nullptr, "text");
this->TextShader.SetMatrix4("projection", glm::ortho(0.0f, static_cast<GLfloat>(width), static_cast<GLfloat>(height), 0.0f), GL_TRUE);
this->TextShader.SetInteger("text", 0);
//configure VAO/VBO for texture quads
glGenVertexArrays(1, &this->VAO);
glGenBuffers(1, &this->VBO);
glBindVertexArray(this->VAO);
glBindBuffer(GL_ARRAY_BUFFER, this->VBO);
glBufferData(GL_ARRAY_BUFFER, sizeof(GLfloat) * 6 * 4, NULL, GL_DYNAMIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 4, GL_FLOAT, GL_FALSE, 4 * sizeof(GLfloat), 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
}
void TextRenderer::Load(std::string font, GLuint fontSize)
{
//first clear the previously loaded characters
this->Characters.clear();
//then initialise and load the Freetype library
FT_Library ft;
if (FT_Init_FreeType(&ft)) //All functions return a value different than 0 whenever an error occurred
std::cout << "ERROR::FREETYPE: Could not init freetype library" << std::endl;
//Load font as face
FT_Face face;
if (FT_New_Face(ft, font.c_str(), 0, &face))
std::cout << "ERROR::FREETYPE: Failed to load font" << std::endl;
//set size to load glyphs as
FT_Set_Pixel_Sizes(face, 0, fontSize);
//disable byte-alignment restriction
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
//then for the first 128 ASCII characters, pre-load/compile their characters and store them
for (GLubyte c = 0; c < 128; c++)
{
//Load character glyph
if (FT_Load_Char(face, c, FT_LOAD_RENDER))
{
std::cout << "ERROR::FREETYPE: Failed to load glyph" << std::endl;
continue;
}
//generate texture
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(
GL_TEXTURE_2D,
0,
GL_RED,
face->glyph->bitmap.width,
face->glyph->bitmap.rows,
0,
GL_RED,
GL_UNSIGNED_BYTE,
face->glyph->bitmap.buffer
);
//set texture options
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
//Now store character for later use
Character character =
{
texture,
glm::ivec2(face->glyph->bitmap.width, face->glyph->bitmap.rows),
glm::ivec2(face->glyph->bitmap_left, face->glyph->bitmap_top),
face->glyph->advance.x,
};
Characters.insert(std::pair<GLchar, Character>(c, character));
}
glBindTexture(GL_TEXTURE_2D, 0);
//destroy FreeType once we're finished
FT_Done_Face(face);
FT_Done_FreeType(ft);
}
: Burada
kod kullanır FreeType olduğunuText = new TextRenderer(this->Width, this->Height);
Text->Load("fonts/OCRAEXT.TTF", 24);
sorun olduğunu ben çalıştığımda Tek başına .exe dosyasını çalıştırın, "ERROR :: FREETYPE: Yazı tipi yüklenemedi" ve .exe dosyasını alıyorum. çalışmayı durdurur. Ben bu hata ayıklamak için denedim ve "Game.exe 0x00730072 de işlenmeyen özel durum." 0xC0000005: Erişim ihlal yürütme konumunu 0x00730072 diyor bir ileti alıyorum. " Bu kod satırına
kesme noktası puan:
FT_Set_Pixel_Sizes(face, 0, fontSize);
ben sorunu anlamaya kodu atlama çalıştı, ancak biraz mantıklı yaptık. Birisi sorunun ne olabileceğini açıklayabilir mi? Dosya sistemindeki bir yolu bekler.