예제 #1
0
파일: BMFont.cpp 프로젝트: kristofe/RiftRay
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);
}
예제 #2
0
void NISParse_CreateKeyframeList(void)
{
	AllocateKeyframes();

	PopulateArrays();
}