def draw_text(self, text, color=(1.0, 1.0, 1.0, 0.0),
view_matrix=None, projection_matrix=None):
gl.glUseProgram(self._program_id)
gl.glActiveTexture(gl.GL_TEXTURE0+0)
gl.glBindTexture(gl.GL_TEXTURE_2D, self._texture_id)
gl.glBindSampler(0, self._sampler_id)
gl.glUniform1i(self._uniform_locations['u_fonttex'], 0)
gl.glUniform4f(self._uniform_locations['u_color'], *color)
if view_matrix is not None:
self._matrix.dot(view_matrix, out=self._modelview_matrix)
gl.glUniformMatrix4fv(self._uniform_locations['u_modelviewMatrix'], 1, False, self._modelview_matrix)
if projection_matrix is not None:
gl.glUniformMatrix4fv(self._uniform_locations['u_projectionMatrix'], 1, False, projection_matrix)
gl.glEnableVertexAttribArray(0)
gl.glEnableVertexAttribArray(1)
gl.glEnable(gl.GL_BLEND)
gl.glBlendFunc(gl.GL_SRC_ALPHA, gl.GL_ONE_MINUS_SRC_ALPHA)
x = 0.0
text = [ord(c) - 32 for c in text]
for i in text:
if i >= 0 and i < 95:
gl.glBindBuffer(gl.GL_ARRAY_BUFFER, self._buffer_ids[i])
gl.glVertexAttribPointer(0, 2, gl.GL_FLOAT, False, 0, c_void_p(0))
gl.glVertexAttribPointer(1, 2, gl.GL_FLOAT, False, 0, c_void_p(8*4))
gl.glUniform1f(self._uniform_locations['advance'], x)
gl.glDrawArrays(gl.GL_TRIANGLE_STRIP, 0, 4)
x += self._advance[i]
gl.glDisableVertexAttribArray(0)
gl.glDisableVertexAttribArray(1)
gl.glDisable(gl.GL_BLEND)
评论列表
文章目录