Автор Тема: SGDK  (Прочитано 74479 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #330 : 17 Март 2017, 15:02:23 »
Странная фишечка в новой версии SGDK.
Когда спрайт уходит за экран, то он затирается. То есть если вернуть его координаты в видимую область, та часть его, что оказалась за экраном, будет стёрта.
В предыдущей версии такого не было. Там спрайт хорошо себя чувствовал на всём виртуальном экране 512*512... Или какой-то флаг надо включить, или чё?  :?

sprites[0] = SPR_addSprite(&logo1, 100, 100, TILE_ATTR(PAL2, TRUE, FALSE, FALSE));// так инициализирую
...
logopos++;
SPR_setPosition(sprites[0], logopos, 75); // так перемещаю


Добавлено позже:
Или настроить разрешение виртуальной области, или чё  :? ?
« Последнее редактирование: 17 Март 2017, 15:38:52 от ALKOSHA »

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #331 : 22 Март 2017, 10:12:17 »
Была последняя надежда на пояснение.



« Последнее редактирование: 23 Март 2017, 10:59:47 от ALKOSHA »

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #332 : 23 Март 2017, 00:22:07 »
Ну бадыль конкретный же.
Не только со спрайтами, а и с плэйнами.
Плэйны тоже затираются.  >:(

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #333 : 23 Март 2017, 10:01:32 »
А, не. То я протупил в коде. Плэйны скроллятся нормально.
Но спрайты всё равно стираются, оказавшись за экраном.  :neznayu:

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 789
  • Пол: Мужской
    • Просмотр профиля
Настройка SGDK
« Ответ #334 : 01 Апрель 2017, 12:28:56 »
Нужна помощь в научении компиляции при помощи IDE - тут вот как раз начал изучать Сишку, а тренируемые навыки решил обкатывать на Megadrive, хеллоуворлдики свои первые для него делать. Ну и вот, самое сложное здесь для меня - это собрать из исходника готовый ром. В качестве IDE решил выбрать Code::Blocks, благо, из всех предложенных на Github-страничке проекта настройка именно этого IDE была показана и объяснена наиболее подробно и наглядно.
Только вот сделал я всё вроде по инструкции, однако при сборке компилятор выдаёт ошибки:

-------------- Build: Debug in VsemPrivet (compiler: SGDK)---------------

Checking if target is up-to-date: make.exe -q -f C:\Users\1\Downloads\sgdk122a\makefile.gen Debug
Running command: make.exe -f C:\Users\1\Downloads\sgdk122a\makefile.gen
C:/Users/1/Downloads/sgdk122a/bin/mkdir -p src/boot
C:/Users/1/Downloads/sgdk122a/bin/mkdir -p out
C:/Users/1/Downloads/sgdk122a/bin/mkdir -p out/src
C:/Users/1/Downloads/sgdk122a/bin/mkdir -p out/res
C:/Users/1/Downloads/sgdk122a/bin/gcc -BC:/Users/1/Downloads/sgdk122a/bin -n -T C:/Users/1/Downloads/sgdk122a/md.ld -nostdlib out/sega.o @out/cmd_ C:/Users/1/Downloads/sgdk122a/lib/libmd.a C:/Users/1/Downloads/sgdk122a/lib/libgcc.a -o out/rom.out
C:/Users/1/Downloads/sgdk122a/lib/libmd.a(sys.o): In function `_start_entry':
sys.c:(.text+0x906): undefined reference to `main'
C:/Users/1/Downloads/sgdk122a/lib/libmd.a(sys.o): In function `_reset_entry':
sys.c:(.text+0x914): undefined reference to `main'
make: *** [out/rom.out] Error 1
Process terminated with status 2 (0 minute(s), 1 second(s))
2 error(s), 0 warning(s) (0 minute(s), 1 second(s))
 

Никто не знает, в чём тут дело?

Оффлайн worm

  • Пользователь
  • Сообщений: 1075
  • Пол: Мужской
  • Злой тролляка
    • Просмотр профиля
Re: Настройка SGDK
« Ответ #335 : 03 Апрель 2017, 00:53:15 »
Томахомэ, похоже, дело в linker settings. Не знаю, почему этот шаг упустили в новой инструкции - в более ранних ее версиях описывалось, что в linker settings нужно включить файлы .a расширения из папки lib. Вообще, SGDK я не "навещал" уже давно, а codeblocks - тем более, т.к. лично для меня, bat-ник оказался удобнее. Там даже пути в environment variables не надо прописывать - указал в батнике, да и все.
Кладешь эту дрянь в папку с проектом, запускаешь, ром готов. Только учти, если у тебя vista или более поздняя виндуза, то с 50% вероятностью, ты словишь ошибку "couldn't allocate heap". Внимательно мониторь ее, т.к. это исчадие ада может испортить все - стать причиной багов в коде проекта, либо даже причиной того, что ром и вовсе не скомпилируется. Увидел эту ошибку - просто компилируй заново. Эта ошибка - не побочный эффект батника, я ловил ее множество раз на code blocks. Это - причина криворукости одной печально известной корпорации, ныне нагло проталкивающей нам свои обновления. На линуксе этой проблемы нет, однако порт давно не обновлялся.
« Последнее редактирование: 03 Апрель 2017, 01:44:29 от worm »

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 789
  • Пол: Мужской
    • Просмотр профиля
Re: Настройка SGDK
« Ответ #336 : 03 Апрель 2017, 06:28:07 »
Томахомэ, похоже, дело в linker settings. Не знаю, почему этот шаг упустили в новой инструкции - в более ранних ее версиях описывалось, что в linker settings нужно включить файлы .a расширения из папки lib. Вообще, SGDK я не "навещал" уже давно, а codeblocks - тем более, т.к. лично для меня, bat-ник оказался удобнее. Там даже пути в environment variables не надо прописывать - указал в батнике, да и все.
Кладешь эту дрянь в папку с проектом, запускаешь, ром готов. Только учти, если у тебя vista или более поздняя виндуза, то с 50% вероятностью, ты словишь ошибку "couldn't allocate heap". Внимательно мониторь ее, т.к. это исчадие ада может испортить все - стать причиной багов в коде проекта, либо даже причиной того, что ром и вовсе не скомпилируется. Увидел эту ошибку - просто компилируй заново. Эта ошибка - не побочный эффект батника, я ловил ее множество раз на code blocks. Это - причина криворукости одной печально известной корпорации, ныне нагло проталкивающей нам свои обновления. На линуксе этой проблемы нет, однако порт давно не обновлялся.

Сработало! Большое вам спасибо!

Оффлайн worm

  • Пользователь
  • Сообщений: 1075
  • Пол: Мужской
  • Злой тролляка
    • Просмотр профиля
Re: Настройка SGDK
« Ответ #337 : 03 Апрель 2017, 14:47:02 »
Сработало! Большое вам спасибо!
Рад, что оказался кому-то полезен)

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 789
  • Пол: Мужской
    • Просмотр профиля
Настройка SGDK
« Ответ #338 : 03 Апрель 2017, 16:10:35 »
При попытке скомпилировать исходник на C++ батник выдаёт такую вот ошибку: см. скриншот.

Тут что может быть причиной?

Оффлайн worm

  • Пользователь
  • Сообщений: 1075
  • Пол: Мужской
  • Злой тролляка
    • Просмотр профиля
Re: Настройка SGDK
« Ответ #339 : 04 Апрель 2017, 20:36:38 »
А об этой ошибке я писал выше)
Только учти, если у тебя vista или более поздняя виндуза, то с 50% вероятностью, ты словишь ошибку "couldn't allocate heap". Внимательно мониторь ее, т.к. это исчадие ада может испортить все - стать причиной багов в коде проекта, либо даже причиной того, что ром и вовсе не скомпилируется. Увидел эту ошибку - просто компилируй заново.

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 789
  • Пол: Мужской
    • Просмотр профиля
