интеграции Magic Particles (Dev) для PopCap Framework

Обсуждение специальной версии Magic Particles (Dev), предназначенной для разработчиков игр.

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение KoDeRon » Ср мар 24, 2010 5:07 pm

Magic работает на 1 потоке постояно
падение исключительно под компилятором, запуская просто ехе пока не удалось уронить программу

когда я спрашивал про проблема в ptc файлах то где он хранит текстуры ?!
при сохранение для API текстуры не куда не выгружаються! я указываю папку от куда текстуры читать но там пусто
при чтение ptc файлов он сохроняет текстуры в папку temp свою

собствено как передположение
могло ли просто наложиться 2 эфекта так как на всех уровнях используеться 1 обезательный файл system.ptc он не успевает удалиться
в то время как создаеться новый и пишет в туже папку ети текстуры, отрапартовыет что текстуры выгруженны начинает создаваться атлас по не существующем текстурам...

компилятор выбрасывается на исключение что произошло переполнение стека...
обычно такое бывает когда обращаються к бексконечному циклу....

я бы рад закрыть глаза на это раз в простых работает но мне надо понять почему оно падает...
KoDeRon
 
Сообщения: 13
Зарегистрирован: Вт мар 02, 2010 6:50 pm

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение Odin_KG » Чт мар 25, 2010 2:43 am

когда я спрашивал про проблема в ptc файлах то где он хранит текстуры ?!

Внутри ptc-файла в виде образов файлов.

при сохранение для API текстуры не куда не выгружаються!

Если установлена галочка "Сохранять текстуры", то текстуры остаются внутри ptc. Иначе, текстур там просто не будет вообще - останутся только имена файлов. В этом случае вы должны сами решать вопрос с хранением текстур, т.е. откуда вы их берете это уже ваше дело.

я указываю папку от куда текстуры читать но там пусто

если текстуры внутри ptc, то они и будут загружаться из ptc.

при чтение ptc файлов он сохроняет текстуры в папку temp свою

Да. Потому что я не нашел как в попкапе загрузить текстуру из ОЗУ, поэтому я вынужден делать из нее файл, а потом оттуда грузить. Может это и не рационально, но popcap и так сожрал у меня в 3-4 раза больше времени чем любой другой движок. Если вы знаете, как загрузить из ОЗУ, то сохранять в temp необязательно.

могло ли просто наложиться 2 эфекта так как на всех уровнях используеться 1 обезательный файл system.ptc он не успевает удалиться

Мне фраза "не успевает удаляться" не очень понятна. Действия выполняются сразу, т.е. если вы удалили что-то, так оно удалится. "Не успевает" - это что-то из разряда многопоточности. Если вы MP_Manager удалили, то должно всё удалиться. На всякий случай уточню: вы текстуры в редакторе в хранилище положили или храните внутри типов частиц? Лучше класть в хранилище.
Во всех случаях, информация по работе с текстурами полностью открыта с коде враппера - вы можете прошагать там отладчиком то, что вам кажется может неверно работать.

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

Библиотека magic.dll вообще не знает ничего о текстурах, у нее для построения атласов есть только размеры текстур (width и height) и контрольные суммы файлов (чтобы не дублировать одинаковые текстуры при построении атласа). На основании этого библиотека и строит атласы, о которых возвращается информация. Загружается же атлас враппером, который уже берет конкретный файл либо образ текстуры из ptc.

падение исключительно под компилятором, запуская просто ехе пока не удалось уронить программу

Возможно, что тут проблема с инициализацией каких-то переменных в программе. Обычно, правда, проблема хуже - падает как раз release, а под отладчиком всё работает. Вы можете сделать протокол выполнения программы, т.е. в критических местах выводить информацию в текстовый файл и таким образом вы четко сможете поймать строку, которая вызывает ошибку. Во-вторых, вы можете взять мощный отладчик DevPartner, который интегрируется в VS 2005/2008. Этот отладчик быстренько найдет вам кучу опасных мест, которые вы пропустили по случайности, и которые по каким-то причинам абсолютно незаметны для обычного отладчика VS.
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение KoDeRon » Чт мар 25, 2010 11:11 am

