Converted remaining shaders.

This commit is contained in:
hiker 2015-05-08 08:30:51 +10:00
parent 5070531ad7
commit a16bbf71a4
4 changed files with 128 additions and 67 deletions

View File

@ -1653,7 +1653,7 @@ namespace FullScreenShader
GL_COMPUTE_SHADER, "gaussian6h.comp");
TU_dest = 1;
assignUniforms("pixel", "weights");
assignSamplerNames(m_program, 0, "source");
assignSamplerNames(m_program, 0, "source", ST_BILINEAR_CLAMPED_FILTERED);
assignTextureUnit(TU_dest, "dest");
}
@ -1663,7 +1663,7 @@ namespace FullScreenShader
GL_COMPUTE_SHADER, "blurshadowH.comp");
TU_dest = 1;
assignUniforms("pixel", "weights");
assignSamplerNames(m_program, 0, "source");
assignSamplerNames(m_program, 0, "source", ST_NEARED_CLAMPED_FILTERED);
assignTextureUnit(TU_dest, "dest");
}
@ -1674,7 +1674,7 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "gaussian6h.frag");
assignUniforms("pixel", "sigma");
assignSamplerNames(m_program, 0, "tex");
assignSamplerNames(m_program, 0, "tex", ST_BILINEAR_CLAMPED_FILTERED);
}
HorizontalBlurShader::HorizontalBlurShader()
@ -1684,7 +1684,7 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "gaussian6h.frag");
assignUniforms("pixel");
assignSamplerNames(m_program, 0, "tex");
assignSamplerNames(m_program, 0, "tex", ST_BILINEAR_CLAMPED_FILTERED);
}
Gaussian3HBlurShader::Gaussian3HBlurShader()
@ -1694,7 +1694,7 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "gaussian3h.frag");
assignUniforms("pixel");
assignSamplerNames(m_program, 0, "tex");
assignSamplerNames(m_program, 0, "tex", ST_BILINEAR_CLAMPED_FILTERED);
}
Gaussian17TapVShader::Gaussian17TapVShader()
@ -1704,7 +1704,8 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "bilateralV.frag");
assignUniforms("pixel");
assignSamplerNames(m_program, 0, "tex", 1, "depth");
assignSamplerNames(m_program, 0, "tex", ST_BILINEAR_CLAMPED_FILTERED,
1, "depth", ST_BILINEAR_CLAMPED_FILTERED);
}
ComputeGaussian17TapVShader::ComputeGaussian17TapVShader()
@ -1713,7 +1714,8 @@ namespace FullScreenShader
GL_COMPUTE_SHADER, "bilateralV.comp");
TU_dest = 2;
assignUniforms("pixel");
assignSamplerNames(m_program, 0, "source", 1, "depth");
assignSamplerNames(m_program, 0, "source", ST_NEARED_CLAMPED_FILTERED,
1, "depth", ST_NEARED_CLAMPED_FILTERED);
assignTextureUnit(TU_dest, "dest");
}
@ -1723,7 +1725,7 @@ namespace FullScreenShader
GL_COMPUTE_SHADER, "gaussian6v.comp");
TU_dest = 1;
assignUniforms("pixel", "weights");
assignSamplerNames(m_program, 0, "source");
assignSamplerNames(m_program, 0, "source", ST_BILINEAR_CLAMPED_FILTERED);
assignTextureUnit(TU_dest, "dest");
}
@ -1733,7 +1735,7 @@ namespace FullScreenShader
GL_COMPUTE_SHADER, "blurshadowV.comp");
TU_dest = 1;
assignUniforms("pixel", "weights");
assignSamplerNames(m_program, 0, "source");
assignSamplerNames(m_program, 0, "source", ST_NEARED_CLAMPED_FILTERED);
assignTextureUnit(TU_dest, "dest");
}
@ -1744,7 +1746,7 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "gaussian6v.frag");
assignUniforms("pixel", "sigma");
assignSamplerNames(m_program, 0, "tex");
assignSamplerNames(m_program, 0, "tex", ST_BILINEAR_CLAMPED_FILTERED);
}
Gaussian3VBlurShader::Gaussian3VBlurShader()
@ -1754,7 +1756,7 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "gaussian3v.frag");
assignUniforms("pixel");
assignSamplerNames(m_program, 0, "tex");
assignSamplerNames(m_program, 0, "tex", ST_BILINEAR_CLAMPED_FILTERED);
}
PassThroughShader::PassThroughShader()
@ -1764,7 +1766,7 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "passthrough.frag");
assignUniforms("width", "height");
assignSamplerNames(m_program, 0, "tex");
assignSamplerNames(m_program, 0, "tex", ST_BILINEAR_FILTERED);
}
LayerPassThroughShader::LayerPassThroughShader()
@ -1785,7 +1787,7 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "linearizedepth.frag");
assignUniforms("zn", "zf");
assignSamplerNames(m_program, 0, "texture");
assignSamplerNames(m_program, 0, "texture", ST_BILINEAR_FILTERED);
}
@ -1794,7 +1796,7 @@ namespace FullScreenShader
loadProgram(OBJECT,
GL_COMPUTE_SHADER, "Lightspaceboundingbox.comp",
GL_COMPUTE_SHADER, "utils/getPosFromUVDepth.frag");
assignSamplerNames(m_program, 0, "depth");
assignSamplerNames(m_program, 0, "depth", ST_NEAREST_FILTERED);
assignUniforms("SunCamMatrix", "split0", "split1", "split2", "splitmax");
GLuint block_idx = glGetProgramResourceIndex(m_program, GL_SHADER_STORAGE_BLOCK, "BoundingBoxes");
glShaderStorageBlockBinding(m_program, block_idx, 2);
@ -1816,7 +1818,7 @@ namespace FullScreenShader
loadProgram(OBJECT,
GL_COMPUTE_SHADER, "depthhistogram.comp",
GL_COMPUTE_SHADER, "utils/getPosFromUVDepth.frag");
assignSamplerNames(m_program, 0, "depth");
assignSamplerNames(m_program, 0, "depth", ST_NEAREST_FILTERED);
GLuint block_idx = glGetProgramResourceIndex(m_program, GL_SHADER_STORAGE_BLOCK, "Histogram");
glShaderStorageBlockBinding(m_program, block_idx, 1);
@ -1829,7 +1831,7 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "glow.frag");
assignUniforms();
assignSamplerNames(m_program, 0, "tex");
assignSamplerNames(m_program, 0, "tex", ST_BILINEAR_FILTERED);
vao = createVAO(m_program);
}
@ -1842,7 +1844,7 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "ssao.frag");
assignUniforms("radius", "k", "sigma");
assignSamplerNames(m_program, 0, "dtex");
assignSamplerNames(m_program, 0, "dtex", ST_SEMI_TRILINEAR);
}
FogShader::FogShader()
@ -1853,7 +1855,7 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "fog.frag");
assignUniforms("density", "col");
assignSamplerNames(m_program, 0, "tex");
assignSamplerNames(m_program, 0, "tex", ST_NEAREST_FILTERED);
}
MotionBlurShader::MotionBlurShader()
@ -1863,7 +1865,8 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "utils/getPosFromUVDepth.frag",
GL_FRAGMENT_SHADER, "motion_blur.frag");
assignUniforms("previous_viewproj", "center", "boost_amount", "mask_radius");
assignSamplerNames(m_program, 0, "color_buffer", 1, "dtex");
assignSamplerNames(m_program, 0, "color_buffer", ST_BILINEAR_CLAMPED_FILTERED,
1, "dtex", ST_NEAREST_FILTERED);
}
GodFadeShader::GodFadeShader()
@ -1873,7 +1876,7 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "godfade.frag");
assignUniforms("col");
assignSamplerNames(m_program, 0, "tex");
assignSamplerNames(m_program, 0, "tex", ST_BILINEAR_FILTERED);
}
GodRayShader::GodRayShader()
@ -1883,7 +1886,7 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "godray.frag");
assignUniforms("sunpos");
assignSamplerNames(m_program, 0, "tex");
assignSamplerNames(m_program, 0, "tex", ST_BILINEAR_FILTERED);
}
MLAAColorEdgeDetectionSHader::MLAAColorEdgeDetectionSHader()
@ -1893,7 +1896,7 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "mlaa_color1.frag");
assignUniforms("PIXEL_SIZE");
assignSamplerNames(m_program, 0, "colorMapG");
assignSamplerNames(m_program, 0, "colorMapG", ST_NEAREST_FILTERED);
}
MLAABlendWeightSHader::MLAABlendWeightSHader()
@ -1903,7 +1906,8 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "mlaa_blend2.frag");
assignUniforms("PIXEL_SIZE");
assignSamplerNames(m_program, 0, "edgesMap", 1, "areaMap");
assignSamplerNames(m_program, 0, "edgesMap", ST_BILINEAR_FILTERED,
1, "areaMap", ST_NEAREST_FILTERED);
}
MLAAGatherSHader::MLAAGatherSHader()
@ -1913,7 +1917,8 @@ namespace FullScreenShader
GL_FRAGMENT_SHADER, "mlaa_neigh3.frag");
assignUniforms("PIXEL_SIZE");
assignSamplerNames(m_program, 0, "blendMap", 1, "colorMap");
assignSamplerNames(m_program, 0, "blendMap", ST_NEAREST_FILTERED,
1, "colorMap", ST_NEAREST_FILTERED);
}
}
@ -1926,7 +1931,7 @@ namespace UIShader
GL_VERTEX_SHADER, "primitive2dlist.vert",
GL_FRAGMENT_SHADER, "transparent.frag");
assignUniforms();
assignSamplerNames(m_program, 0, "tex");
assignSamplerNames(m_program, 0, "tex", ST_BILINEAR_FILTERED);
}
TextureRectShader::TextureRectShader()
@ -1936,7 +1941,7 @@ namespace UIShader
GL_FRAGMENT_SHADER, "texturedquad.frag");
assignUniforms("center", "size", "texcenter", "texsize");
assignSamplerNames(m_program, 0, "tex");
assignSamplerNames(m_program, 0, "tex", ST_BILINEAR_FILTERED);
}
UniformColoredTextureRectShader::UniformColoredTextureRectShader()
@ -1947,7 +1952,7 @@ namespace UIShader
assignUniforms("center", "size", "texcenter", "texsize", "color");
assignSamplerNames(m_program, 0, "tex");
assignSamplerNames(m_program, 0, "tex", ST_BILINEAR_FILTERED);
}
ColoredTextureRectShader::ColoredTextureRectShader()
@ -1957,7 +1962,7 @@ namespace UIShader
GL_FRAGMENT_SHADER, "colortexturedquad.frag");
assignUniforms("center", "size", "texcenter", "texsize");
assignSamplerNames(m_program, 0, "tex");
assignSamplerNames(m_program, 0, "tex", ST_BILINEAR_FILTERED);
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);

