Оптимизация функции отображения OpenGL

Я пытаюсь оптимизировать функцию отображения моего кода OpenGL C++ и использую библиотеки Glad.h,glm.h,GLFW.h, моя функция отображения работает слишком медленно, а при рендеринге объекта на экране я не могу понять почему это происходит

Я попытался несколько раз промыть экран разными строками кода, но безуспешно!

void display(GLFWwindow* window)
{

    glClearColor(0, 0, 0, 1);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    int w, h;
    glfwGetWindowSize(window, &w, &h);
    glViewport(0, 0, w, h);

    // create a world with dimensions x:[-SIM_W,SIM_W] and y:[0,SIM_W*2]
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    const double ar = w / static_cast< double >(h);
    glOrtho(ar * -SIM_W, ar * SIM_W, 0, 2 * SIM_W, -1, 1);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    // Draw Fluid Particles
    glPointSize(r * 2);
    glVertexPointer(2, GL_FLOAT, sizeof(Particle), &particles[0].pos);
    glColorPointer(3, GL_FLOAT, sizeof(Particle), &particles[0].r);
    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);
    glDrawArrays(GL_POINTS, 0, static_cast< GLsizei >(particles.size()));
    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);

}

и это моя основная функция:

int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{

    init(300);

    glfwInit();
    GLFWwindow* window = glfwCreateWindow(512, 512, "SPH", NULL, NULL);
    glfwMakeContextCurrent(window);
    gladLoadGLLoader((GLADloadproc)glfwGetProcAddress);

    glfwSwapInterval(1);

    glfwSetKeyCallback(window, keyboard);
//  glfwSetCursorPosCallback(window, motion);
    //glfwSetMouseButtonCallback(window, mouse);

    while (!glfwWindowShouldClose(window))
    {

        display(window);

        glfwWaitEvents();

        //for (size_t i = 0; i < stepsPerFrame; ++i)
        {
            step();
        }

        glFlush();
        glfwSwapBuffers(window);
        glFlush();
        //fwWaitEvents();
    }

    glfwTerminate();
    return 0;

}

0 ответов

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