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, ...@@ -182,7 +182,7 @@ COpenGLNormalMapRenderer::COpenGLNormalMapRenderer(video::COpenGLDriver* driver,
CallBack = this; 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 // hardware is able to do them, otherwise it maps to the base material
if (!driver->queryFeature(video::EVDF_ARB_FRAGMENT_PROGRAM_1) || if (!driver->queryFeature(video::EVDF_ARB_FRAGMENT_PROGRAM_1) ||
...@@ -214,6 +214,10 @@ COpenGLNormalMapRenderer::COpenGLNormalMapRenderer(video::COpenGLDriver* driver, ...@@ -214,6 +214,10 @@ COpenGLNormalMapRenderer::COpenGLNormalMapRenderer(video::COpenGLDriver* driver,
// compile shaders on our own // compile shaders on our own
init(outMaterialTypeNr, OPENGL_NORMAL_MAP_VSH, OPENGL_NORMAL_MAP_PSH, EVT_TANGENTS); 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 ...@@ -248,6 +248,10 @@ COpenGLParallaxMapRenderer::COpenGLParallaxMapRenderer(video::COpenGLDriver* dri
// compile shaders on our own // compile shaders on our own
init(outMaterialTypeNr, OPENGL_PARALLAX_MAP_VSH, OPENGL_PARALLAX_MAP_PSH, EVT_TANGENTS); 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() ...@@ -64,9 +64,10 @@ COpenGLShaderMaterialRenderer::~COpenGLShaderMaterialRenderer()
Driver->extGlDeletePrograms(1, &PixelShader); Driver->extGlDeletePrograms(1, &PixelShader);
if (BaseMaterial) if (BaseMaterial)
BaseMaterial->drop (); BaseMaterial->drop();
} }
void COpenGLShaderMaterialRenderer::init(s32& outMaterialTypeNr, const c8* vertexShaderProgram, void COpenGLShaderMaterialRenderer::init(s32& outMaterialTypeNr, const c8* vertexShaderProgram,
const c8* pixelShaderProgram, E_VERTEX_TYPE type) const c8* pixelShaderProgram, E_VERTEX_TYPE type)
{ {
...@@ -84,6 +85,7 @@ void COpenGLShaderMaterialRenderer::init(s32& outMaterialTypeNr, const c8* verte ...@@ -84,6 +85,7 @@ void COpenGLShaderMaterialRenderer::init(s32& outMaterialTypeNr, const c8* verte
outMaterialTypeNr = Driver->addMaterialRenderer(this); outMaterialTypeNr = Driver->addMaterialRenderer(this);
} }
bool COpenGLShaderMaterialRenderer::OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype) bool COpenGLShaderMaterialRenderer::OnRender(IMaterialRendererServices* service, E_VERTEX_TYPE vtxtype)
{ {
// call callback to set shader constants // call callback to set shader constants
...@@ -148,12 +150,14 @@ void COpenGLShaderMaterialRenderer::OnUnsetMaterial() ...@@ -148,12 +150,14 @@ void COpenGLShaderMaterialRenderer::OnUnsetMaterial()
BaseMaterial->OnUnsetMaterial(); BaseMaterial->OnUnsetMaterial();
} }
//! Returns if the material is transparent. //! Returns if the material is transparent.
bool COpenGLShaderMaterialRenderer::isTransparent() const bool COpenGLShaderMaterialRenderer::isTransparent() const
{ {
return BaseMaterial ? BaseMaterial->isTransparent() : false; return BaseMaterial ? BaseMaterial->isTransparent() : false;
} }
bool COpenGLShaderMaterialRenderer::createPixelShader(const c8* pxsh) bool COpenGLShaderMaterialRenderer::createPixelShader(const c8* pxsh)
{ {
if (!pxsh) if (!pxsh)
...@@ -194,6 +198,7 @@ bool COpenGLShaderMaterialRenderer::createPixelShader(const c8* pxsh) ...@@ -194,6 +198,7 @@ bool COpenGLShaderMaterialRenderer::createPixelShader(const c8* pxsh)
return true; return true;
} }
bool COpenGLShaderMaterialRenderer::createVertexShader(const char* vtxsh) bool COpenGLShaderMaterialRenderer::createVertexShader(const char* vtxsh)
{ {
if (!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