LINUX.ORG.RU

SDL2: не рендерятся текстуры

 ,


0

1

Всем привет. Решил поиграться с SDL2, взял пример с Lazy Foo и запустил его на Cишке. Программа стартует, но текстуры, кторые я загружаю не рендерятся. В чём может быть проблема?

Код

Выхлоп



Последнее исправление: ubik (всего исправлений: 2)

Код

А вы точно знаете C? Зачем вы копируете на каждый чих «объект», созданный к тому же на стеке? Зачем вы вообще взялись переписывать код с C++?

Выхлоп

Выхлоп чего? Я не нашёл там ничего, что хоть как-то связано с вашей программой.

http://ix.io/OFJ/

Какой ущербный сервис для сниппетов, ни нормально скопировать код, ни скачать файл RAW'ом.

P.S. «две минуты в Paint'е», пробуйте: http://paste.org.ru/?orz0ol

EXL ★★★★★
()
Ответ на: комментарий от EXL

уберите последний слеш в URL'e и будет вам файл RAW'ом :)

ubik
() автор топика
Ответ на: комментарий от EXL

А вы точно знаете C?

не точно :)

Зачем вы копируете на каждый чих «объект», созданный к тому же на стеке?

Через указатели думал сделать потом, сначала была цель отрендерить два спрайта.

Зачем вы вообще взялись переписывать код с C++?

А это плохо? SDL ведь на С написан :/

Выхлоп чего? Я не нашёл там ничего, что хоть как-то связано с вашей программой.

А там дебажный выхлоп с printf'ами.

P.S. «две минуты в Paint'е», пробуйте: http://paste.org.ru/?orz0ol

Спасибо. Почему-то карта 5000x3000 не отрендерилась, когда уменьшил, всё отрисовалось отлично.

ubik
() автор топика
Ответ на: комментарий от ubik

Почему-то карта 5000x3000 не отрендерилась, когда уменьшил, всё отрисовалось отлично.

Потому что макс. размер текстуры наверное 2Кx2К.

EXL ★★★★★
()
Ответ на: комментарий от ubik

Почему-то карта 5000x3000 не отрендерилась

Ох лол, аватарка в тему)) Ты ее где рисовал то? Лучше по кусочкам, если кусочков нету, то по частям грузи текстуру. Есть же много редакторов для 2D, и загрузчиков.

linuhs_user
()
Последнее исправление: linuhs_user (всего исправлений: 2)
Ответ на: комментарий от ubik

Спасибо. Почему-то карта 5000x3000 не отрендерилась, когда уменьшил, всё отрисовалось отлично.

А потом удивляются, почему игори тормозят.

peregrine ★★★★★
()
void freeObject(struct Object object)
193 {
194     /* free texture if it exists */
195     if(object.mTexture != NULL) {
196         SDL_DestroyTexture(object.mTexture);
197         object.mTexture = NULL;
198         object.width = 0;
199         object.height = 0;
200     }
201 }

Аффтор явно не понимает, что он тут делает. А именно присваивает какие-то значения копии структуры на стеке, которая разрушается при выходе из функции

anonymous
()
Ответ на: комментарий от linuhs_user

Ты ее где рисовал то?

В gimp'e.

Лучше по кусочкам, если кусочков нету, то по частям грузи текстуру.

Ну-ка, расскажи подробности

ubik
() автор топика
Ответ на: комментарий от ubik

Ну-ка, расскажи подробности

На кусочки режешь, и к примеру по такой системе далее:

[T][T][T]
[T][T][T]
[T][T][T]
По центру камера, когда она смещается подгружаются новые куски, освобождаются старые.
Резать surface на текстуры можно так:
https://stackoverflow.com/questions/28023301/sdl2-trying-to-crop-a-texture-or...

linuhs_user
()
Последнее исправление: linuhs_user (всего исправлений: 1)
Ответ на: комментарий от linuhs_user

Спасибо тебе огромное. Слушай, у меня ещё вопрос: как лучше сделать, чтобы юниты могли двигаться в пределах карты? Мне нужно координаты каждого пикселя карты мапить в какой-то массив?

ubik
() автор топика
Ответ на: комментарий от linuhs_user

Ну, карта у меня получается ромбовидная, я не представляю как ограничивать движение юнитов внутри карты :-(

ubik
() автор топика
Ответ на: комментарий от ubik

Ну тебе нужно записать в какой нибудь массив точки углов карты по периметру, и получится как бы контур карты, и проверяй коллизию EntityToMapLine, к примеру таким алгоритмом.

struct Point {
  double x;
  double y;
};

struct Line {
  struct Point a;
  struct Point b;
};

double
line_len(struct Point a, struct Point b)
{
  return(sqrt(pow(a.x - b.x) + pow(a.y - b.y));
}

bool
collision_point_to_line(struct Point p, struct Line line)
{
  if(line_len(p, line.a) + line_len(p, line.b) == line_len(line.a, line.b))
    return(true);
  else
    return(false);
}

linuhs_user
()
Последнее исправление: linuhs_user (всего исправлений: 1)
Ответ на: комментарий от linuhs_user

Супер! Спасибо и удачи тебе :)

ubik
() автор топика

Там надо рендерер использовать в sdl2. Посмотри примеры с renderer. В книге по sdl2 на с++ написан пример как рендерить картинку, думаю ты разберёшься.

u0atgKIRznY5
()
Ответ на: комментарий от u0atgKIRznY5

Я так и делаю. Выше уже подсказали как загружать/выгружать чанки текстуры

ubik
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.