Jump to content
  • Advertisement
TheGamerPlayz

Float array not working

This topic is 518 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I have created a terrainFragmentShader with an int array attached to a float array as you will soon see. By looking at the console output I know that the correct values are being uploaded but when I try to get them... Well, I'm not sure. No errors appear in the console but no texture appears on the terrain - not even the default one that I load before I get before calling the float from the map.

Here is my terrainVertexShader and the map I've previously mentioned is the biomeMap[]. I am certain that the size is correct

#version 430 core

in vec2 pass_textureCoordinates;
in vec3 surfaceNormal;
in vec3 toLightVector;
in vec3 toCameraVector;
in int biomeSize;

out vec4 out_Color;

uniform sampler2D backgroundTexture;
uniform sampler2D sandTexture;
uniform sampler2D stoneTexture;

uniform vec3 lightColour;
uniform float shineDamper;
uniform float reflectivity;

uniform float biomeMap[16384];

void main(void) {
	vec4 textureColour = texture(backgroundTexture, pass_textureCoordinates);

	float c = biomeMap[int(pass_textureCoordinates.x) * 128 + int(pass_textureCoordinates.y)];
	
	if(c < 110)
		textureColour = texture(sandTexture, pass_textureCoordinates);
	else if(c < 150)
		textureColour = texture(stoneTexture, pass_textureCoordinates);
		
	vec3 unitNormal = normalize(surfaceNormal);
	vec3 unitLightVector = normalize(toLightVector);
	
	float nDot = dot(unitNormal, unitLightVector);
	float brightness = max(nDot, 0.25);
	
	vec3 diffuse = brightness * lightColour;

	out_Color = vec4(diffuse,1.0) * textureColour;
	
}

Here is my TerrainShader class:

public class TerrainShader extends ShaderProgram {

	private static final String VERTEX_FILE = "src/shaders/terrainVertexShader.txt";
	private static final String FRAGMENT_FILE = "src/shaders/terrainFragmentShader.txt";

	private int location_backgroundTexture;
	private int location_sandTexture;
	private int location_stoneTexture;

	private int location_biomeMap[];

	public TerrainShader() {
		super(VERTEX_FILE, FRAGMENT_FILE);
	}

	@Override
	protected void bindAttributes() {
		super.bindAttribute(0, "position");
		super.bindAttribute(1, "textureCoordinates");
		super.bindAttribute(2, "normal");
	}

	@Override
	protected void getAllUniformLocations() {

		location_backgroundTexture = super.getUniformLocation("backgroundTexture");
		location_sandTexture = super.getUniformLocation("sandTexture");
		location_stoneTexture = super.getUniformLocation("stoneTexture");

		location_biomeMap = new int[16384];
		for(int i = 0; i < location_biomeMap.length; i++) {
			location_biomeMap[i] = super.getUniformLocation("biomeMap[" + i + "]");
		}
	}

	public void connectTextures() {
		super.loadInt(location_backgroundTexture, 0);
		super.loadInt(location_sandTexture, 1);
		super.loadInt(location_stoneTexture, 2);
	}

	public void loadBiomes(float[][] biomeMap) {
		for(int x = 0; x < Terrain.VERTEX_COUNT; x++) {
			for(int y = 0; y < Terrain.VERTEX_COUNT; y++) {
				super.loadFloat(location_biomeMap[x * Terrain.VERTEX_COUNT + y], biomeMap[x][y] * 128 + 127);
			}
		}
	}
}

I tried using a double array but it never worked so I am using a flat-multidimensional array instead. The array is working perfectly inside java but whenever I try to get the float, nothing happens - as if the file just returns nothing as the color without giving an error.

vec4 textureColour = texture(backgroundTexture, pass_textureCoordinates);

Loads the background, grass in this case, then it goes onto the next line:

float c = biomeMap[int(pass_textureCoordinates.x) * 128 + int(pass_textureCoordinates.y)];

if(c < 110)
	textureColour = texture(sandTexture, pass_textureCoordinates);
else if(c < 150)
	textureColour = texture(stoneTexture, pass_textureCoordinates);

The float c is a value between 0 and 255 and I try to assign a different texture depending on the value. I am going to add a blend at a later date but I'd like to get this basic version first.

Why is it not loading any texture? The issue seems to be getting the float from the biomeMap as when I manually set it, it works just fine. Terrain.VERTEX_COUNT is equal to 128.

Edited by TheGamerPlayz

Share this post


Link to post
Share on other sites
Advertisement

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!