Exemplo n.º 1
0
	def __init__(self, archivo_vert, archivo_frag,
				 nombre_vert="Vertex Shader", nombre_frag="Fragment Shader"):
		print("Shader creado")
		
		# Creación de shaders y programa
		self.vshader = glCreateShader(GL_VERTEX_SHADER)
		self.fshader = glCreateShader(GL_FRAGMENT_SHADER)
		self.programa = glCreateProgram()
		
		# Cargamos los datos de los archivos en los shaders
		self.cargar_datos(self.vshader, archivo_vert)
		self.cargar_datos(self.fshader, archivo_frag)
		# Compilamos los shaders
		resultado_vert = self.compilar(self.vshader, nombre_vert)
		resultado_frag = self.compilar(self.fshader, nombre_frag)
		
		# Error en la compilación
		if (resultado_vert != 1) or (resultado_frag != 1):
			self.destruir()
		# Sin errores hasta ahora
		else:
			# Enlazamos los shaders al programa
			glAttachShader(self.programa, self.vshader)
			glAttachShader(self.programa, self.fshader)
			# Enlazamos el programa
			glLinkProgram(self.programa)
			# Desenlazaos y eliminamos los shaders
			glDetachShader(self.programa, self.vshader)
			glDetachShader(self.programa, self.fshader)
			glDeleteShader(self.vshader)
			glDeleteShader(self.fshader)
			# Errores durante el enlace
			resultado_progr = glGetProgramiv(self.programa, GL_LINK_STATUS)
			if resultado_progr != 1:
				self.destruir()
Exemplo n.º 2
0
    def add_shader(self, source, shader_type):
        """ Helper function for compiling a GLSL shader

        Parameters
        ----------
        source : str
            String containing shader source code

        shader_type : valid OpenGL shader type
            Type of shader to compile

        Returns
        -------
        value : int
            Identifier for shader if compilation is successful

        """
        try:
            shader_id = glCreateShader(shader_type)
            glShaderSource(shader_id, source)
            glCompileShader(shader_id)
            if glGetShaderiv(shader_id, GL_COMPILE_STATUS) != GL_TRUE:
                info = glGetShaderInfoLog(shader_id)
                raise RuntimeError('Shader compilation failed: %s' % (info))
            return shader_id
        except:
            glDeleteShader(shader_id)
            raise
Exemplo n.º 3
0
    def __load_shader(self, shader_filename, shader_type):
        """Load shader of specific type from file."""
        shader_source = ''
        with open(shader_filename) as shader_file:
            shader_source = shader_file.read()
            assert shader_source

        shader_id = glCreateShader(shader_type)
        self.__shaders[shader_type].append(shader_id)
        glShaderSource(shader_id, shader_source)
        glCompileShader(shader_id)
Exemplo n.º 4
0
 def create_shader(self, source, shadertype):
     shader = glCreateShader(shadertype)
     # PyOpenGL bug ? He's waiting for a list of string, not a string
     # on some card, it failed :)
     if isinstance(source, basestring):
         source = [source]
     glShaderSource(shader, source)
     glCompileShader(shader)
     message = self.get_shader_log(shader)
     if message:
         pymt_logger.debug('Shader: shader message: %s' % message)
     return shader
Exemplo n.º 5
0
def make_shader(shadertype, source):
    shader = glCreateShader(shadertype)
    glShaderSource(shader, source)
    glCompileShader(shader)
    retval = ctypes.c_uint(GL_UNSIGNED_INT)
    glGetShaderiv(shader, GL_COMPILE_STATUS, retval)
    if not retval:
        print >> sys.stderr, "Failed to compile shader."
        print glGetShaderInfoLog(shader)
        glDeleteShader(shader)
        raise Exception("Failed to compile shader.")
    return shader
Exemplo n.º 6
0
 def add_shader(self, source, shader_type):
     try:
         #print "TEST"
         #print source
         shader_id = glCreateShader(shader_type)
         glShaderSource(shader_id, source)
         glCompileShader(shader_id)
         if glGetShaderiv(shader_id, GL_COMPILE_STATUS) != GL_TRUE:
            info = glGetShaderInfoLog(shader_id)
            raise RuntimeError('Shader compilation failed: %s' % (info))
         return shader_id
     except:
         glDeleteShader(shader_id)
         raise
Exemplo n.º 7
0
 def _createShader(self, shadertype, source):
     try:
         shader = None
         shader = glCreateShader(shadertype)
         glShaderSource(shader, source)
         glCompileShader(shader)
         if glGetShaderiv(shader, GL_COMPILE_STATUS) != GL_TRUE:
             info = glGetShaderInfoLog(shader)
             raise Exception, "Unable to compile shader. Infolog:\n%s" % (info,)
         return shader
     except Exception:
         # Cleanup on exception
         if shader != None:
             glDeleteShader(shader)
         raise
	def attachShader(self,type,source):
		shader = glCreateShader(type)
		glShaderSource(shader,source)
		glCompileShader(shader)
		shader_log = glGetShaderInfoLog(shader)
		if shader_log:
			if type == GL_FRAGMENT_SHADER:
				str_type = "GL_FRAGMENT_SHADER"
			elif type == GL_VERTEX_SHADER:
				str_type = "GL_VERTEX_SHADER"
			elif type == GL_GEOMETRY_SHADER:
				str_type = "GL_GEOMETRY_SHADER"
			else:
				str_type = "unkown shader type %s" % str(type)
			raise RuntimeError("%s\n%s" % (str_type, shader_log))
		glAttachShader(self.program_id, shader)
		self._shaders.append(shader)
Exemplo n.º 9
0
 def _alloc(self):
     # pylint: disable=assignment-from-no-return
     self._hnd = glCreateShader(self._kind)
     logging.info('glCreateShader(%s) -> %d', self._kind.name, self._hnd)
     if self._hnd == 0:
         raise ValueError('glCreateShader failed')
Exemplo n.º 10
0
 def _alloc(self):
     # pylint: disable=assignment-from-no-return
     self._hnd = glCreateShader(self._kind)
     logging.info('glCreateShader(%s) -> %d', self._kind.name, self._hnd)
     if self._hnd == 0:
         raise ValueError('glCreateShader failed')
Exemplo n.º 11
0
 def __alloc(cls, shader_type):
     sobj = super().__new__(cls)
     sobj.sid = c_uint(glCreateShader(shader_type))
     sobj.owned = True
     return sobj