Re: Настройка SGDK
« Ответ #340 : 05 Апрель 2017, 07:46:05 »
А об этой ошибке я писал выше)

После создания в Code:Blocks исходника уже изначально как C++ source-файл, объявление о couldn't allocate heap в объявлении куда-то исчезло, однако всё равно всякий раз получается ошибка (см. скриншот).

Оффлайн worm

  • Пользователь
  • Сообщений: 1075
  • Пол: Мужской
  • Злой тролляка
    • Просмотр профиля
Re: Настройка SGDK
« Ответ #341 : 05 Апрель 2017, 17:06:57 »
Томахомэ, перекомпилируй с чистого листа, поудаляй все outputы, т.к. мог остаться след от couldn't allocate heap, что и приводит к данной ошибке.

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 789
  • Пол: Мужской
    • Просмотр профиля
Настройка SGDK
« Ответ #342 : 12 Апрель 2017, 14:17:52 »
Хмммм.... а синтаксис у SGDK`шных версий C и C++ точно ничем не отличается? А то ведь я в C++-source-файле текст из примера я оставил абсолютно неизменным:
#include <genesis.h>

int main()
{
VDP_drawText("Hello Genny World!", 10, 13);

while(1)
{
//read input
//move sprite
//update score
//draw current screen (logo, start screen, settings, game, gameover, credits...)

//wait for screen refresh
VDP_waitVSync();
}
return (0);
}

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 789
  • Пол: Мужской
    • Просмотр профиля
Настройка SGDK
« Ответ #343 : 13 Апрель 2017, 10:45:12 »
Нашёл-таки, в чём дело - там, по ходу, тупо не поддерживается файловое расширение .cpp. А поддерживаются такие:

Источник.

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #344 : 14 Апрель 2017, 08:41:51 »
Ну конечно. Там ведь чистая сишка, никаких плюсов, никакого ООП.

Добавлено позже:
А вот с затиранием спрайтов так и не понял чё происходит.
Вечером скину гифку.

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 789
  • Пол: Мужской
    • Просмотр профиля
Настройка SGDK
« Ответ #345 : 14 Апрель 2017, 13:07:26 »
Ну конечно. Там ведь чистая сишка, никаких плюсов, никакого ООП.

А откуда тогда такая надпись?

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #346 : 14 Апрель 2017, 13:30:39 »
От автора, оформившего данный пост на сайте GCUP, который явно не вникал даже в настройку компилятора, а лишь наспех опубликовал новость.

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #347 : 14 Апрель 2017, 23:14:24 »
Не знаю чё произошло. o_0
Но затираться перестало.
Правда я уже с тех пор модифицировал некоторые ф-ции


Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #348 : 15 Апрель 2017, 19:43:18 »
Ага. Значит вот в чём странность.
Если инициализировать спрайты с начальными координатами за пределами экрана,  то они получаются "надгрызенные". Если же эти спрайты сперва поместить на экранной области, а лишь потом плавно сместить за экран, то ничего не затрётся. Хммм...
 <_<


Добавлено позже:
Вот тело главного цикла, тут идёт привязка к таймеру. Чтоб при разной нагруженности проца координаты всего вокруг обновлялись равномерно.
    while(TRUE)
    {
        //    handleInput();

        u32 current =  getTimer(0, FALSE);
        u32 elapsed = current - previous;
        previous = current;
        lag += elapsed;


        while (lag >= 2000)
        {

            update_game();

            lag -= 2000;
        }
        SPR_update(sprites, 80);
        VDP_waitVSync();
    }

Не знаю, может это как-то влияет.
« Последнее редактирование: 15 Апрель 2017, 19:50:50 от ALKOSHA »

Оффлайн Томахомэ

  • Пользователь
  • Сообщений: 789
  • Пол: Мужской
    • Просмотр профиля
Настройка SGDK
« Ответ #349 : 17 Апрель 2017, 10:20:14 »
Цитата
Только учти, если у тебя vista или более поздняя виндуза, то с 50% вероятностью, ты словишь ошибку "couldn't allocate heap".

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

А вот где сложности и непонятки с компиляцией точно есть, так это в

Понятно, что оффтоп, но создавать под это аж отдельную тему мне не хотелось.

Оффлайн worm

  • Пользователь
  • Сообщений: 1075
  • Пол: Мужской
  • Злой тролляка
    • Просмотр профиля
Re: Настройка SGDK
« Ответ #350 : 19 Июнь 2017, 15:55:40 »
Томахомэ, т.е. в SGDK у тебя не вылетает couldn't allocte heap, а в NeoDev вылетает? Весьма странно ведет себя твоя ОС, у меня была 10ка, тоже х64, эта дрянь вылетала в 8 из 10 случаев.

Тем временем, вышла новая версия SGDK.
Обещают лучшую генерацию кода с теперешним GCC 6.3, поддержка LTO, обновленный rescomp и много всяких вкусностей.

https://github.com/Stephane-D/SGDK/wiki/Download

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #351 : 29 Июнь 2017, 11:58:53 »
Надеюсь устранены непредвиденные баги, по причине которых я не довёл до ума дермосцену и Кровавыша.

Оффлайн Segaman

  • Пользователь
  • Сообщений: 3240
  • Пол: Мужской
  • Blast Processing!
    • Youtube
    • Просмотр профиля
Настройка SGDK
« Ответ #352 : 19 Август 2017, 17:27:20 »
кто подскажет, как в SGDK спрайты рисовать?
у мну есть графоний в сеговом формате и в формате bmp.
кого мне надо зарезать, чтобы на экране появился спрайт? :)

Добавлено позже:
void main()
{
SYS_disableInts();
{
VDPPlan planA, planB;
planA.value = CONST_PLAN_A;
planB.value = CONST_PLAN_B;

// очистить экран
VDP_setHorizontalScroll( planA, 0 );
VDP_setVerticalScroll( planA, 0 );
VDP_clearPlan( planA, TRUE );
VDP_clearPlan( planB, TRUE );

SPR_init(16,256,256);
SPR_addSprite( &SPR_BALL,
   16,
   16,
   TILE_ATTR(PAL0, TRUE, FALSE, FALSE) );

SYS_enableInts();
// включить экран
VDP_setEnable( TRUE );
SPR_update();
}

while(TRUE);
}


вот так рисую а экран черный. список спрайтов глянул - пусто, графоний тоже пусто :-\
« Последнее редактирование: 19 Август 2017, 17:54:04 от Segaman »

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #353 : 26 Август 2017, 17:29:39 »
В коде всё в норме, кажется.
Может с ресами чёт не то?  :neznayu:
Я обычно через irfanView понижаю палитру до 16bpp.
Ещё попробуй не выключать прерывания на момент инициализации. У меня с этим гемор был на реальной железке, кстати. Но то в старой версии SGDK.


Добавлено позже:
Не забываем так же, что размер спрайтов в ресурсах должен быть кратный 8-ми по ширине\высоте.

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #354 : 25 Январь 2018, 22:15:05 »
Я тут это самое.... короче... в общем... ну, это... решил смести паутину и сдуть пыль со своего недобитого проекта.
Качнул самую последнюю СДК (1.34), датируемую январём сего года.
До того клепал на версии 1.12. Там множество багов и тормозов было, но самый главный баг - невозможность очистить VRAM.

Нынешние же бенчмарки и демосцена заставляют захлебнуться слюной от искушения.

Но вот терь куча вопросов возникает по поводу работы новых функций.

Начнём с
VDP_drawImageEx(VDP_PLAN_B, &alko, TILE_ATTR_FULL(PAL0, FALSE, FALSE, FALSE, ind),4, 0, FALSE, TRUE);
   

Чёто непонятное пишыт.
Растолкуйте пожалуйста, бо я не программист ни разу.



Оффлайн s1nka

  • Пользователь
  • Сообщений: 1569
  • Пол: Мужской
    • Steam
    • Просмотр профиля
Настройка SGDK
« Ответ #355 : 28 Январь 2018, 15:41:37 »
ALKOSHA, Несоответствие типов параметра. Ожидает VDPPlan, а получает u16.

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #356 : 28 Январь 2018, 21:00:45 »
С тем уже разобрался.
Вместо константы VDP_PLAN_A (VDP_PLAN_B) надо лепить PLAN_A (PLAN_B)

Это меньшее из зол.

Ща он ругается следующим образом
Повылазила тонна следующих сообщений

undefined reference to `SPR_initSprite'|
undefined reference to `SPR_setAttribut'|
undefined reference to `bplan_adr'|

