Exemple #1
0
void MenuState::display()
{
    m_VertexBuffer.bind();
    m_Game->getShaderManager().useShader("Texture");

    setupVertexAttrib();
    passTextureToShader();
    passMatrixToShader();

    glDrawArrays(GL_TRIANGLES, 0, 12);
}
Exemple #2
0
MenuState::MenuState(Game* game)
    : GameState(game)
    , m_TextureFileName("Textures/menuScreen.png")
{
    m_Game->getShaderManager().useShader("Texture");

    createTexture();
    createVertexBuffer();
    setupVertexAttrib();

    passTextureToShader();
    passMatrixToShader();
}
Exemple #3
0
bool SciIllLib::CMesh::InitializeGLBuffer()
{
  CGLInfo::CheckError("IntializeGLBuffer");
	GLint locAttrVertex = m_shader->attribLocation("vertex");
	GLint locAttrNormal = m_shader->attribLocation("normal");
	GLint locAttrTexCoord = m_shader->attribLocation("texCoord");
	GLint locAttrTangent = m_shader->attribLocation("tangent");
	GLint locAttrBinormal = m_shader->attribLocation("binormal");

  glGenVertexArrays(1, &m_vao);
  glBindVertexArray(m_vao);
  
	glGenBuffers(5, &m_vbo[0]);
    
  bool found = false;
  found |= setupVertexAttrib(locAttrVertex,    m_vbo[VBO_VERTEX],      4, m_arrVertex);
  found |= setupVertexAttrib(locAttrNormal,    m_vbo[VBO_NORMAL],      4, m_arrNormal);
  found |= setupVertexAttrib(locAttrTexCoord,  m_vbo[VBO_TEXCOORD],    2, m_arrTexCoord);
  
  if (locAttrTangent * locAttrBinormal > 0)
  {
      calculateTB(m_arrVertex, m_arrTexCoord);
      found |= setupVertexAttrib(locAttrTangent,   m_vbo[VBO_TANGENT],     3, m_arrTangent);
      found |= setupVertexAttrib(locAttrBinormal,  m_vbo[VBO_BINORMAL],    3, m_arrBinormal);
  }
  if (found)
  {
      glGenBuffers(1, &m_vboIdx);
      glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_vboIdx);
      glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_countIdx * sizeof(GLuint), m_arrIdx, GL_STATIC_DRAW);
  }

  cleanupBuffers();
  
  glBindVertexArray(0);

	return true;
}
Exemple #4
0
/**
 * Loada heightmap and create the mesh.
 * @param filename filename that contains the heightmap
 * @param scale that is applied to the height (compared to max(width,height))
 * @param locAttrVertex location/index of the vertexattribute vertex-position
 * @param locAttrNormal location/index of the vertexattribute vertex-normal
 * @param locAttrTexCoord location/index of the vertexattribute vertex-texture coordinate
 */