Программа как раз падает в дебаге :) и под компилем
я знаю разницу между релизом и дебагом дабы не первый день программлю :evil:

насщет реализации врапера под попкап :)
ну можно было бы еще добавить MessageBox на момент загрузки TGA, DDS файлов :) он их не грузит а программа падает иза не оперделености размеров текстур...
KoDeRon
 
Сообщения: 13
Зарегистрирован: Вт мар 02, 2010 6:50 pm

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение KoDeRon » Пн апр 12, 2010 3:21 pm

в mp_wrap.cpp

рекомендую добавить

строка 145

Код: Выделить всё
   
if( frame == NULL )
{
   MessageBox(NULL, StrFormat("NOT CREATE := %s", s.c_str()).c_str(), "ERROR", MB_OK );
   return;
}


дает понять какая текстура не загрузилась в место тупого падения программы!

//// весь код функции :)
Код: Выделить всё
// eng: Loads texture frame
// rus: Загрузка текстурного кадра
void MP_Atlas_WRAP::LoadFrame(MAGIC_TEXTURE* magic_texture, const char* texture_folder)
{
   std::string path="";

   if (magic_texture->data)
   {
      // rus: нужно загрузить файл из памяти
      // rus: для этого сохраняем образ файла во временную папку
      const char* temp_folder=GetPathToTemp();
      path=temp_folder;
      path+=magic_texture->file;
      FILE* file=fopen(path.c_str(),"wb");
      fwrite(magic_texture->data,1,magic_texture->length,file);
      fclose(file);
   }
   else
   {
      if (texture_folder)
      {
         path=texture_folder;
         path+=magic_texture->file;
      }
      else
      {
         path=magic_texture->file;
      }
   }

   std::string s;
   for(unsigned int i=0;i<path.size()-4;i++)
      s+=path[i];

   Sexy::MemoryImage* frame=(Sexy::MemoryImage*)gSexyAppBase->GetImage(s);

   if( frame == NULL )
   {
      MessageBox(NULL, StrFormat("NOT CREATE := %s", s.c_str()).c_str(), "ERROR", MB_OK );
      return;
   }


   if (magic_texture->data)
   {
      // rus: удаляем временный файл
      remove(path.c_str());
   }

   int frame_width=magic_texture->frame_width;
   int frame_height=magic_texture->frame_height;

   float frame_from_width=(float)frame->GetWidth();
   float frame_from_height=(float)frame->GetHeight();

   float scale_x=((float)frame_width)/frame_from_width;
   float scale_y=((float)frame_height)/frame_from_height;

   float left=magic_texture->left;
   if (left>magic_texture->right)
      left=magic_texture->right;
   float top=magic_texture->top;
   if (top>magic_texture->bottom)
      top=magic_texture->bottom;
   int x=(int)(left*atlas_width);
   int y=(int)(top*atlas_height);

   int pitch_to=texture->GetWidth();
   int pitch_from=frame->GetWidth();

   ulong* from=frame->GetBits();
   ulong* to=texture->GetBits()+y*pitch_to+x;

   for (int i=0;i<frame_width;i++)
   {
      for (int j=0;j<frame_height;j++)
      {
         int i2=(int)(((float)i)/scale_x);
         int j2=(int)(((float)j)/scale_y);

         unsigned long color=from[j2*pitch_from+i2];
         to[j*pitch_to+i]=color;
      }
   }

   delete frame;
}
KoDeRon
 
Сообщения: 13
Зарегистрирован: Вт мар 02, 2010 6:50 pm

Re: интеграции Magic Particles (Dev) для PopCap Framework

Сообщение Odin_KG » Пн апр 12, 2010 3:32 pm

ОК, добавил :-)
Аватара пользователя
Odin_KG
Administrator
Administrator
 
Сообщения: 841
Зарегистрирован: Чт янв 15, 2009 2:57 pm

Пред.

Вернуться в Magic API

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron