diff --git a/assets/cubyz/blocks/oak_leaves.json b/assets/cubyz/blocks/oak_leaves.json index 9e7d114b..f5c71ad8 100644 --- a/assets/cubyz/blocks/oak_leaves.json +++ b/assets/cubyz/blocks/oak_leaves.json @@ -9,5 +9,5 @@ "viewThrough" : true, "absorbedLight" : 0x0f100010, "model" : "cube", - "texture" : "cubyz:oak_leaves" + "texture" : "cubyz:oak_leaves_transparent" } diff --git a/src/blocks.zig b/src/blocks.zig index 11611034..c5d51725 100644 --- a/src/blocks.zig +++ b/src/blocks.zig @@ -572,8 +572,15 @@ pub const meshes = struct { } pub fn generateTextureArray() !void { + const c = graphics.c; try blockTextureArray.generate(blockTextures.items, true); + if(main.settings.anisotropicFiltering) { + c.glTexParameterf(c.GL_TEXTURE_2D_ARRAY, c.GL_TEXTURE_MAX_ANISOTROPY, 16); + } try emissionTextureArray.generate(emissionTextures.items, true); + if(main.settings.anisotropicFiltering) { + c.glTexParameterf(c.GL_TEXTURE_2D_ARRAY, c.GL_TEXTURE_MAX_ANISOTROPY, 16); + } // Also generate additional buffers: if(animationSSBO) |ssbo| { diff --git a/src/gui/windows/graphics.zig b/src/gui/windows/graphics.zig index 3d174303..4e6ce555 100644 --- a/src/gui/windows/graphics.zig +++ b/src/gui/windows/graphics.zig @@ -37,12 +37,18 @@ fn vsyncCallback(newValue: bool) void { main.Window.reloadSettings(); } +fn anisotropicFilteringCallback(newValue: bool) void { + settings.anisotropicFiltering = newValue; + // TODO: Reload the textures. +} + pub fn onOpen() Allocator.Error!void { const list = try VerticalList.init(.{padding, 16 + padding}, 300, 16); const renderDistances = [_]u32{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; try list.add(try DiscreteSlider.init(.{0, 0}, 128, "#ffffffRender Distance: ", "{}", &renderDistances, settings.renderDistance - 1, &renderDistanceCallback)); try list.add(try CheckBox.init(.{0, 0}, 128, "Bloom", settings.bloom, &bloomCallback)); try list.add(try CheckBox.init(.{0, 0}, 128, "Vertical Synchronization", settings.vsync, &vsyncCallback)); + try list.add(try CheckBox.init(.{0, 0}, 128, "Anisotropic Filtering", settings.anisotropicFiltering, &anisotropicFilteringCallback)); list.finish(.center); window.rootComponent = list.toComponent(); window.contentSize = window.rootComponent.?.pos() + window.rootComponent.?.size() + @as(Vec2f, @splat(padding)); diff --git a/src/main.zig b/src/main.zig index 0dc291ac..65d5bfff 100644 --- a/src/main.zig +++ b/src/main.zig @@ -611,7 +611,7 @@ pub const Window = struct { c.glfwWindowHint(c.GLFW_OPENGL_DEBUG_CONTEXT, 1); } c.glfwWindowHint(c.GLFW_CONTEXT_VERSION_MAJOR, 4); - c.glfwWindowHint(c.GLFW_CONTEXT_VERSION_MINOR, 5); + c.glfwWindowHint(c.GLFW_CONTEXT_VERSION_MINOR, 6); window = c.glfwCreateWindow(width, height, "Cubyz", null, null) orelse return error.GLFWFailed; diff --git a/src/settings.zig b/src/settings.zig index 94ab5b76..501d6daa 100644 --- a/src/settings.zig +++ b/src/settings.zig @@ -15,6 +15,8 @@ pub const highestLOD: u5 = 5; pub var entityDistance: u16 = 2; +pub var anisotropicFiltering: bool = true; + pub var fov: f32 = 70;