"""
VertexBase
================
Specializes the abstract façade into a slightly more concrete base (manages a GL handle, context manager behavior, common boilerplate).
Leaves rendering-specific logic to subclasses like ModernVertexArrayGroup.
Follows the "abstract base + partial implementation" pattern.
"""
from picogl.buffers.abstract import AbstractVertexGroup
from picogl.buffers.attributes import LayoutDescriptor
[docs]
class VertexBase(AbstractVertexGroup):
"""
Generic OpenGL object interface with binding lifecycle.
Provides handle + context manager, leaves binding to subclasses.
"""
[docs]
def __init__(self, handle: int = None):
[docs]
def bind(self):
raise NotImplementedError
[docs]
def unbind(self):
raise NotImplementedError
[docs]
def delete(self):
raise NotImplementedError
[docs]
def __enter__(self):
self.bind()
return self
[docs]
def __exit__(self, exc_type, exc_val, exc_tb):
self.unbind()
[docs]
def attach_buffers(self, nbo=None, cbo=None, vbo=None, ebo=None) -> None:
"""Attach the buffers that the VAO/group should coordinate."""
pass
[docs]
def set_layout(self, layout: LayoutDescriptor) -> None:
"""Define the attribute layout for this VAO/group."""
pass