"""
Provides a legacy OpenGL rendering backend for handling OpenGL state changes
and material properties.
This module defines the `LegacyOpenGLBackend` class, which allows enabling
and disabling OpenGL capabilities, configuring blending functions, managing
depth masks, and setting material properties. It serves as an abstraction
over low-level OpenGL calls using the pyOpenGL library.
"""
from picogl.backend.gl.capability import FACE_MAP, GLMaterialFace, PhongMaterial
from picogl.backend.gl.state.fill import GLLightParameter
from picogl.backend.gl.wrappers.blending import gl_blend_func
from picogl.backend.gl.wrappers.depth import gl_get_depth_mask, gl_set_depth_mask
from picogl.backend.gl.wrappers.enable import gl_disable, gl_enable, gl_is_enabled
from picogl.backend.gl.wrappers.material import gl_material_f, gl_material_fv
from picogl.renderer.backend import RenderBackend
[docs]
class LegacyOpenGLBackend(RenderBackend):
"""Legacy OpenGL Backend"""
[docs]
def enable(self, cap):
gl_enable(cap)
[docs]
def disable(self, cap):
gl_disable(cap)
[docs]
def is_enabled(self, cap):
return gl_is_enabled(cap)
[docs]
def set_blend_func(self, src, dst):
gl_blend_func(src, dst)
[docs]
def set_depth_mask(self, flag):
gl_set_depth_mask(flag)
[docs]
def get_depth_mask(self):
return gl_get_depth_mask()
[docs]
def set_material(self, face: GLMaterialFace, mat: PhongMaterial):
f = FACE_MAP[face]
gl_material_fv(f, GLLightParameter.AMBIENT, mat.ambient)
gl_material_fv(f, GLLightParameter.DIFFUSE, mat.diffuse)
gl_material_fv(f, GLLightParameter.SPECULAR, mat.specular)
gl_material_f(f, GLLightParameter.SHININESS, mat.shininess)