I have been trying to draw a simple 2D texture over a 3D scene. The 3D scene works fine and my code for my 2D textures compiles and runs but for some reason it is not drawing and its driving me mad. I am using stb for my texture loading which works fine, as all my 3D models are textured. I am sure I am doing something really silly, any help would be appreciated...

Shaders...

vert:

Code :
    #version 150 core
 
    in vec2 position;
    in vec3 color;
    in vec2 texcoord;
 
    out vec3 Color;
    out vec2 Texcoord;
 
    void main()
    {
        Color = color;
        Texcoord = texcoord;
        gl_Position = vec4(position, 0.0, 1.0);
    }

frag:

Code :
    #version 150 core
 
    in vec3 Color;
    in vec2 Texcoord;
    out vec4 outColor;
 
    uniform sampler2D tex;
 
    void main()
    {
        outColor = texture(tex, Texcoord) * vec4(Color, 1.0);
    }

Code for my overlay...

Code :
void Overlay::drawOL(GLuint program)
{
	texture.Bind(0);
	// Create Vertex Array Object
	GLuint vao;
	glGenVertexArrays(1, &vao);
	glBindVertexArray(vao);
 
	// Create a Vertex Buffer Object and copy the vertex data to it
	GLuint vbo;
	glGenBuffers(1, &vbo);
 
	GLfloat vertices[] = {
		//  Position      Color             Texcoords
		-0.5f,  0.5f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, // Top-left
		 0.5f,  0.5f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // Top-right
		 0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, // Bottom-right
		-0.5f, -0.5f, 1.0f, 1.0f, 1.0f, 0.0f, 1.0f  // Bottom-left
	};
 
	glBindBuffer(GL_ARRAY_BUFFER, vbo);
	glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);
 
	// Create an element array
	GLuint ebo;
	glGenBuffers(1, &ebo);
 
	GLuint elements[] = {
		0, 1, 2,
		2, 3, 0
	};
 
	glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ebo);
	glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(elements), elements, GL_STATIC_DRAW);
 
 
	// Specify the layout of the vertex data
	GLint posAttrib = glGetAttribLocation(program, "position");
	glEnableVertexAttribArray(posAttrib);
	glVertexAttribPointer(posAttrib, 2, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), 0);
 
	GLint colAttrib = glGetAttribLocation(program, "color");
	glEnableVertexAttribArray(colAttrib);
	glVertexAttribPointer(colAttrib, 3, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), (void*)(2 * sizeof(GLfloat)));
 
	GLint texAttrib = glGetAttribLocation(program, "texcoord");
	glEnableVertexAttribArray(texAttrib);
	glVertexAttribPointer(texAttrib, 2, GL_FLOAT, GL_FALSE, 7 * sizeof(GLfloat), (void*)(5 * sizeof(GLfloat)));
 
	// Draw a rectangle from the 2 triangles using 6 indices
	glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
 
	glDeleteBuffers(1, &ebo);
	glDeleteBuffers(1, &vbo);
 
	glDeleteVertexArrays(1, &vao);
}