Пока что не могу сообразить процесс инициализации спрайтов в новой версии.

Оффлайн Sharpnull

  • Пользователь
  • Сообщений: 5011
    • Просмотр профиля
Настройка SGDK
« Ответ #357 : 28 Январь 2018, 23:16:49 »
ALKOSHA, Смотрите пример "sgdk\sample\sprite" из нового sgdk и документацию (sgdk\doc).
Вместо SPR_initSprite теперь SPR_addSprite:
// init sonic sprite
sprites[0] = SPR_addSprite(&sonic_sprite, fix32ToInt(posx - camposx), fix32ToInt(posy - camposy), TILE_ATTR(PAL2, TRUE, FALSE, FALSE));
Вместо SPR_setAttribut теперь несколько функций:
SPR_setPriorityAttribut
SPR_setPalette
SPR_setVFlip
SPR_setHFlip
И наконец bplan_adr -> bplan_addr.
P.S. Но последнее определено через макрос VDP_PLAN_B, поэтому bplan_addr не нужно использовать напрямую.
« Последнее редактирование: 28 Январь 2018, 23:28:22 от Sharpnull »

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #358 : 31 Январь 2018, 22:52:35 »
так-с.
Тут процесс кэширования поменялся ещё.

Попытаюсь по своим каракулям вспомнить, как делал раньше...

Инициализирую карту тайлов
static Map *mapj;

Объявляю адрес текущей распаковываемой  пикчи (в этом особенно неудобно было. Посмотрим как будет в новой версии)
ind1 = TILE_USERINDEX;


VDP_setMap(VDP_PLAN_A, mapj, TILE_ATTR_FULL(PAL3, FALSE, FALSE, FALSE, ind1), i*2, jy/15);

Для следующей распаковываемой пикчи надо было инкрементировать ind1 на количество байт предыдущей пикчи.
Неудобно, громоздко, когда набор этих пикч большой.


Добавлено позже:

Завтра уже посмотрю как там в новой версии.

Оффлайн ALKOSHA

  • Пользователь
  • Сообщений: 805
  • Люблю донди.
    • ВКонтакте
    • Просмотр профиля
Настройка SGDK
« Ответ #359 : 19 Февраль 2018, 23:05:52 »
кто знает, как увеличить виртуальный экран до 512-ти пикселей  в новой версии?
Просто в старой оно так было по-дефолту.
А щас картинка на слое прокрутки оказывается не за видимым экраном, а сразу же вылезает с другой стороны. (по вертикали по крайней мере. По горизонтали ещё не проверял)