View File

@ -543,45 +543,52 @@ public:
ComputeGaussian17TapHShader();
};
class ComputeGaussian6HBlurShader : public Shader<ComputeGaussian6HBlurShader, core::vector2df, std::vector<float> >, public TextureRead<Bilinear_Clamped_Filtered>
class ComputeGaussian6HBlurShader : public Shader<ComputeGaussian6HBlurShader, core::vector2df, std::vector<float> >,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED>
{
public:
GLuint TU_dest;
ComputeGaussian6HBlurShader();
};
class ComputeShadowBlurHShader : public Shader<ComputeShadowBlurHShader, core::vector2df, std::vector<float> >, public TextureRead<Neared_Clamped_Filtered>
class ComputeShadowBlurHShader : public Shader<ComputeShadowBlurHShader, core::vector2df, std::vector<float> >,
public TextureReadNew<ST_NEARED_CLAMPED_FILTERED>
{
public:
GLuint TU_dest;
ComputeShadowBlurHShader();
};
class Gaussian6HBlurShader : public Shader<Gaussian6HBlurShader, core::vector2df, float>, public TextureRead<Bilinear_Clamped_Filtered>
class Gaussian6HBlurShader : public Shader<Gaussian6HBlurShader, core::vector2df, float>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED>
{
public:
Gaussian6HBlurShader();
};
class HorizontalBlurShader : public Shader<HorizontalBlurShader, core::vector2df>, public TextureRead<Bilinear_Clamped_Filtered>
class HorizontalBlurShader : public Shader<HorizontalBlurShader, core::vector2df>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED>
{
public:
HorizontalBlurShader();
};
class Gaussian3HBlurShader : public Shader<Gaussian3HBlurShader, core::vector2df>, public TextureRead<Bilinear_Clamped_Filtered>
class Gaussian3HBlurShader : public Shader<Gaussian3HBlurShader, core::vector2df>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED>
{
public:
Gaussian3HBlurShader();
};
class Gaussian17TapVShader : public Shader<Gaussian17TapVShader, core::vector2df>, public TextureRead<Bilinear_Clamped_Filtered, Bilinear_Clamped_Filtered>
class Gaussian17TapVShader : public Shader<Gaussian17TapVShader, core::vector2df>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED, ST_BILINEAR_CLAMPED_FILTERED>
{
public:
Gaussian17TapVShader();
};
class ComputeGaussian17TapVShader : public Shader<ComputeGaussian17TapVShader, core::vector2df>, public TextureRead<Neared_Clamped_Filtered, Neared_Clamped_Filtered>
class ComputeGaussian17TapVShader : public Shader<ComputeGaussian17TapVShader, core::vector2df>,
public TextureReadNew<ST_NEARED_CLAMPED_FILTERED, ST_NEARED_CLAMPED_FILTERED>
{
public:
GLuint TU_dest;
@ -589,33 +596,38 @@ public:
ComputeGaussian17TapVShader();
};
class ComputeGaussian6VBlurShader : public Shader<ComputeGaussian6VBlurShader, core::vector2df, std::vector<float> >, public TextureRead<Bilinear_Clamped_Filtered>
class ComputeGaussian6VBlurShader : public Shader<ComputeGaussian6VBlurShader, core::vector2df, std::vector<float> >,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED>
{
public:
GLuint TU_dest;
ComputeGaussian6VBlurShader();
};
class ComputeShadowBlurVShader : public Shader<ComputeShadowBlurVShader, core::vector2df, std::vector<float> >, public TextureRead<Neared_Clamped_Filtered>
class ComputeShadowBlurVShader : public Shader<ComputeShadowBlurVShader, core::vector2df, std::vector<float> >,
public TextureReadNew<ST_NEARED_CLAMPED_FILTERED>
{
public:
GLuint TU_dest;
ComputeShadowBlurVShader();
};
class Gaussian6VBlurShader : public Shader<Gaussian6VBlurShader, core::vector2df, float>, public TextureRead<Bilinear_Clamped_Filtered>
class Gaussian6VBlurShader : public Shader<Gaussian6VBlurShader, core::vector2df, float>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED>
{
public:
Gaussian6VBlurShader();
};
class Gaussian3VBlurShader : public Shader<Gaussian3VBlurShader, core::vector2df>, public TextureRead<Bilinear_Clamped_Filtered>
class Gaussian3VBlurShader : public Shader<Gaussian3VBlurShader, core::vector2df>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED>
{
public:
Gaussian3VBlurShader();
};
class PassThroughShader : public Shader<PassThroughShader, int, int>, public TextureRead<Bilinear_Filtered>
class PassThroughShader : public Shader<PassThroughShader, int, int>,
public TextureReadNew<ST_BILINEAR_FILTERED>
{
public:
PassThroughShader();
@ -630,13 +642,17 @@ public:
LayerPassThroughShader();
};
class LinearizeDepthShader : public Shader<LinearizeDepthShader, float, float>, public TextureRead<Bilinear_Filtered>
class LinearizeDepthShader : public Shader<LinearizeDepthShader, float, float>,
public TextureReadNew<ST_BILINEAR_FILTERED>
{
public:
LinearizeDepthShader();
};
class LightspaceBoundingBoxShader : public Shader<LightspaceBoundingBoxShader, core::matrix4, float, float, float, float>, public TextureRead < Nearest_Filtered >
class LightspaceBoundingBoxShader : public Shader<LightspaceBoundingBoxShader,
core::matrix4, float, float,
float, float>,
public TextureReadNew<ST_NEAREST_FILTERED >
{
public:
LightspaceBoundingBoxShader();
@ -648,13 +664,15 @@ public:
ShadowMatrixesGenerationShader();
};
class DepthHistogramShader : public Shader<DepthHistogramShader>, public TextureRead <Nearest_Filtered>
class DepthHistogramShader : public Shader<DepthHistogramShader>,
public TextureReadNew<ST_NEAREST_FILTERED>
{
public:
DepthHistogramShader();
};
class GlowShader : public Shader<GlowShader>, public TextureRead<Bilinear_Filtered>
class GlowShader : public Shader<GlowShader>,
public TextureReadNew<ST_BILINEAR_FILTERED>
{
public:
GLuint vao;
@ -662,49 +680,57 @@ public:
GlowShader();
};
class SSAOShader : public Shader<SSAOShader, float, float, float>, public TextureRead<Semi_trilinear>
class SSAOShader : public Shader<SSAOShader, float, float, float>,
public TextureReadNew<ST_SEMI_TRILINEAR>
{
public:
SSAOShader();
};
class FogShader : public Shader<FogShader, float, core::vector3df>, public TextureRead<Nearest_Filtered>
class FogShader : public Shader<FogShader, float, core::vector3df>,
public TextureReadNew<ST_NEAREST_FILTERED>
{
public:
FogShader();
};
class MotionBlurShader : public Shader<MotionBlurShader, core::matrix4, core::vector2df, float, float>, public TextureRead<Bilinear_Clamped_Filtered, Nearest_Filtered>
class MotionBlurShader : public Shader<MotionBlurShader, core::matrix4, core::vector2df, float, float>,
public TextureReadNew<ST_BILINEAR_CLAMPED_FILTERED, ST_NEAREST_FILTERED>
{
public:
MotionBlurShader();
};
class GodFadeShader : public Shader<GodFadeShader, video::SColorf>, public TextureRead<Bilinear_Filtered>
class GodFadeShader : public Shader<GodFadeShader, video::SColorf>,
public TextureReadNew<ST_BILINEAR_FILTERED>
{
public:
GodFadeShader();
};
class GodRayShader : public Shader<GodRayShader, core::vector2df>, public TextureRead<Bilinear_Filtered>
class GodRayShader : public Shader<GodRayShader, core::vector2df>,
public TextureReadNew<ST_BILINEAR_FILTERED>
{
public:
GodRayShader();
};
class MLAAColorEdgeDetectionSHader : public Shader<MLAAColorEdgeDetectionSHader, core::vector2df>, public TextureRead<Nearest_Filtered>
class MLAAColorEdgeDetectionSHader : public Shader<MLAAColorEdgeDetectionSHader, core::vector2df>,
public TextureReadNew<ST_NEAREST_FILTERED>
{
public:
MLAAColorEdgeDetectionSHader();
};
class MLAABlendWeightSHader : public Shader<MLAABlendWeightSHader, core::vector2df>, public TextureRead<Bilinear_Filtered, Nearest_Filtered>
class MLAABlendWeightSHader : public Shader<MLAABlendWeightSHader, core::vector2df>,
public TextureReadNew<ST_BILINEAR_FILTERED, ST_NEAREST_FILTERED>
{
public:
MLAABlendWeightSHader();
};
class MLAAGatherSHader : public Shader<MLAAGatherSHader, core::vector2df>, public TextureRead<Nearest_Filtered, Nearest_Filtered>
class MLAAGatherSHader : public Shader<MLAAGatherSHader, core::vector2df>,
public TextureReadNew<ST_NEAREST_FILTERED, ST_NEAREST_FILTERED>
{
public:
MLAAGatherSHader();
@ -715,25 +741,36 @@ public:
namespace UIShader
{
class Primitive2DList : public Shader<Primitive2DList>, public TextureRead < Bilinear_Filtered >
class Primitive2DList : public Shader<Primitive2DList>,
public TextureReadNew<ST_BILINEAR_FILTERED >
{
public:
Primitive2DList();
};
class TextureRectShader : public Shader<TextureRectShader, core::vector2df, core::vector2df, core::vector2df, core::vector2df>, public TextureRead<Bilinear_Filtered>
class TextureRectShader : public Shader<TextureRectShader, core::vector2df,
core::vector2df, core::vector2df,
core::vector2df>,
public TextureReadNew<ST_BILINEAR_FILTERED>
{
public:
TextureRectShader();
};
class UniformColoredTextureRectShader : public Shader<UniformColoredTextureRectShader, core::vector2df, core::vector2df, core::vector2df, core::vector2df, video::SColor>, public TextureRead<Bilinear_Filtered>
class UniformColoredTextureRectShader : public Shader<UniformColoredTextureRectShader,
core::vector2df, core::vector2df,
core::vector2df, core::vector2df,
video::SColor>,
public TextureReadNew<ST_BILINEAR_FILTERED>
{
public:
UniformColoredTextureRectShader();
};
class ColoredTextureRectShader : public Shader<ColoredTextureRectShader, core::vector2df, core::vector2df, core::vector2df, core::vector2df>, public TextureRead<Bilinear_Filtered>
class ColoredTextureRectShader : public Shader<ColoredTextureRectShader, core::vector2df,
core::vector2df, core::vector2df,
core::vector2df>,
public TextureReadNew<ST_BILINEAR_FILTERED>
{
public:
GLuint colorvbo;
@ -742,7 +779,8 @@ public:
ColoredTextureRectShader();
};
class ColoredRectShader : public Shader<ColoredRectShader, core::vector2df, core::vector2df, video::SColor>
class ColoredRectShader : public Shader<ColoredRectShader, core::vector2df,
core::vector2df, video::SColor>
{
public:
ColoredRectShader();

View File

@ -30,6 +30,7 @@ TextureReadBaseNew::BindFunction TextureReadBaseNew::m_all_bind_functions[] =
/* ST_VOLUME_LINEAR_FILTERED */ &TextureReadBaseNew::bindTextureVolume,
/* ST_NEARED_CLAMPED_FILTERED */ &TextureReadBaseNew::bindTextureNearestClamped,
/* ST_BILINEAR_CLAMPED_FILTERED */ &TextureReadBaseNew::bindTextureBilinearClamped,
/* ST_SEMI_TRILINEAR */ &TextureReadBaseNew::bindTextureSemiTrilinear
};
GLuint TextureReadBaseNew::m_all_texture_types[] =
@ -42,6 +43,7 @@ GLuint TextureReadBaseNew::m_all_texture_types[] =
/* ST_VOLUME_LINEAR_FILTERED */ GL_TEXTURE_3D,
/* ST_NEARED_CLAMPED_FILTERED */ GL_TEXTURE_2D,
/* ST_BILINEAR_CLAMPED_FILTERED */ GL_TEXTURE_2D,
/* ST_SEMI_TRILINEAR */ GL_TEXTURE_2D
};
// ----------------------------------------------------------------------------
@ -181,6 +183,7 @@ void TextureReadBaseNew::bindTextureVolume(unsigned tex_unit, unsigned tex_id)
} // bindTextureVolume
// ----------------------------------------------------------------------------
GLuint TextureReadBaseNew::createSamplers(SamplerTypeNew sampler_type)
{
switch (sampler_type)
@ -213,6 +216,8 @@ GLuint TextureReadBaseNew::createSamplers(SamplerTypeNew sampler_type)
}
case ST_BILINEAR_CLAMPED_FILTERED:
return createBilinearClampedSampler();
case ST_SEMI_TRILINEAR:
return createSemiTrilinearSampler();
default:
assert(false);
return 0;
@ -316,6 +321,20 @@ GLuint TextureReadBaseNew::createTrilinearClampedArray()
#endif
} // createTrilinearClampedArray
// ----------------------------------------------------------------------------
GLuint TextureReadBaseNew::createSemiTrilinearSampler()
{
#ifdef GL_VERSION_3_3
unsigned id;
glGenSamplers(1, &id);
glSamplerParameteri(id, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glSamplerParameteri(id, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_NEAREST);
glSamplerParameteri(id, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glSamplerParameteri(id, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glSamplerParameterf(id, GL_TEXTURE_MAX_ANISOTROPY_EXT, 1.);
return id;
#endif
}
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------

View File

@ -34,17 +34,15 @@ enum SamplerTypeNew {
ST_VOLUME_LINEAR_FILTERED,
ST_NEARED_CLAMPED_FILTERED,
ST_BILINEAR_CLAMPED_FILTERED,
ST_MAX = ST_BILINEAR_CLAMPED_FILTERED,
XST_SEMI_TRILINEAR,
XST_TRILINEAR_CLAMPED_ARRAY2D
ST_SEMI_TRILINEAR,
ST_MAX = ST_SEMI_TRILINEAR
};
class TextureReadBaseNew
{
public:
typedef std::function<void(unsigned, unsigned)> BindFunction;
typedef std::function<void(GLuint, GLuint)> BindFunction;
protected:
static void bindTextureNearest(GLuint tex_unit, GLuint tex_id);
@ -53,10 +51,11 @@ protected:
static void bindTextureNearestClamped(GLuint tex_unit, GLuint tex_id);
static void bindTextureTrilinearAnisotropic(GLuint tex_unit, GLuint tex_id);
static void bindTextureSemiTrilinear(GLuint tex_unit, GLuint tex_id);
static void bindCubemapTrilinear(unsigned tex_unit, unsigned tex_id);
static void bindTextureShadow(unsigned tex_unit, unsigned tex_id);
static void bindTrilinearClampedArrayTexture(unsigned tex_unit, unsigned tex_id);
static void bindTextureVolume(unsigned tex_unit, unsigned tex_id);
static void bindCubemapTrilinear(GLuint tex_unit, GLuint tex_id);
static void bindTextureShadow(GLuint tex_unit, GLuint tex_id);
static void bindTrilinearClampedArrayTexture(GLuint tex_unit, GLuint tex_id);
static void bindTextureVolume(GLuint tex_unit, GLuint tex_id);
GLuint createSamplers(SamplerTypeNew sampler_type);
private:
@ -66,7 +65,7 @@ private:
static GLuint createShadowSampler();
static GLuint createTrilinearClampedArray();
static GLuint createBilinearClampedSampler();
static GLuint createSemiTrilinearSampler();
protected:
static BindFunction m_all_bind_functions[];
std::vector<BindFunction> m_bind_functions;