2016-06-17 7 views
0

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.

Antwort

1

Die Funktion SDL_SetTextureColorMod verwendet Uint8 für die Farbwerte Rot, Grün und Blau. Der Wert 0 wäre keine Farbe. Während der Wert 255 wäre maximal Farbe. Um die Farben auf normal zurückzusetzen, würden Sie 255 für Rot, Grün und Blau verwenden. Wie in:

SDL_SetTextureColorMod(texture, 255, 255, 255);