mirror of
https://github.com/minetest/irrlicht.git
synced 2025-06-29 14:50:30 +02:00
Add SMaterial::IUserData to make it easier passing additional values to shaders
Irrlicht generally avoided user pointers in the past, but after trying all kind of ugly workarounds - this is just easier and not that much downsides really. Tiny speed costs due to additional SMaterial memory size and new comparison tests. But allows to keep SMaterial alive and useful for a while longer without needing a complete rewrite and it can now be used for stuff like writing PBR shaders. Using a new interface io::IUserData for this which also allows serialization the user data (that part is untested so far, sorry) git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6567 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
@ -2164,6 +2164,9 @@ io::IAttributes* CNullDriver::createAttributesFromMaterial(const video::SMateria
|
||||
attr->addFloat("PolygonOffsetDepthBias", material.PolygonOffsetDepthBias);
|
||||
attr->addFloat("PolygonOffsetSlopeScale", material.PolygonOffsetSlopeScale);
|
||||
|
||||
if ( material.UserData )
|
||||
material.UserData->serializeAttributes(attr, options);
|
||||
|
||||
// TODO: Would be nice to have a flag that only serializes rest of texture data when a texture pointer exists.
|
||||
prefix = "BilinearFilter";
|
||||
for (i=0; i<MATERIAL_MAX_TEXTURES; ++i)
|
||||
@ -2249,6 +2252,9 @@ void CNullDriver::fillMaterialStructureFromAttributes(video::SMaterial& outMater
|
||||
outMaterial.PolygonOffsetDepthBias = attr->getAttributeAsFloat("PolygonOffsetDepthBias", outMaterial.PolygonOffsetDepthBias);
|
||||
outMaterial.PolygonOffsetSlopeScale = attr->getAttributeAsFloat("PolygonOffsetSlopeScale", outMaterial.PolygonOffsetSlopeScale);
|
||||
|
||||
if ( outMaterial.UserData )
|
||||
outMaterial.UserData->deserializeAttributes(attr);
|
||||
|
||||
prefix = "BilinearFilter";
|
||||
if (attr->existsAttribute(prefix.c_str())) // legacy
|
||||
outMaterial.setFlag(EMF_BILINEAR_FILTER, attr->getAttributeAsBool(prefix.c_str()));
|
||||
|
@ -421,6 +421,7 @@
|
||||
<Unit filename="../../include/EReadFileType.h" />
|
||||
<Unit filename="../../include/ESceneNodeAnimatorTypes.h" />
|
||||
<Unit filename="../../include/ESceneNodeTypes.h" />
|
||||
<Unit filename="../../include/ESceneNodeUpdateAbs.h" />
|
||||
<Unit filename="../../include/EShaderTypes.h" />
|
||||
<Unit filename="../../include/ETerrainElements.h" />
|
||||
<Unit filename="../../include/IAnimatedMesh.h" />
|
||||
@ -1014,6 +1015,7 @@
|
||||
<Unit filename="IDepthBuffer.h" />
|
||||
<Unit filename="IImagePresenter.h" />
|
||||
<Unit filename="ITriangleRenderer.h" />
|
||||
<Unit filename="IUserData.h" />
|
||||
<Unit filename="IZBuffer.h" />
|
||||
<Unit filename="Irrlicht.cpp" />
|
||||
<Unit filename="Octree.h" />
|
||||
|
@ -871,6 +871,7 @@
|
||||
<ClInclude Include="..\..\include\IRenderTarget.h" />
|
||||
<ClInclude Include="..\..\include\IrrCompileConfig.h" />
|
||||
<ClInclude Include="..\..\include\irrlicht.h" />
|
||||
<ClInclude Include="..\..\include\IUserData.h" />
|
||||
<ClInclude Include="..\..\include\leakHunter.h" />
|
||||
<ClInclude Include="..\..\include\IrrlichtDevice.h" />
|
||||
<ClInclude Include="..\..\include\irrTypes.h" />
|
||||
|
@ -1446,6 +1446,9 @@
|
||||
<ClInclude Include="CBufferRenderNode.h">
|
||||
<Filter>Irrlicht\scene\sceneNodes</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\IUserData.h">
|
||||
<Filter>include\io</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\changes.txt">
|
||||
|
@ -868,6 +868,7 @@
|
||||
<ClInclude Include="..\..\include\IRenderTarget.h" />
|
||||
<ClInclude Include="..\..\include\IrrCompileConfig.h" />
|
||||
<ClInclude Include="..\..\include\irrlicht.h" />
|
||||
<ClInclude Include="..\..\include\IUserData.h" />
|
||||
<ClInclude Include="..\..\include\leakHunter.h" />
|
||||
<ClInclude Include="..\..\include\IrrlichtDevice.h" />
|
||||
<ClInclude Include="..\..\include\irrTypes.h" />
|
||||
|
@ -1437,7 +1437,19 @@
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\EDeviceTypes.h">
|
||||
<Filter>include</Filter>
|
||||
</ClInclude>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\EMeshBufferTypes.h">
|
||||
<Filter>include\scene</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\ESceneNodeUpdateAbs.h">
|
||||
<Filter>include\scene</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="CBufferRenderNode.h">
|
||||
<Filter>Irrlicht\scene\sceneNodes</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\IUserData.h">
|
||||
<Filter>include\io</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\changes.txt">
|
||||
|
@ -868,6 +868,7 @@
|
||||
<ClInclude Include="..\..\include\IRenderTarget.h" />
|
||||
<ClInclude Include="..\..\include\IrrCompileConfig.h" />
|
||||
<ClInclude Include="..\..\include\irrlicht.h" />
|
||||
<ClInclude Include="..\..\include\IUserData.h" />
|
||||
<ClInclude Include="..\..\include\leakHunter.h" />
|
||||
<ClInclude Include="..\..\include\IrrlichtDevice.h" />
|
||||
<ClInclude Include="..\..\include\irrTypes.h" />
|
||||
|
@ -1437,7 +1437,19 @@
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\EDeviceTypes.h">
|
||||
<Filter>include</Filter>
|
||||
</ClInclude>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\EMeshBufferTypes.h">
|
||||
<Filter>include\scene</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\ESceneNodeUpdateAbs.h">
|
||||
<Filter>include\scene</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="CBufferRenderNode.h">
|
||||
<Filter>Irrlicht\scene\sceneNodes</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\IUserData.h">
|
||||
<Filter>include\io</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\changes.txt">
|
||||
|
@ -1438,6 +1438,18 @@
|
||||
<ClInclude Include="..\..\include\EDeviceTypes.h">
|
||||
<Filter>include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\EMeshBufferTypes.h">
|
||||
<Filter>include\scene</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\ESceneNodeUpdateAbs.h">
|
||||
<Filter>include\scene</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="CBufferRenderNode.h">
|
||||
<Filter>Irrlicht\scene\sceneNodes</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\IUserData.h">
|
||||
<Filter>include\io</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\changes.txt">
|
||||
|
@ -879,6 +879,7 @@
|
||||
<ClInclude Include="..\..\include\IRenderTarget.h" />
|
||||
<ClInclude Include="..\..\include\IrrCompileConfig.h" />
|
||||
<ClInclude Include="..\..\include\irrlicht.h" />
|
||||
<ClInclude Include="..\..\include\IUserData.h" />
|
||||
<ClInclude Include="..\..\include\leakHunter.h" />
|
||||
<ClInclude Include="..\..\include\IrrlichtDevice.h" />
|
||||
<ClInclude Include="..\..\include\irrTypes.h" />
|
||||
|
@ -1437,7 +1437,19 @@
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\EDeviceTypes.h">
|
||||
<Filter>include</Filter>
|
||||
</ClInclude>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\EMeshBufferTypes.h">
|
||||
<Filter>include\scene</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\ESceneNodeUpdateAbs.h">
|
||||
<Filter>include\scene</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="CBufferRenderNode.h">
|
||||
<Filter>Irrlicht\scene\sceneNodes</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\IUserData.h">
|
||||
<Filter>include\io</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\changes.txt">
|
||||
|
@ -606,6 +606,7 @@
|
||||
<ClInclude Include="..\..\include\IRenderTarget.h" />
|
||||
<ClInclude Include="..\..\include\IrrCompileConfig.h" />
|
||||
<ClInclude Include="..\..\include\irrlicht.h" />
|
||||
<ClInclude Include="..\..\include\IUserData.h" />
|
||||
<ClInclude Include="..\..\include\leakHunter.h" />
|
||||
<ClInclude Include="..\..\include\IrrlichtDevice.h" />
|
||||
<ClInclude Include="..\..\include\irrTypes.h" />
|
||||
|
@ -1438,6 +1438,18 @@
|
||||
<ClInclude Include="..\..\include\EDeviceTypes.h">
|
||||
<Filter>include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\EMeshBufferTypes.h">
|
||||
<Filter>include\scene</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\ESceneNodeUpdateAbs.h">
|
||||
<Filter>include\scene</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="CBufferRenderNode.h">
|
||||
<Filter>Irrlicht\scene\sceneNodes</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\IUserData.h">
|
||||
<Filter>include\io</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\changes.txt">
|
||||
|
@ -614,6 +614,7 @@
|
||||
<ClInclude Include="..\..\include\IRenderTarget.h" />
|
||||
<ClInclude Include="..\..\include\IrrCompileConfig.h" />
|
||||
<ClInclude Include="..\..\include\irrlicht.h" />
|
||||
<ClInclude Include="..\..\include\IUserData.h" />
|
||||
<ClInclude Include="..\..\include\leakHunter.h" />
|
||||
<ClInclude Include="..\..\include\IrrlichtDevice.h" />
|
||||
<ClInclude Include="..\..\include\irrTypes.h" />
|
||||
|
@ -1438,9 +1438,18 @@
|
||||
<ClInclude Include="..\..\include\EDeviceTypes.h">
|
||||
<Filter>include</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\EMeshBufferTypes.h">
|
||||
<Filter>include\scene</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\ESceneNodeUpdateAbs.h">
|
||||
<Filter>include\scene</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="CBufferRenderNode.h">
|
||||
<Filter>Irrlicht\scene\sceneNodes</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\IUserData.h">
|
||||
<Filter>include\io</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\changes.txt">
|
||||
|
Reference in New Issue
Block a user