from dataclasses import dataclass
from enum import Enum
from typing import Callable
from OpenGL.GL import glGetDoublev, glGetFloatv, glGetIntegerv
from OpenGL.raw.GL.ARB.viewport_array import GL_VIEWPORT
from OpenGL.raw.GL.VERSION.GL_1_0 import (
GL_LINE_WIDTH,
GL_MAX_TEXTURE_SIZE,
GL_MODELVIEW_MATRIX,
GL_PROJECTION_MATRIX,
)
from OpenGL.raw.GL.VERSION.GL_1_3 import GL_ACTIVE_TEXTURE
from OpenGL.raw.GL.VERSION.GL_1_5 import GL_ELEMENT_ARRAY_BUFFER_BINDING
from OpenGL.raw.GL.VERSION.GL_2_0 import GL_CURRENT_PROGRAM
from OpenGL.raw.GL.VERSION.GL_4_5 import GL_TEXTURE_BINDING_2D
@dataclass(frozen=True)
[docs]
class GLParamSpec:
"""Specification for a gl state parameter."""
[docs]
class GLParam(Enum):
"""Gl Param"""
[docs]
ACTIVE_TEXTURE = GLParamSpec(
pname=GL_ACTIVE_TEXTURE,
getter=glGetIntegerv,
length=1,
)
[docs]
TEXTURE_BINDING_2D = GLParamSpec(
pname=GL_TEXTURE_BINDING_2D,
getter=glGetIntegerv,
length=1,
)
[docs]
MAX_TEXTURE_SIZE = GLParamSpec(
pname=GL_MAX_TEXTURE_SIZE,
getter=glGetIntegerv,
length=1,
)
[docs]
VIEWPORT = GLParamSpec(
pname=GL_VIEWPORT,
getter=glGetIntegerv,
length=4,
)
[docs]
CURRENT_PROGRAM = GLParamSpec(
pname=GL_CURRENT_PROGRAM,
getter=glGetIntegerv,
length=1,
)
[docs]
LINE_WIDTH = GLParamSpec(
pname=GL_LINE_WIDTH,
getter=glGetFloatv,
length=1,
)
[docs]
ELEMENT_ARRAY_BUFFER_BINDING = GLParamSpec(
pname=GL_ELEMENT_ARRAY_BUFFER_BINDING,
getter=glGetIntegerv,
length=1,
)
[docs]
MODELVIEW_MATRIX = GLParamSpec(
pname=GL_MODELVIEW_MATRIX,
getter=glGetDoublev,
length=16,
)
[docs]
PROJECTION_MATRIX = GLParamSpec(
pname=GL_PROJECTION_MATRIX,
getter=glGetDoublev,
length=16,
)