(self, width=1600, height=1200, name='GL Renderer',
program_files=['simple.fs', 'simple.vs'], color_size=1, ms_rate=1, egl=False)
| 8 | # NOTE: Render class assumes GL context is created already. |
| 9 | class Render: |
| 10 | def __init__(self, width=1600, height=1200, name='GL Renderer', |
| 11 | program_files=['simple.fs', 'simple.vs'], color_size=1, ms_rate=1, egl=False): |
| 12 | self.width = width |
| 13 | self.height = height |
| 14 | self.name = name |
| 15 | self.use_inverse_depth = False |
| 16 | self.egl = egl |
| 17 | |
| 18 | glEnable(GL_DEPTH_TEST) |
| 19 | |
| 20 | glClampColor(GL_CLAMP_READ_COLOR, GL_FALSE) |
| 21 | glClampColor(GL_CLAMP_FRAGMENT_COLOR, GL_FALSE) |
| 22 | glClampColor(GL_CLAMP_VERTEX_COLOR, GL_FALSE) |
| 23 | |
| 24 | # init program |
| 25 | shader_list = [] |
| 26 | |
| 27 | for program_file in program_files: |
| 28 | _, ext = os.path.splitext(program_file) |
| 29 | if ext == '.vs': |
| 30 | shader_list.append(loadShader(GL_VERTEX_SHADER, program_file)) |
| 31 | elif ext == '.fs': |
| 32 | shader_list.append(loadShader(GL_FRAGMENT_SHADER, program_file)) |
| 33 | elif ext == '.gs': |
| 34 | shader_list.append(loadShader(GL_GEOMETRY_SHADER, program_file)) |
| 35 | |
| 36 | self.program = createProgram(shader_list) |
| 37 | |
| 38 | for shader in shader_list: |
| 39 | glDeleteShader(shader) |
| 40 | |
| 41 | # Init uniform variables |
| 42 | self.model_mat_unif = glGetUniformLocation(self.program, 'ModelMat') |
| 43 | self.persp_mat_unif = glGetUniformLocation(self.program, 'PerspMat') |
| 44 | |
| 45 | self.vertex_buffer = glGenBuffers(1) |
| 46 | |
| 47 | # Init screen quad program and buffer |
| 48 | self.quad_program, self.quad_buffer = self.init_quad_program() |
| 49 | |
| 50 | # Configure frame buffer |
| 51 | self.frame_buffer = glGenFramebuffers(1) |
| 52 | glBindFramebuffer(GL_FRAMEBUFFER, self.frame_buffer) |
| 53 | |
| 54 | self.intermediate_fbo = None |
| 55 | if ms_rate > 1: |
| 56 | # Configure texture buffer to render to |
| 57 | self.color_buffer = [] |
| 58 | for i in range(color_size): |
| 59 | color_buffer = glGenTextures(1) |
| 60 | multi_sample_rate = ms_rate |
| 61 | glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, color_buffer) |
| 62 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE) |
| 63 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE) |
| 64 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR) |
| 65 | glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR) |
| 66 | glTexImage2DMultisample(GL_TEXTURE_2D_MULTISAMPLE, multi_sample_rate, GL_RGBA32F, self.width, self.height, GL_TRUE) |
| 67 | glBindTexture(GL_TEXTURE_2D_MULTISAMPLE, 0) |
nothing calls this directly
no test coverage detected