diff --git a/Renderer/Renderer.cpp b/Renderer/Renderer.cpp index 0729e0f..8e91a41 100644 --- a/Renderer/Renderer.cpp +++ b/Renderer/Renderer.cpp @@ -223,6 +223,8 @@ Renderer::Renderer(Window& win) : win(win) { terrain_pipeline = std::make_unique(dev, terrain_shaders, swapchain->extent, *render_pass, bindings, *terrain->vertex_buffer, GraphicsPipeline::eTERRAIN); + terrain_pipeline->update(1, textures[1]); + for (auto& shader : shaders) shader.cleanup(); for (auto& shader : terrain_shaders) diff --git a/Renderer/Renderer.hpp b/Renderer/Renderer.hpp index b884cc1..a979110 100644 --- a/Renderer/Renderer.hpp +++ b/Renderer/Renderer.hpp @@ -73,6 +73,6 @@ struct Renderer { float speed = 1.0; bool running = true; - float tess_factor = 5.0f; + float tess_factor = 1.0f; float tess_edge_size = 20.0f; }; diff --git a/Renderer/UniformBuffer.cpp b/Renderer/UniformBuffer.cpp index bf4a613..eb09353 100644 --- a/Renderer/UniformBuffer.cpp +++ b/Renderer/UniformBuffer.cpp @@ -1,10 +1,24 @@ #include +#include + UniformBuffer::UniformBuffer(vk::PhysicalDevice phys_dev, vk::Device dev) { buffer = std::make_unique(phys_dev, dev, sizeof(UniformData), vk::BufferUsageFlagBits::eUniformBuffer, vk::MemoryPropertyFlagBits::eHostCoherent | vk::MemoryPropertyFlagBits::eHostVisible ); + + Log::debug("Offset of view: %zu\n", offsetof(UniformData, view)); + Log::debug("Offset of proj: %zu\n", offsetof(UniformData, proj)); + Log::debug("Offset of time: %zu\n", offsetof(UniformData, time)); + Log::debug("Offset of pad0: %zu\n", offsetof(UniformData, pad0)); + Log::debug("Offset of pad1: %zu\n", offsetof(UniformData, pad1)); + Log::debug("Offset of pad2: %zu\n", offsetof(UniformData, pad2)); + Log::debug("Offset of cam_pos: %zu\n", offsetof(UniformData, cam_pos)); + Log::debug("Offset of viewport: %zu\n", offsetof(UniformData, viewport)); + Log::debug("Offset of tess_factor: %zu\n", offsetof(UniformData, tess_factor)); + Log::debug("Offset of tess_edge_size: %zu\n", offsetof(UniformData, tess_edge_size)); + } void UniformBuffer::upload(const UniformData& data) { diff --git a/Renderer/UniformBuffer.hpp b/Renderer/UniformBuffer.hpp index 1b5f69b..9b41513 100644 --- a/Renderer/UniformBuffer.hpp +++ b/Renderer/UniformBuffer.hpp @@ -13,7 +13,11 @@ struct UniformData { glm::mat4 view; glm::mat4 proj; float time; + float pad0; + float pad1; + float pad2; glm::vec3 cam_pos; + float pad3; glm::vec2 viewport; float tess_factor; float tess_edge_size; diff --git a/Scene/Terrain.cpp b/Scene/Terrain.cpp index 655f05b..ffede70 100644 --- a/Scene/Terrain.cpp +++ b/Scene/Terrain.cpp @@ -5,7 +5,6 @@ float Terrain::getHeight(int32_t x, int32_t y) { - Log::debug("Height queried at %d, %d\n", x, y); if (x < 0) x += 64; if (y < 0) diff --git a/assets/shaders/terrain.frag b/assets/shaders/terrain.frag index a0c74d2..c5bd585 100644 --- a/assets/shaders/terrain.frag +++ b/assets/shaders/terrain.frag @@ -19,4 +19,4 @@ layout (set = 0, binding = 1) uniform sampler2D tex; void main() { FragColor = vec4(1.0); -} \ No newline at end of file +} \ No newline at end of file diff --git a/assets/shaders/terrain.tesc b/assets/shaders/terrain.tesc index cf806ab..d70c88c 100644 --- a/assets/shaders/terrain.tesc +++ b/assets/shaders/terrain.tesc @@ -45,12 +45,21 @@ float screen_space_tess(vec4 p0, vec4 p1) { } void main() { + if(gl_InvocationID == 0) { + /* gl_TessLevelOuter[0] = screen_space_tess(gl_in[3].gl_Position, gl_in[0].gl_Position); gl_TessLevelOuter[1] = screen_space_tess(gl_in[0].gl_Position, gl_in[1].gl_Position); gl_TessLevelOuter[2] = screen_space_tess(gl_in[1].gl_Position, gl_in[2].gl_Position); gl_TessLevelOuter[3] = screen_space_tess(gl_in[2].gl_Position, gl_in[3].gl_Position); gl_TessLevelInner[0] = mix(gl_TessLevelOuter[0], gl_TessLevelOuter[3], 0.5); + gl_TessLevelInner[1] = mix(gl_TessLevelOuter[2], gl_TessLevelOuter[1], 0.5);*/ + + gl_TessLevelOuter[0] = tess_factor; + gl_TessLevelOuter[1] = tess_factor; + gl_TessLevelOuter[2] = tess_factor; + gl_TessLevelOuter[3] = tess_factor; + gl_TessLevelInner[0] = mix(gl_TessLevelOuter[0], gl_TessLevelOuter[3], 0.5); gl_TessLevelInner[1] = mix(gl_TessLevelOuter[2], gl_TessLevelOuter[1], 0.5); } diff --git a/assets/shaders/terrain.tesc.spv b/assets/shaders/terrain.tesc.spv index 541f227..d046df4 100644 Binary files a/assets/shaders/terrain.tesc.spv and b/assets/shaders/terrain.tesc.spv differ diff --git a/assets/shaders/terrain.tese b/assets/shaders/terrain.tese index c6ce865..614c8b3 100644 --- a/assets/shaders/terrain.tese +++ b/assets/shaders/terrain.tese @@ -39,7 +39,7 @@ void main() { vec4 pos2 = mix(gl_in[3].gl_Position, gl_in[2].gl_Position, gl_TessCoord.x); vec4 fpos = mix(pos1, pos2, gl_TessCoord.y); - fpos.y += textureLod(heightmap, _texCoord, 0.0).r; + fpos.y += 5.0 * textureLod(heightmap, _texCoord, 0.0).r; _pos = fpos.xyz; gl_Position = proj * view * fpos; diff --git a/assets/shaders/terrain.tese.spv b/assets/shaders/terrain.tese.spv index ab18d3a..2c6ff04 100644 Binary files a/assets/shaders/terrain.tese.spv and b/assets/shaders/terrain.tese.spv differ