Я создаю 2D-движок и хочу реализовать закрепление, поэтому мне нужно создать видовой экран и отобразить экран в виде текстуры.
Чтобы отобразить видовой экран, я сохраняю буфер кадра вFrameBufferObject и рисование как обычно, я использовал эту технику несколько лет назад, и она работала без проблем, вот код Draw:
glBindFramebuffer(GL_FRAMEBUFFER, fbo_msaa_id);
glViewport(0, 0, width, height);
DrawRoomObjects();
glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo_msaa_id);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo_id);
glBlitFramebuffer(0, 0, width, height, // src rect
0, 0, width, height, // dst rect
GL_COLOR_BUFFER_BIT, // buffer mask
GL_LINEAR); // scale filter
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glViewport(0, 0, App->moduleWindow->screen_surface->w, App->moduleWindow->screen_surface->h);
Я убедился, что функция DrawRoomsObjects()
работает правильно, и FBOправильно инициализируется.
Вот код для рендеринга текстуры, созданной с помощью библиотеки ImGui:
glEnable(GL_TEXTURE_2D);
if (ImGui::Begin("Game Viewport", &visible, ImGuiWindowFlags_MenuBar)) {
ImGui::Image(viewportTexture->GetTextureID());
}
Перед этим чанком я делаю некоторые вычисления, чтобы подогнать изображение к док-станции, я не использую viewportTexture
больше на код.
Проблема возникает, когда я получаю этот странный артефакт во время перемещения квада, который я не знаю, как вызвать, нажмите по этой ссылке , чтобы увидеть gif ошибки.
Кажется, текстура некорректно очищает данные ...?