Я использую класс под названием UICanvas, этот класс имеет текстуру, которая используется дочерними объектами для рендеринга.SDL2 полноэкранный режим и рендеринг для текстуры
Для этого я использую SDL_SetRenderTarget, и он работает очень хорошо, но когда я переключаюсь на полноэкранный режим, весь экран по какой-то причине использует холст-текстуру как текстуру экрана. Это ошибка, или я сделал что-то не так?
Это функция draw для класса canvas, m_canvas - это текстура, используемая для объектов childobjects для рисования.
void UICanvas::draw(SDL_Renderer* onWhat, Uint32 deltaTime)
{
/* Change rendering target to the canvas. */
SDL_SetRenderTarget(onWhat, m_canvas);
/* Fill with background color */
Color old;
SDL_GetRenderDrawColor(onWhat, &old.r, &old.g, &old.b, &old.a);
SDL_SetRenderDrawColor(onWhat, m_color.r, m_color.g, m_color.b, m_color.a);
SDL_RenderFillRect(onWhat, NULL);
SDL_SetRenderDrawColor(onWhat, old.r, old.g, old.b, old.a);
/* Draw child textures on the canvas. */
drawChildren(onWhat, deltaTime);
/* Reset to default rendering target */
SDL_SetRenderTarget(onWhat, NULL);
/* Position and render canvas */
Point2Df abs(getAbsolutePosition());
Rectangle dest(static_cast<Sint32>(abs.x), static_cast<Sint32>(abs.y), m_width, m_height);
SDL_RenderCopy(onWhat, m_canvas, NULL, &dest);
}
Всякий раз, когда я переключаю полноэкранный режим, весь экран становится белым. Это функция я использую, чтобы перейти в полноэкранный режим:
void Application::toggleFullscreen()
{
Uint32 flags(SDL_GetWindowFlags(GE_SYS.window));
flags ^= SDL_WINDOW_FULLSCREEN_DESKTOP;
SDL_SetWindowFullscreen(GE_SYS.window, flags);
SDL_DestroyRenderer(GE_SYS.renderer);
GE_SYS.renderer = SDL_CreateRenderer(GE_SYS.window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_TARGETTEXTURE);
//SDL_SetRenderTarget(GE_SYS.renderer, NULL);
}
Я нашел несколько удовлетворительное решение моей проблемы. Прочитав эту дискуссию на форуме [link] (https://forums.libsdl.org/viewtopic.php?t=8787), я заставил SDL использовать OpenGL через SDL_SetHint (SDL_HINT_RENDER_DRIVER, «opengl»); перед созданием окна и средства визуализации. – user3077883