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-функцию, вписать в ее начало нужное число нопов, потом свой пролог и вызов обычной функции? Если в релиз-версии компилятор всунет свой пролог до твоего асм-кода, все изломается.
__________________
Отправлено Дядя Миша 10-05-2011 в 10:35:
Цитата:
Ku2zoff писал:
Они и с дллкой криво работают, я об этом уже писал.
очнись! в релизной версии это было исправлено.
Вообщем путём нехитрова реверс-инжинеринга я восстановил (частично) функцию StudioDrawShadows. Выглядит она вот так
C++ Source Code:
1 | void __cdecl R_StudioDrawShadows() |
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 |
9 | qglDepthMask( GL_TRUE ); |
11 | if( r_shadows.value != 0.0f ) |
13 | if( iCurrentMovetype != MOVETYPE_FLY ) |
15 | rendermode = m_pCurrentEntity->baseline.rendermode; |
17 | if( rendermode == kRenderNormal ) |
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; |
25 | qglColor4f( 0.0f, 0.0f, 0.0f, shadow_alpha2 ); |
27 | if( flt_100DB994 == 0.0 || flt_107BA8A8 < 0.5 ) |
29 | else depthmode = GL_GREATER; |
30 | qglDepthFunc( depthmode ); |
34 | if( flt_100DB994 == 0.0 || flt_107BA8A8 < 0.5 ) |
35 | depthmode2 = GL_LEQUAL; |
37 | depthmode2 = GL_GEQUAL; |
39 | qglDepthFunc( depthmode2 ); |
40 | qglEnable( GL_TEXTURE_2D ); |
41 | qglDisable( GL_BLEND ); |
43 | qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f ); |
45 | if( flt_100DAF14 != 0.0 ) |
46 | qglShadeModel( GL_SMOOTH ); |
Ну а дальше - дело техники 
Добавлено 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:
Дядя Миша
Нет никакой гарантии, что в твоем ехешнике этот же самый код будет работать, с теми же оффсетами. Этот хак привязан к конкретному машинному коду, а он зависит от кучи вещей - компилятора, уровня оптимизации и т.п.
__________________
Отправлено Дядя Миша 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'