Краевые артефакты OpenGL с сглаживанием NVIDIA FXAA

Я тестировал некоторые проекты opengl с LWJGL 3.1.1 (релиз). Я заметил, что при включении NVIDIA FXAA на панели управления NVIDIA идеальные формы пикселей имеют странные краевые артефакты. Есть ли способ избежать этого или отключить FXAA вручную в моей программе?

Вот пример программы, которая выдает эту ошибку на моем компьютере:

import org.lwjgl.opengl.*;
import static org.lwjgl.glfw.GLFW.*;
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.system.MemoryUtil.NULL;

public class Test
{
    private static long    windowID;
    private static boolean running;
    int width = 640, height = 480;

    public Test()
    {
        if (!glfwInit())
        {
            System.err.println("Error starting GLFW");
            System.exit(1);
        }

        windowID = glfwCreateWindow(width, height, "Window", NULL, NULL);

        glfwSetFramebufferSizeCallback(windowID, (window, width, height)->{
            this.width = width;
            this.height = height;
        });

        if (windowID == NULL)
        {
            System.err.println("Error creating a window");
            System.exit(1);
        }

        glfwMakeContextCurrent(windowID);
        GL.createCapabilities();

        glfwSwapInterval(1);
    }

    public void start() {
        running = true;

        float delta = 190f;
        float x = 190f, y = 170f;

        while (running && !glfwWindowShouldClose(windowID)) {
            GL.createCapabilities();
            glViewport(0, 0, width, height);
            glMatrixMode(GL_PROJECTION);
            glLoadIdentity();
            glOrtho(0, width, height, 0, -1, 1);
            glMatrixMode(GL_MODELVIEW);
            glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

            float s = 150f;
            x = (int) (delta += 0.01f);
            GL11.glColor4f(1, 0.1f, 1, 1);
            glBegin(GL_QUADS);
            {
                glVertex2f(+s + x, +s + y);
                glVertex2f(-s + x, +s + y);
                glVertex2f(-s + x, -s + y);
                glVertex2f(+s + x, -s + y);
            }
            glEnd();

            glfwPollEvents();
            glfwSwapBuffers(windowID);
        }

        glfwDestroyWindow(windowID);
        glfwTerminate();

        System.exit(0);
    }

    public void end()
    {
        running = false;
    }

    public static void main(String[] args)
    {
        new Test().start();
    }
}

Быстрое примечание, это происходит со всеми формами и текстурами. Любая помощь приветствуется. Благодарю.

1 ответ

Решение

NVIDIA не предоставляет возможности влиять на настройки FXAA панели управления через OpenGL. Там может быть какой-то скрытый API-интерфейс NVIDIA, с которым вы могли бы связать, но кроме этого, нет.

Надо только надеяться, что пользователи, которые его включат, знают, как отключить его для программ, которые не работают с ним.

Другие вопросы по тегам