I'm trying to send unsigned integer texture data to my shader, however, all of my RGB values seem to be zero. My A values are something other than zero (I'm not sure exactly what they are).

My texture data is in the form of a `std::vector<char>` in C++. I set each entry in the vector to 2. The vector is of size `257 * 257 * 4`.

This is how I create my texture:

Code :
	GLuint id;
	glGenTextures(1, &id);
	glBindTexture(GL_TEXTURE_2D, id);
	glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8UI, 257, 257, 0, GL_RGBA_INTEGER, GL_UNSIGNED_BYTE, &data[0]);
	glBindTexture(GL_TEXTURE_2D, 0);

After I use my shader program, I find the position of my texture variable in the shader and set it to texture unit 1.
Code :
	glUniform1i(glGetUniformLocation(deferredLightingTerrainGeometryPassShaderProgram, "terrainMapTexture"), 1);

When I actually bind my texture, I do it like so:

Code :
	glActiveTexture(GL_TEXTURE0 + 1);
	glBindTexture(GL_TEXTURE_2D, id);

My Vertex shader:

Code :
#version 440 core
uniform mat4 projectionMatrix;
uniform mat4 viewMatrix;
uniform mat4 modelMatrix;
uniform mat4 pvmMatrix;
uniform mat3 normalMatrix;
layout (location = 0) in vec3 position;
layout (location = 1) in vec4 color;
layout (location = 2) in vec3 normal;
layout (location = 3) in vec2 textureCoordinate;
uniform sampler2D heightMapTexture;
out vec3 Position;
out vec3 FragPos;
out vec2 TexCoords;
out vec3 Normal;
void main()
	Position = position;
	vec4 textureValue = texture(heightMapTexture, position.xz/256);
	float height = 5.5*(textureValue.a)-5;
	vec3 newPosition = vec3(position.x/16, height, position.z/16);
    vec4 worldPos = modelMatrix * vec4(newPosition, 1.0);
    FragPos = worldPos.xyz; 
    mat3 normalMatrix2 = transpose(inverse(mat3(modelMatrix)));
    Normal = normalMatrix2 * textureValue.rgb;
    TexCoords = position.xz/16;
    gl_Position = pvmMatrix * vec4(newPosition, 1.0);

My fragment shader:

Code :
#version 440 core
layout (location = 0) out vec3 gPosition;
layout (location = 1) out vec3 gNormal;
layout (location = 2) out vec4 gAlbedoSpec;
in vec3 Position;
in vec2 TexCoords;
in vec3 FragPos;
in vec3 Normal;
uniform usampler2D terrainMapTexture; // <-- This is the texture
uniform sampler2D splatMapTexture0;
uniform sampler2D splatMapTexture1;
uniform sampler2D splatMapTexture2;
void main()
    // store the fragment position vector in the first gbuffer texture
    gPosition = FragPos;
    // also store the per-fragment normals into the gbuffer
    gNormal = normalize(Normal);
    uint whichTexture = texture(terrainMapTexture, Position.xz/256).r; // <-- This is where I am attempting to grab a uint from my texture
    if (whichTexture == 0) // <-- Always seems to be true
		gAlbedoSpec.rgb = texture(splatMapTexture0, TexCoords).rgb;
    else if (whichTexture == 1)
		gAlbedoSpec.rgb = texture(splatMapTexture1, TexCoords).rgb;
    else if (whichTexture == 2) // <-- I would expect it to be true here
		gAlbedoSpec.rgb = texture(splatMapTexture2, TexCoords).rgb;
		gAlbedoSpec.rgb = vec3(0.5f, 0.0f, 0.0f);
    // store specular intensity in gAlbedoSpec's alpha component
    gAlbedoSpec.a = 0.1f; //texture(texture_specular1, TexCoords).r;

I have omitted some of the other textures and variables that I'm binding/passing in. They seem to be working properly.

Does anyone have any idea what I may be doing wrong?