Source code for picogl.backend.geometry.legacy_mesh_binding

"""
Sticky client-array binding for legacy immediate-mode meshes.
"""

from __future__ import annotations

from typing import Any

from picogl.backend.gl.state.client import GLClientState
from picogl.backend.gl.wrappers import (
    gl_disable_legacy_client_state,
    gl_enable_legacy_client_state,
)
from picogl.backend.gl.wrappers.pointer import (
    gl_color_array_pointer,
    gl_normal_array_pointer,
    gl_texcoord_array_pointer,
    gl_vertex_array_pointer,
)
from picogl.renderer.initializable import Bindable
from picogl.renderer.meshdata import MeshData


[docs] class LegacyClientMeshBinding(Bindable): """Sticky client-array setup for one CPU mesh; unbind disables states.""" def __init__(self, mesh: Any) -> None: super().__init__()
[docs] self._mesh: MeshData = mesh
[docs] def _do_binding(self) -> None: m = self._mesh if m.vertices is not None: gl_enable_legacy_client_state(GLClientState.VERTEX) gl_vertex_array_pointer(pointer=m.vertices) if m.normals is not None: gl_enable_legacy_client_state(GLClientState.NORMAL) gl_normal_array_pointer(pointer=m.normals) if m.colors is not None: gl_enable_legacy_client_state(GLClientState.COLOR) gl_color_array_pointer(pointer=m.colors) if getattr(m, "texcoords", None) is not None: gl_enable_legacy_client_state(GLClientState.TEXCOORD) gl_texcoord_array_pointer(pointer=m.texcoords)
[docs] def _do_unbinding(self) -> None: """do unbinding if mesh is unbinded.""" mesh = self._mesh if getattr(mesh, "texcoords", None) is not None: gl_disable_legacy_client_state(GLClientState.TEXCOORD) if mesh.colors is not None: gl_disable_legacy_client_state(GLClientState.COLOR) if mesh.normals is not None: gl_disable_legacy_client_state(GLClientState.NORMAL) if mesh.vertices is not None: gl_disable_legacy_client_state(GLClientState.VERTEX)