diff --git a/kivy/graphics/egl_backend/egl_angle_metal.pyx b/kivy/graphics/egl_backend/egl_angle_metal.pyx index a994eaa919..1deefa237b 100644 --- a/kivy/graphics/egl_backend/egl_angle_metal.pyx +++ b/kivy/graphics/egl_backend/egl_angle_metal.pyx @@ -1,28 +1,25 @@ -cdef extern from "egl_angle_metal_implem.h": - ctypedef void *metalangle_context_t - ctypedef void *metalangle_nativelayer_t - metalangle_context_t metalangle_create_context(void * nativeMetalLayer) - void metalangle_swap_buffers(metalangle_context_t context) +cdef extern from "egl_angle_metal_implem.mm": + cppclass MetalANGLEGraphicsContext: + MetalANGLEGraphicsContext(void* nativeMetalLayer) + void swapBuffersEGL() cdef class EGLMetalANGLE: - cdef metalangle_context_t ctx - cdef metalangle_nativelayer_t native_layer + cdef MetalANGLEGraphicsContext* ctx + cdef void* native_layer def __cinit__(self): self.native_layer = NULL self.ctx = NULL cdef void set_native_layer(self, void * native_layer) except *: - self.native_layer = native_layer + self.native_layer = native_layer def swap_buffers(self): - metalangle_swap_buffers(self.ctx) + self.ctx.swapBuffersEGL() def create_context(self): - self.ctx = metalangle_create_context(self.native_layer) + self.ctx = new MetalANGLEGraphicsContext(self.native_layer) def destroy_context(self): pass - - diff --git a/kivy/graphics/egl_backend/egl_angle_metal_implem.h b/kivy/graphics/egl_backend/egl_angle_metal_implem.h index 35e1006509..6d1d838708 100644 --- a/kivy/graphics/egl_backend/egl_angle_metal_implem.h +++ b/kivy/graphics/egl_backend/egl_angle_metal_implem.h @@ -3,10 +3,18 @@ #include #include +class MetalANGLEGraphicsContext +{ +public: + MetalANGLEGraphicsContext(void *nativeMetalLayer); + ~MetalANGLEGraphicsContext(); + void swapBuffersEGL(); + void initialiseEGLDisplay(); + void initialiseEGLContext(); -typedef void *metalangle_context_t; -typedef CAMetalLayer *metalangle_nativelayer_t; - -// Methods to easily interact with Cython (The objc++ code is not directly callable from Cython) -metalangle_context_t metalangle_create_context(void * nativeMetalLayer); -void metalangle_swap_buffers(metalangle_context_t context); \ No newline at end of file +private: + void *m_nativeMetalLayer; + EGLContext m_contextObj; + EGLDisplay m_displayObj; + EGLSurface m_surfaceObj; +}; \ No newline at end of file diff --git a/kivy/graphics/egl_backend/egl_angle_metal_implem.m b/kivy/graphics/egl_backend/egl_angle_metal_implem.mm similarity index 86% rename from kivy/graphics/egl_backend/egl_angle_metal_implem.m rename to kivy/graphics/egl_backend/egl_angle_metal_implem.mm index d996fcd95a..66b00fbe3b 100644 --- a/kivy/graphics/egl_backend/egl_angle_metal_implem.m +++ b/kivy/graphics/egl_backend/egl_angle_metal_implem.mm @@ -1,20 +1,6 @@ #include "egl_angle_metal_implem.h" -class MetalANGLEGraphicsContext { -public: - MetalANGLEGraphicsContext(void * nativeMetalLayer); - ~MetalANGLEGraphicsContext(); - void swapBuffersEGL(); - void initialiseEGLDisplay(); - void initialiseEGLContext(); -private: - void * m_nativeMetalLayer; - EGLContext m_contextObj; - EGLDisplay m_displayObj; - EGLSurface m_surfaceObj; -}; - MetalANGLEGraphicsContext::MetalANGLEGraphicsContext(void * nativeMetalLayer) { m_nativeMetalLayer = nativeMetalLayer; // Initialize the EGL display @@ -136,12 +122,4 @@ // Set the context m_contextObj = context; -} - -metalangle_context_t metalangle_create_context(void * nativeMetalLayer) { - return new MetalANGLEGraphicsContext(nativeMetalLayer); -} - -void metalangle_swap_buffers(metalangle_context_t context) { - ((MetalANGLEGraphicsContext *)context)->swapBuffersEGL(); } \ No newline at end of file diff --git a/setup.py b/setup.py index 2a027035cd..23a8a6ff31 100644 --- a/setup.py +++ b/setup.py @@ -1041,7 +1041,7 @@ def determine_sdl2(): gl_flags, { "extra_compile_args": ["-ObjC++"], - "c_depends": ["graphics/egl_backend/egl_angle_metal_implem.m"], + 'language': 'c++', }, )