Войти
ПрограммированиеФорумГрафика

Текстуры в OpenGL C++ (6 стр)

Страницы: 1 2 3 4 5 6
#75
21:48, 18 фев. 2020

Добавил анимацию, а окно не обновляется (обновляется только при масштабировании)
Я что-то не понимаю про glXSwapBuffers(window->display, window->window); ???


#76
21:51, 18 фев. 2020

Mifls_X
> Я что-то не понимаю про glXSwapBuffers(window->display, window->window); ???
оно тут не причем. Ты не обрабатываешь сообщения X сервера.

#77
21:53, 18 фев. 2020

Можно подробнее?

#78
21:54, 18 фев. 2020

Mifls_X
покажи начало своего главного цикла программы.

#79
21:55, 18 фев. 2020

Mifls_X
> Я что-то не понимаю про glXSwapBuffers
Возможно что обработка событий идет не ассинхронно.

Если очередь событий пуста, то XNextEvent выполняет операцию XFlush для соединения display и встаёт в режим ожидания прихода события.
#80
21:57, 18 фев. 2020

    while( True ) {                                        // Бесконечный цикл обработки событий
        XNextEvent( window->display, &window->event );
        if( window->event.type == Expose ) {                        // Перерисовать окно
            XWindowAttributes attribs;
            XGetWindowAttributes(window->display, window->window, &attribs);
            glViewport(0, 0, attribs.width, attribs.height);
            projection = glm::perspective(45.0f, (GLfloat)attribs.width / (GLfloat)attribs.height, 0.1f, 1000.0f);
        }
        //glViewport(0, 0, window->Width, window->Height);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

        glBindTexture(GL_TEXTURE_2D, room->floorFigure.texture);

        //Using shader
        glUseProgram(programID);

        view = glm::rotate(view, 0.01f, glm::vec3(0.0f, 1.0f, 0.0f));

        // Get their uniform location
        GLint modelLoc = glGetUniformLocation(programID, "model");
        GLint viewLoc = glGetUniformLocation(programID, "view");
        GLint projLoc = glGetUniformLocation(programID, "projection");
        // Pass them to the shaders
        glUniformMatrix4fv(modelLoc, 1, GL_FALSE, glm::value_ptr(model));
        glUniformMatrix4fv(viewLoc, 1, GL_FALSE, glm::value_ptr(view));
        // Note: currently we set the projection matrix each frame, but since the projection matrix rarely changes it's often best practice to set it outside the main loop only once.
        glUniformMatrix4fv(projLoc, 1, GL_FALSE, glm::value_ptr(projection));

        glBindVertexArray(VAO);
        glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
        glBindVertexArray(0);
        // Present frame
        glFlush();
        glXSwapBuffers(window->display, window->window);
        if( window->event.type == KeyPress )                        // При нажатии кнопки - выход
            break;
    }

#81
22:02, 18 фев. 2020

Сделай хотя бы так.

if (XPending(window->display)>0)
  XNextEvent( window->display, &window->event );

#82
22:03, 18 фев. 2020

Mifls_X
Попробуй вот так:

while (true)
{
  if (XPending(display) > 0)
  {
    XNextEvent(display, &event);
    switch (event.type)
    {
      // тут обрабатываешь события
      case KakoiNubudMessage: bla-bla-bla; break;
      default: break;
    }
  }
  else
  {
    // тут весь остальной код
  }
}
#83
22:03, 18 фев. 2020

Класс!
А почему хотя бы?

#84
22:07, 18 фев. 2020

Mifls_X
> А почему хотя бы?
По правильному нужно на подобии programina делать. Чтобы все события были обработаны до формирования кадра. Но обычно делают так:

while (XPending(window->display)>0) {
  XNextEvent( window->display, &window->event );
  // тут обрабатываешь события
}
// тут весь остальной код
#85
22:11, 18 фев. 2020

foxes
Так вот что за лажа была в WoT! Лол)

#86
22:12, 18 фев. 2020

Mifls_X
> WoT
Причем тут это?

#87
22:13, 18 фев. 2020

Просто вспомнил. Не важно

Страницы: 1 2 3 4 5 6
ПрограммированиеФорумГрафика

Тема в архиве.