-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathShaderFactory.py
More file actions
90 lines (51 loc) · 1.85 KB
/
ShaderFactory.py
File metadata and controls
90 lines (51 loc) · 1.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
'''
* ShaderFactory.py
*
* Created on: 15.12.2018
* Author: Andrew Jason Bishop
*
* General description:
* xxx
'''
import OpenGL.GL as GL
import OpenGL.GL.shaders as sh
import ShaderProgram as sp
class ShaderFactory:
def __init__(self):
self.programID = None
self.shaderIDs = None
def compile_shaderProgram(self):
self.createProgramID()
self.compileShaders()
self.attachShaders()
self.bindAttributes()
self.linkAndValidateProgram()
return self.createShaderProgram()
def createProgramID(self):
self.programID = GL.glCreateProgram()
def compileShaders(self):
vs = self.compileShader( 'vertexShader.glslv', GL.GL_VERTEX_SHADER )
fs = self.compileShader( 'fragmentShader.glslf', GL.GL_FRAGMENT_SHADER )
self.shaderIDs = [vs, fs]
def compileShader(self, _fileName, _glShaderType):
shaderSrc = self.read_shaderSource( _fileName )
shaderID = sh.compileShader( shaderSrc, _glShaderType)
return shaderID
def read_shaderSource(self, _fileName):
with open(_fileName, 'r') as inFile:
shaderSrc = inFile.read()
return shaderSrc
def attachShaders(self):
for shaderID in self.shaderIDs:
GL.glAttachShader( self.programID, shaderID )
def linkAndValidateProgram(self):
GL.glLinkProgram( self.programID )
GL.glValidateProgram( self.programID )
def bindAttributes(self):
self.bindAttribute( 0, "vPosition" )
self.bindAttribute( 1, "texCoords" )
def bindAttribute(self, _attribute, _variableName):
GL.glBindAttribLocation( self.programID, _attribute, _variableName )
def createShaderProgram(self):
return sp.ShaderProgram( self.programID, self.shaderIDs )
''' END '''