GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (61 стр.)

Сообщения на форуме пользователя Andrey (61 стр.)

Modern Warfare 27 дек. 200912:56#108
killbot
Executor
спасибо прояснили ситуацию.
Modern Warfare 27 дек. 200910:06#104
Я совсем запутался Modern Warfare 2 это COD 5 или COD 4?
perfHUD и многопоточное приложение7 дек. 20099:54#2
Kloun
>при превможе обращении к dx из другого потока ;( ?
ну значит синхронизируй доступ. Либо создай device с флагом D3DCREATE_MULTITHREADED.
inline18 ноя. 200920:54#100
asvp
> И посмотри какой код скомпилется если ты уберешь virtual.
он подставляет код функции.
inline18 ноя. 200918:31#98
asvp
> > про то что виртуального вызова может не быть по факту
> Ты сам понял что сказал? Как это не может быть вызова по факту виртуального
> метода. Есть большая разница создавать объект в стеке и создавать объект
> динамический. И естественно код вызова виртуальных методов разный.
Я все прекрасно понял что сказал.
меняем код таким образом:
A a;  
A* ptr = &a;
ptr->func();
получаем тот-же asm код
; 45   :   A a;  
; 46   :   A* ptr = &a;
; 47   :   ptr->func();

  00001  8d 0c 24   lea   ecx, DWORD PTR _a$[esp+4]
  00004  c7 04 24 00 00
  00 00     mov   DWORD PTR _a$[esp+4], OFFSET ??_7A@@6B@
  0000b  ff 15 00 00 00
  00     call   DWORD PTR ??_7A@@6B@
разве этот не говорит о том что теперь это просто обычный вызов метода класса?
Вы используете ID3DXEffect?18 ноя. 200915:12#14
Z
> Ибо очень часто часть фичь в ID3DXEffect - ненужная. И из-за них он тормозит
> (внутрение memcpy можно увидеть в профайлере очень часто).
ух ты не знал, Еще 1 камень в огород к ID3DXEffect. Чем смотрел если не секрет?
inline18 ноя. 200915:10#93
asvp
> Инлайн - это когда вместо команды call подставляется тело функции.
я не про inline, а про то что виртуального вызова может не быть по факту, причем ты это и спросил. А заинлайнить виртуальную функцию не получиться естественно, даже через __forceinline в обоих случаях.
inline18 ноя. 200914:07#81
asvp
> > заменив виртуальную функцию как вызов не виртуального метода
> Это как? Покажи мне компилятор, который так делает.
class Base {
public:
  virtual void func() = 0;
};

class A : public Base {
public:
  virtual void func()
  {
    fprintf(stderr, "%s", "A ");
  }
  A()
  {
  
  }
};
int main(int argc, char* argv[])
{
#if 0
  A a;  
  Base* ptr = &a;
#else
  Base* ptr = new A;  
#endif
  ptr->func();
  return 0;
}

для первого случая asm код:

; 116  :   A a;  
; 117  :   Base* ptr = &a;
; 118  :   ptr->func();

  00001  8d 0c 24   lea   ecx, DWORD PTR _a$[esp+4]
  00004  c7 04 24 00 00
  00 00     mov   DWORD PTR _a$[esp+4], OFFSET ??_7A@@6B@
  0000b  ff 15 00 00 00
  00     call   DWORD PTR ??_7A@@6B@
для второго
; 45   :   Base* ptr = new A;  

  00000  6a 04     push   4
  00002  e8 00 00 00 00   call   ??2@YAPAXI@Z    ; operator new
  00007  83 c4 04   add   esp, 4
  0000a  85 c0     test   eax, eax
  0000c  74 11     je   SHORT $LN3@main
  0000e  c7 00 00 00 00
  00     mov   DWORD PTR [eax], OFFSET ??_7A@@6B@

; 46   :   ptr->func();

  00014  8b 10     mov   edx, DWORD PTR [eax]
  00016  8b c8     mov   ecx, eax
  00018  8b 02     mov   eax, DWORD PTR [edx]
  0001a  ff d0     call   eax
Microsoft Visual С++ 2005
Release.
/O2 /Ob1 /Oi /Ot /GL  /FD /MT /fp:fast /GR- /FAcs /Fa"Release\\" /Fo"Release\\" /Fd"Release\vc80.pdb" /W3 /nologo /c /Wp64 /Zi /TP /errorReport:prompt
Правка орфография.

Правка: 18 ноя. 2009 14:08

inline18 ноя. 200913:02#74
asvp
> Примечание: виртуальные функции никогда не создаются как подставляемая функция.
> Как бы вы не просили.
ну почему-же, если известен предок то компилятор может произвести оптимизацию, заменив виртуальную функцию как вызов не виртуального метода(ну а там можно и заинлайнить).
Оформление кода16 ноя. 200913:34#17
Одно скажу ненавижу пробелы.
inline15 ноя. 200920:54#19
cNoNim
> > делай ее static const.
> в matrix_rotate этого делать нельзя
это почему-же ?
можно по идее первый параметр у функции matrix_multiply не константный, и туда пишется результат, а второй можно сделать таким.

inline15 ноя. 200920:46#17
cNoNim
>я в matrix_multiply развернул циклы и делаю forceinline... эти функции тоже не инлайнятся
а с чего бы?  у тебя сколько их вызовов то? развертка цикла не уменьшило код особо, вот компилятор и решил функция тяжелая не буду ее встраивать.
> и вообще есть ли смысл заморачиваться с этим всем на SSE и чемнить подобном?
> или компилятор сам с оптимизирует?
задача какая? если тебе нужно рассчитывать иерархию костей для скелетной анимации для сотни моделей с сотнями костей то тут да, SSE + __forceinline  даст прирост.
float newmatrix[16] = IDENTITY_MATRIX;
сделай ее static const.

inline15 ноя. 200916:58#13
cNoNim
>да... а как для __inline будет?
не использую  __inline и не знаю какая разница с inline/__forceinline. А так смотри документацию для компилятора.
к примеру вот http://gcc.gnu.org/onlinedocs/gcc-4.0.4/gcc/Function-Attributes.html
> я праильно понимаю это намек мне перенести функцию в хидер и пометить inline...
> сам компилятор ни как не может это сделать?
я не встречал такого варинига.
inline15 ноя. 200915:47#10
Executor
> Про __forceinline забудь, принуждая инлайнить то, что инлайнить не надо, ты
> только усугубишь всё... Позволь компилятору самому определиться...
да нет. это нет так. Вот типичный пример авторитетного проекта.
http://unigine.blogspot.com/2009_09_01_archive.html
cNoNim
> я тут пишу код, и хочу что б он соответствовал ANSI С... т.е. без ms специфик,
> и соответственно на plain С.
делай  платформ о зависимые макросы без этого ни как не обойтись. Для gcc будет __attribute__ ((always_inline))
>которая инлайнится нормально, хотя вроде не особо отличается от matrix_perspective по набору функций... ?
тут компилятор решил что можно сделать встраивание даже с директивой inline, тело функции маленькое. А вот другие функции содержат много кода.
inline15 ноя. 200914:07#2
cNoNim
> и вообще есть ли смысл их инлайнить?
для математики есть смысл. попробуй
__forceinline
>так понимаю это изза memset и memcpy?
попробуй опцию компилятора поставить разрешение Intrinsic function.
а перемножение матриц желательно сделай в виде развернутого цикла.

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр