traceback.print_exc()
else:
for obj in objList:
- obj._loadAnim = openglGui.animation(self, 1, 0, 1.5)
+ if self._objectLoadShader is not None:
+ obj._loadAnim = openglGui.animation(self, 1, 0, 1.5)
+ else:
+ obj._loadAnim = None
self._scene.add(obj)
self._scene.centerAll()
self._selectObject(obj)
except:
pass
if self._objectShader is None:
- self._objectShader = opengl.GLShader("""
+ if opengl.hasShaderSupport():
+ self._objectShader = opengl.GLShader("""
varying float light_amount;
void main(void)
light_amount = abs(dot(normalize(gl_NormalMatrix * gl_Normal), normalize(gl_LightSource[0].position.xyz)));
light_amount += 0.2;
}
- ""","""
+ ""","""
varying float light_amount;
void main(void)
{
gl_FragColor = vec4(gl_Color.xyz * light_amount, gl_Color[3]);
}
- """)
- self._objectOverhangShader = opengl.GLShader("""
+ """)
+ self._objectOverhangShader = opengl.GLShader("""
uniform float cosAngle;
uniform mat3 rotMatrix;
varying float light_amount;
light_amount = -10.0;
}
}
- ""","""
+ ""","""
varying float light_amount;
void main(void)
gl_FragColor = vec4(gl_Color.xyz * light_amount, gl_Color[3]);
}
}
- """)
- self._objectLoadShader = opengl.GLShader("""
+ """)
+ self._objectLoadShader = opengl.GLShader("""
uniform float intensity;
uniform float scale;
varying float light_amount;
{
gl_FragColor = vec4(gl_Color.xyz * light_amount, 1.0-intensity);
}
- """)
+ """)
+ else:
+ self._objectShader = opengl.GLFakeShader()
+ self._objectOverhangShader = opengl.GLFakeShader()
+ self._objectLoadShader = None
self._init3DView()
glTranslate(0,0,-self._zoom)
glRotate(-self._pitch, 1,0,0)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
glEnable(GL_BLEND)
- self._objectLoadShader.bind()
- glColor4f(0.2, 0.6, 1.0, 1.0)
- for obj in self._scene.objects():
- if obj._loadAnim is None:
- continue
- self._objectLoadShader.setUniform('intensity', obj._loadAnim.getPosition())
- self._objectLoadShader.setUniform('scale', obj.getBoundaryCircle() / 10)
- self._renderObject(obj)
- self._objectLoadShader.unbind()
- glDisable(GL_BLEND)
+ if self._objectLoadShader is not None:
+ self._objectLoadShader.bind()
+ glColor4f(0.2, 0.6, 1.0, 1.0)
+ for obj in self._scene.objects():
+ if obj._loadAnim is None:
+ continue
+ self._objectLoadShader.setUniform('intensity', obj._loadAnim.getPosition())
+ self._objectLoadShader.setUniform('scale', obj.getBoundaryCircle() / 10)
+ self._renderObject(obj)
+ self._objectLoadShader.unbind()
+ glDisable(GL_BLEND)
self._drawMachine()
self._refCounter -= 1
return self._refCounter <= 0
+def hasShaderSupport():
+ return glCreateShader != False
+
class GLShader(GLReferenceCounter):
def __init__(self, vertexProgram, fragmentProgram):
super(GLShader, self).__init__()
if self._program is not None and bool(glDeleteProgram):
print "Shader was not properly released!"
+#A Class that acts as an OpenGL shader, but in reality is not none.
+class GLFakeShader(GLReferenceCounter):
+ def __init__(self):
+ super(GLFakeShader, self).__init__()
+
+ def bind(self):
+ glEnable(GL_LIGHTING)
+ glEnable(GL_LIGHT0)
+ glEnable(GL_COLOR_MATERIAL)
+ glLightfv(GL_LIGHT0, GL_DIFFUSE, [0.3,0.3,0.3,1])
+ glLightfv(GL_LIGHT0, GL_AMBIENT, [0,0,0,0])
+
+ def unbind(self):
+ glDisable(GL_LIGHTING)
+
+ def release(self):
+ pass
+
+ def setUniform(self, name, value):
+ pass
+
+ def isValid(self):
+ return True
+
+ def getVertexShader(self):
+ return ''
+
+ def getFragmentShader(self):
+ return ''
+
class GLVBO(GLReferenceCounter):
def __init__(self, vertexArray, normalArray = None):
super(GLVBO, self).__init__()