Removed multiple inheritance, instead made TextureRead inherit from

Shader. work in progress!
This commit is contained in:
hiker
2015-05-16 10:39:33 +10:00
parent dc211f2000
commit 329a4ac047
8 changed files with 140 additions and 295 deletions

View File

@@ -29,8 +29,7 @@
// ============================================================================
class Primitive2DList : public Shader<Primitive2DList>,
public TextureReadNew<ST_BILINEAR_FILTERED >
class Primitive2DList : public TextureRead<Primitive2DList, 1>
{
public:
Primitive2DList()
@@ -43,11 +42,10 @@ public:
}; //Primitive2DList
// ============================================================================
class UniformColoredTextureRectShader : public Shader<UniformColoredTextureRectShader,
class UniformColoredTextureRectShader : public TextureRead<UniformColoredTextureRectShader,1,
core::vector2df, core::vector2df,
core::vector2df, core::vector2df,
video::SColor>,
public TextureReadNew<ST_BILINEAR_FILTERED>
video::SColor>
{
public:
UniformColoredTextureRectShader()
@@ -62,10 +60,9 @@ public:
}; // UniformColoredTextureRectShader
// ============================================================================
class TextureRectShader : public Shader<TextureRectShader, core::vector2df,
core::vector2df, core::vector2df,
core::vector2df>,
public TextureReadNew<ST_BILINEAR_FILTERED>
class TextureRectShader : public TextureRead<TextureRectShader, 1,
core::vector2df, core::vector2df,
core::vector2df, core::vector2df>
{
public:
TextureRectShader()
@@ -93,10 +90,9 @@ public:
// ============================================================================
class ColoredTextureRectShader : public Shader<ColoredTextureRectShader,
class ColoredTextureRectShader : public TextureRead<ColoredTextureRectShader, 1,
core::vector2df, core::vector2df,
core::vector2df, core::vector2df>,
public TextureReadNew<ST_BILINEAR_FILTERED>
core::vector2df, core::vector2df>
{
#ifdef XX
private:

View File

@@ -26,9 +26,8 @@
#include <set>
class SpecularIBLGenerator : public Shader<SpecularIBLGenerator, core::matrix4,
float >,
public TextureReadNew<ST_TRILINEAR_CUBEMAP>
class SpecularIBLGenerator : public TextureRead<SpecularIBLGenerator, 1,
core::matrix4, float >
{
public:
GLuint m_tu_samples;

View File

@@ -54,10 +54,8 @@ public:
/** A Shader to render particles.
*/
class SimpleParticleRender : public Shader<SimpleParticleRender, video::SColorf,
video::SColorf>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_NEAREST_FILTERED>
class SimpleParticleRender : public TextureRead<SimpleParticleRender, 2,
video::SColorf, video::SColorf>
{
public:
SimpleParticleRender()
@@ -76,9 +74,7 @@ public:
// ============================================================================
class FlipParticleRender : public Shader<FlipParticleRender>,
public TextureReadNew < ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_NEAREST_FILTERED >
class FlipParticleRender : public TextureRead<FlipParticleRender, 2>
{
public:
FlipParticleRender()

View File

@@ -43,9 +43,8 @@ using namespace video;
using namespace scene;
// ============================================================================
class Gaussian3HBlurShader : public Shader<Gaussian3HBlurShader,
core::vector2df>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED>
class Gaussian3HBlurShader : public TextureRead<Gaussian3HBlurShader, 1,
core::vector2df>
{
public:
Gaussian3HBlurShader()
@@ -59,10 +58,9 @@ public:
}; // Gaussian3HBlurShader
// ============================================================================
class ComputeShadowBlurVShader : public Shader<ComputeShadowBlurVShader,
class ComputeShadowBlurVShader : public TextureRead<ComputeShadowBlurVShader, 1,
core::vector2df,
std::vector<float> >,
public TextureReadNew<ST_NEARED_CLAMPED_FILTERED>
std::vector<float> >
{
public:
GLuint m_dest_tu;
@@ -78,9 +76,8 @@ public:
}; // ComputeShadowBlurVShader
// ============================================================================
class Gaussian6VBlurShader : public Shader<Gaussian6VBlurShader,
core::vector2df, float>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED>
class Gaussian6VBlurShader : public TextureRead<Gaussian6VBlurShader, 1,
core::vector2df, float>
{
public:
Gaussian6VBlurShader()
@@ -94,9 +91,8 @@ public:
}; // Gaussian6VBlurShader
// ============================================================================
class Gaussian3VBlurShader : public Shader<Gaussian3VBlurShader,
core::vector2df>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED>
class Gaussian3VBlurShader : public TextureRead<Gaussian3VBlurShader, 1,
core::vector2df>
{
public:
Gaussian3VBlurShader()
@@ -110,10 +106,9 @@ public:
}; // Gaussian3VBlurShader
// ============================================================================
class ComputeGaussian6VBlurShader : public Shader<ComputeGaussian6VBlurShader,
class ComputeGaussian6VBlurShader : public TextureRead<ComputeGaussian6VBlurShader, 1,
core::vector2df,
std::vector<float> >,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED>
std::vector<float> >
{
public:
GLuint m_dest_tu;
@@ -129,10 +124,9 @@ public:
}; // ComputeGaussian6VBlurShader
// ============================================================================
class ComputeGaussian6HBlurShader : public Shader<ComputeGaussian6HBlurShader,
class ComputeGaussian6HBlurShader : public TextureRead<ComputeGaussian6HBlurShader, 1,
core::vector2df,
std::vector<float> >,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED>
std::vector<float> >
{
public:
GLuint m_dest_tu;
@@ -148,10 +142,9 @@ public:
}; // ComputeGaussian6HBlurShader
// ============================================================================
class ComputeShadowBlurHShader : public Shader<ComputeShadowBlurHShader,
class ComputeShadowBlurHShader : public TextureRead<ComputeShadowBlurHShader, 1,
core::vector2df,
std::vector<float> >,
public TextureReadNew<ST_NEARED_CLAMPED_FILTERED>
std::vector<float> >
{
public:
GLuint m_dest_tu;
@@ -166,9 +159,8 @@ public:
}; // ComputeShadowBlurHShader
// ============================================================================
class Gaussian6HBlurShader : public Shader<Gaussian6HBlurShader,
core::vector2df, float>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED>
class Gaussian6HBlurShader : public TextureRead<Gaussian6HBlurShader, 1,
core::vector2df, float>
{
public:
Gaussian6HBlurShader()
@@ -182,10 +174,8 @@ public:
}; // Gaussian6HBlurShader
// ============================================================================
class Gaussian17TapHShader : public Shader<Gaussian17TapHShader,
core::vector2df>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED,
ST_BILINEAR_CLAMPED_FILTERED>
class Gaussian17TapHShader : public TextureRead<Gaussian17TapHShader, 2,
core::vector2df>
{
public:
Gaussian17TapHShader()
@@ -199,10 +189,8 @@ public:
}; // Gaussian17TapHShader
// ============================================================================
class ComputeGaussian17TapHShader : public Shader<ComputeGaussian17TapHShader,
core::vector2df>,
public TextureReadNew<ST_NEARED_CLAMPED_FILTERED,
ST_NEARED_CLAMPED_FILTERED>
class ComputeGaussian17TapHShader : public TextureRead<ComputeGaussian17TapHShader, 2,
core::vector2df>
{
public:
GLuint m_dest_tu;
@@ -219,10 +207,8 @@ public:
// ============================================================================
class Gaussian17TapVShader : public Shader<Gaussian17TapVShader,
core::vector2df>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED,
ST_BILINEAR_CLAMPED_FILTERED>
class Gaussian17TapVShader : public TextureRead<Gaussian17TapVShader, 2,
core::vector2df>
{
public:
Gaussian17TapVShader()
@@ -237,10 +223,8 @@ public:
}; // Gaussian17TapVShader
// ============================================================================
class ComputeGaussian17TapVShader : public Shader<ComputeGaussian17TapVShader,
core::vector2df>,
public TextureReadNew<ST_NEARED_CLAMPED_FILTERED,
ST_NEARED_CLAMPED_FILTERED>
class ComputeGaussian17TapVShader : public TextureRead<ComputeGaussian17TapVShader, 2,
core::vector2df>
{
public:
GLuint m_dest_tu;
@@ -257,8 +241,7 @@ public:
}; // ComputeGaussian17TapVShader
// ============================================================================
class BloomShader : public Shader<BloomShader>,
public TextureReadNew<ST_NEAREST_FILTERED>
class BloomShader : public TextureRead<BloomShader, 1>
{
public:
BloomShader()
@@ -273,10 +256,7 @@ public:
}; // BloomShader
// ============================================================================
class BloomBlendShader : public Shader<BloomBlendShader>,
public TextureReadNew<ST_BILINEAR_FILTERED,
ST_BILINEAR_FILTERED,
ST_BILINEAR_FILTERED>
class BloomBlendShader : public TextureRead<BloomBlendShader, 3>
{
public:
BloomBlendShader()
@@ -291,10 +271,7 @@ public:
}; // BloomBlendShader
// ============================================================================
class LensBlendShader : public Shader<LensBlendShader>,
public TextureReadNew<ST_BILINEAR_FILTERED,
ST_BILINEAR_FILTERED,
ST_BILINEAR_FILTERED>
class LensBlendShader : public TextureRead<LensBlendShader, 3>
{
public:
LensBlendShader()
@@ -310,8 +287,7 @@ public:
}; // LensBlendShader
// ============================================================================
class ToneMapShader : public Shader<ToneMapShader, float>,
public TextureReadNew<ST_NEAREST_FILTERED>
class ToneMapShader : public TextureRead<ToneMapShader, 1, float>
{
public:
@@ -327,9 +303,7 @@ public:
}; // ToneMapShader
// ============================================================================
class DepthOfFieldShader : public Shader<DepthOfFieldShader>,
public TextureReadNew<ST_BILINEAR_FILTERED,
ST_NEAREST_FILTERED>
class DepthOfFieldShader : public TextureRead<DepthOfFieldShader, 2>
{
public:
DepthOfFieldShader()
@@ -344,10 +318,7 @@ public:
}; // DepthOfFieldShader
// ============================================================================
class IBLShader : public Shader<IBLShader>,
public TextureReadNew<ST_NEAREST_FILTERED,
ST_NEAREST_FILTERED,
ST_TRILINEAR_CUBEMAP>
class IBLShader : public TextureRead<IBLShader, 3>
{
public:
IBLShader()
@@ -366,8 +337,7 @@ public:
}; // IBLShader
// ============================================================================
class DegradedIBLShader : public Shader<DegradedIBLShader>,
public TextureReadNew<ST_NEAREST_FILTERED>
class DegradedIBLShader : public TextureRead<DegradedIBLShader, 1>
{
public:
DegradedIBLShader()

View File

@@ -77,8 +77,7 @@ layout(location = 6) in vec3 Bitangent;
*/
// ============================================================================
class InstancedObjectPass1Shader : public Shader<InstancedObjectPass1Shader>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED>
class InstancedObjectPass1Shader : public TextureRead<InstancedObjectPass1Shader, 1>
{
public:
InstancedObjectPass1Shader()
@@ -95,9 +94,7 @@ public:
}; // class InstancedObjectPass1Shader
// ============================================================================
class InstancedObjectRefPass1Shader : public Shader<InstancedObjectRefPass1Shader>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED>
class InstancedObjectRefPass1Shader : public TextureRead<InstancedObjectRefPass1Shader, 2>
{
public:
InstancedObjectRefPass1Shader()
@@ -116,13 +113,8 @@ public:
}; // InstancedObjectRefPass1Shader
// ============================================================================
class ObjectRefPass2Shader : public Shader<ObjectRefPass2Shader, core::matrix4,
core::matrix4>,
public TextureReadNew<ST_NEAREST_FILTERED,
ST_NEAREST_FILTERED,
ST_BILINEAR_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED >
class ObjectRefPass2Shader : public TextureRead<ObjectRefPass2Shader, 5,
core::matrix4, core::matrix4>
{
public:
ObjectRefPass2Shader()
@@ -141,12 +133,7 @@ public:
}; // ObjectRefPass2Shader
// ============================================================================
class InstancedObjectPass2Shader : public Shader<InstancedObjectPass2Shader>,
public TextureReadNew<ST_NEAREST_FILTERED,
ST_NEAREST_FILTERED,
ST_BILINEAR_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED >
class InstancedObjectPass2Shader : public TextureRead<InstancedObjectPass2Shader, 5>
{
public:
InstancedObjectPass2Shader()
@@ -165,12 +152,7 @@ public:
}; // InstancedObjectPass2Shader
// ============================================================================
class InstancedObjectRefPass2Shader : public Shader<InstancedObjectRefPass2Shader>,
public TextureReadNew<ST_NEAREST_FILTERED,
ST_NEAREST_FILTERED,
ST_BILINEAR_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED >
class InstancedObjectRefPass2Shader : public TextureRead<InstancedObjectRefPass2Shader, 5>
{
public:
InstancedObjectRefPass2Shader()
@@ -190,8 +172,7 @@ public:
}; // InstancedObjectRefPass2Shader
// ============================================================================
class ShadowShader : public Shader<ShadowShader, int, core::matrix4>,
public TextureReadNew<>
class ShadowShader : public TextureRead<ShadowShader, 0, int, core::matrix4>
{
public:
ShadowShader()
@@ -215,8 +196,7 @@ public:
}; // ShadowShader
// ============================================================================
class InstancedShadowShader : public Shader<InstancedShadowShader, int>,
public TextureReadNew<>
class InstancedShadowShader : public TextureRead<InstancedShadowShader, 0, int>
{
public:
InstancedShadowShader()
@@ -243,9 +223,8 @@ public:
}; // InstancedShadowShader
// ============================================================================
class CRSMShader : public Shader<CRSMShader, core::matrix4, core::matrix4,
core::matrix4>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED>
class CRSMShader : public TextureRead<CRSMShader, 1, core::matrix4, core::matrix4,
core::matrix4>
{
public:
CRSMShader()
@@ -261,13 +240,8 @@ public:
// ============================================================================
class SplattingRSMShader : public Shader<SplattingRSMShader, core::matrix4,
core::matrix4>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED >
class SplattingRSMShader : public TextureRead<SplattingRSMShader, 5, core::matrix4,
core::matrix4>
{
public:
SplattingRSMShader()
@@ -287,8 +261,7 @@ public:
}; // SplattingRSMShader
// ============================================================================
class CInstancedRSMShader : public Shader<CInstancedRSMShader, core::matrix4>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED>
class CInstancedRSMShader : public TextureRead<CInstancedRSMShader, 1, core::matrix4>
{
public:
CInstancedRSMShader()
@@ -304,12 +277,8 @@ public:
}; // CInstancedRSMShader
// ============================================================================
class SphereMapShader : public Shader<SphereMapShader, core::matrix4,
core::matrix4>,
public TextureReadNew<ST_NEAREST_FILTERED,
ST_NEAREST_FILTERED,
ST_BILINEAR_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED>
class SphereMapShader : public TextureRead<SphereMapShader, 4, core::matrix4,
core::matrix4>
{
public:
SphereMapShader()
@@ -328,11 +297,7 @@ public:
}; // SphereMapShader
// ============================================================================
class InstancedSphereMapShader : public Shader<InstancedSphereMapShader>,
public TextureReadNew<ST_NEAREST_FILTERED,
ST_NEAREST_FILTERED,
ST_BILINEAR_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED>
class InstancedSphereMapShader : public TextureRead<InstancedSphereMapShader, 4>
{
public:
InstancedSphereMapShader()
@@ -352,15 +317,7 @@ public:
}; // InstancedSphereMapShader
// ============================================================================
class SplattingShader : public Shader<SplattingShader, core::matrix4>,
public TextureReadNew<ST_NEAREST_FILTERED,
ST_NEAREST_FILTERED,
ST_BILINEAR_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED>
class SplattingShader : public TextureRead<SplattingShader, 8, core::matrix4>
{
public:
SplattingShader()
@@ -383,10 +340,8 @@ public:
}; // SplattingShader
// ============================================================================
class ObjectRefPass1Shader : public Shader<ObjectRefPass1Shader, core::matrix4,
core::matrix4, core::matrix4>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED>
class ObjectRefPass1Shader : public TextureRead<ObjectRefPass1Shader, 2, core::matrix4,
core::matrix4, core::matrix4>
{
public:
ObjectRefPass1Shader()
@@ -403,10 +358,8 @@ public:
// ============================================================================
class NormalMapShader : public Shader<NormalMapShader, core::matrix4,
core::matrix4>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED>
class NormalMapShader : public TextureRead<NormalMapShader, 2, core::matrix4,
core::matrix4>
{
public:
NormalMapShader()
@@ -423,9 +376,7 @@ public:
}; // NormalMapShader
// ============================================================================
class InstancedNormalMapShader : public Shader<InstancedNormalMapShader>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED>
class InstancedNormalMapShader : public TextureRead<InstancedNormalMapShader, 2>
{
public:
InstancedNormalMapShader()
@@ -442,12 +393,8 @@ public:
}; // InstancedNormalMapShader
// ============================================================================
class ObjectUnlitShader : public Shader<ObjectUnlitShader, core::matrix4,
core::matrix4>,
public TextureReadNew<ST_NEAREST_FILTERED,
ST_NEAREST_FILTERED,
ST_BILINEAR_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED >
class ObjectUnlitShader : public TextureRead<ObjectUnlitShader, 4, core::matrix4,
core::matrix4>
{
public:
ObjectUnlitShader()
@@ -464,11 +411,7 @@ public:
}; // ObjectUnlitShader
// ============================================================================
class InstancedObjectUnlitShader : public Shader<InstancedObjectUnlitShader>,
public TextureReadNew<ST_NEAREST_FILTERED,
ST_NEAREST_FILTERED,
ST_BILINEAR_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED >
class InstancedObjectUnlitShader : public TextureRead<InstancedObjectUnlitShader, 4>
{
public:
InstancedObjectUnlitShader()
@@ -605,10 +548,8 @@ const STK::Tuple<size_t> UnlitMat::ShadowTextures = STK::Tuple<size_t>(0);
const STK::Tuple<size_t> UnlitMat::RSMTextures = STK::Tuple<size_t>(0);
// ============================================================================
class GrassPass1Shader : public Shader<GrassPass1Shader, core::matrix4,
core::matrix4, core::vector3df>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED>
class GrassPass1Shader : public TextureRead<GrassPass1Shader, 2, core::matrix4,
core::matrix4, core::vector3df>
{
public:
GrassPass1Shader()
@@ -625,10 +566,8 @@ public:
}; // class GrassPass1Shader
// ============================================================================
class InstancedGrassPass1Shader : public Shader<InstancedGrassPass1Shader,
core::vector3df>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED>
class InstancedGrassPass1Shader : public TextureRead<InstancedGrassPass1Shader, 2,
core::vector3df>
{
public:
InstancedGrassPass1Shader()
@@ -645,9 +584,8 @@ public:
}; // InstancedGrassPass1Shader
// ============================================================================
class GrassShadowShader : public Shader<GrassShadowShader, int, core::matrix4,
core::vector3df>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED>
class GrassShadowShader : public TextureRead<GrassShadowShader, 1, int, core::matrix4,
core::vector3df>
{
public:
GrassShadowShader()
@@ -673,9 +611,8 @@ public:
}; // GrassShadowShader
// ============================================================================
class InstancedGrassShadowShader : public Shader<InstancedGrassShadowShader,
int, core::vector3df>,
public TextureReadNew < ST_TRILINEAR_ANISOTROPIC_FILTERED >
class InstancedGrassShadowShader : public TextureRead<InstancedGrassShadowShader, 1,
int, core::vector3df>
{
public:
InstancedGrassShadowShader()
@@ -705,13 +642,8 @@ public:
// ============================================================================
class GrassPass2Shader : public Shader<GrassPass2Shader, core::matrix4,
core::vector3df>,
public TextureReadNew<ST_NEAREST_FILTERED,
ST_NEAREST_FILTERED,
ST_BILINEAR_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED >
class GrassPass2Shader : public TextureRead<GrassPass2Shader, 5, core::matrix4,
core::vector3df>
{
public:
GrassPass2Shader()
@@ -730,14 +662,8 @@ public:
}; // GrassPass2Shader
// ============================================================================
class InstancedGrassPass2Shader : public Shader<InstancedGrassPass2Shader,
core::vector3df, core::vector3df>,
public TextureReadNew<ST_NEAREST_FILTERED,
ST_NEAREST_FILTERED,
ST_BILINEAR_FILTERED,
ST_NEAREST_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED >
class InstancedGrassPass2Shader : public TextureRead<InstancedGrassPass2Shader, 6,
core::vector3df, core::vector3df>
{
public:
InstancedGrassPass2Shader()
@@ -758,14 +684,8 @@ public:
}; // InstancedGrassPass2Shader
// ============================================================================
class DetailedObjectPass2Shader : public Shader<DetailedObjectPass2Shader,
core::matrix4>,
public TextureReadNew<ST_NEAREST_FILTERED,
ST_NEAREST_FILTERED,
ST_BILINEAR_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED >
class DetailedObjectPass2Shader : public TextureRead<DetailedObjectPass2Shader, 6,
core::matrix4>
{
public:
DetailedObjectPass2Shader()
@@ -784,11 +704,7 @@ public:
}; // DetailedObjectPass2Shader
// ============================================================================
class InstancedDetailedObjectPass2Shader : public Shader<InstancedDetailedObjectPass2Shader>,
public TextureReadNew<ST_NEAREST_FILTERED, ST_NEAREST_FILTERED,
ST_BILINEAR_FILTERED, ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED >
class InstancedDetailedObjectPass2Shader : public TextureRead<InstancedDetailedObjectPass2Shader, 6>
{
public:
InstancedDetailedObjectPass2Shader()
@@ -1519,6 +1435,7 @@ static video::ITexture *displaceTex = 0;
// ----------------------------------------------------------------------------
void IrrDriver::renderTransparent()
{
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_FALSE);
glEnable(GL_BLEND);

View File

@@ -34,8 +34,8 @@ class ParticleSystemProxy;
namespace MeshShader
{
class ObjectPass1Shader : public Shader<ObjectPass1Shader, core::matrix4, core::matrix4>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED>
class ObjectPass1Shader : public TextureRead<ObjectPass1Shader, 1,
core::matrix4, core::matrix4>
{
public:
ObjectPass1Shader();
@@ -43,9 +43,7 @@ public:
class ObjectPass2Shader : public Shader<ObjectPass2Shader, core::matrix4, core::matrix4>,
public TextureReadNew<ST_NEAREST_FILTERED, ST_NEAREST_FILTERED, ST_BILINEAR_FILTERED,
ST_TRILINEAR_ANISOTROPIC_FILTERED, ST_TRILINEAR_ANISOTROPIC_FILTERED>
class ObjectPass2Shader : public TextureRead<ObjectPass2Shader, 5, core::matrix4, core::matrix4>
{
public:
ObjectPass2Shader();
@@ -54,16 +52,14 @@ public:
class TransparentShader : public Shader<TransparentShader, core::matrix4, core::matrix4>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED>
class TransparentShader : public TextureRead<TransparentShader, 1, core::matrix4, core::matrix4>
{
public:
TransparentShader();
};
class TransparentFogShader : public Shader<TransparentFogShader, core::matrix4, core::matrix4, float, float,
float, float, float, video::SColorf>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED>
class TransparentFogShader : public TextureRead<TransparentFogShader, 1, core::matrix4, core::matrix4, float, float,
float, float, float, video::SColorf>
{
public:
TransparentFogShader();
@@ -84,15 +80,13 @@ public:
class RefShadowShader : public Shader<RefShadowShader, int, core::matrix4>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED>
class RefShadowShader : public TextureRead<RefShadowShader, 1, int, core::matrix4>
{
public:
RefShadowShader();
};
class InstancedRefShadowShader : public Shader<InstancedRefShadowShader, int>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED>
class InstancedRefShadowShader : public TextureRead<InstancedRefShadowShader, 1, int>
{
public:
InstancedRefShadowShader();
@@ -105,16 +99,14 @@ public:
DisplaceMaskShader();
};
class DisplaceShader : public Shader<DisplaceShader, core::matrix4, core::vector2df, core::vector2df>,
public TextureReadNew<ST_BILINEAR_FILTERED, ST_BILINEAR_FILTERED,
ST_BILINEAR_FILTERED, ST_TRILINEAR_ANISOTROPIC_FILTERED>
class DisplaceShader : public TextureRead<DisplaceShader, 4, core::matrix4,
core::vector2df, core::vector2df>
{
public:
DisplaceShader();
};
class SkyboxShader : public Shader<SkyboxShader>,
public TextureReadNew<ST_TRILINEAR_CUBEMAP>
class SkyboxShader : public TextureRead<SkyboxShader,1>
{
public:
SkyboxShader();
@@ -154,8 +146,7 @@ namespace LightShader
};
class PointLightShader : public Shader<PointLightShader>,
public TextureReadNew<ST_NEAREST_FILTERED, ST_NEAREST_FILTERED>
class PointLightShader : public TextureRead<PointLightShader, 2>
{
public:
GLuint vbo;
@@ -163,8 +154,7 @@ namespace LightShader
PointLightShader();
};
class PointLightScatterShader : public Shader<PointLightScatterShader, float, core::vector3df>,
public TextureReadNew<ST_NEAREST_FILTERED>
class PointLightScatterShader : public TextureRead<PointLightScatterShader, 1, float, core::vector3df>
{
public:
GLuint vbo;
@@ -187,43 +177,35 @@ namespace FullScreenShader
{
class SunLightShader : public Shader<SunLightShader, core::vector3df, video::SColorf>,
public TextureReadNew<ST_NEAREST_FILTERED, ST_NEAREST_FILTERED>
class SunLightShader : public TextureRead<SunLightShader, 2, core::vector3df, video::SColorf>
{
public:
SunLightShader();
};
class ShadowedSunLightShaderPCF : public Shader<ShadowedSunLightShaderPCF, float, float, float, float, float>,
public TextureReadNew<ST_NEAREST_FILTERED, ST_NEAREST_FILTERED, ST_SHADOW_SAMPLER>
class ShadowedSunLightShaderPCF : public TextureRead<ShadowedSunLightShaderPCF, 3, float, float, float, float, float>
{
public:
ShadowedSunLightShaderPCF();
};
class ShadowedSunLightShaderESM : public Shader<ShadowedSunLightShaderESM, float, float, float, float>,
public TextureReadNew<ST_NEAREST_FILTERED, ST_NEAREST_FILTERED,
ST_TRILINEAR_CLAMPED_ARRAY2D>
class ShadowedSunLightShaderESM : public TextureRead<ShadowedSunLightShaderESM, 3, float, float, float, float>
{
public:
ShadowedSunLightShaderESM();
};
class RadianceHintsConstructionShader : public Shader<RadianceHintsConstructionShader, core::matrix4,
core::matrix4, core::vector3df, video::SColorf>,
public TextureReadNew<ST_BILINEAR_FILTERED, ST_BILINEAR_FILTERED, ST_BILINEAR_FILTERED>
class RadianceHintsConstructionShader : public TextureRead<RadianceHintsConstructionShader, 3, core::matrix4,
core::matrix4, core::vector3df, video::SColorf>
{
public:
RadianceHintsConstructionShader();
};
// Workaround for a bug found in kepler nvidia linux and fermi nvidia windows
class NVWorkaroundRadianceHintsConstructionShader : public Shader<NVWorkaroundRadianceHintsConstructionShader,
core::matrix4, core::matrix4, core::vector3df,
int, video::SColorf>,
public TextureReadNew<ST_BILINEAR_FILTERED,
ST_BILINEAR_FILTERED,
ST_BILINEAR_FILTERED>
class NVWorkaroundRadianceHintsConstructionShader : public TextureRead<NVWorkaroundRadianceHintsConstructionShader,
3, core::matrix4, core::matrix4, core::vector3df,
int, video::SColorf>
{
public:
NVWorkaroundRadianceHintsConstructionShader();
@@ -237,27 +219,21 @@ public:
RHDebug();
};
class GlobalIlluminationReconstructionShader : public Shader<GlobalIlluminationReconstructionShader,
core::matrix4, core::matrix4, core::vector3df>,
public TextureReadNew<ST_NEAREST_FILTERED, ST_NEAREST_FILTERED,
ST_VOLUME_LINEAR_FILTERED,
ST_VOLUME_LINEAR_FILTERED,
ST_VOLUME_LINEAR_FILTERED>
class GlobalIlluminationReconstructionShader : public TextureRead<GlobalIlluminationReconstructionShader, 5,
core::matrix4, core::matrix4, core::vector3df>
{
public:
GlobalIlluminationReconstructionShader();
};
class HorizontalBlurShader : public Shader<HorizontalBlurShader, core::vector2df>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED>
class HorizontalBlurShader : public TextureRead<HorizontalBlurShader, 1, core::vector2df>
{
public:
HorizontalBlurShader();
};
class PassThroughShader : public Shader<PassThroughShader, int, int>,
public TextureReadNew<ST_BILINEAR_FILTERED>
class PassThroughShader : public TextureRead<PassThroughShader, 1, int, int>
{
public:
PassThroughShader();
@@ -272,17 +248,15 @@ public:
LayerPassThroughShader();
};
class LinearizeDepthShader : public Shader<LinearizeDepthShader, float, float>,
public TextureReadNew<ST_BILINEAR_FILTERED>
class LinearizeDepthShader : public TextureRead<LinearizeDepthShader, 1, float, float>
{
public:
LinearizeDepthShader();
};
class LightspaceBoundingBoxShader : public Shader<LightspaceBoundingBoxShader,
class LightspaceBoundingBoxShader : public TextureRead<LightspaceBoundingBoxShader, 1,
core::matrix4, float, float,
float, float>,
public TextureReadNew<ST_NEAREST_FILTERED >
float, float>
{
public:
LightspaceBoundingBoxShader();
@@ -294,15 +268,13 @@ public:
ShadowMatrixesGenerationShader();
};
class DepthHistogramShader : public Shader<DepthHistogramShader>,
public TextureReadNew<ST_NEAREST_FILTERED>
class DepthHistogramShader : public TextureRead<DepthHistogramShader, 1>
{
public:
DepthHistogramShader();
};
class GlowShader : public Shader<GlowShader>,
public TextureReadNew<ST_BILINEAR_FILTERED>
class GlowShader : public TextureRead<GlowShader, 1>
{
public:
GLuint vao;
@@ -310,57 +282,49 @@ public:
GlowShader();
};
class SSAOShader : public Shader<SSAOShader, float, float, float>,
public TextureReadNew<ST_SEMI_TRILINEAR>
class SSAOShader : public TextureRead<SSAOShader, 1, float, float, float>
{
public:
SSAOShader();
};
class FogShader : public Shader<FogShader, float, core::vector3df>,
public TextureReadNew<ST_NEAREST_FILTERED>
class FogShader : public TextureRead<FogShader, 1, float, core::vector3df>
{
public:
FogShader();
};
class MotionBlurShader : public Shader<MotionBlurShader, core::matrix4, core::vector2df, float, float>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED, ST_NEAREST_FILTERED>
class MotionBlurShader : public TextureRead<MotionBlurShader, 2, core::matrix4, core::vector2df, float, float>
{
public:
MotionBlurShader();
};
class GodFadeShader : public Shader<GodFadeShader, video::SColorf>,
public TextureReadNew<ST_BILINEAR_FILTERED>
class GodFadeShader : public TextureRead<GodFadeShader, 1, video::SColorf>
{
public:
GodFadeShader();
};
class GodRayShader : public Shader<GodRayShader, core::vector2df>,
public TextureReadNew<ST_BILINEAR_FILTERED>
class GodRayShader : public TextureRead<GodRayShader, 1, core::vector2df>
{
public:
GodRayShader();
};
class MLAAColorEdgeDetectionSHader : public Shader<MLAAColorEdgeDetectionSHader, core::vector2df>,
public TextureReadNew<ST_NEAREST_FILTERED>
class MLAAColorEdgeDetectionSHader : public TextureRead<MLAAColorEdgeDetectionSHader, 1, core::vector2df>
{
public:
MLAAColorEdgeDetectionSHader();
};
class MLAABlendWeightSHader : public Shader<MLAABlendWeightSHader, core::vector2df>,
public TextureReadNew<ST_BILINEAR_FILTERED, ST_NEAREST_FILTERED>
class MLAABlendWeightSHader : public TextureRead<MLAABlendWeightSHader, 2, core::vector2df>
{
public:
MLAABlendWeightSHader();
};
class MLAAGatherSHader : public Shader<MLAAGatherSHader, core::vector2df>,
public TextureReadNew<ST_NEAREST_FILTERED, ST_NEAREST_FILTERED>
class MLAAGatherSHader : public TextureRead<MLAAGatherSHader, 2, core::vector2df>
{
public:
MLAAGatherSHader();

View File

@@ -30,10 +30,9 @@ using namespace irr;
static GLuint billboardvao = 0;
class BillboardShader : public Shader<BillboardShader, core::matrix4,
class BillboardShader : public TextureRead<BillboardShader, 1, core::matrix4,
core::matrix4, core::vector3df,
core::dimension2df>,
public TextureReadNew<ST_TRILINEAR_ANISOTROPIC_FILTERED>
core::dimension2df>
{
public:
BillboardShader()

View File

@@ -20,6 +20,7 @@
#include "graphics/central_settings.hpp"
#include "graphics/gl_headers.hpp"
#include "graphics/shader.hpp"
#include <assert.h>
#include <functional>
@@ -76,10 +77,14 @@ protected:
static GLuint m_all_texture_types[];
}; // TextureReadBaseNew
// ============================================================================
template<SamplerTypeNew...tp>
class TextureReadNew : public TextureReadBaseNew
// ========================================================================
/** Class C needs to be the newly declared shaders class (necessary for
* the instance template). NUM_TEXTURES is the number of texture units
* used in this shader. It is used to test at compile time that the
* right number of arguments are supplied to the variadic functions.
*/
template<class C, int NUM_TEXTURES, typename...tp>
class TextureRead : public TextureReadBaseNew, public Shader<C, tp...>
{
private:
@@ -99,7 +104,7 @@ private:
template<unsigned N, typename...Args>
void assignTextureNamesImpl(GLuint)
{
static_assert(N == sizeof...(tp), "Wrong number of texture name");
static_assert(N == NUM_TEXTURES, "Wrong number of texture names");
} // assignTextureNamesImpl
// ------------------------------------------------------------------------
@@ -149,7 +154,7 @@ public:
template<int N>
void setTextureUnitsImpl()
{
static_assert(N == sizeof...(tp), "Not enough texture set");
static_assert(N == NUM_TEXTURES, "Not enough texture set");
} // setTextureUnitsImpl
// ------------------------------------------------------------------------
@@ -193,7 +198,7 @@ public:
template<int N>
void setTextureHandlesImpl()
{
static_assert(N == sizeof...(tp), "Not enough handle set");
static_assert(N == NUM_TEXTURES, "Not enough handles set");
} // setTextureHandlesImpl
// ------------------------------------------------------------------------
@@ -225,14 +230,13 @@ public:
// ------------------------------------------------------------------------
/** Destructor which frees al lsampler ids.
*/
~TextureReadNew()
~TextureRead()
{
for (unsigned i = 0; i < m_sampler_ids.size(); i++)
glDeleteSamplers(1, &m_sampler_ids[i]);
} // ~TextureReadNew
} // ~TextureRead
}; // class TextureReadNew
}; // class TextureRead
#endif