bool SciIllLib::CMesh::InitializeGLBuffer()
{
    CGLInfo::CheckError("IntializeGLBuffer");
	GLint locAttrVertex = m_shader->attribLocation("vertex");
	GLint locAttrNormal = m_shader->attribLocation("normal");
	GLint locAttrTexCoord = m_shader->attribLocation("texCoord");
	GLint locAttrTangent = m_shader->attribLocation("tangent");
	GLint locAttrBinormal = m_shader->attribLocation("binormal");

    glGenVertexArrays(1, &m_vao);
    glBindVertexArray(m_vao);
    
    
	glGenBuffers(5, &m_vbo[0]);
    
    bool found = false;
    found |= setupVertexAttrib(locAttrVertex,    m_vbo[VBO_VERTEX],      4, m_arrVertex);
    found |= setupVertexAttrib(locAttrNormal,    m_vbo[VBO_NORMAL],      4, m_arrNormal);
    found |= setupVertexAttrib(locAttrTexCoord,  m_vbo[VBO_TEXCOORD],    2, m_arrTexCoord);
    
    if (locAttrTangent * locAttrBinormal > 0){
        calculateTB(m_arrVertex, m_arrTexCoord);
        found |= setupVertexAttrib(locAttrTangent,   m_vbo[VBO_TANGENT],     3, m_arrTangent);
        found |= setupVertexAttrib(locAttrBinormal,  m_vbo[VBO_BINORMAL],    3, m_arrBinormal);
    }
    //found |= setupVertexAttrib(locAttrTangent,   m_vbo[VBO_TANGENT],     3, m_arrTangent);
    //found |= setupVertexAttrib(locAttrBinormal,  m_vbo[VBO_BINORMAL],    3, m_arrBinormal);
    /*
	int idx = 0;
	if (locAttrVertex >= 0)
	{
		glBindBuffer(GL_ARRAY_BUFFER, m_vbo[VBO_VERTEX]);
		glBufferData(GL_ARRAY_BUFFER, m_countElements * 4 * sizeof(GLfloat), m_arrVertex, GL_STATIC_DRAW);
		glVertexAttribPointer(locAttrVertex, 4, GL_FLOAT, GL_FALSE, 0, 0);
		CGLInfo::CheckError("VA1 initialized ?");
		glEnableVertexAttribArray(locAttrVertex);
		CGLInfo::CheckError("VA1 initialized !");
	}

	if (locAttrNormal >= 0)
	{
		glBindBuffer(GL_ARRAY_BUFFER, m_vbo[VBO_NORMAL]);
		glBufferData(GL_ARRAY_BUFFER, m_countElements * 4 * sizeof(GLfloat), m_arrNormal, GL_STATIC_DRAW);
		glVertexAttribPointer(locAttrNormal, 4, GL_FLOAT, GL_FALSE, 0, 0);
		CGLInfo::CheckError("VA2 initialized ?");
		glEnableVertexAttribArray(locAttrNormal);
		CGLInfo::CheckError("VA2 initialized");
	}

    if (locAttrTexCoord >= 0)
	{
		glBindBuffer(GL_ARRAY_BUFFER, m_vbo[VBO_TEXCOORD]);
		glBufferData(GL_ARRAY_BUFFER, m_countElements * 2 * sizeof(GLfloat), m_arrTexCoord, GL_STATIC_DRAW);
		glVertexAttribPointer(locAttrTexCoord, 2, GL_FLOAT, GL_FALSE, 0, 0);
		CGLInfo::CheckError("VA3 initialized ?");
		glEnableVertexAttribArray(locAttrTexCoord);
		CGLInfo::CheckError("VA3 initialized");
	}

    if (locAttrTangent >= 0)
	{
		glBindBuffer(GL_ARRAY_BUFFER, m_vbo[VBO_TANGENT]);
		glBufferData(GL_ARRAY_BUFFER, m_countElements * 2 * sizeof(GLfloat), m_arrTexCoord, GL_STATIC_DRAW);
		glVertexAttribPointer(locAttrTexCoord, 2, GL_FLOAT, GL_FALSE, 0, 0);
		CGLInfo::CheckError("VA3 initialized ?");
		glEnableVertexAttribArray(locAttrTexCoord);
		CGLInfo::CheckError("VA3 initialized");
	}
    
    if (locAttrTexCoord >= 0)
	{
		glBindBuffer(GL_ARRAY_BUFFER, m_vbo[idx++]);
		glBufferData(GL_ARRAY_BUFFER, m_countElements * 2 * sizeof(GLfloat), m_arrTexCoord, GL_STATIC_DRAW);
		glVertexAttribPointer(locAttrTexCoord, 2, GL_FLOAT, GL_FALSE, 0, 0);
		CGLInfo::CheckError("VA3 initialized ?");
		glEnableVertexAttribArray(locAttrTexCoord);
		CGLInfo::CheckError("VA3 initialized");
	}
    */
    if (found)
    {
        glGenBuffers(1, &m_vboIdx);
        glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_vboIdx);
        glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_countIdx * sizeof(GLuint), m_arrIdx, GL_STATIC_DRAW);
    }

    cleanupBuffers();
    
    glBindVertexArray(0);

	return true;
}