У меня может быть ответ для вас, но он вам не понравится.
Похоже, SDL_GetRenderTarget
не работает должным образом.
Я получил точноета же проблема, что и у вас (вот как я нашел ваш вопрос), и я мог бы надежно воспроизвести его с помощью этой простой программы:
int rendererIndex;
[snipped code : rendererIndex is set to the index of the DX11 renderer]
SDL_Renderer * renderer = SDL_CreateRenderer(pWindow->pWindow, rendererIndex, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC | SDL_RENDERER_TARGETTEXTURE);
SDL_Texture* rtTexture = SDL_CreateTexture(renderer, SDL_PIXELFORMAT_RGBA8888, SDL_TEXTUREACCESS_TARGET, 200, 200);
SDL_SetRenderTarget(renderer, rtTexture);
if(SDL_GetRenderTarget(renderer) != rtTexture)
printf("ERROR.");
Это всегда приводит к:
ОШИБКА.
Обходной путь, который я использовал, это сохранение указателя на целевую текстуру рендеринга, который я устанавливаю для средства визуализации и не использую SDL_GetRenderTarget
.
РЕДАКТИРОВАТЬ:
Мне было любопытно, почему я не получил правильную цель рендеринга при получении, и я просматриваю исходный код SDL2.Я выяснил, почему (код для ясности):
int
SDL_SetRenderTarget(SDL_Renderer *renderer, SDL_Texture *texture)
{
// CODE SNIPPED
/* texture == NULL is valid and means reset the target to the window */
if (texture) {
CHECK_TEXTURE_MAGIC(texture, -1);
if (renderer != texture->renderer) {
return SDL_SetError("Texture was not created with this renderer");
}
if (texture->access != SDL_TEXTUREACCESS_TARGET) {
return SDL_SetError("Texture not created with SDL_TEXTUREACCESS_TARGET");
}
// *** EMPHASIS MINE : This is the problem.
if (texture->native) {
/* Always render to the native texture */
texture = texture->native;
}
}
// CODE SNIPPED
renderer->target = texture;
// CODE SNIPPED
}
SDL_Texture *
SDL_GetRenderTarget(SDL_Renderer *renderer)
{
return renderer->target;
}
Короче говоря, рендерер сохраняет текущую цель рендеринга в renderer->target
, но не перед преобразованием текущей текстуры в ее собственную форму.Когда мы используем SDL_GetRenderTarget
, мы получаем ту нативную текстуру, которая может отличаться или не отличаться.