in vec4 vertexPosition;
in vec2 vertexUv;

#include "drive/water/ground.shared.glsl"
#include "drive/common/brdf.glsl"

void main()
{

    float height = sampleSeafloor(vertexUv);
    vec3 normal = (u_model * vec4(sampleSeafloorNormal(vertexUv), 0.0)).xyz;

	vec4 mat = sampleSeafloorMaterial(vertexUv);

    vec3 albedo = mat.rgb;
    out_color0.rgb = albedo;
    float roughness = mat.a;


    float occlusion = 0.5 + rippleHeight(vertexUv) * 0.5;
    float metallic = 0.0;


    vec3 camPos = (inverse(u_view) * vec4(0.0, 0.0, 0.0, 1.0)).xyz;
	vec3 viewVector = -normalize(vertexPosition.xyz - camPos);
	SurfaceState surf = GetSurfaceState(albedo, metallic, roughness, normal, viewVector, vertexPosition, occlusion);

    vec3 color = vec3(0.0);
	color += ImageLighting(t_brdf, t_irradiance, t_radiance, surf) * 10.0;
    
    LightState light = GetLightState(surf,normalize(vec3(1.0)), vec3(1.0), 1.0);
    color += DirectLighting(surf, light) * 2.0;
	out_color0.rgba = vec4(color,1.0);
    
	out_color1.rgba = vertexPosition;
}