Commit 72bcf1f9 authored by Byurrrer's avatar Byurrrer

доделал редактор уровня и документацию к нему, переименовал квары и...

доделал редактор уровня и документацию к нему, переименовал квары и задокументировал их и еще по мелочам
parent ee1f395f
......@@ -51,7 +51,7 @@ PROJECT_BRIEF = "3D real-time render"
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
# the logo to the output directory.
PROJECT_LOGO =
PROJECT_LOGO = ./logo.png
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
# into which the generated documentation will be written. If a relative path is
......@@ -795,25 +795,23 @@ INPUT = ../../source/gdefines.h \
../../source/GRegisterIndex.h \
../../source/input/sxinput.h \
../../source/gcore/sxgcore.h \
../../source/score/sxscore.h \
../../source/geom/sxgeom.h \
../../source/mtllight/sxmtllight.h \
../../source/pp/sxpp.h \
../../source/SkyXEngine.h \
../../source/managed_render/gdata.h \
../../source/managed_render/camera_update.h \
../../source/managed_render/handler_out_log.cpp \
../../source/managed_render/render_func.h \
../../source/managed_render/level.h \
../../source/anim/sxanim.h \
../../source/anim/ModelFile.h \
../../source/gcore/ModelFile.h \
../../source/SXGUIWinApi/SXGUI.h \
../../source/particles/sxparticles.h \
../../source/score/sxscore.h \
../../source/decals/sxdecals.h \
../../source/aigrid/sxaigrid.h \
../../source/render/sxrender.h \
../../source/level/sxlevel.h \
../../source/SkyXEngine.h \
../../source/sxmaterialeditor/sxmaterialeditor.cpp \
../../source/sxparticleseditor/sxparticleseditor.cpp
../../source/sxparticleseditor/sxparticleseditor.cpp \
../../source/sxleveleditor/sxleveleditor.cpp
# This tag can be used to specify the character encoding of the source files
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
......
This diff is collapsed.
......@@ -9,7 +9,7 @@ BEGIN_PROPTABLE_NOBASE(SXbaseEntity)
DEFINE_FIELD_VECTOR(m_vPosition, 0, "origin", "Origin", EDITOR_TEXTFIELD)
DEFINE_FIELD_ANGLES(m_vOrientation, 0, "rotation", "Rotation", EDITOR_TEXTFIELD)
DEFINE_FIELD_PARENT(m_pParent, 0, "parent", "Parent entity", EDITOR_TEXTFIELD)
DEFINE_FIELD_FLAGS(m_iFlags, 0, "flags", "Flags", EDITOR_TEXTFIELD)
DEFINE_FIELD_FLAGS(m_iFlags, 0, "flags", "Flags", EDITOR_FLAGS)
DEFINE_FIELD_ENTITY(m_pOwner, PDFF_NOEXPORT | PDFF_NOEDIT, "owner", "", EDITOR_NONE)
//DEFINE_FIELD_STRING(m_szName, 0, "some opt", "Option", EDITOR_COMBOBOX)
......
......@@ -63,12 +63,12 @@ void Crosshair::Update()
}
}
static const int *winr_width = GET_PCVAR_INT("winr_width");
static const int *winr_height = GET_PCVAR_INT("winr_height");
static const int *r_win_width = GET_PCVAR_INT("r_win_width");
static const int *r_win_height = GET_PCVAR_INT("r_win_height");
//build new buffer
float fScreenWidth = *winr_width;
float fScreenHeight = *winr_height;
float fScreenWidth = *r_win_width;
float fScreenHeight = *r_win_height;
float fTexWidth = m_f2TexSize.x;
float fTexHeight = m_f2TexSize.y;
float fXradius = fTexWidth / fScreenWidth * 0.5f;
......
......@@ -265,6 +265,7 @@ const char * GetEmptyString();
#define EDITOR_NONE {PDE_NONE, NULL}}
#define EDITOR_TEXTFIELD {PDE_TEXTFIELD, NULL}}
#define EDITOR_FLAGS {PDE_FLAGS, NULL}}
#define EDITOR_COMBOBOX _GetEditorCombobox(0
#define COMBO_OPTION(name, value) , name, value
......
......@@ -111,9 +111,11 @@ SX_LIB_API const char * SXGame_EntGetDefault(const char * classname, const char
*/
SX_LIB_API int SXGame_EntGetCount();
/*! entity
/*! entity id
*/
SX_LIB_API SXbaseEntity * SXGame_EntGet(ID id);
SX_LIB_API SXbaseEntity *SXGame_EntGet(ID id);
SX_LIB_API SXbaseEntity *SXGame_EntGetByName(const char *szName, ID idStart = 0);
#endif
......
......@@ -355,8 +355,26 @@ SX_LIB_API int SXGame_EntGetCount()
return(GameData::m_pMgr->GetCount());
}
SX_LIB_API SXbaseEntity * SXGame_EntGet(ID id)
SX_LIB_API SXbaseEntity *SXGame_EntGet(ID id)
{
SG_PRECOND(NULL);
return(GameData::m_pMgr->GetById(id));
}
SX_LIB_API SXbaseEntity *SXGame_EntGetByName(const char *szName, ID idStart)
{
SG_PRECOND(NULL);
SXbaseEntity *pEnt = 0;
for (int i = 0, il = SXGame_EntGetCount(); i < il; ++i)
{
pEnt = SXGame_EntGet(i);
if (pEnt && strcmp(szName, pEnt->GetName()) == 0)
{
return pEnt;
}
}
return 0;
}
......@@ -44,7 +44,7 @@ struct IBaseObject
Стандартная функция имеет ограничение на длину сообщения которое регулируется макроопределением REPORT_MSG_MAX_LEN объявленном в gdefines.h. При написании своего обработчика сообщений следует использовать данное ограничение.\n
Уровни критичности сообщений объявлены в gdefines.h: \n
- #REPORT_MSG_LEVEL_NOTICE
- #REPORT_MSG_LEVEL_WARRNING
- #REPORT_MSG_LEVEL_WARNING
- #REPORT_MSG_LEVEL_ERROR
В случае переназначения стандартной функции сообщений необходимо самостоятельно(в переназначаемой функции) обрабатывать уровни критичности, для примера можно использовать механизм стандартной функции.\n
......
......@@ -57,8 +57,8 @@ void CAmbientSounds::update()
if (!m_isPlaying)
return;
static const float * ambient_snd_volume = GET_PCVAR_FLOAT("ambient_snd_volume");
static float ambient_snd_volume_old = 1.f;
static const float * env_ambient_snd_volume = GET_PCVAR_FLOAT("env_ambient_snd_volume");
static float env_ambient_snd_volume_old = 1.f;
if (SSCore_SndStateGet(m_aIDSnds[m_iPlayingLast]) != SOUND_OBJSTATE_PLAY)
{
......@@ -67,15 +67,15 @@ void CAmbientSounds::update()
else
m_iPlayingLast = 0;
SSCore_SndVolumeSet(m_aIDSnds[m_iPlayingLast], ambient_snd_volume_old*100.f);
SSCore_SndVolumeSet(m_aIDSnds[m_iPlayingLast], env_ambient_snd_volume_old*100.f);
SSCore_SndPlay(m_aIDSnds[m_iPlayingLast]);
}
if (ambient_snd_volume && ambient_snd_volume_old != (*ambient_snd_volume))
if (env_ambient_snd_volume && env_ambient_snd_volume_old != (*env_ambient_snd_volume))
{
ambient_snd_volume_old = *ambient_snd_volume;
env_ambient_snd_volume_old = *env_ambient_snd_volume;
if (m_iPlayingLast >= 0)
SSCore_SndVolumeSet(m_aIDSnds[m_iPlayingLast], ambient_snd_volume_old*100.f);
SSCore_SndVolumeSet(m_aIDSnds[m_iPlayingLast], env_ambient_snd_volume_old*100.f);
}
}
......
/******************************************************
Copyright Vitaliy Buturlin, Evgeny Danilovich, 2017
Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017
See the license in LICENSE
******************************************************/
/*!
\file
Заголовочный файл sxlevel, библиотека управления уровнем
*/
#ifndef __SXLEVEL_H
#define __SXLEVEL_H
......@@ -76,139 +81,144 @@ See the license in LICENSE
//#############################################################################
//!
/*! \defgroup sxlevel sxlevel - библиотека управления уровнем
@{*/
//! версия подсистемы
SX_LIB_API long SLevel_0GetVersion();
//!
//! установка функции вывода сообщений
SX_LIB_API void SLevel_Dbg_Set(report_func rf);
//!
//! инициализация подсистемы
SX_LIB_API void SLevel_0Create(
const char *szName, //!<
bool isUnic = true //!<
const char *szName, //!< передваваемое имя подсистемы
bool isUnic = true //!< должна ли подсистема быть уникальной на основе имени
);
//!
//! уничтожение либы
SX_LIB_API void SLevel_AKill();
//#############################################################################
//!
//! очистка уровня
SX_LIB_API void SLevel_Clear();
//!
//! загрузка уровня
SX_LIB_API void SLevel_Load(const char *szName, bool isGame);
//!
//! сохранение уровня
SX_LIB_API void SLevel_Save(const char *szName);
//!
//! возвращает и записывает имя уровня
SX_LIB_API const char* SLevel_GetName(char *szName=0);
//!
//! загрузка файла с инфой о частицах
SX_LIB_API void SLevel_LoadParticles();
//!
//! сохранение файла с инфой о частицах
SX_LIB_API void SLevel_SaveParticles();
//#############################################################################
/*! defgroup sxgame_ambient_snd
\ingroup sxgame
\note
\note
/*! \defgroup sxlevel_ambient_snd Фоновые звуки окружения
\ingroup sxlevel
\note Звуки проигрывают поочередно
\note Путь до звука относительно директории со звуками
@{
*/
//!
//! добавить звук
SX_LIB_API void SLevel_AmbientSndAdd(const char* path);
//!
//! возвращает общее количество загруженных звуков
SX_LIB_API UINT SLevel_AmbientSndGetCount();
//! path id
//! в path записывает путь до звука по его id
SX_LIB_API void SLevel_AmbientSndGet(ID id, char* path);
//!
//! очистка списка звуков
SX_LIB_API void SLevel_AmbientSndClear();
//!
//! начать проигрывание звуков
SX_LIB_API void SLevel_AmbientSndPlay();
//!
//! обновление проигрывания
SX_LIB_API void SLevel_AmbientSndUpdate();
//!
//! пауза проигрывания
SX_LIB_API void SLevel_AmbientSndPause();
//! " "
//! возвращает "проигрываются ли звуки"
SX_LIB_API bool SLevel_AmbientSndGetPlaying();
//!@} sxgame_ambient_snd
//!@} sxlevel_ambient_snd
//#############################################################################
/*! defgroup sxgame_weather
\ingroup sxgame
\note
\note , #SXLevel_WeatherUpdate ( )
- :
- (sections) , 01:11:12 1 11 12
- ( )
- , \n
:
- sky_texture -
- sky_rotation - ( )
- sky_color - float4 [0-1] ,
- clouds_texture -
- clouds_color - float4 [0-1] ,
- clouds_rotate - ( )
- clouds_transparency - [0-1]
- clouds_speed -
- sun_texture - , 0
- sun_color - float3 [0-1]
- sun_pos - X Z
- far -
- rain_density [0-1]
- rain_color - float4 [0-1] ,
- thunderbolt -
- thunder_period -
- fog_color - float3 [0-1]
- fog_density -
- env_ambient - \n
, env_ambient \n
\n
:
- period - ( ) UINT2 ( ),
- volume - ( ) UINT2 ( ),
- sounds -
/*! \defgroup sxlevel_weather Погода
\ingroup sxlevel
\note Смена погоды происходит на основании игрового времени
\note При смене погоды для некоторых параметров возможна интерполяция данных от прошлой погоды к текущей на основании игрового времени, поэтому #SLevel_WeatherUpdate необходимо вызывать в основном цикле (в рендере) для планой смены
Файл-конфиг состоит из:
- основной секции (sections) с набором ключей содержащих имена секций по времени, к примеру имя ключа 01:11:12 это значит что ключ содержит имя секции с погодой для 1 часа ночи 11 минут и 12 секунд
- секции с параметрами погоды (для каждого указанного времени)
- секции с параметрами рандомных звуков, если таковые имеются \n
Секции погоды состоят из:
- sky_texture - имя текстуры для скайбокса
- sky_rotation - угол поворота скайбокса (в радианах)
- sky_color - цвет неба float4 [0-1] где первые три компоненты это сам цвет, а четвертая компонента на сколько будет применен цвет
- clouds_texture - текстура облаков
- clouds_color - цвет облаков float4 [0-1] где первые три компоненты это сам цвет, а четвертая компонента на сколько будет применен цвет
- clouds_rotate - поворот облаков (в радианах)
- clouds_transparency - прозрачность облаков [0-1]
- clouds_speed - скорость движения облаков
- sun_texture - текстура солнца, если указать 0 то солнце будет выключено
- sun_color - цвет солнца и освещения от солнца float3 [0-1]
- sun_pos - позиция сонлца в градусах по оси X и Z
- far - дальность видимости
- rain_density плотность дождя [0-1]
- rain_color - цвет дождя float4 [0-1] где первые три компоненты это сам цвет, а четвертая компонента на сколько будет применен цвет
- thunderbolt - будет ли молния
- thunder_period - перидичность звуков ударов молнии
- fog_color - цвет тумана float3 [0-1]
- fog_density - плотность тумана
- env_ambient - имя секции с рандомными звуками для данной погоды \n
Все ключи в секции погоды обязательны, за исключением env_ambient \n
Все компоненты векторов обязательны \n
Секция с рандомными звуками состоит из:
- period - промежуток (в млсек) между воспроизведением UINT2 (от и до), выбирается случайно
- volume - громкость (в процентах) воспроизведения UINT2 (от и до), выбирается случайно
- sounds - список звуков через запятую
@{
*/
//!
//! загрузка конфига погоды
SX_LIB_API void SLevel_WeatherLoad(const char* path);
//!
//! обновление погоды
SX_LIB_API void SLevel_WeatherUpdate();
//!
//! возвращает текущую плотность дождя
SX_LIB_API float SLevel_WeatherGetCurrRainDensity();
//!
//! начать воспроизведение звуков погоды
SX_LIB_API void SLevel_WeatherSndPlay();
//!
//! приостановить воспроизведение звуков погоды
SX_LIB_API void SLevel_WeatherSndPause();
//! " "
//! возвращает "воспроизводятся ли звуки погоды"
SX_LIB_API bool SLevel_WeatherSndIsPlaying();
//!@} sxgame_weather
//!@} sxlevel_weather
//!@} sxlevel
#endif
\ No newline at end of file
......@@ -87,7 +87,7 @@ void CWeatherRndSnd::update()
if (!m_isPlaying)
return;
static const float * weather_snd_volume = GET_PCVAR_FLOAT("weather_snd_volume");
static const float * env_weather_snd_volume = GET_PCVAR_FLOAT("env_weather_snd_volume");
if (m_aCurrSndIDs.size() > 0 && (m_ulNextPlay == 0 || m_ulNextPlay < TimeGetMls(Core_RIntGet(G_RI_INT_TIMER_RENDER))))
{
......@@ -97,7 +97,7 @@ void CWeatherRndSnd::update()
m_idCurrPlay = m_aCurrSndIDs[tmpkeysnd];
SSCore_SndPosCurrSet(m_idCurrPlay, 0);
int tmprndvol = (rand() % (m_iVolumeE - m_iVolumeB)) + m_iVolumeB;
SSCore_SndVolumeSet(m_idCurrPlay, (long)(weather_snd_volume ? (float)tmprndvol * (*weather_snd_volume) : tmprndvol), SOUND_VOL_PCT);
SSCore_SndVolumeSet(m_idCurrPlay, (long)(env_weather_snd_volume ? (float)tmprndvol * (*env_weather_snd_volume) : tmprndvol), SOUND_VOL_PCT);
SSCore_SndPlay(m_idCurrPlay);
DWORD tmprnd = (rand() % (m_ulPeriodE - m_ulPeriodB)) + m_ulPeriodB;
......@@ -559,7 +559,7 @@ void CWeather::update()
ID gid = SML_LigthsGetGlobal();
static const float * weather_snd_volume = GET_PCVAR_FLOAT("weather_snd_volume");
static const float * env_weather_snd_volume = GET_PCVAR_FLOAT("env_weather_snd_volume");
//если есть дождь то обновл¤ем его позицию и громкость
if (m_iSectionCurr >= 0 && (int)m_aTimeSections.size() > m_iSectionCurr && m_aTimeSections[m_iSectionCurr].m_DataSection.m_fRainDensity > 0.f)
......@@ -570,14 +570,14 @@ void CWeather::update()
updateRainSound();
}
static float * main_rain_density = (float*)GET_PCVAR_FLOAT("main_rain_density");
static float main_rain_density_old = 1.f;
static float * env_default_rain_density = (float*)GET_PCVAR_FLOAT("env_default_rain_density");
static float env_default_rain_density_old = 1.f;
if (main_rain_density && (*main_rain_density) != main_rain_density_old)
if (env_default_rain_density && (*env_default_rain_density) != env_default_rain_density_old)
{
main_rain_density_old = *main_rain_density;
env_default_rain_density_old = *env_default_rain_density;
if (m_aTimeSections[m_iSectionCurr].m_DataSection.m_fRainDensity > 0.f)
SPE_EmitterSet(m_idEffRain, 0, ReCreateCount, main_rain_density_old * m_aTimeSections[m_iSectionCurr].m_DataSection.m_fRainDensity * float(WEATHER_RAIN_RECREATE_COUNT));
SPE_EmitterSet(m_idEffRain, 0, ReCreateCount, env_default_rain_density_old * m_aTimeSections[m_iSectionCurr].m_DataSection.m_fRainDensity * float(WEATHER_RAIN_RECREATE_COUNT));
}
//получаем текущую игровую дату
......@@ -638,7 +638,7 @@ void CWeather::update()
if (m_aTimeSections[m_iSectionCurr].m_DataSection.m_fRainDensity > 0.f)
{
SPE_EmitterSet(m_idEffRain, 0, Color, m_aTimeSections[m_iSectionCurr].m_DataSection.m_vRainColor);
SPE_EmitterSet(m_idEffRain, 0, ReCreateCount, main_rain_density_old * m_aTimeSections[m_iSectionCurr].m_DataSection.m_fRainDensity * float(WEATHER_RAIN_RECREATE_COUNT));
SPE_EmitterSet(m_idEffRain, 0, ReCreateCount, env_default_rain_density_old * m_aTimeSections[m_iSectionCurr].m_DataSection.m_fRainDensity * float(WEATHER_RAIN_RECREATE_COUNT));
SPE_EffectEnableSet(m_idEffRain, true);
SSCore_SndPosCurrSet(m_idSndRain, 0);
......@@ -727,7 +727,7 @@ void CWeather::update()
//дальность видимости
float tmpfar = lerpf(m_aTimeSections[m_iSectionOld].m_DataSection.m_fFar, m_aTimeSections[m_iSectionCurr].m_DataSection.m_fFar, lerp_factor);
Core_0SetCVarFloat("p_far", tmpfar);
Core_0SetCVarFloat("r_far", tmpfar);
//плотность тумана
static float * pp_fog_density = (float*)GET_PCVAR_FLOAT("pp_fog_density");
......@@ -756,9 +756,9 @@ void CWeather::update()
//иначе если предыдущее врем¤ грозы нулевое и врем¤ следующей грозы наступило
else if (m_ulTimeBoltLast == 0 && TimeGetMls(Core_RIntGet(G_RI_INT_TIMER_RENDER)) >= m_ulTimeBoltNext)
{
static const bool * main_thunderbolt = GET_PCVAR_BOOL("main_thunderbolt");
static const bool * env_default_thunderbolt = GET_PCVAR_BOOL("env_default_thunderbolt");
//если предусмотерна молни¤ то показываем
if (m_aTimeSections[m_iSectionCurr].m_DataSection.m_hasThunderbolt && (!main_thunderbolt || (main_thunderbolt && *main_thunderbolt)))
if (m_aTimeSections[m_iSectionCurr].m_DataSection.m_hasThunderbolt && (!env_default_thunderbolt || (env_default_thunderbolt && *env_default_thunderbolt)))
{
static float3 campos;
Core_RFloat3Set(G_RI_FLOAT3_OBSERVER_POSITION, &campos);
......@@ -776,7 +776,7 @@ void CWeather::update()
else
{
SSCore_SndPosCurrSet(m_idSndThunder, 0);
SSCore_SndVolumeSet(m_idSndThunder, (weather_snd_volume ? (*weather_snd_volume) : 1.f) * 100.f, SOUND_VOL_PCT);
SSCore_SndVolumeSet(m_idSndThunder, (env_weather_snd_volume ? (*env_weather_snd_volume) : 1.f) * 100.f, SOUND_VOL_PCT);
if (m_isPlaying)
SSCore_SndPlay(m_idSndThunder);
......@@ -823,7 +823,7 @@ void CWeather::updateRainSound()
if (m_idEffRain < 0 || !m_isPlaying)
return;
static const float * weather_snd_volume = GET_PCVAR_FLOAT("weather_snd_volume");
static const float * env_weather_snd_volume = GET_PCVAR_FLOAT("env_weather_snd_volume");
//если пришло врем¤ обновл¤ть громкость
if (m_ulTimeRainVolSndLast == 0 || TimeGetMls(Core_RIntGet(G_RI_INT_TIMER_RENDER)) - m_ulTimeRainVolSndLast >= WEATHER_RAIN_VOL_SND_UPDATE)
......@@ -854,7 +854,7 @@ void CWeather::updateRainSound()
}
m_fRainVolume /= tmpcount / 4;
SSCore_SndVolumeSet(m_idSndRain, (weather_snd_volume ? (*weather_snd_volume) : 1.f) * m_fRainVolume * 100.f, SOUND_VOL_PCT);
SSCore_SndVolumeSet(m_idSndRain, (env_weather_snd_volume ? (*env_weather_snd_volume) : 1.f) * m_fRainVolume * 100.f, SOUND_VOL_PCT);
}
float CWeather::getCurrRainDensity()
......
......@@ -5,11 +5,11 @@ Lights::Lights()
{
HowShadow = 0;
const int *winr_width = GET_PCVAR_INT("winr_width");
const int *winr_height = GET_PCVAR_INT("winr_height");
const int *r_win_width = GET_PCVAR_INT("r_win_width");
const int *r_win_height = GET_PCVAR_INT("r_win_height");
ShadowMap = SGCore_RTAdd(*winr_width, *winr_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, "shadowmap", 1);
ShadowMap2 = SGCore_RTAdd(*winr_width, *winr_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, "shadowmap2", 1);
ShadowMap = SGCore_RTAdd(*r_win_width, *r_win_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, "shadowmap", 1);
ShadowMap2 = SGCore_RTAdd(*r_win_width, *r_win_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, "shadowmap2", 1);
GlobalLight = -1;
m_isCastGlobalShadow = false;
......@@ -1257,11 +1257,11 @@ void Lights::ShadowSoft(bool randomsam, float size, bool isfirst)
if (isfirst)
HowShadow = 0;
static const int *winr_width = GET_PCVAR_INT("winr_width");
static const int *winr_height = GET_PCVAR_INT("winr_height");
static const int *r_win_width = GET_PCVAR_INT("r_win_width");
static const int *r_win_height = GET_PCVAR_INT("r_win_height");
static const float *p_near = GET_PCVAR_FLOAT("p_near");
static const float *p_far = GET_PCVAR_FLOAT("p_far");
static const float *r_near = GET_PCVAR_FLOAT("r_near");
static const float *r_far = GET_PCVAR_FLOAT("r_far");
LPDIRECT3DSURFACE9 RenderSurf,BackBuf;
......@@ -1299,13 +1299,13 @@ void Lights::ShadowSoft(bool randomsam, float size, bool isfirst)
if(randomsam)
{
SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBasedNoise, "PixelSize", &float2_t(size / float(*winr_width), size / float(*winr_height)));
SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBasedNoise, "NearFar", &float2_t(*p_near, *p_far));
SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBasedNoise, "PixelSize", &float2_t(size / float(*r_win_width), size / float(*r_win_height)));
SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBasedNoise, "NearFar", &float2_t(*r_near, *r_far));
}
else
{
SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBased, "PixelSize", &float2_t(size / float(*winr_width), size / float(*winr_height)));
SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBased, "NearFar", &float2_t(*p_near, *p_far));
SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBased, "PixelSize", &float2_t(size / float(*r_win_width), size / float(*r_win_height)));
SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, MLSet::IDsShaders::PS::PPBlurDepthBased, "NearFar", &float2_t(*r_near, *r_far));
}
......@@ -1326,10 +1326,10 @@ void Lights::ShadowSoft(bool randomsam, float size, bool isfirst)
void Lights::ToneMappingCom(DWORD timeDelta, float factor_adapted)
{
static const int *winr_width = GET_PCVAR_INT("winr_width");
static const int *winr_height = GET_PCVAR_INT("winr_height");
static const int *r_win_width = GET_PCVAR_INT("r_win_width");
static const int *r_win_height = GET_PCVAR_INT("r_win_height");
MLSet::GetArrDownScale4x4(*winr_width, *winr_height, MLSet::HDRSampleOffsets);
MLSet::GetArrDownScale4x4(*r_win_width, *r_win_height, MLSet::HDRSampleOffsets);
LPDIRECT3DSURFACE9 SurfSceneScale, BackBuf;
......
......@@ -1892,11 +1892,11 @@ void Materials::Render(ID id, float4x4* world)
{
MTL_PRE_COND_ID(id);
static const int *winr_width = GET_PCVAR_INT("winr_width");
static const int *winr_height = GET_PCVAR_INT("winr_height");
static const int *r_win_width = GET_PCVAR_INT("r_win_width");
static const int *r_win_height = GET_PCVAR_INT("r_win_height");
static const float *p_near = GET_PCVAR_FLOAT("p_near");
static const float *p_far = GET_PCVAR_FLOAT("p_far");
static const float *r_near = GET_PCVAR_FLOAT("r_near");
static const float *r_far = GET_PCVAR_FLOAT("r_far");
if (!world)
world = &(SMMatrixIdentity());
......@@ -2074,10 +2074,10 @@ void Materials::Render(ID id, float4x4* world)
SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "TimeDelta", &float2(CountTimeDelta, float(CurrTimeDelta) * 0.001f));
if (tmpmaterial->VS.IsTransWinSize)
SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS, "WinSize", &float2_t(*winr_width, *winr_height));
SGCore_ShaderSetVRF(SHADER_TYPE_VERTEX, tmpmaterial->PreShaderVS, "WinSize", &float2_t(*r_win_width, *r_win_height));
if (tmpmaterial->PS.IsTransWinSize)
SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "WinSize", &float2_t(*winr_width, *winr_height));
SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "WinSize", &float2_t(*r_win_width, *r_win_height));
//если материалом назначен альфа тест и не включен принудительный
if (tmpmaterial->IsAlphaTest && !IsForceblyAlphaTest)
......@@ -2125,7 +2125,7 @@ void Materials::Render(ID id, float4x4* world)
if (tmpmaterial->LightParam.TypeRefraction == MTLTYPE_TRANSPARENCY_ALPHA_LIGHT)
++(CurrIdSurf);
SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "NearFarIsUnlit", &float4_t(*p_near, *p_far, zz, float(CurrIdSurf) / 255.f));
SGCore_ShaderSetVRF(SHADER_TYPE_PIXEL, tmpmaterial->PreShaderPS, "NearFarIsUnlit", &float4_t(*r_near, *r_far, zz, float(CurrIdSurf) / 255.f));
}
}
......
......@@ -30,14 +30,14 @@ namespace MLSet
void ReCalcSize()
{
static const int *winr_width = GET_PCVAR_INT("winr_width");
static const int *winr_height = GET_PCVAR_INT("winr_height");
static const int *r_win_width = GET_PCVAR_INT("r_win_width");
static const int *r_win_height = GET_PCVAR_INT("r_win_height");
SizeTexDepthGlobal.x = float(*winr_width) * CoefSizeDepthMapForGlobal;
SizeTexDepthGlobal.y = float(*winr_height) * CoefSizeDepthMapForGlobal;
SizeTexDepthGlobal.x = float(*r_win_width) * CoefSizeDepthMapForGlobal;
SizeTexDepthGlobal.y = float(*r_win_height) * CoefSizeDepthMapForGlobal;
SizeTexDepthLocal.x = float(*winr_width) * CoefSizeDepthMapForLocal;
SizeTexDepthLocal.y = float(*winr_height) * CoefSizeDepthMapForLocal;
SizeTexDepthLocal.x = float(*r_win_width) * CoefSizeDepthMapForLocal;
SizeTexDepthLocal.y = float(*r_win_height) * CoefSizeDepthMapForLocal;
}
void GetArrDownScale4x4(DWORD width, DWORD height, float2 arr[]);
......@@ -171,8 +171,8 @@ void MLSet::MLInit()
{
MLSet::DXDevice = SGCore_GetDXDevice();
const int *winr_width = GET_PCVAR_INT("winr_width");
const int *winr_height = GET_PCVAR_INT("winr_height");
const int *r_win_width = GET_PCVAR_INT("r_win_width");
const int *r_win_height = GET_PCVAR_INT("r_win_height");
const float *r_default_fov = GET_PCVAR_FLOAT("r_default_fov");
......@@ -322,7 +322,7 @@ void MLSet::MLInit()
//////////
float tmpcoefsizert = 1;
float2_t tmp_sizert = float2_t(float(*winr_width) * tmpcoefsizert, (*winr_height) * tmpcoefsizert);
float2_t tmp_sizert = float2_t(float(*r_win_width) * tmpcoefsizert, (*r_win_height) * tmpcoefsizert);
//цвет (текстуры)
MLSet::IDsRenderTargets::ColorScene = SGCore_RTAdd(tmp_sizert.x, tmp_sizert.y, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, "ds_color", tmpcoefsizert);
......@@ -345,7 +345,7 @@ void MLSet::MLInit()
while (true)
{
int tmpsize = 1 << (2 * tmpcount);
if (tmpsize >= float(*winr_width)*0.25 || tmpsize > (*winr_height)*0.25)
if (tmpsize >= float(*r_win_width)*0.25 || tmpsize > (*r_win_height)*0.25)
break;
MLSet::IDsRenderTargets::ToneMaps[tmpcount] = SGCore_RTAdd(tmpsize, tmpsize, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, "qq", 0);
MLSet::IDsRenderTargets::SurfToneMap[tmpcount] = 0;
......@@ -356,13 +356,13 @@ void MLSet::MLInit()
MLSet::IDsRenderTargets::AdaptLumCurr = SGCore_RTAdd(1, 1, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, "", 0);
MLSet::IDsRenderTargets::AdaptLumLast = SGCore_RTAdd(1, 1, 1, D3DUSAGE_RENDERTARGET, D3DFMT_R16F, D3DPOOL_DEFAULT, "", 0);
MLSet::IDsRenderTargets::LigthCom = SGCore_RTAdd(*winr_width, *winr_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, "ds_lightcom", 1);
MLSet::IDsRenderTargets::LigthCom2 = SGCore_RTAdd(*winr_width, *winr_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, "ds_lightcom2", 1);
MLSet::IDsRenderTargets::LigthCom3 = SGCore_RTAdd(*winr_width, *winr_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, "ds_lightcom3", 1);
MLSet::IDsRenderTargets::LigthCom = SGCore_RTAdd(*r_win_width, *r_win_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, "ds_lightcom", 1);
MLSet::IDsRenderTargets::LigthCom2 = SGCore_RTAdd(*r_win_width, *r_win_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, "ds_lightcom2", 1);
MLSet::IDsRenderTargets::LigthCom3 = SGCore_RTAdd(*r_win_width, *r_win_height, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A8R8G8B8, D3DPOOL_DEFAULT, "ds_lightcom3", 1);
MLSet::IDsRenderTargets::LigthComScaled = SGCore_RTAdd(float(*winr_width)*0.25f, float(*winr_height)*0.25f, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, "ds_lightcomscaled", 0.25);
MLSet::IDsRenderTargets::LigthComScaled = SGCore_RTAdd(float(*r_win_width)*0.25f, float(*r_win_height)*0.25f, 1, D3DUSAGE_RENDERTARGET, D3DFMT_A16B16G16R16F, D3DPOOL_DEFAULT, "ds_lightcomscaled", 0.25);
MLSet::RefMProjPlane = SMMatrixPerspectiveFovLH(*r_default_fov, float(*winr_width) / float(*winr_height), MTl_REF_PROJ_NEAR, MTl_REF_PROJ_FAR);
MLSet::RefMProjPlane = SMMatrixPerspectiveFovLH(*r_default_fov, float(*r_win_width) / float(*r_win_height), MTl_REF_PROJ_NEAR, MTl_REF_PROJ_FAR);
MLSet::RefMProjCube = SMMatrixPerspectiveFovLH(SM_PI * 0.5f, 1, MTl_REF_PROJ_NEAR, MTl_REF_PROJ_FAR);
}
......
......@@ -115,8 +115,8 @@ void PSSM::OnLostDevice()
void PSSM::OnResetDevice()
{
static const int *winr_width = GET_PCVAR_INT("winr_width");
static const int *winr_height = GET_PCVAR_INT("winr_height");
static const int *r_win_width = GET_PCVAR_INT("r_win_width");
static const int *r_win_height = GET_PCVAR_INT("r_win_height");
static const float *r_default_fov = GET_PCVAR_FLOAT("r_default_fov");
......@@ -135,7 +135,7 @@ void PSSM::OnResetDevice()
MLSet::DXDevice->CreateDepthStencilSurface(MLSet::SizeTexDepthGlobal.x, MLSet::SizeTexDepthGlobal.y, D3DFMT_D24X8,D3DMULTISAMPLE_NONE, 0, TRUE, &DepthStencilSurface, NULL);
FovRatio.x = *r_default_fov;
FovRatio.y = float(*winr_width) / float(*winr_height);
FovRatio.y = float(*r_win_width) / float(*r_win_height);
float2 fOffset = float2(0.5, 0.5) - (float2(0.5f, 0.5f) / MLSet::SizeTexDepthGlobal);
float range = 1.0f;
......@@ -148,16 +148,16 @@ void PSSM::OnResetDevice()
void PSSM::Init()
{
static const int *winr_width = GET_PCVAR_INT("winr_width");
static const int *winr_height = GET_PCVAR_INT("winr_height");
static const int *r_win_width = GET_PCVAR_INT("r_win_width");
static const int *r_win_height = GET_PCVAR_INT("r_win_height");
static const float *r_default_fov = GET_PCVAR_FLOAT("r_default_fov");
static const float *p_near = GET_PCVAR_FLOAT("p_near");