def __init__(self, gl, v=[], vtf=[], f=[]): if not Geometry.solid_shader: Geometry.solid_shader = makeProgram(gl, "330 core", [GL_VERTEX_SHADER, GL_GEOMETRY_SHADER, GL_FRAGMENT_SHADER], open("shaders/solid_shader.glsl").read()) if not Geometry.wire_shader: Geometry.wire_shader = makeProgram(gl, "330 core", [GL_VERTEX_SHADER, GL_GEOMETRY_SHADER, GL_FRAGMENT_SHADER], open("shaders/wireframe_shader.glsl").read()) if not Geometry.flat_shader: Geometry.flat_shader = makeProgram(gl, "330 core", [GL_VERTEX_SHADER, GL_FRAGMENT_SHADER], open("shaders/flat_color_shader.glsl").read()) self.verts = v self.vertToFaces = vtf self.faces = f self.selected = [] self.constrained = [] # Creating the VAO and VBO(s) for mesh # self.vao = GLuint(0) gl.glGenVertexArrays(1, self.vao) gl.glBindVertexArray(self.vao) # Index IBO idx_array = pygloo.c_array(GLuint, _flatten_list(self.faces)) self.ibo = GLuint(0) self.ibo_size = len(idx_array) gl.glGenBuffers(1, self.ibo) gl.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.ibo); gl.glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(idx_array), idx_array, GL_STATIC_DRAW); # Vertex Position VBO self.vbo_pos = GLuint(0) gl.glGenBuffers(1, self.vbo_pos) gl.glBindVertexArray(0) # Creating the VAO(s) for selected/constrained points # # Selected self.vao_selected = GLuint(0) gl.glGenVertexArrays(1, self.vao_selected) gl.glBindVertexArray(self.vao_selected) self.ibo_selected = GLuint(0) gl.glGenBuffers(1, self.ibo_selected) # Constrained self.vao_constrained = GLuint(0) gl.glGenVertexArrays(1, self.vao_constrained) gl.glBindVertexArray(self.vao_constrained) self.ibo_constrained = GLuint(0) gl.glGenBuffers(1, self.ibo_constrained) # Make the update self.update(gl)
def load_shader(self, gl, tag, source, shader_types = [GL_VERTEX_SHADER, GL_FRAGMENT_SHADER]): prog = makeProgram(gl, "330 core", shader_types, source) self.shader_dict[tag] = prog print "Added Shader Asset :: tag={t} prog={p}".format(t=tag, p=prog)
def __init__(self, gl, v=[], vtf=[], f=[]): if not Geometry.solid_shader: Geometry.solid_shader = makeProgram( gl, "330 core", [GL_VERTEX_SHADER, GL_GEOMETRY_SHADER, GL_FRAGMENT_SHADER], open("shaders/solid_shader.glsl").read()) if not Geometry.wire_shader: Geometry.wire_shader = makeProgram( gl, "330 core", [GL_VERTEX_SHADER, GL_GEOMETRY_SHADER, GL_FRAGMENT_SHADER], open("shaders/wireframe_shader.glsl").read()) if not Geometry.flat_shader: Geometry.flat_shader = makeProgram( gl, "330 core", [GL_VERTEX_SHADER, GL_FRAGMENT_SHADER], open("shaders/flat_color_shader.glsl").read()) self.verts = v self.vertToFaces = vtf self.faces = f self.selected = [] self.constrained = [] # Creating the VAO and VBO(s) for mesh # self.vao = GLuint(0) gl.glGenVertexArrays(1, self.vao) gl.glBindVertexArray(self.vao) # Index IBO idx_array = pygloo.c_array(GLuint, _flatten_list(self.faces)) self.ibo = GLuint(0) self.ibo_size = len(idx_array) gl.glGenBuffers(1, self.ibo) gl.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, self.ibo) gl.glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(idx_array), idx_array, GL_STATIC_DRAW) # Vertex Position VBO self.vbo_pos = GLuint(0) gl.glGenBuffers(1, self.vbo_pos) gl.glBindVertexArray(0) # Creating the VAO(s) for selected/constrained points # # Selected self.vao_selected = GLuint(0) gl.glGenVertexArrays(1, self.vao_selected) gl.glBindVertexArray(self.vao_selected) self.ibo_selected = GLuint(0) gl.glGenBuffers(1, self.ibo_selected) # Constrained self.vao_constrained = GLuint(0) gl.glGenVertexArrays(1, self.vao_constrained) gl.glBindVertexArray(self.vao_constrained) self.ibo_constrained = GLuint(0) gl.glGenBuffers(1, self.ibo_constrained) # Make the update self.update(gl)