Applying a Texture

Hi Evertbody, when I try to apply a texture it diplays my triangle in black, but there are no error logs in the compiler and the program has no errrors whatsoever, exiting with code 0. What’s happening? This is the relevant code:

This is the shape with the texture coords:

    GLfloat verticesI[]
	{
		//1st triangle		//texture
		-0.9f, 0.0f, 0.0f, 0.0f, 0.0f, // Top-left
		-0.1f, 0.0f, 0.0f, 1.0f, 0.0f, // Top-right
		-0.5f, 0.5f, 0.0f, 1.0f, 1.0f, 
						  -0.0f, 1.0f  
	};

then:

GLuint VAO, VBO;

	glGenVertexArrays(1, &VAO);
	glGenBuffers(1, &VBO);

	glBindVertexArray(VAO);

	glBindBuffer(GL_ARRAY_BUFFER, VBO);
	glBufferData(GL_ARRAY_BUFFER, sizeof(verticesI), verticesI, GL_STATIC_DRAW);

	glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, sizeof(float) * 5, (void*)0);
	glEnableVertexAttribArray(0);

	glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(float) * 5, (void*)(3 * sizeof(float)));
	glEnableVertexAttribArray(1);

	glBindVertexArray(0);

	glBindBuffer(GL_ARRAY_BUFFER, 0);

unsigned int texture1;
	//-------------------------------
	glGenTextures(1, &texture1);
	glBindTexture(GL_TEXTURE_2D, texture1);
	//set the texture wrapping parameters
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
	//set texture filtering parameters
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
	//loading the image:
	int width, height, nrChannels; // width of the texture, height, and number of colors
	unsigned char* data = stbi_load("Textures/awesomeface.png", &width, &height, &nrChannels, 0);
	if (data)
	{
		glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
		glGenerateMipmap(GL_TEXTURE_2D);
	}
	else
	{
		std::cout << "Error: texture failed to load!" << std::endl;
	}
	stbi_image_free(data);

	ourShader.use();
	glUniform1i(glGetUniformLocation(ourShader.ID, "texture1"), 0);

Then I bind the texture in the loop:

        glActiveTexture(GL_TEXTURE0);
        glBindTexture(GL_TEXTURE_2D, texture1);

	ourShader.use();
	glBindVertexArray(VAO);
	glDrawArrays(GL_TRIANGLES, 0, 3);

The fragment shader is:

#version 330 core
out vec4 FragColor;

in vec2 TexCoord;

// texture samplers
uniform sampler2D texture1;

void main()
{
	FragColor = texture(texture1, TexCoord);
}

and the vertex shader is:

#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoord;

out vec3 ourColor;
out vec2 TexCoord;

void main()
{
	gl_Position = vec4(aPos, 1.0);
	TexCoord = vec2(aTexCoord.x, aTexCoord.y);
}

You havn’t considered the transforms.
If you ignore the view_model matrix, the projection/viewport transformations next will see unchanged verticies as if the view_model == identity-matrix.
If not the viewport by default spans the screen but is identity too, the projection will expect to recieve normalized device-coordinates (something like -1 -> 1 ). These have different unit.x and unit.y scales. So, make sure to set the viewport.
You get the best sync between the cursor-position and drawing-positions if you set viewport to fill the screen and the projection to be orthonormal with the same params as the viewport.
If you skip the view_model matrix, you’ll have to place the triangle facing toward the default viewpoint (0,0) … the default view-direction is down -z, and you’ve placed your triangle down x instead, but the facing is ok.
Or, you can construct a view_model matrix that is suitable to the current triangle position with glm::lookAt(…)