HLFX.Ru Forum Страницы (2): « 1 [2]
Показать все 22 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Xash3D (https://hlfx.ru/forum/forumdisplay.php?forumid=14)
-- GL_StudioDrawShadows - обратная сторона (https://hlfx.ru/forum/showthread.php?threadid=2814)


Отправлено Ku2zoff 10-05-2011 в 08:42:

>>Плоские и мерцающие
У некоторых товарищей (и у меня раньше, когда радеон был) на радеонах они не мерцают. А то, что не на поверхности не ложаться, да плохо.


Отправлено XaeroX 10-05-2011 в 08:47:

Ну и не проще ли было сделать обёртку - naked-функцию, вписать в ее начало нужное число нопов, потом свой пролог и вызов обычной функции? Если в релиз-версии компилятор всунет свой пролог до твоего асм-кода, все изломается.

__________________

xaerox on Vivino


Отправлено Дядя Миша 10-05-2011 в 10:35:

Цитата:
Ku2zoff писал:
Они и с дллкой криво работают, я об этом уже писал.

очнись! в релизной версии это было исправлено.
Вообщем путём нехитрова реверс-инжинеринга я восстановил (частично) функцию StudioDrawShadows. Выглядит она вот так
C++ Source Code:
1
void __cdecl R_StudioDrawShadows()
2
{
3
  int		rendermode; // ecx@3
4
  float		shadow_alpha; // ST18_4@4
5
  float		shadow_alpha2; // ST14_4@4
6
  GLenum		depthmode; // [sp+14h] [bp-8h]@6
7
  GLenum		depthmode2; // [sp+14h] [bp-8h]@10
8
 
9
  qglDepthMask( GL_TRUE );
10
 
11
  if( r_shadows.value != 0.0f )
12
  {
13
    if( iCurrentMovetype != MOVETYPE_FLY )
14
    {
15
      rendermode = m_pCurrentEntity->baseline.rendermode;
16
 
17
      if( rendermode == kRenderNormal )
18
      {
19
        shadow_alpha = 1.0 - r_shadowalpha->value * 0.5f;
20
        qglDisable( GL_TEXTURE_2D );
21
        qglBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
22
        qglEnable( GL_BLEND );
23
        shadow_alpha2 = 1.0 - shadow_alpha;
24
 
25
        qglColor4f( 0.0f, 0.0f, 0.0f, shadow_alpha2 );
26
 
27
        if( flt_100DB994 == 0.0 || flt_107BA8A8 < 0.5 )
28
          depthmode = GL_LESS;
29
        else depthmode = GL_GREATER;
30
        qglDepthFunc( depthmode );
31
 
32
        sub_10073AA0();
33
 
34
        if( flt_100DB994 == 0.0 || flt_107BA8A8 < 0.5 )
35
          depthmode2 = GL_LEQUAL;
36
        else
37
          depthmode2 = GL_GEQUAL;
38
 
39
        qglDepthFunc( depthmode2 );
40
        qglEnable( GL_TEXTURE_2D );
41
        qglDisable( GL_BLEND );
42
 
43
        qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
44
 
45
        if( flt_100DAF14 != 0.0 )
46
          qglShadeModel( GL_SMOOTH );
47
      }
48
    }
49
  }
50
}

Ну а дальше - дело техники

Добавлено 10-05-2011 в 14:35:

ЗЫ. отсюда кстати и становится ясно, что push ecx 1 - это вызов qglDepthMask, который в хаке пропускается и восстановить регистр надо вручную.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 10-05-2011 в 11:43:

Дядя Миша
Нет никакой гарантии, что в твоем ехешнике этот же самый код будет работать, с теми же оффсетами. Этот хак привязан к конкретному машинному коду, а он зависит от кучи вещей - компилятора, уровня оптимизации и т.п.

__________________

xaerox on Vivino


Отправлено Дядя Миша 10-05-2011 в 12:19:

Цитата:
XaeroX писал:
Нет никакой гарантии, что в твоем ехешнике этот же самый код будет работать, с теми же оффсетами

гарантии конечно нет. Однако работает

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Ku2zoff 10-05-2011 в 12:33:

Дядя Миша промежуточные билды движка будут? А то ждать до сентября долго А adamix'овскую версию я не хочу качать, мало ли чо там.


Отправлено Дядя Миша 10-05-2011 в 13:18:

Цитата:
Ku2zoff писал:
промежуточные билды движка будут?

будут но без сорцев и в комплекте с ксаш-модом с сорцами.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 16:45. Страницы (2): « 1 [2]
Показать все 22 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024