main.lua 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. local shaderCode = {[[
  2. /* VERTEX shader */
  3. layout(location = 0) out vec4 fragmentClip;
  4. layout(set = 2) uniform texture2D heightmap;
  5. vec4 lovrmain() {
  6. vec3 position = VertexPosition.xyz;
  7. position.z = getPixel(heightmap, position.xy).r / 10.;
  8. fragmentClip = ClipFromLocal * vec4(position, 1.);
  9. return fragmentClip;
  10. } ]], [[
  11. /* FRAGMENT shader */
  12. layout(location = 0) in vec4 fragmentView;
  13. Constants {
  14. vec3 fogColor;
  15. };
  16. vec4 lovrmain() {
  17. float fogAmount = atan(length(fragmentView) * 0.1) * 2.0 / PI;
  18. return vec4(mix(Color.rgb, fogColor, fogAmount), Color.a);
  19. }]]}
  20. function lovr.load()
  21. skyColor = { 0.208, 0.208, 0.275 }
  22. lovr.graphics.setBackgroundColor(skyColor)
  23. heightmap = lovr.graphics.newTexture('heightmap.png')
  24. shader = lovr.graphics.newShader(unpack(shaderCode))
  25. end
  26. function lovr.draw(pass)
  27. pass:setShader(shader)
  28. pass:send('fogColor', { lovr.math.gammaToLinear(unpack(skyColor)) })
  29. pass:send('heightmap', heightmap)
  30. pass:rotate(math.pi / 2, 1, 0, 0)
  31. pass:scale(100)
  32. pass:setColor(0.565, 0.404, 0.463)
  33. pass:setDepthOffset(-10000) -- Ensures wireframe stays on top
  34. pass:plane(mat4(), 'fill', 100)
  35. pass:setDepthOffset()
  36. pass:setWireframe(true)
  37. pass:setColor(0.388, 0.302, 0.412, 0.1)
  38. pass:plane(mat4(), 'fill', 100)
  39. end