Abnormal Texturing?

Hi. So I’m trying out OpenGL 3.3 with Core Profile and I’m having some weird results when drawing textures to triangles.

Here’s what the result looks like:

The problem: I’m not expecting that to be drawn. I have a plain pink texture (255, 0, 255, 255) that should be drawn on the triangle. There is some transparency issues too.

Here’s my main render loop:


protected void renderScene(Renderer renderer) {
	viewMatrix.rotateX(xRot);
	viewMatrix.rotateY(yRot);
	viewMatrix.translate(new Vector3f(pos).negate());

	basicShader.bind();

	glActiveTexture(GL_TEXTURE0);
	texture.bind();
	basicShader.setUniform("tex", 0);

	basicShader.setUniform("modelMatrix", modelMatrix);
	basicShader.setUniform("viewMatrix", viewMatrix);
	basicShader.setUniform("projectionMatrix", projectionMatrix);

	Tessellator t = Tessellator.instance;
	t.begin(GL_TRIANGLES);
	t.colour(1, 1, 0, 1);
	t.normal(0, -2, 0);

	t.texCoord(1.0f, 1.0f);
	t.vertex(1.0f, 1.0f, 0.0f);

	t.texCoord(0.0f, 1.0f);
	t.vertex(-1.0f, 1.0f, 0.0f);

	t.texCoord(1.0f, 0.0f);
	t.vertex(1.0f, -1.0f, 0.0f);

	t.texCoord(0.0f, 0.0f);
	t.vertex(-1.0f, -1.0f, 0.0f);
	t.end();

	texture.unbind();

	basicShader.unbind();
}

Note: The Tessellator class is basically a helpful vertex drawing tool where I use Vertex Array Objects to draw my vertices.

Here’s my fragment shader code:


#version 330 core

in vec4 vColour;
in vec2 vTexCoords;

out vec4 fragColour;

uniform sampler2D tex;

void main() {
	vec4 colour = vColour*texture(tex, vTexCoords);
    fragColour = colour;
}

Edit: Here’s my Texture loading code, sorry.


public Texture(int width, int height, int[] pixels) {
	this.width = width;
	this.height = height;
	this.pixels = pixels;
}

public void create(ParameterListener parameterListener) {
	ByteBuffer buffer = MemoryTracker.createByteBuffer(width * height * 4);
	for (int y = 0; y < height; y++) {
		for (int x = 0; x < width; x++) {
			int colour = pixels[x + y * width];

			byte r = (byte) ((colour >> 16) & 0xff);
			byte g = (byte) ((colour >> 8) & 0xff);
			byte b = (byte) (colour & 0xff);
			byte a = (byte) ((colour >> 24) & 0xff);
			buffer.put(r).put(g).put(b).put(a);
		}
	}

	id = glGenTextures();
	glBindTexture(GL_TEXTURE_2D, id);
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST/*GL_LINEAR*/);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);

	glBindTexture(GL_TEXTURE_2D, 0);

	System.out.println("Successfully created texture!");
}

If you need anything else to help me please ask. Thanks for your time. :slight_smile:

And the problem…? What are you expecting to get?

I’m not expecting that to be drawn. I have a plain pink texture (255, 0, 255) that should be drawn on the triangle.

Try to

  1. not use your tessellator. Just draw a GL_QUADS quad to ensure that’s not the problem.
  2. show us the texture loading code.

Hi, thanks for your time. I’ve updated the post with the texture loading code.

I’m not sure what you mean by not use the Tessellator? It’s a class that has worked before in my other projects that have used textures. And I don’t think you can use GL_QUADS with VBO’s. I can’t use Immediate Mode either because it’s depreciated.

You didn’t flip your buffer. You’re uploading garbage.

I completely forgot about that. Thank you. Sorry for wasting your time.

You did not waste anyone’s time (probably), because if someone comes along and has the same problem, they can try this potential solution. :point:

Edit: Plus, now it will be more likely for you to remember to flip you buffers!

No need to apologize.