Commit 2f8299d3 authored by hybrid's avatar hybrid

Fixed OpenGL shader materials to always add a material renderer in order to...

Fixed OpenGL shader materials to always add a material renderer in order to avoid mismatched predefined material renderers. Moreover, this is also the behavior if no shader support is available.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1336 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 35cb5664
......@@ -182,7 +182,7 @@ COpenGLNormalMapRenderer::COpenGLNormalMapRenderer(video::COpenGLDriver* driver,
CallBack = this;
// basicly, this thing simply compiles these hardcoded shaders if the
// basically, this thing simply compiles the hardcoded shaders if the
// hardware is able to do them, otherwise it maps to the base material
if (!driver->queryFeature(video::EVDF_ARB_FRAGMENT_PROGRAM_1) ||
......@@ -214,6 +214,10 @@ COpenGLNormalMapRenderer::COpenGLNormalMapRenderer(video::COpenGLDriver* driver,
// compile shaders on our own
init(outMaterialTypeNr, OPENGL_NORMAL_MAP_VSH, OPENGL_NORMAL_MAP_PSH, EVT_TANGENTS);
}
// fallback if compilation has failed
if (-1==outMaterialTypeNr)
outMaterialTypeNr = driver->addMaterialRenderer(this);
}
......
......@@ -248,6 +248,10 @@ COpenGLParallaxMapRenderer::COpenGLParallaxMapRenderer(video::COpenGLDriver* dri
// compile shaders on our own
init(outMaterialTypeNr, OPENGL_PARALLAX_MAP_VSH, OPENGL_PARALLAX_MAP_PSH, EVT_TANGENTS);
}
// fallback if compilation has failed
if (-1==outMaterialTypeNr)
outMaterialTypeNr = driver->addMaterialRenderer(this);
}
......
......@@ -64,9 +64,10 @@ COpenGLShaderMaterialRenderer::~COpenGLShaderMaterialRenderer()
Driver->extGlDeletePrograms(1, &PixelShader);
if (BaseMaterial)
BaseMaterial->drop ();
BaseMaterial->drop();
}
void COpenGLShaderMaterialRenderer::init(s32& outMaterialTypeNr, const c8* vertexShaderProgram,
const c8* pixelShaderProgram, E_VERTEX_TYPE type)
{
......@@ -84,6 +85,7 @@ void COpenGLShaderMaterialRenderer::init(s32& outMaterialTypeNr, const c8* verte
outMaterialTypeNr = Driver->addMaterialRenderer(this);
}
bool COpenGLShaderMaterialRenderer::OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype)
{
// call callback to set shader constants
......@@ -148,12 +150,14 @@ void COpenGLShaderMaterialRenderer::OnUnsetMaterial()
BaseMaterial->OnUnsetMaterial();
}
//! Returns if the material is transparent.
bool COpenGLShaderMaterialRenderer::isTransparent() const
{
return BaseMaterial ? BaseMaterial->isTransparent() : false;
}
bool COpenGLShaderMaterialRenderer::createPixelShader(const c8* pxsh)
{
if (!pxsh)
......@@ -194,6 +198,7 @@ bool COpenGLShaderMaterialRenderer::createPixelShader(const c8* pxsh)
return true;
}
bool COpenGLShaderMaterialRenderer::createVertexShader(const char* vtxsh)
{
if (!vtxsh)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment