ПрограммированиеФорумГрафика

Проблема. Рисуеться только один объект.

#0
23:55, 19 июня 2015

Уважаемые форумчане.. понимаю что моя проблема может быть сильно глупа и банальна но я не знаю что не так.
Рисую 2 объекта. Рисуется всегда один.

void Label::onDraw()
{
  drawChar(35);
  drawFont();
}

void Label::drawFont()
{
  CharacterInfo* info = _font->getInfoChar(35);
  Shader* shader = _font->getShader();

  Vertex vertices[4];
  vertices[0] = Vertex(Vector3f(1.0f, 1.0f, 0.0f), Vector3f(1.0f, 1.0f, 1.0f),
    Vector2f(0.0f, 1.0f));
  vertices[1] = Vertex(Vector3f(1.3f, 1.0f, 0.0f), Vector3f(1.0f, 1.0f, 1.0f),
    Vector2f(1.0f, 1.0f));
  vertices[2] = Vertex(Vector3f(1.3f, 1.3f, 0.0f), Vector3f(1.0f, 1.0f, 1.0f),
    Vector2f(1.0f, 0.0f));
  vertices[3] = Vertex(Vector3f(1.0f, 1.3f, 0.0f), Vector3f(1.0f, 1.0f, 1.0f),
    Vector2f(0.0f, 0.0f));


  GLuint VBO;

  glGenBuffers(1, &VBO);
  glBindBuffer(GL_ARRAY_BUFFER, VBO);
  glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);

  glVertexAttribPointer(shader->VERTEX_ATTRIB_POSITION, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), nullptr);
  glVertexAttribPointer(shader->VERTEX_ATTRIB_COLOR, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)offsetof(Vertex, color));
  glVertexAttribPointer(shader->VERTEX_ATTRIB_TEX_COORDS, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*)offsetof(Vertex, uv));

  glEnableVertexAttribArray(shader->getAttribLocation(shader->ATTRIBUTE_NAME_POSITION));
  glEnableVertexAttribArray(shader->getAttribLocation(shader->ATTRIBUTE_NAME_COLOR));
  glEnableVertexAttribArray(shader->getAttribLocation(shader->ATTRIBUTE_NAME_TEX_COORD));


  GLfloat color[4] = { _color._r, _color._g, _color._b, 1 };

  shader->use();

  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D, *(_font->getTextureId()));
  shader->setUniformLocationWith1i(shader->getUniformLocation(shader->UNIFORM_NAME_SAMPLER), 0);
  shader->setUniformLocationWith4fv(shader->getUniformLocation(shader->UNIFORM_NAME_COLOR), (const GLfloat*)color, 1);
  shader->setUniformLocationWithMatrix4fv(shader->getUniformLocation(shader->UNIFORM_NAME_MVP_MATRIX), (const GLfloat*)transform(info), 1);

  glBindBuffer(GL_ARRAY_BUFFER, VBO);
  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _IBO);
  glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
  glDisable(GL_BLEND);
}

void Label::drawChar(unsigned int char_)
{
  CharacterInfo* info = _font->getInfoChar(char_);

  Shader* shader = _font->getShader();
  GLfloat color[4] = { _color._r, _color._g, _color._b, 1 };

  shader->use();

  glEnable(GL_BLEND);
  glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

  glActiveTexture(GL_TEXTURE0);
  glBindTexture(GL_TEXTURE_2D, *(_font->getTextureId()));
  shader->setUniformLocationWith1i(shader->getUniformLocation(shader->UNIFORM_NAME_SAMPLER), 0);
  shader->setUniformLocationWith4fv(shader->getUniformLocation(shader->UNIFORM_NAME_COLOR), (const GLfloat*) color, 1);
  shader->setUniformLocationWithMatrix4fv(shader->getUniformLocation(shader->UNIFORM_NAME_MVP_MATRIX), (const GLfloat*)transform(info), 1);
  
  glBindBuffer(GL_ARRAY_BUFFER, info->_VBO);
  glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _IBO);
  glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
  glDrawArrays(GL_TRIANGLES, 0, 6);
  glDisable(GL_BLEND);
}

Помогите пожалуйста.

ПрограммированиеФорумГрафика

Тема в архиве.