Commit 7bfe4830 authored by hybrid's avatar hybrid

Fixed cleanup in case of failed shader compilation such that the base material is used.

git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@1344 dfc29bdd-3216-0410-991c-e03cc46cb475
parent 376c58fe
...@@ -354,8 +354,8 @@ void COpenGLDriver::createMaterialRenderers() ...@@ -354,8 +354,8 @@ void COpenGLDriver::createMaterialRenderers()
{ {
// create OpenGL material renderers // create OpenGL material renderers
addAndDropMaterialRenderer(new COpenGLMaterialRenderer_SOLID( this)); addAndDropMaterialRenderer(new COpenGLMaterialRenderer_SOLID(this));
addAndDropMaterialRenderer(new COpenGLMaterialRenderer_SOLID_2_LAYER( this)); addAndDropMaterialRenderer(new COpenGLMaterialRenderer_SOLID_2_LAYER(this));
// add the same renderer for all lightmap types // add the same renderer for all lightmap types
COpenGLMaterialRenderer_LIGHTMAP* lmr = new COpenGLMaterialRenderer_LIGHTMAP( this); COpenGLMaterialRenderer_LIGHTMAP* lmr = new COpenGLMaterialRenderer_LIGHTMAP( this);
......
...@@ -78,12 +78,13 @@ void COpenGLShaderMaterialRenderer::init(s32& outMaterialTypeNr, const c8* verte ...@@ -78,12 +78,13 @@ void COpenGLShaderMaterialRenderer::init(s32& outMaterialTypeNr, const c8* verte
{ {
outMaterialTypeNr = -1; outMaterialTypeNr = -1;
bool failure;
// create vertex shader // create vertex shader
if (!createVertexShader(vertexShaderProgram)) failure=createVertexShader(vertexShaderProgram);
return;
// create pixel shader // create pixel shader
if (!createPixelShader(pixelShaderProgram)) if (!createPixelShader(pixelShaderProgram) || failure)
return; return;
// register as a new material // register as a new material
...@@ -194,6 +195,9 @@ bool COpenGLShaderMaterialRenderer::createPixelShader(const c8* pxsh) ...@@ -194,6 +195,9 @@ bool COpenGLShaderMaterialRenderer::createPixelShader(const c8* pxsh)
sprintf(tmp, "Pixel shader compilation failed at position %d:\n%s", errPos, errString); sprintf(tmp, "Pixel shader compilation failed at position %d:\n%s", errPos, errString);
os::Printer::log(tmp); os::Printer::log(tmp);
Driver->extGlDeletePrograms(1, &PixelShader);
PixelShader=0;
return false; return false;
} }
#else #else
...@@ -215,7 +219,7 @@ bool COpenGLShaderMaterialRenderer::createVertexShader(const char* vtxsh) ...@@ -215,7 +219,7 @@ bool COpenGLShaderMaterialRenderer::createVertexShader(const char* vtxsh)
// clear error buffer // clear error buffer
while(glGetError() != GL_NO_ERROR) while(glGetError() != GL_NO_ERROR)
{} {}
// compile // compile
Driver->extGlProgramString(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, Driver->extGlProgramString(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
...@@ -233,6 +237,9 @@ bool COpenGLShaderMaterialRenderer::createVertexShader(const char* vtxsh) ...@@ -233,6 +237,9 @@ bool COpenGLShaderMaterialRenderer::createVertexShader(const char* vtxsh)
sprintf(tmp, "Vertex shader compilation failed at position %d:\n%s", errPos, errString); sprintf(tmp, "Vertex shader compilation failed at position %d:\n%s", errPos, errString);
os::Printer::log(tmp); os::Printer::log(tmp);
Driver->extGlDeletePrograms(1, &VertexShader);
VertexShader=0;
return false; return false;
} }
#else #else
......
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