Autor Wątek: [SOLVED]SDL 2 Tekstury wychodzące poza ekran  (Przeczytany 1921 razy)

Offline MofC

  • Użytkownik

# Luty 28, 2016, 19:52:34
Witam!
Piszę projekt na zaliczenie z programowania w C/C++. Wybrałem bibliotekę SDL 2 bo z jedynką miałem już wiele wspólnego i dość dobrze ją znam. Postanowiłem że skoro druga wersja sdl'a wykorzystuje renderowanie sprzętowe to grzechem byłoby tego nie wykorzystać. Jednak tu pojawia się problem którego w jedynce nie było. Gdy jedna ze współrzędnych wychodzi na minus, poza ekran, to zamiast po prostu uciętej tekstury mam spłaszczoną. 

Słaby jestem w tłumaczeniu o co Mi chodzi więc wrzucam zrzuty ekrany.




Metoda odpowiadająca za rysowanie:
void cGraph::DrawGraph(std::string name, struct color colormod, SDL_Rect* Dest)
{
int i=0;

while (GraphContainer[i].IDname != name)
{
i++;
}

SDL_SetTextureColorMod(GraphContainer[i].texture, colormod.red, colormod.green, colormod.blue);

SDL_RenderCopy(Renderer, GraphContainer[i].texture, NULL, Dest);

}

Mam nadzieję że to wystarczy. Proszę o pomoc.
« Ostatnia zmiana: Luty 29, 2016, 12:48:33 wysłana przez MofC »

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Kyroaku

  • Użytkownik

  • +1
# Luty 28, 2016, 22:34:12
U mnie się tak nie dzieje :P
Z początku myślałem, że może funkcja Ci tam obcina wartości, a ponieważ podajesz tam wskaźnik, to Ci zmienia współrzędne, ale sprawdziłem i wszystko jest dobrze.

Spróbuj zrobić tak:
SDL_Rect rect;
rect.x = 100;
rect.y = -50;
rect.w = 100;
rect.h = 100;
SDL_RenderCopy(Renderer, GraphContainer[i].texture, NULL, rect);
Jeśli wszystko będzie okej, to spróbuj utworzyć zmienna 'rect' jako zmienna globalna, albo coś tak, żeby definicja była tylko raz na początku programu, a jeśli funkcja coś zmieni, to zmieni się też wyświetlany obrazek.

Offline MofC

  • Użytkownik

# Luty 28, 2016, 23:31:42
Niestety to nie pomogło. Ale przybliżyłem się do rozwiązania. A więc problem występował gdy
Renderer = SDL_CreateRenderer(Window, -1, SDL_RENDERER_SOFTWARE)po zmianie flagi na SDL_RENDERER_ACCELERATED
Renderer = SDL_CreateRenderer(Window, -1, SDL_RENDERER_ACCELERATED)problem znikł. Moja błyskotliwa teoria brzmi - Próbowałem na programowym renderowaniu używać metod sprzętowych.

EDIT: Z powrotem wziąłem SDL_RENDERER_SOFTWARE i działa normalnie. Także nie wiadomo o co chodzi ale problemu nie ma.
« Ostatnia zmiana: Luty 29, 2016, 19:40:30 wysłana przez MofC »

Online MDW

  • Użytkownik
    • www.encore-games.com

# Luty 29, 2016, 19:58:41
EDIT: Z powrotem wziąłem SDL_RENDERER_SOFTWARE i działa normalnie. Także nie wiadomo o co chodzi ale problemu nie ma.
"Uwielbiamy" problemy, które samoczynnie znikają w równie niewytłumaczalny sposób jak się pojawiają. Takie kwiatki zazwyczaj wracają w najbardziej niespodziewanych momentach i sprawiają, że i tak trzeba znaleźć prawdziwą ich przyczynę. :-)

Offline Kyroaku

  • Użytkownik

  • +2
# Luty 29, 2016, 21:24:59
Cytuj
Takie kwiatki zazwyczaj wracają w najbardziej niespodziewanych momentach i sprawiają, że i tak trzeba znaleźć prawdziwą ich przyczynę. :-)
I tak później zapomni jak to naprawił i znów się będzie głowił xD