Ich benutze SDL_SetTextureColorMod Funktion, um eine Textur zu ändern. Wie gesehen In this question's answer, ändert die Funktion nicht die Textur selbst, nur die Farbänderung beim Zeichnen.SDL Löschen SDL_SetTextureColorMod Effekt
Das Problem ist, dass ich nach dem Aufruf von SDL_SetTextureColorMod den Effekt nicht zurücksetzen kann, und ich habe nichts online gefunden. Also kurz gesagt, ich möchte zum Beispiel einen dunklen Effekt der Textur hinzufügen. Aber dann möchte ich in der Lage sein, die ursprüngliche Textur zu zeichnen. Wenn Sie G in der Anwendung drücken, wird der Effekt angewendet. Ich habe auch versucht
SDL_SetTextureColorMod(texture, 1, 1, 1);
aber das ist nicht die Wirkung zurückgesetzt hat
-Code
#include <SDL.h>
#include <SDL_image.h>
#include <iostream>
using namespace std;
int main2();
int WinMain()
{
main2();
}
SDL_Texture* LoadTexture(const string& Filename, SDL_Renderer * renderer)
{
if(renderer == nullptr)
return nullptr;
SDL_Texture* texture = IMG_LoadTexture(renderer, Filename.c_str());
if (texture == nullptr)
{
std::cout << __FUNCTION__ << "(...): " << "Failed to load texture " << Filename << " error : " << SDL_GetError() << std::endl;
return nullptr;
}
return texture;
}
int main2()
{
bool quit = false;
SDL_Event event;
SDL_Init(SDL_INIT_VIDEO);
IMG_Init(IMG_INIT_JPG);
SDL_Window * window = SDL_CreateWindow("SDL2 Grayscale",
SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0);
SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, 0);
SDL_Texture * texture = LoadTexture("teeth.png", renderer);
if(!texture)
return 0;
while (!quit)
{
SDL_WaitEvent(&event);
switch (event.type)
{
case SDL_QUIT:
quit = true;
break;
case SDL_KEYDOWN:
switch (event.key.keysym.sym)
{
case SDLK_g:
//Uint8 * r, *g, *b;
SDL_SetTextureColorMod(texture, 100, 100, 100);
//greytexture = Greyscale(image, renderer, GreyscalePercentage);
break;
case SDLK_1:
SDL_SetTextureColorMod(texture, 1, 1, 1);
break;
}
break;
}
SDL_RenderCopy(renderer, texture, NULL, NULL);
SDL_RenderPresent(renderer);
}
SDL_DestroyTexture(texture);
//SDL_FreeSurface(image);
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(window);
IMG_Quit();
SDL_Quit();
return 0;
}
Ihnen für jede Hilfe danken.