Commit 792da0db authored by D-AIRY's avatar D-AIRY

Some cleanup

parent 6ff1c646
......@@ -171,32 +171,20 @@
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\..\source\common\file_utils.cpp" />
<ClCompile Include="..\..\..\source\common\string.cpp" />
<ClCompile Include="..\..\..\source\common\string_utils.cpp" />
<ClCompile Include="..\..\..\source\mtrl\LogicExpression.cpp" />
<ClCompile Include="..\..\..\source\mtrl\material.cpp" />
<ClCompile Include="..\..\..\source\mtrl\MaterialSystem.cpp" />
<ClCompile Include="..\..\..\source\mtrl\ml_data.cpp" />
<ClCompile Include="..\..\..\source\mtrl\reflection.cpp" />
<ClCompile Include="..\..\..\source\mtrl\ShaderVariant.cpp" />
<ClCompile Include="..\..\..\source\mtrl\sxmtrl.cpp" />
<ClCompile Include="..\..\..\source\mtrl\sxmtrl_dll.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\source\common\file_utils.h" />
<ClInclude Include="..\..\..\source\common\string.h" />
<ClInclude Include="..\..\..\source\common\string_utils.h" />
<ClInclude Include="..\..\..\source\mtrl\IXMaterial.h" />
<ClInclude Include="..\..\..\source\mtrl\IXMaterialSystem.h" />
<ClInclude Include="..\..\..\source\mtrl\IXTexture.h" />
<ClInclude Include="..\..\..\source\mtrl\LogicExpression.h" />
<ClInclude Include="..\..\..\source\mtrl\material.h" />
<ClInclude Include="..\..\..\source\mtrl\XMaterialProperty.h" />
<ClInclude Include="..\..\..\source\mtrl\MaterialSystem.h" />
<ClInclude Include="..\..\..\source\mtrl\ml_data.h" />
<ClInclude Include="..\..\..\source\mtrl\reflection.h" />
<ClInclude Include="..\..\..\source\mtrl\ShaderVariant.h" />
<ClInclude Include="..\..\..\source\mtrl\sxmtrl.h" />
<ClInclude Include="..\..\..\source\xcommon\IXMaterialLoader.h" />
<ClInclude Include="..\..\..\source\xcommon\IXMaterialProxy.h" />
......
......@@ -13,6 +13,9 @@
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter>
<Filter Include="Header Files\xcommon">
<UniqueIdentifier>{3fa15d42-6abf-4d87-8015-e45abc695525}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\source\mtrl\sxmtrl_dll.cpp">
......@@ -21,30 +24,12 @@
<ClCompile Include="..\..\..\source\mtrl\sxmtrl.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\source\mtrl\reflection.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\source\mtrl\material.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\source\mtrl\ml_data.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\source\common\file_utils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\source\common\string.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\source\common\string_utils.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\source\mtrl\MaterialSystem.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\source\mtrl\ShaderVariant.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\..\source\mtrl\LogicExpression.cpp">
<Filter>Source Files</Filter>
</ClCompile>
......@@ -53,50 +38,32 @@
<ClInclude Include="..\..\..\source\mtrl\sxmtrl.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\mtrl\reflection.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\mtrl\material.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\mtrl\ml_data.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\common\string_utils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\common\file_utils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\common\string.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\mtrl\IXMaterialSystem.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\mtrl\IXMaterial.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\mtrl\IXTexture.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\mtrl\MaterialSystem.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\mtrl\ShaderVariant.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\mtrl\XMaterialProperty.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\mtrl\LogicExpression.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\mtrl\IXMaterial.h">
<Filter>Header Files\xcommon</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\xcommon\IXMaterialLoader.h">
<Filter>Header Files</Filter>
<Filter>Header Files\xcommon</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\xcommon\IXMaterialProxy.h">
<Filter>Header Files</Filter>
<Filter>Header Files\xcommon</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\mtrl\IXMaterialSystem.h">
<Filter>Header Files\xcommon</Filter>
</ClInclude>
<ClInclude Include="..\..\..\source\mtrl\IXTexture.h">
<Filter>Header Files\xcommon</Filter>
</ClInclude>
</ItemGroup>
</Project>
\ No newline at end of file
......@@ -96,10 +96,7 @@ void CSkyBox::setTexture(const char *szTexture)
assert(szTexture);
mem_release(m_pSky1);
XSHADER_DEFAULT_DESC shDesc;
shDesc.szFilePS = "sky_box.ps";
shDesc.szFileVS = "sky_box.vs";
m_pMaterialSystem->loadMaterial(szTexture, &m_pSky1, &shDesc);
m_pMaterialSystem->loadMaterial(szTexture, &m_pSky1, "Sky");
if(!m_pSky1)
{
......
......@@ -313,10 +313,7 @@ bool CAnimatedModelShared::init(UINT uResourceCount, IXResourceModelAnimated **p
m_uSkinCount = aaMaterials.size();
m_ppMaterialsBlob = new void*[m_uMaterialCount * m_uSkinCount + m_uSkinCount];
m_pppMaterials = (IXMaterial***)m_ppMaterialsBlob;
XSHADER_DEFAULT_DESC shaderDesc;
shaderDesc.szFileVS = "mtrlskin_base.vs";
shaderDesc.szFilePS = "mtrlgeom_base.ps";
for(UINT i = 0; i < m_uSkinCount; ++i)
{
m_pppMaterials[i] = (IXMaterial**)(m_ppMaterialsBlob + m_uSkinCount + m_uMaterialCount * i);
......@@ -325,7 +322,7 @@ bool CAnimatedModelShared::init(UINT uResourceCount, IXResourceModelAnimated **p
{
if(aaMaterials[i][j].szName && aaMaterials[i][j].szName[0])
{
m_pMaterialSystem->loadMaterial(aaMaterials[i][j].szName, &m_pppMaterials[i][j], &shaderDesc);
m_pMaterialSystem->loadMaterial(aaMaterials[i][j].szName, &m_pppMaterials[i][j]);
}
else
{
......
......@@ -79,10 +79,7 @@ bool CDynamicModelShared::init(IXResourceModelStatic *pResource)
m_ppMaterialsBlob = new void*[m_uMaterialCount * m_uSkinCount + m_uSkinCount];
m_pppMaterials = (IXMaterial***)m_ppMaterialsBlob;
XSHADER_DEFAULT_DESC shaderDesc;
shaderDesc.szFileVS = "mtrlgeom_base.vs";
shaderDesc.szFilePS = "mtrlgeom_base.ps";
const char *szMaterial;
for(UINT i = 0; i < m_uSkinCount; ++i)
{
......@@ -94,7 +91,7 @@ bool CDynamicModelShared::init(IXResourceModelStatic *pResource)
szMaterial = m_pResource->getMaterial(j, i);
if(szMaterial && szMaterial[0])
{
m_pMaterialSystem->loadMaterial(szMaterial, &m_pppMaterials[i][j], &shaderDesc);
m_pMaterialSystem->loadMaterial(szMaterial, &m_pppMaterials[i][j]);
}
else if(i == 0)
{
......@@ -365,7 +362,7 @@ void CDynamicModelShared::render(UINT uSkin, UINT uLod, const float4_t &vColor,
{
pSubset = &m_aLods[uLod][i];
if(pSubset->uIndexCount != 0 && ((!m_pppMaterials[uSkin][i] && !isTransparent) || m_pppMaterials[uSkin][i]->isTransparent() == isTransparent))
if(pSubset->uIndexCount != 0 && m_pppMaterials[uSkin][i] && ((!m_pppMaterials[uSkin][i] && !isTransparent) || m_pppMaterials[uSkin][i]->isTransparent() == isTransparent))
{
m_pMaterialSystem->bindMaterial(m_pppMaterials[uSkin][i]);
......
Subproject commit 19d011dc6077be2f972a5d477683c228226e87c6
Subproject commit 22c82c6134b898173c1c1cd11ea3348b42a9472d
......@@ -112,9 +112,6 @@ public:
virtual const char* XMETHODCALLTYPE getName() const = 0;
virtual bool XMETHODCALLTYPE save() = 0;
//@FIXME: DO NOT USE! Will be removed!
virtual ID getInternalID() = 0;
};
#endif
......@@ -8,46 +8,7 @@
// {7EC7E7F7-E0BE-4CB7-ABFE-9FC0C10880A5}
#define IXMATERIALSYSTEM_GUID DEFINE_XGUID(0x7ec7e7f7, 0xe0be, 0x4cb7, 0xab, 0xfe, 0x9f, 0xc0, 0xc1, 0x8, 0x80, 0xa5)
#define IXMATERIALSYSTEM_VERSION 2
/*! Набор стандартных шейдеров для материала
Если нужно задать макроопределения - используйте варианты IXShaderVariant
@deprecated
*/
struct XSHADER_DEFAULT_DESC
{
//! Имя файла шейдера, с расширением
const char *szFileVS = NULL;
//! Имя файла шейдера, с расширением
const char *szFilePS = NULL;
};
/*! Вариант шейдера для материала.
Каждый материал может иметь несколько вариантов одного и того же шейдера,
собранных с разными наборами макроопределений
Зачем это нужно? Простой пример: Система может рисовать одну и ту же геометрию пообъектно, и инстансингом.
Вершинные шейдеры в этом случае будут различаться, и система должна иметь возможность выбрать, какой вариант
шейдера использовать при конкретной установке материала
@deprecated
*/
class IXShaderVariant: public IXUnknown
{
public:
};
struct XSHADER_VARIANT_DESC
{
//! Дескриптор варианта шейдера, используется для передачи в IXMaterialSystem::bindMaterial()
IXShaderVariant *pShaderVariant;
/*! Массив макроопределений для вершинного шейдера, может быть NULL.
Последний элемент массива должен быть {NULL, NULL}
*/
GXMacro *pMacrosVS;
};
#define IXMATERIALSYSTEM_VERSION 3
struct XVertexOutputElement
{
......@@ -129,14 +90,9 @@ class IXMaterialSystem: public IXUnknown
{
public:
/*! Загружает материал, если уже загружен - возвращает имеющийся
pDefaultShaders - дефолтные шейдеры, на случай, если материала не существует (есть только текстура)
uVariantCount - количество вариантов шейдеров
pVariantsDesc - массив структур в количестве uVariantCount, описывающий каждый вариант шейдера
Каждый материал может иметь несколько вариантов одного и того же шейдера,
собранных с разными наборами макроопределений
szDefaultShader - дефолтный шейдер, на случай, если материала не существует (есть только текстура)
*/
virtual void XMETHODCALLTYPE loadMaterial(const char *szName, IXMaterial **ppMaterial, XSHADER_DEFAULT_DESC *pDefaultShaders, UINT uVariantCount = 0, XSHADER_VARIANT_DESC *pVariantsDesc = NULL) = 0;
virtual void XMETHODCALLTYPE loadMaterial(const char *szName, IXMaterial **ppMaterial, const char *szDefaultShader = NULL) = 0;
//! Запрашивает материал, если не существует - вернет false
virtual bool XMETHODCALLTYPE getMaterial(const char *szName, IXMaterial **ppMaterial) = 0;
......@@ -151,7 +107,7 @@ public:
//virtual void XMETHODCALLTYPE addTexture(const char *szName, IGXTexture2D *pTexture) = 0;
//! Установить материал для отрисовки
virtual void XMETHODCALLTYPE bindMaterial(IXMaterial *pMaterial, IXShaderVariant *pShaderVariant = NULL) = 0;
virtual void XMETHODCALLTYPE bindMaterial(IXMaterial *pMaterial) = 0;
//! Установить мировую матрицу для отрисовки
virtual void XMETHODCALLTYPE setWorld(const SMMATRIX &mWorld) = 0;
......@@ -159,15 +115,6 @@ public:
//! Установить текстуру в слот
virtual void XMETHODCALLTYPE bindTexture(IXTexture *pTexture, UINT slot = 0) = 0;
//! Переопределить пиксельный шейдер для последующих вызовов bindMaterial. Действует до тех пор, пока не будет отменено (-1)
//! @deprecated
virtual void XMETHODCALLTYPE overridePixelShader(ID id) = 0;
//! Переопределить геометрический шейдер для последующих вызовов bindMaterial. Действует до тех пор, пока не будет отменено (-1)
//! @deprecated
virtual void XMETHODCALLTYPE overrideGeometryShader(ID id) = 0;
virtual XVertexFormatHandler* XMETHODCALLTYPE registerVertexFormat(const char *szName, XVertexOutputElement *pDecl) = 0;
virtual void XMETHODCALLTYPE unregisterVertexFormat(const char *szName) = 0;
virtual XVertexFormatHandler* XMETHODCALLTYPE getVertexFormat(const char *szName) = 0;
......
......@@ -66,7 +66,7 @@ CMaterialSystem::~CMaterialSystem()
cleanData();
}
void XMETHODCALLTYPE CMaterialSystem::loadMaterial(const char *szName, IXMaterial **ppMaterial, XSHADER_DEFAULT_DESC *pDefaultShaders, UINT uVariantCount, XSHADER_VARIANT_DESC *pVariantsDesc)
void XMETHODCALLTYPE CMaterialSystem::loadMaterial(const char *szName, IXMaterial **ppMaterial, const char *szDefaultShader)
{
String sName(szName);
......@@ -105,13 +105,13 @@ void XMETHODCALLTYPE CMaterialSystem::loadMaterial(const char *szName, IXMateria
CMaterial *pNewMaterial = NULL;
// ID id = SMtrl_MtlLoad2(szName, pDefaultShaders, uVariantCount, pVariantsDesc);
pNewMaterial = new CMaterial(this, -1, pNode->Key.c_str());
pNewMaterial = new CMaterial(this, pNode->Key.c_str());
*ppMaterial = pNewMaterial;
m_mapMaterials[sName] = pNewMaterial;
if(!loadMaterialFromFile(szFileName, pNewMaterial))
{
pNewMaterial->setShader("Default");
pNewMaterial->setShader(szDefaultShader ? szDefaultShader : "Default");
pNewMaterial->setTexture("txBase", szName);
}
else
......@@ -328,7 +328,7 @@ void XMETHODCALLTYPE CMaterialSystem::setWorld(const SMMATRIX &mWorld)
SGCore_GetDXDevice()->getThreadContext()->setVSConstant(m_pObjectConstantBuffer, SCR_OBJECT);
//SGCore_GetDXDevice()->setPixelShaderConstant(m_pObjectConstantBuffer, SCR_OBJECT);
}
void XMETHODCALLTYPE CMaterialSystem::bindMaterial(IXMaterial *pMaterial, IXShaderVariant *pShaderVariant)
void XMETHODCALLTYPE CMaterialSystem::bindMaterial(IXMaterial *pMaterial)
{
CMaterial *pMat = (CMaterial*)pMaterial;
if(pMaterial)
......@@ -516,16 +516,6 @@ void XMETHODCALLTYPE CMaterialSystem::bindTexture(IXTexture *pTexture, UINT slot
}
}
void XMETHODCALLTYPE CMaterialSystem::overridePixelShader(ID id)
{
SMtrl_MtlPixelShaderOverride(id);
}
void XMETHODCALLTYPE CMaterialSystem::overrideGeometryShader(ID id)
{
SMtrl_MtlGeometryShaderOverride(id);
}
void CMaterialSystem::onTextureRelease(CTexture *pTexture)
{
assert(pTexture);
......@@ -2020,8 +2010,7 @@ private:
//#############################################################################
CMaterial::CMaterial(CMaterialSystem *pMaterialSystem, ID id, const char *szName):
m_id(id),
CMaterial::CMaterial(CMaterialSystem *pMaterialSystem, const char *szName):
m_pMaterialSystem(pMaterialSystem),
m_szName(szName)
{
......@@ -2063,10 +2052,6 @@ const char* XMETHODCALLTYPE CMaterial::getName() const
*ppTexture = new CTexture(id);*/
//}
ID CMaterial::getId()
{
return(m_id);
}
void XMETHODCALLTYPE CMaterial::setTransparent(bool bValue)
{
......
......@@ -136,12 +136,11 @@ public:
friend class CMaterialFlag;
// friend class CMaterialSystem;
CMaterial(CMaterialSystem *pMaterialSystem, ID id, const char *szName);
CMaterial(CMaterialSystem *pMaterialSystem, const char *szName);
~CMaterial();
const char* XMETHODCALLTYPE getName() const override;
//void XMETHODCALLTYPE getMainTexture(IXTexture **ppTexture) override;
ID getId();
void XMETHODCALLTYPE setTransparent(bool bValue) override;
bool XMETHODCALLTYPE isTransparent() const override;
......@@ -183,12 +182,7 @@ public:
float XMETHODCALLTYPE getDensity() const override;
bool XMETHODCALLTYPE save() override;
ID getInternalID()
{
return(m_id);
}
bool isDirty() const
{
return(m_pCurrentPass->isDirty);
......@@ -238,7 +232,6 @@ protected:
void updateShader();
private:
ID m_id = -1;
const char *m_szName = NULL;
struct MaterialTexture
......@@ -295,20 +288,17 @@ public:
CMaterialSystem();
~CMaterialSystem();
void XMETHODCALLTYPE loadMaterial(const char *szName, IXMaterial **ppMaterial, XSHADER_DEFAULT_DESC *pDefaultShaders, UINT uVariantCount = 0, XSHADER_VARIANT_DESC *pVariantsDesc = NULL) override;
void XMETHODCALLTYPE loadMaterial(const char *szName, IXMaterial **ppMaterial, const char *szDefaultShader = NULL) override;
bool XMETHODCALLTYPE getMaterial(const char *szName, IXMaterial **ppMaterial) override;
bool XMETHODCALLTYPE loadTexture(const char *szName, IXTexture **ppTexture) override;
bool XMETHODCALLTYPE getTexture(const char *szName, IXTexture **ppTexture) override;
//void XMETHODCALLTYPE addTexture(const char *szName, IGXTexture2D *pTexture) override;
void XMETHODCALLTYPE bindMaterial(IXMaterial *pMaterial, IXShaderVariant *pShaderVariant = NULL) override;
void XMETHODCALLTYPE bindMaterial(IXMaterial *pMaterial) override;
void XMETHODCALLTYPE bindTexture(IXTexture *pTexture, UINT slot = 0) override;
void XMETHODCALLTYPE setWorld(const SMMATRIX &mWorld) override;
void XMETHODCALLTYPE overrideGeometryShader(ID id) override;
void XMETHODCALLTYPE overridePixelShader(ID id) override;
XVertexFormatHandler* XMETHODCALLTYPE registerVertexFormat(const char *szName, XVertexOutputElement *pDecl) override;
void XMETHODCALLTYPE unregisterVertexFormat(const char *szName) override;
XVertexFormatHandler* XMETHODCALLTYPE getVertexFormat(const char *szName) override;
......
#include "ShaderVariant.h"
#include <gcore/sxgcore.h>
CShaderVariant::CShaderVariant(const char *szShaderVS, const char *szShaderPS, GXMacro *pMacros)
{
ID idShaderVS = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, szShaderVS, NULL, pMacros);
ID idShaderPS = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, szShaderPS, NULL, pMacros);
m_idShaderKit = SGCore_ShaderCreateKit(idShaderVS, idShaderPS);
}
ID CShaderVariant::getShaderKit() const
{
return(m_idShaderKit);
}
#ifndef __SHADERVARIANT_H
#define __SHADERVARIANT_H
#include "IXMaterialSystem.h"
class CShaderVariant: public IXShaderVariant
{
public:
CShaderVariant(const char *szShaderVS, const char *szShaderPS, GXMacro *pMacros);
ID getShaderKit() const;
protected:
//! набор шейдеров
ID m_idShaderKit = -1;
};
#endif
This diff is collapsed.
This diff is collapsed.
/***********************************************************
Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
See the license in LICENSE
***********************************************************/
#include "ml_data.h"
namespace mtrl_data
{
void Init();
IGXDevice *pDXDevice = 0;
float2_t vSizeTexReflection = float2_t(MTL_REF_TEX_SIZE, MTL_REF_TEX_SIZE);
//ориентаци¤ и верхний вектор дл¤ рендера в кубическую текстуру
float3 vOrientedCube[6] = { float3(1, 0, 0), float3(-1, 0, 0), float3(0, 1, 0), float3(0, -1, 0), float3(0, 0, 1), float3(0, 0, -1) };
float3 vUpVectorsCube[6] = { float3(0, 1, 0), float3(0, 1, 0), float3(0, 0, -1), float3(0, 0, 1), float3(0, 1, 0), float3(0, 1, 0) };
float4x4 mRefProjPlane;
float4x4 mRefProjCube;
namespace shader_id
{
namespace vs
{
ID idResPosDepth;
ID idScreenOut;
ID idStdGeom;
ID idStdTree;
ID idStdGrass;
ID idStdSkin;
};
namespace ps
{
ID idScreenOut;
ID idStdGeom;
ID idStdGeomCP;
ID idStdGreen;
ID idStdGreenCP;
ID idStdSkin;
ID idStdSkinCP;
};
};
};
void mtrl_data::Init()
{
mtrl_data::pDXDevice = SGCore_GetDXDevice();
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");
mtrl_data::shader_id::vs::idResPosDepth = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "pp_res_pos.vs", "pp_quad_render_res_pos.vs");
mtrl_data::shader_id::vs::idScreenOut = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "pp_quad_render.vs");
mtrl_data::shader_id::ps::idScreenOut = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "pp_quad_render.ps");
mtrl_data::shader_id::vs::idStdGeom = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "stdr_geom.vs");
mtrl_data::shader_id::ps::idStdGeom = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "stdr_geom.ps");
GXMacro Defines_CP[] = { { "_CLIP_PLANE_", "" }, { 0, 0 } };
mtrl_data::shader_id::ps::idStdGeomCP = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "stdr_geom.ps", "stdr_geom_cp.ps", Defines_CP);
GXMacro Defines_GRASS[] = { { "_GRASS_", "" }, { 0, 0 } };
mtrl_data::shader_id::vs::idStdGrass = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "stdr_green.vs", "stdr_grass.vs", Defines_GRASS);
mtrl_data::shader_id::vs::idStdTree = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "stdr_green.vs", "stdr_tree.vs");
mtrl_data::shader_id::ps::idStdGreen = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "stdr_green.ps");
mtrl_data::shader_id::ps::idStdGreenCP = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "stdr_green.ps", "stdr_green_cp.ps", Defines_CP);
mtrl_data::shader_id::vs::idStdSkin = SGCore_ShaderLoad(SHADER_TYPE_VERTEX, "stdr_skin.vs");
mtrl_data::shader_id::ps::idStdSkin = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "stdr_skin.ps");
mtrl_data::shader_id::ps::idStdSkinCP = SGCore_ShaderLoad(SHADER_TYPE_PIXEL, "stdr_skin.ps", "stdr_skin_cp.ps", Defines_CP);
mtrl_data::mRefProjPlane = SMMatrixPerspectiveFovLH(*r_default_fov, float(*r_win_width) / float(*r_win_height), MTl_REF_PROJ_NEAR, MTl_REF_PROJ_FAR);
mtrl_data::mRefProjCube = SMMatrixPerspectiveFovLH(SM_PI * 0.5f, 1, MTl_REF_PROJ_NEAR, MTl_REF_PROJ_FAR);
}
\ No newline at end of file
/***********************************************************
Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
See the license in LICENSE
***********************************************************/
#ifndef __ML_DATA_H
#define __ML_DATA_H
#include <gdefines.h>
//#define SM_D3D_CONVERSIONS
#include <common/Math.h>
#include <common/array.h>
#include <GRegisterIndex.h>
#include "sxmtrl.h"
namespace mtrl_data
{
void Init();
extern IGXDevice *pDXDevice;
extern float2_t vSizeTexReflection;
//ориентаци¤ и верхний вектор дл¤ рендера в кубическую текстуру
extern float3 vOrientedCube[6];
extern float3 vUpVectorsCube[6];
extern float4x4 mRefProjPlane;
extern float4x4 mRefProjCube;
namespace shader_id
{
namespace vs
{
extern ID idResPosDepth;
extern ID idScreenOut;
extern ID idStdGeom;
extern ID idStdTree;
extern ID idStdGrass;
extern ID idStdSkin;
};
namespace ps
{
extern ID idCalcAdaptedLum;
extern ID idSampleLumInit;
extern ID idSampleLumIterative;
extern ID idScreenOut;
extern ID idStdGeom;
extern ID idStdGeomCP;
extern ID idStdGreen;
extern ID idStdGreenCP;
extern ID idStdSkin;
extern ID idStdSkinCP;
};
};
};
#endif
\ No newline at end of file
This diff is collapsed.
/***********************************************************
Copyright © Vitaliy Buturlin, Evgeny Danilovich, 2017, 2018
See the license in LICENSE
***********************************************************/
#ifndef __REFLECTION_H
#define __REFLECTION_H
#include <gdefines.h>
//#define SM_D3D_CONVERSIONS
#include <common/Math.h>
#include <common/Array.h>
#include <graphix/graphix.h>
#include "sxmtrl.h"
#include "ml_data.h"
/*! класс отражений, возможны плоские отражения и кубические
\note автогенерация мип уровней не работала, пришлось сделать небольшой костыль:\n
- рисуем отражения в рабочую текстуру
- эту текстуру рисуем в текстуру отражений\n
при таком подходе все мип уровни генерируются
*/
class CReflection
{
public:
CReflection();
~CReflection();
void onLostDevice();
void onResetDevice();
SX_ALIGNED_OP_MEM2();
//! инициализация отражений
void init(MTLTYPE_REFLECT type);
//! возвращает тип отражения
MTLTYPE_REFLECT getTypeReflect();
//! возвращает фрустум по id, для плоских отражений 0, для кубических [0,5]
const IFrustum* getFrustum(ID id);
//! обновление количесвтенных данных обновления, возаращет true в случае если можно рисовать отражения, false если отражения рисовать не надо, pViewPos - позиция наблюдателя (обязательно)
bool updateCountUpdate(const float3_t *pViewPos);
//! разрешен ли рендер отражений
bool allowedRender();
//! обнуление информации об обновлении
void nullingCountUpdate();