Simplify example 27 slightly.

Also use tab instead of spaces (as usual in Irrlicht)


git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@6408 dfc29bdd-3216-0410-991c-e03cc46cb475
This commit is contained in:
cutealien 2022-06-20 19:57:35 +00:00
parent d70d96031b
commit 338af5c0ea

View File

@ -36,9 +36,6 @@ shader. Therefore, we set texture size in OnSetConstants callback using
setVertexShaderConstant function. setVertexShaderConstant function.
*/ */
IrrlichtDevice* device = 0;
video::ITexture* rt = 0;
class QuadShaderCallBack : public video::IShaderConstantSetCallBack class QuadShaderCallBack : public video::IShaderConstantSetCallBack
{ {
public: public:
@ -48,22 +45,21 @@ public:
virtual void OnSetConstants(video::IMaterialRendererServices* services, virtual void OnSetConstants(video::IMaterialRendererServices* services,
s32 userData) s32 userData)
{ {
core::dimension2d<u32> size = rt->getSize();
// get texture size array
f32 textureSize[] =
{
(f32)size.Width, (f32)size.Height
};
if ( FirstUpdate ) if ( FirstUpdate )
{ {
FirstUpdate = false;
TextureSizeID = services->getVertexShaderConstantID("TextureSize"); TextureSizeID = services->getVertexShaderConstantID("TextureSize");
TextureSamplerID = services->getPixelShaderConstantID("TextureSampler"); TextureSamplerID = services->getPixelShaderConstantID("TextureSampler");
} }
// get texture size array (for our simple example HLSL just needs that to calculate pixel centers)
core::dimension2d<u32> size = services->getVideoDriver()->getCurrentRenderTargetSize();
f32 textureSize[2];
textureSize[0] = (f32)size.Width;
textureSize[1] = (f32)size.Height;
// set texture size to vertex shader // set texture size to vertex shader
services->setVertexShaderConstant(TextureSizeID, reinterpret_cast<f32*>(textureSize), 2); services->setVertexShaderConstant(TextureSizeID, textureSize, 2);
// set texture for an OpenGL driver // set texture for an OpenGL driver
s32 textureLayer = 0; s32 textureLayer = 0;
@ -143,31 +139,17 @@ public:
// set the material of screen quad // set the material of screen quad
Driver->setMaterial(Material); Driver->setMaterial(Material);
// set matrices to fit the quad to full viewport // set world matrix to fit the quad to full viewport (we only use ETS_WORLD in the shader, so view, projection currently don't matter)
Driver->setTransform(video::ETS_WORLD, core::IdentityMatrix); Driver->setTransform(video::ETS_WORLD, core::IdentityMatrix);
Driver->setTransform(video::ETS_VIEW, core::IdentityMatrix);
Driver->setTransform(video::ETS_PROJECTION, core::IdentityMatrix);
// draw screen quad // draw screen quad
Driver->drawVertexPrimitiveList(Vertices, 4, Indices, 2); Driver->drawVertexPrimitiveList(Vertices, 4, Indices, 2);
} }
//! sets a flag of material to a new value //! Access the material
virtual void setMaterialFlag(video::E_MATERIAL_FLAG flag, bool newvalue) virtual video::SMaterial& getMaterial()
{ {
Material.setFlag(flag, newvalue); return Material;
}
//! sets the texture of the specified layer in material to the new texture.
void setMaterialTexture(u32 textureLayer, video::ITexture* texture)
{
Material.setTexture(textureLayer, texture);
}
//! sets the material type to a new material type.
virtual void setMaterialType(video::E_MATERIAL_TYPE newType)
{
Material.MaterialType = newType;
} }
private: private:
@ -190,7 +172,7 @@ int main()
return 1; return 1;
// create device // create device
device = createDevice(driverType, core::dimension2d<u32>(640, 480)); IrrlichtDevice* device = createDevice(driverType, core::dimension2d<u32>(640, 480));
if (device == 0) if (device == 0)
return 1; // could not create selected driver. return 1; // could not create selected driver.
@ -278,7 +260,7 @@ int main()
*/ */
// create render target // create render target
video::ITexture* rt = 0;
if (driver->queryFeature(video::EVDF_RENDER_TO_TARGET)) if (driver->queryFeature(video::EVDF_RENDER_TO_TARGET))
{ {
rt = driver->addRenderTargetTexture(core::dimension2d<u32>(640, 480), "RTT1"); rt = driver->addRenderTargetTexture(core::dimension2d<u32>(640, 480), "RTT1");
@ -312,13 +294,14 @@ int main()
// we create a screen quad // we create a screen quad
ScreenQuad *screenQuad = new ScreenQuad(driver); ScreenQuad *screenQuad = new ScreenQuad(driver);
video::SMaterial& screenQuadMaterial = screenQuad->getMaterial();
// turn off mip maps and bilinear filter since we do not want interpolated result // turn off mip maps and bilinear filter since we do not want interpolated results
screenQuad->setMaterialFlag(video::EMF_USE_MIP_MAPS, false); screenQuadMaterial.setFlag(video::EMF_USE_MIP_MAPS, false);
screenQuad->setMaterialFlag(video::EMF_BILINEAR_FILTER, false); screenQuadMaterial.setFlag(video::EMF_BILINEAR_FILTER, false);
// set quad texture to RTT we just create // set quad texture to RTT we just create
screenQuad->setMaterialTexture(0, rt); screenQuadMaterial.setTexture(0, rt);
/* /*
Let's create material for the quad. Like in other example, we create material Let's create material for the quad. Like in other example, we create material
@ -351,7 +334,7 @@ int main()
} }
// set post processing material type to the quad // set post processing material type to the quad
screenQuad->setMaterialType((video::E_MATERIAL_TYPE)ppMaterialType); screenQuadMaterial.MaterialType = (video::E_MATERIAL_TYPE)ppMaterialType;
/* /*
Now draw everything. That's all. Now draw everything. That's all.