summaryrefslogtreecommitdiff
path: root/indra/llrender/llglslshader.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'indra/llrender/llglslshader.cpp')
-rw-r--r--indra/llrender/llglslshader.cpp8
1 files changed, 6 insertions, 2 deletions
diff --git a/indra/llrender/llglslshader.cpp b/indra/llrender/llglslshader.cpp
index 902c08b6ba..782304ae41 100644
--- a/indra/llrender/llglslshader.cpp
+++ b/indra/llrender/llglslshader.cpp
@@ -344,13 +344,17 @@ void LLGLSLShader::unloadInternal()
{
GLhandleARB obj[1024];
GLsizei count;
+ glGetAttachedObjectsARB(mProgramObject, 1024, &count, obj);
- glGetAttachedObjectsARB(mProgramObject, sizeof(obj)/sizeof(obj[0]), &count, obj);
for (GLsizei i = 0; i < count; i++)
{
- glDetachObjectARB(mProgramObject, obj[i]);
+ // avoid opengl errors when multiple programs link a common shader obj
+ if (glIsShader(obj[i]))
+ {
+ glDetachObjectARB(mProgramObject, obj[i]);
glDeleteObjectARB(obj[i]);
}
+ }
glDeleteObjectARB(mProgramObject);