Fixed uniform buffer padding issue, still dealing with tesselation error
This commit is contained in:
parent
9582baf2d2
commit
82f0785cae
@ -223,6 +223,8 @@ Renderer::Renderer(Window& win) : win(win) {
|
||||
|
||||
terrain_pipeline = std::make_unique<GraphicsPipeline>(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)
|
||||
|
||||
@ -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;
|
||||
};
|
||||
|
||||
@ -1,10 +1,24 @@
|
||||
#include <Renderer/UniformBuffer.hpp>
|
||||
|
||||
#include <util/log.hpp>
|
||||
|
||||
UniformBuffer::UniformBuffer(vk::PhysicalDevice phys_dev, vk::Device dev) {
|
||||
buffer = std::make_unique<Buffer>(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) {
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -19,4 +19,4 @@ layout (set = 0, binding = 1) uniform sampler2D tex;
|
||||
|
||||
void main() {
|
||||
FragColor = vec4(1.0);
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
|
||||
Binary file not shown.
@ -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;
|
||||
|
||||
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user