void BMFont::DrawString( const std::string& text, int x, int y, const glm::mat4& modelview, const glm::mat4& projection, const ShaderWithVariables& sh ) const { if (text.empty()) return; if (m_texturePages.empty()) return; assert(m_texturePages.size() == 1); std::vector<float> verts; std::vector<unsigned int> indxs; PopulateArrays(text, x, y, verts, indxs); const GLuint prog = sh.prog(); glUseProgram(prog); { glUniformMatrix4fv(sh.GetUniLoc("mvmtx"), 1, false, glm::value_ptr(modelview)); glUniformMatrix4fv(sh.GetUniLoc("prmtx"), 1, false, glm::value_ptr(projection)); ///@todo Support multiple font pages glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, m_texturePages[0]); glUniform1i(sh.GetUniLoc("texImage"), 0); sh.bindVAO(); { glBindBuffer(GL_ARRAY_BUFFER, sh.GetVboLoc("vPosition")); glBufferData(GL_ARRAY_BUFFER, verts.size()*sizeof(float), &verts[0], GL_STATIC_DRAW); glVertexAttribPointer(sh.GetAttrLoc("vPosition"), 3, GL_FLOAT, GL_FALSE, 5*sizeof(float), NULL); glVertexAttribPointer(sh.GetAttrLoc("vTexCoord"), 2, GL_FLOAT, GL_FALSE, 5*sizeof(float), (void*)(3*sizeof(float))); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, sh.GetVboLoc("elements")); glBufferData(GL_ELEMENT_ARRAY_BUFFER, indxs.size()*sizeof(unsigned int), &indxs[0], GL_STATIC_DRAW); glDrawElements(GL_TRIANGLES, indxs.size(), GL_UNSIGNED_INT, 0); } glBindVertexArray(0); } glUseProgram(0); }
void NISParse_CreateKeyframeList(void) { AllocateKeyframes(); PopulateArrays(); }