/* Generated by Cython 0.29.20 */

#define PY_SSIZE_T_CLEAN
#include "Python.h"
#ifndef Py_PYTHON_H
    #error Python headers needed to compile C extensions, please install development version of Python.
#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
    #error Cython requires Python 2.6+ or Python 3.3+.
#else
#define CYTHON_ABI "0_29_20"
#define CYTHON_HEX_VERSION 0x001D14F0
#define CYTHON_FUTURE_DIVISION 0
#include <stddef.h>
#ifndef offsetof
  #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
#endif
#if !defined(WIN32) && !defined(MS_WINDOWS)
  #ifndef __stdcall
    #define __stdcall
  #endif
  #ifndef __cdecl
    #define __cdecl
  #endif
  #ifndef __fastcall
    #define __fastcall
  #endif
#endif
#ifndef DL_IMPORT
  #define DL_IMPORT(t) t
#endif
#ifndef DL_EXPORT
  #define DL_EXPORT(t) t
#endif
#define __PYX_COMMA ,
#ifndef HAVE_LONG_LONG
  #if PY_VERSION_HEX >= 0x02070000
    #define HAVE_LONG_LONG
  #endif
#endif
#ifndef PY_LONG_LONG
  #define PY_LONG_LONG LONG_LONG
#endif
#ifndef Py_HUGE_VAL
  #define Py_HUGE_VAL HUGE_VAL
#endif
#ifdef PYPY_VERSION
  #define CYTHON_COMPILING_IN_PYPY 1
  #define CYTHON_COMPILING_IN_PYSTON 0
  #define CYTHON_COMPILING_IN_CPYTHON 0
  #undef CYTHON_USE_TYPE_SLOTS
  #define CYTHON_USE_TYPE_SLOTS 0
  #undef CYTHON_USE_PYTYPE_LOOKUP
  #define CYTHON_USE_PYTYPE_LOOKUP 0
  #if PY_VERSION_HEX < 0x03050000
    #undef CYTHON_USE_ASYNC_SLOTS
    #define CYTHON_USE_ASYNC_SLOTS 0
  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
    #define CYTHON_USE_ASYNC_SLOTS 1
  #endif
  #undef CYTHON_USE_PYLIST_INTERNALS
  #define CYTHON_USE_PYLIST_INTERNALS 0
  #undef CYTHON_USE_UNICODE_INTERNALS
  #define CYTHON_USE_UNICODE_INTERNALS 0
  #undef CYTHON_USE_UNICODE_WRITER
  #define CYTHON_USE_UNICODE_WRITER 0
  #undef CYTHON_USE_PYLONG_INTERNALS
  #define CYTHON_USE_PYLONG_INTERNALS 0
  #undef CYTHON_AVOID_BORROWED_REFS
  #define CYTHON_AVOID_BORROWED_REFS 1
  #undef CYTHON_ASSUME_SAFE_MACROS
  #define CYTHON_ASSUME_SAFE_MACROS 0
  #undef CYTHON_UNPACK_METHODS
  #define CYTHON_UNPACK_METHODS 0
  #undef CYTHON_FAST_THREAD_STATE
  #define CYTHON_FAST_THREAD_STATE 0
  #undef CYTHON_FAST_PYCALL
  #define CYTHON_FAST_PYCALL 0
  #undef CYTHON_PEP489_MULTI_PHASE_INIT
  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
  #undef CYTHON_USE_TP_FINALIZE
  #define CYTHON_USE_TP_FINALIZE 0
  #undef CYTHON_USE_DICT_VERSIONS
  #define CYTHON_USE_DICT_VERSIONS 0
  #undef CYTHON_USE_EXC_INFO_STACK
  #define CYTHON_USE_EXC_INFO_STACK 0
#elif defined(PYSTON_VERSION)
  #define CYTHON_COMPILING_IN_PYPY 0
  #define CYTHON_COMPILING_IN_PYSTON 1
  #define CYTHON_COMPILING_IN_CPYTHON 0
  #ifndef CYTHON_USE_TYPE_SLOTS
    #define CYTHON_USE_TYPE_SLOTS 1
  #endif
  #undef CYTHON_USE_PYTYPE_LOOKUP
  #define CYTHON_USE_PYTYPE_LOOKUP 0
  #undef CYTHON_USE_ASYNC_SLOTS
  #define CYTHON_USE_ASYNC_SLOTS 0
  #undef CYTHON_USE_PYLIST_INTERNALS
  #define CYTHON_USE_PYLIST_INTERNALS 0
  #ifndef CYTHON_USE_UNICODE_INTERNALS
    #define CYTHON_USE_UNICODE_INTERNALS 1
  #endif
  #undef CYTHON_USE_UNICODE_WRITER
  #define CYTHON_USE_UNICODE_WRITER 0
  #undef CYTHON_USE_PYLONG_INTERNALS
  #define CYTHON_USE_PYLONG_INTERNALS 0
  #ifndef CYTHON_AVOID_BORROWED_REFS
    #define CYTHON_AVOID_BORROWED_REFS 0
  #endif
  #ifndef CYTHON_ASSUME_SAFE_MACROS
    #define CYTHON_ASSUME_SAFE_MACROS 1
  #endif
  #ifndef CYTHON_UNPACK_METHODS
    #define CYTHON_UNPACK_METHODS 1
  #endif
  #undef CYTHON_FAST_THREAD_STATE
  #define CYTHON_FAST_THREAD_STATE 0
  #undef CYTHON_FAST_PYCALL
  #define CYTHON_FAST_PYCALL 0
  #undef CYTHON_PEP489_MULTI_PHASE_INIT
  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
  #undef CYTHON_USE_TP_FINALIZE
  #define CYTHON_USE_TP_FINALIZE 0
  #undef CYTHON_USE_DICT_VERSIONS
  #define CYTHON_USE_DICT_VERSIONS 0
  #undef CYTHON_USE_EXC_INFO_STACK
  #define CYTHON_USE_EXC_INFO_STACK 0
#else
  #define CYTHON_COMPILING_IN_PYPY 0
  #define CYTHON_COMPILING_IN_PYSTON 0
  #define CYTHON_COMPILING_IN_CPYTHON 1
  #ifndef CYTHON_USE_TYPE_SLOTS
    #define CYTHON_USE_TYPE_SLOTS 1
  #endif
  #if PY_VERSION_HEX < 0x02070000
    #undef CYTHON_USE_PYTYPE_LOOKUP
    #define CYTHON_USE_PYTYPE_LOOKUP 0
  #elif !defined(CYTHON_USE_PYTYPE_LOOKUP)
    #define CYTHON_USE_PYTYPE_LOOKUP 1
  #endif
  #if PY_MAJOR_VERSION < 3
    #undef CYTHON_USE_ASYNC_SLOTS
    #define CYTHON_USE_ASYNC_SLOTS 0
  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
    #define CYTHON_USE_ASYNC_SLOTS 1
  #endif
  #if PY_VERSION_HEX < 0x02070000
    #undef CYTHON_USE_PYLONG_INTERNALS
    #define CYTHON_USE_PYLONG_INTERNALS 0
  #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
    #define CYTHON_USE_PYLONG_INTERNALS 1
  #endif
  #ifndef CYTHON_USE_PYLIST_INTERNALS
    #define CYTHON_USE_PYLIST_INTERNALS 1
  #endif
  #ifndef CYTHON_USE_UNICODE_INTERNALS
    #define CYTHON_USE_UNICODE_INTERNALS 1
  #endif
  #if PY_VERSION_HEX < 0x030300F0
    #undef CYTHON_USE_UNICODE_WRITER
    #define CYTHON_USE_UNICODE_WRITER 0
  #elif !defined(CYTHON_USE_UNICODE_WRITER)
    #define CYTHON_USE_UNICODE_WRITER 1
  #endif
  #ifndef CYTHON_AVOID_BORROWED_REFS
    #define CYTHON_AVOID_BORROWED_REFS 0
  #endif
  #ifndef CYTHON_ASSUME_SAFE_MACROS
    #define CYTHON_ASSUME_SAFE_MACROS 1
  #endif
  #ifndef CYTHON_UNPACK_METHODS
    #define CYTHON_UNPACK_METHODS 1
  #endif
  #ifndef CYTHON_FAST_THREAD_STATE
    #define CYTHON_FAST_THREAD_STATE 1
  #endif
  #ifndef CYTHON_FAST_PYCALL
    #define CYTHON_FAST_PYCALL 1
  #endif
  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
    #define CYTHON_PEP489_MULTI_PHASE_INIT (PY_VERSION_HEX >= 0x03050000)
  #endif
  #ifndef CYTHON_USE_TP_FINALIZE
    #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
  #endif
  #ifndef CYTHON_USE_DICT_VERSIONS
    #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX >= 0x030600B1)
  #endif
  #ifndef CYTHON_USE_EXC_INFO_STACK
    #define CYTHON_USE_EXC_INFO_STACK (PY_VERSION_HEX >= 0x030700A3)
  #endif
#endif
#if !defined(CYTHON_FAST_PYCCALL)
#define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
#endif
#if CYTHON_USE_PYLONG_INTERNALS
  #include "longintrepr.h"
  #undef SHIFT
  #undef BASE
  #undef MASK
  #ifdef SIZEOF_VOID_P
    enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
  #endif
#endif
#ifndef __has_attribute
  #define __has_attribute(x) 0
#endif
#ifndef __has_cpp_attribute
  #define __has_cpp_attribute(x) 0
#endif
#ifndef CYTHON_RESTRICT
  #if defined(__GNUC__)
    #define CYTHON_RESTRICT __restrict__
  #elif defined(_MSC_VER) && _MSC_VER >= 1400
    #define CYTHON_RESTRICT __restrict
  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
    #define CYTHON_RESTRICT restrict
  #else
    #define CYTHON_RESTRICT
  #endif
#endif
#ifndef CYTHON_UNUSED
# if defined(__GNUC__)
#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
#     define CYTHON_UNUSED __attribute__ ((__unused__))
#   else
#     define CYTHON_UNUSED
#   endif
# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
#   define CYTHON_UNUSED __attribute__ ((__unused__))
# else
#   define CYTHON_UNUSED
# endif
#endif
#ifndef CYTHON_MAYBE_UNUSED_VAR
#  if defined(__cplusplus)
     template<class T> void CYTHON_MAYBE_UNUSED_VAR( const T& ) { }
#  else
#    define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x)
#  endif
#endif
#ifndef CYTHON_NCP_UNUSED
# if CYTHON_COMPILING_IN_CPYTHON
#  define CYTHON_NCP_UNUSED
# else
#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
# endif
#endif
#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
#ifdef _MSC_VER
    #ifndef _MSC_STDINT_H_
        #if _MSC_VER < 1300
           typedef unsigned char     uint8_t;
           typedef unsigned int      uint32_t;
        #else
           typedef unsigned __int8   uint8_t;
           typedef unsigned __int32  uint32_t;
        #endif
    #endif
#else
   #include <stdint.h>
#endif
#ifndef CYTHON_FALLTHROUGH
  #if defined(__cplusplus) && __cplusplus >= 201103L
    #if __has_cpp_attribute(fallthrough)
      #define CYTHON_FALLTHROUGH [[fallthrough]]
    #elif __has_cpp_attribute(clang::fallthrough)
      #define CYTHON_FALLTHROUGH [[clang::fallthrough]]
    #elif __has_cpp_attribute(gnu::fallthrough)
      #define CYTHON_FALLTHROUGH [[gnu::fallthrough]]
    #endif
  #endif
  #ifndef CYTHON_FALLTHROUGH
    #if __has_attribute(fallthrough)
      #define CYTHON_FALLTHROUGH __attribute__((fallthrough))
    #else
      #define CYTHON_FALLTHROUGH
    #endif
  #endif
  #if defined(__clang__ ) && defined(__apple_build_version__)
    #if __apple_build_version__ < 7000000
      #undef  CYTHON_FALLTHROUGH
      #define CYTHON_FALLTHROUGH
    #endif
  #endif
#endif

#ifndef CYTHON_INLINE
  #if defined(__clang__)
    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
  #elif defined(__GNUC__)
    #define CYTHON_INLINE __inline__
  #elif defined(_MSC_VER)
    #define CYTHON_INLINE __inline
  #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
    #define CYTHON_INLINE inline
  #else
    #define CYTHON_INLINE
  #endif
#endif

#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
  #define Py_OptimizeFlag 0
#endif
#define __PYX_BUILD_PY_SSIZE_T "n"
#define CYTHON_FORMAT_SSIZE_T "z"
#if PY_MAJOR_VERSION < 3
  #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
          PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
  #define __Pyx_DefaultClassType PyClass_Type
#else
  #define __Pyx_BUILTIN_MODULE_NAME "builtins"
#if PY_VERSION_HEX >= 0x030800A4 && PY_VERSION_HEX < 0x030800B2
  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
          PyCode_New(a, 0, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#else
  #define __Pyx_PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
          PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
#endif
  #define __Pyx_DefaultClassType PyType_Type
#endif
#ifndef Py_TPFLAGS_CHECKTYPES
  #define Py_TPFLAGS_CHECKTYPES 0
#endif
#ifndef Py_TPFLAGS_HAVE_INDEX
  #define Py_TPFLAGS_HAVE_INDEX 0
#endif
#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
  #define Py_TPFLAGS_HAVE_NEWBUFFER 0
#endif
#ifndef Py_TPFLAGS_HAVE_FINALIZE
  #define Py_TPFLAGS_HAVE_FINALIZE 0
#endif
#ifndef METH_STACKLESS
  #define METH_STACKLESS 0
#endif
#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL)
  #ifndef METH_FASTCALL
     #define METH_FASTCALL 0x80
  #endif
  typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs);
  typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args,
                                                          Py_ssize_t nargs, PyObject *kwnames);
#else
  #define __Pyx_PyCFunctionFast _PyCFunctionFast
  #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
#endif
#if CYTHON_FAST_PYCCALL
#define __Pyx_PyFastCFunction_Check(func)\
    ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)))))
#else
#define __Pyx_PyFastCFunction_Check(func) 0
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
  #define PyObject_Malloc(s)   PyMem_Malloc(s)
  #define PyObject_Free(p)     PyMem_Free(p)
  #define PyObject_Realloc(p)  PyMem_Realloc(p)
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030400A1
  #define PyMem_RawMalloc(n)           PyMem_Malloc(n)
  #define PyMem_RawRealloc(p, n)       PyMem_Realloc(p, n)
  #define PyMem_RawFree(p)             PyMem_Free(p)
#endif
#if CYTHON_COMPILING_IN_PYSTON
  #define __Pyx_PyCode_HasFreeVars(co)  PyCode_HasFreeVars(co)
  #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno)
#else
  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)  (frame)->f_lineno = (lineno)
#endif
#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000
  #define __Pyx_PyThreadState_Current PyThreadState_GET()
#elif PY_VERSION_HEX >= 0x03060000
  #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
#elif PY_VERSION_HEX >= 0x03000000
  #define __Pyx_PyThreadState_Current PyThreadState_GET()
#else
  #define __Pyx_PyThreadState_Current _PyThreadState_Current
#endif
#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT)
#include "pythread.h"
#define Py_tss_NEEDS_INIT 0
typedef int Py_tss_t;
static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) {
  *key = PyThread_create_key();
  return 0;
}
static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) {
  Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t));
  *key = Py_tss_NEEDS_INIT;
  return key;
}
static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) {
  PyObject_Free(key);
}
static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) {
  return *key != Py_tss_NEEDS_INIT;
}
static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) {
  PyThread_delete_key(*key);
  *key = Py_tss_NEEDS_INIT;
}
static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) {
  return PyThread_set_key_value(*key, value);
}
static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
  return PyThread_get_key_value(*key);
}
#endif
#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized)
#define __Pyx_PyDict_NewPresized(n)  ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
#else
#define __Pyx_PyDict_NewPresized(n)  PyDict_New()
#endif
#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION
  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
#else
  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
#endif
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1 && CYTHON_USE_UNICODE_INTERNALS
#define __Pyx_PyDict_GetItemStr(dict, name)  _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
#else
#define __Pyx_PyDict_GetItemStr(dict, name)  PyDict_GetItem(dict, name)
#endif
#if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
  #define CYTHON_PEP393_ENABLED 1
  #define __Pyx_PyUnicode_READY(op)       (likely(PyUnicode_IS_READY(op)) ?\
                                              0 : _PyUnicode_Ready((PyObject *)(op)))
  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_LENGTH(u)
  #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
  #define __Pyx_PyUnicode_KIND(u)         PyUnicode_KIND(u)
  #define __Pyx_PyUnicode_DATA(u)         PyUnicode_DATA(u)
  #define __Pyx_PyUnicode_READ(k, d, i)   PyUnicode_READ(k, d, i)
  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
#else
  #define CYTHON_PEP393_ENABLED 0
  #define PyUnicode_1BYTE_KIND  1
  #define PyUnicode_2BYTE_KIND  2
  #define PyUnicode_4BYTE_KIND  4
  #define __Pyx_PyUnicode_READY(op)       (0)
  #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
  #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111)
  #define __Pyx_PyUnicode_KIND(u)         (sizeof(Py_UNICODE))
  #define __Pyx_PyUnicode_DATA(u)         ((void*)PyUnicode_AS_UNICODE(u))
  #define __Pyx_PyUnicode_READ(k, d, i)   ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
  #define __Pyx_PyUnicode_WRITE(k, d, i, ch)  (((void)(k)), ((Py_UNICODE*)d)[i] = ch)
  #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))
#endif
#if CYTHON_COMPILING_IN_PYPY
  #define __Pyx_PyUnicode_Concat(a, b)      PyNumber_Add(a, b)
  #define __Pyx_PyUnicode_ConcatSafe(a, b)  PyNumber_Add(a, b)
#else
  #define __Pyx_PyUnicode_Concat(a, b)      PyUnicode_Concat(a, b)
  #define __Pyx_PyUnicode_ConcatSafe(a, b)  ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
      PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
  #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check)
  #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)
#endif
#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)
  #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
#endif
#define __Pyx_PyString_FormatSafe(a, b)   ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
#define __Pyx_PyUnicode_FormatSafe(a, b)  ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
#if PY_MAJOR_VERSION >= 3
  #define __Pyx_PyString_Format(a, b)  PyUnicode_Format(a, b)
#else
  #define __Pyx_PyString_Format(a, b)  PyString_Format(a, b)
#endif
#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)
  #define PyObject_ASCII(o)            PyObject_Repr(o)
#endif
#if PY_MAJOR_VERSION >= 3
  #define PyBaseString_Type            PyUnicode_Type
  #define PyStringObject               PyUnicodeObject
  #define PyString_Type                PyUnicode_Type
  #define PyString_Check               PyUnicode_Check
  #define PyString_CheckExact          PyUnicode_CheckExact
#ifndef PyObject_Unicode
  #define PyObject_Unicode             PyObject_Str
#endif
#endif
#if PY_MAJOR_VERSION >= 3
  #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
  #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
#else
  #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))
  #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
#endif
#ifndef PySet_CheckExact
  #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
#endif
#if PY_VERSION_HEX >= 0x030900A4
  #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt)
  #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size)
#else
  #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt)
  #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size)
#endif
#if CYTHON_ASSUME_SAFE_MACROS
  #define __Pyx_PySequence_SIZE(seq)  Py_SIZE(seq)
#else
  #define __Pyx_PySequence_SIZE(seq)  PySequence_Size(seq)
#endif
#if PY_MAJOR_VERSION >= 3
  #define PyIntObject                  PyLongObject
  #define PyInt_Type                   PyLong_Type
  #define PyInt_Check(op)              PyLong_Check(op)
  #define PyInt_CheckExact(op)         PyLong_CheckExact(op)
  #define PyInt_FromString             PyLong_FromString
  #define PyInt_FromUnicode            PyLong_FromUnicode
  #define PyInt_FromLong               PyLong_FromLong
  #define PyInt_FromSize_t             PyLong_FromSize_t
  #define PyInt_FromSsize_t            PyLong_FromSsize_t
  #define PyInt_AsLong                 PyLong_AsLong
  #define PyInt_AS_LONG                PyLong_AS_LONG
  #define PyInt_AsSsize_t              PyLong_AsSsize_t
  #define PyInt_AsUnsignedLongMask     PyLong_AsUnsignedLongMask
  #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
  #define PyNumber_Int                 PyNumber_Long
#endif
#if PY_MAJOR_VERSION >= 3
  #define PyBoolObject                 PyLongObject
#endif
#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY
  #ifndef PyUnicode_InternFromString
    #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
  #endif
#endif
#if PY_VERSION_HEX < 0x030200A4
  typedef long Py_hash_t;
  #define __Pyx_PyInt_FromHash_t PyInt_FromLong
  #define __Pyx_PyInt_AsHash_t   PyInt_AsLong
#else
  #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
  #define __Pyx_PyInt_AsHash_t   PyInt_AsSsize_t
#endif
#if PY_MAJOR_VERSION >= 3
  #define __Pyx_PyMethod_New(func, self, klass) ((self) ? PyMethod_New(func, self) : (Py_INCREF(func), func))
#else
  #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
#endif
#if CYTHON_USE_ASYNC_SLOTS
  #if PY_VERSION_HEX >= 0x030500B1
    #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
    #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
  #else
    #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
  #endif
#else
  #define __Pyx_PyType_AsAsync(obj) NULL
#endif
#ifndef __Pyx_PyAsyncMethodsStruct
    typedef struct {
        unaryfunc am_await;
        unaryfunc am_aiter;
        unaryfunc am_anext;
    } __Pyx_PyAsyncMethodsStruct;
#endif

#if defined(WIN32) || defined(MS_WINDOWS)
  #define _USE_MATH_DEFINES
#endif
#include <math.h>
#ifdef NAN
#define __PYX_NAN() ((float) NAN)
#else
static CYTHON_INLINE float __PYX_NAN() {
  float value;
  memset(&value, 0xFF, sizeof(value));
  return value;
}
#endif
#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
#define __Pyx_truncl trunc
#else
#define __Pyx_truncl truncl
#endif

#define __PYX_MARK_ERR_POS(f_index, lineno) \
    { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; }
#define __PYX_ERR(f_index, lineno, Ln_error) \
    { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; }

#ifndef __PYX_EXTERN_C
  #ifdef __cplusplus
    #define __PYX_EXTERN_C extern "C"
  #else
    #define __PYX_EXTERN_C extern
  #endif
#endif

#define __PYX_HAVE__renpy__gl2__gl2draw
#define __PYX_HAVE_API__renpy__gl2__gl2draw
/* Early includes */
#include <stdint.h>
#include <stddef.h>
#include "renpygl.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include "SDL.h"
#include "pygame_sdl2/pygame_sdl2.h"
#ifdef _OPENMP
#include <omp.h>
#endif /* _OPENMP */

#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
#define CYTHON_WITHOUT_ASSERTIONS
#endif

typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
                const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;

#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0
#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8)
#define __PYX_DEFAULT_STRING_ENCODING ""
#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
#define __Pyx_uchar_cast(c) ((unsigned char)c)
#define __Pyx_long_cast(x) ((long)x)
#define __Pyx_fits_Py_ssize_t(v, type, is_signed)  (\
    (sizeof(type) < sizeof(Py_ssize_t))  ||\
    (sizeof(type) > sizeof(Py_ssize_t) &&\
          likely(v < (type)PY_SSIZE_T_MAX ||\
                 v == (type)PY_SSIZE_T_MAX)  &&\
          (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
                                v == (type)PY_SSIZE_T_MIN)))  ||\
    (sizeof(type) == sizeof(Py_ssize_t) &&\
          (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
                               v == (type)PY_SSIZE_T_MAX)))  )
static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) {
    return (size_t) i < (size_t) limit;
}
#if defined (__cplusplus) && __cplusplus >= 201103L
    #include <cstdlib>
    #define __Pyx_sst_abs(value) std::abs(value)
#elif SIZEOF_INT >= SIZEOF_SIZE_T
    #define __Pyx_sst_abs(value) abs(value)
#elif SIZEOF_LONG >= SIZEOF_SIZE_T
    #define __Pyx_sst_abs(value) labs(value)
#elif defined (_MSC_VER)
    #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
    #define __Pyx_sst_abs(value) llabs(value)
#elif defined (__GNUC__)
    #define __Pyx_sst_abs(value) __builtin_llabs(value)
#else
    #define __Pyx_sst_abs(value) ((value<0) ? -value : value)
#endif
static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
#define __Pyx_PyBytes_FromString        PyBytes_FromString
#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
#if PY_MAJOR_VERSION < 3
    #define __Pyx_PyStr_FromString        __Pyx_PyBytes_FromString
    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
#else
    #define __Pyx_PyStr_FromString        __Pyx_PyUnicode_FromString
    #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
#endif
#define __Pyx_PyBytes_AsWritableString(s)     ((char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsWritableSString(s)    ((signed char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsWritableUString(s)    ((unsigned char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsString(s)     ((const char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsSString(s)    ((const signed char*) PyBytes_AS_STRING(s))
#define __Pyx_PyBytes_AsUString(s)    ((const unsigned char*) PyBytes_AS_STRING(s))
#define __Pyx_PyObject_AsWritableString(s)    ((char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsWritableUString(s)    ((unsigned char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsSString(s)    ((const signed char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_AsUString(s)    ((const unsigned char*) __Pyx_PyObject_AsString(s))
#define __Pyx_PyObject_FromCString(s)  __Pyx_PyObject_FromString((const char*)s)
#define __Pyx_PyBytes_FromCString(s)   __Pyx_PyBytes_FromString((const char*)s)
#define __Pyx_PyByteArray_FromCString(s)   __Pyx_PyByteArray_FromString((const char*)s)
#define __Pyx_PyStr_FromCString(s)     __Pyx_PyStr_FromString((const char*)s)
#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) {
    const Py_UNICODE *u_end = u;
    while (*u_end++) ;
    return (size_t)(u_end - u - 1);
}
#define __Pyx_PyUnicode_FromUnicode(u)       PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u))
#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode
#define __Pyx_PyUnicode_AsUnicode            PyUnicode_AsUnicode
#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj)
#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b);
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*);
static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
#define __Pyx_PySequence_Tuple(obj)\
    (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
#if CYTHON_ASSUME_SAFE_MACROS
#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
#else
#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
#endif
#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
#else
#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x))
#endif
#define __Pyx_PyNumber_Float(x) (PyFloat_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Float(x))
#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
static int __Pyx_sys_getdefaultencoding_not_ascii;
static int __Pyx_init_sys_getdefaultencoding_params(void) {
    PyObject* sys;
    PyObject* default_encoding = NULL;
    PyObject* ascii_chars_u = NULL;
    PyObject* ascii_chars_b = NULL;
    const char* default_encoding_c;
    sys = PyImport_ImportModule("sys");
    if (!sys) goto bad;
    default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL);
    Py_DECREF(sys);
    if (!default_encoding) goto bad;
    default_encoding_c = PyBytes_AsString(default_encoding);
    if (!default_encoding_c) goto bad;
    if (strcmp(default_encoding_c, "ascii") == 0) {
        __Pyx_sys_getdefaultencoding_not_ascii = 0;
    } else {
        char ascii_chars[128];
        int c;
        for (c = 0; c < 128; c++) {
            ascii_chars[c] = c;
        }
        __Pyx_sys_getdefaultencoding_not_ascii = 1;
        ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
        if (!ascii_chars_u) goto bad;
        ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL);
        if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
            PyErr_Format(
                PyExc_ValueError,
                "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",
                default_encoding_c);
            goto bad;
        }
        Py_DECREF(ascii_chars_u);
        Py_DECREF(ascii_chars_b);
    }
    Py_DECREF(default_encoding);
    return 0;
bad:
    Py_XDECREF(default_encoding);
    Py_XDECREF(ascii_chars_u);
    Py_XDECREF(ascii_chars_b);
    return -1;
}
#endif
#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3
#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
#else
#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
static char* __PYX_DEFAULT_STRING_ENCODING;
static int __Pyx_init_sys_getdefaultencoding_params(void) {
    PyObject* sys;
    PyObject* default_encoding = NULL;
    char* default_encoding_c;
    sys = PyImport_ImportModule("sys");
    if (!sys) goto bad;
    default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
    Py_DECREF(sys);
    if (!default_encoding) goto bad;
    default_encoding_c = PyBytes_AsString(default_encoding);
    if (!default_encoding_c) goto bad;
    __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1);
    if (!__PYX_DEFAULT_STRING_ENCODING) goto bad;
    strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c);
    Py_DECREF(default_encoding);
    return 0;
bad:
    Py_XDECREF(default_encoding);
    return -1;
}
#endif
#endif


/* Test for GCC > 2.95 */
#if defined(__GNUC__)     && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
  #define likely(x)   __builtin_expect(!!(x), 1)
  #define unlikely(x) __builtin_expect(!!(x), 0)
#else /* !__GNUC__ or GCC < 2.95 */
  #define likely(x)   (x)
  #define unlikely(x) (x)
#endif /* __GNUC__ */
static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }

static PyObject *__pyx_m = NULL;
static PyObject *__pyx_d;
static PyObject *__pyx_b;
static PyObject *__pyx_cython_runtime = NULL;
static PyObject *__pyx_empty_tuple;
static PyObject *__pyx_empty_bytes;
static PyObject *__pyx_empty_unicode;
static int __pyx_lineno;
static int __pyx_clineno = 0;
static const char * __pyx_cfilenm= __FILE__;
static const char *__pyx_filename;


static const char *__pyx_f[] = {
  "gl2draw.pyx",
  "gl2draw.pxd",
  "stringsource",
  "matrix.pxd",
  "render.pxd",
  "gl2shader.pxd",
  "gl2polygon.pxd",
  "gl2mesh.pxd",
  "gl2model.pxd",
  "gl2texture.pxd",
  "gl2mesh3.pxd",
};
/* NoFastGil.proto */
#define __Pyx_PyGILState_Ensure PyGILState_Ensure
#define __Pyx_PyGILState_Release PyGILState_Release
#define __Pyx_FastGIL_Remember()
#define __Pyx_FastGIL_Forget()
#define __Pyx_FastGilFuncInit()

/* ForceInitThreads.proto */
#ifndef __PYX_FORCE_INIT_THREADS
  #define __PYX_FORCE_INIT_THREADS 0
#endif


/*--- Type declarations ---*/
struct __pyx_obj_5renpy_7display_6matrix_Matrix;
struct __pyx_obj_5renpy_7display_6matrix_Matrix2D;
struct __pyx_obj_5renpy_7display_6render_Render;
struct __pyx_obj_5renpy_3gl2_9gl2shader_Program;
struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon;
struct __pyx_obj_5renpy_3gl2_7gl2mesh_AttributeLayout;
struct __pyx_obj_5renpy_3gl2_7gl2mesh_Mesh;
struct __pyx_obj_5renpy_3gl2_8gl2model_Model;
struct __pyx_obj_5renpy_3gl2_10gl2texture_TextureLoader;
struct __pyx_obj_5renpy_3gl2_10gl2texture_GLTexture;
struct __pyx_obj_5renpy_3gl2_8gl2mesh3_Mesh3;
struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw;
struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext;
struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize;
struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr;
struct __pyx_opt_args_5renpy_7display_6render_6Render_blit;
struct __pyx_opt_args_5renpy_7display_6render_6Render_subpixel_blit;
struct __pyx_opt_args_5renpy_7display_6render_6Render_absolute_blit;

/* "renpy/display/render.pxd":108
 *     # operations ###############################################################
 * 
 *     cpdef int blit(Render self, source, tuple pos, object focus=*, object main=*, object index=*)             # <<<<<<<<<<<<<<
 *     cpdef int subpixel_blit(Render self, source, tuple pos, object focus=*, object main=*, object index=*)
 *     cpdef int absolute_blit(Render self, source, tuple pos, object focus=*, object main=*, object index=*)
 */
struct __pyx_opt_args_5renpy_7display_6render_6Render_blit {
  int __pyx_n;
  PyObject *focus;
  PyObject *main;
  PyObject *index;
};

/* "renpy/display/render.pxd":109
 * 
 *     cpdef int blit(Render self, source, tuple pos, object focus=*, object main=*, object index=*)
 *     cpdef int subpixel_blit(Render self, source, tuple pos, object focus=*, object main=*, object index=*)             # <<<<<<<<<<<<<<
 *     cpdef int absolute_blit(Render self, source, tuple pos, object focus=*, object main=*, object index=*)
 * 
 */
struct __pyx_opt_args_5renpy_7display_6render_6Render_subpixel_blit {
  int __pyx_n;
  PyObject *focus;
  PyObject *main;
  PyObject *index;
};

/* "renpy/display/render.pxd":110
 *     cpdef int blit(Render self, source, tuple pos, object focus=*, object main=*, object index=*)
 *     cpdef int subpixel_blit(Render self, source, tuple pos, object focus=*, object main=*, object index=*)
 *     cpdef int absolute_blit(Render self, source, tuple pos, object focus=*, object main=*, object index=*)             # <<<<<<<<<<<<<<
 * 
 * 
 */
struct __pyx_opt_args_5renpy_7display_6render_6Render_absolute_blit {
  int __pyx_n;
  PyObject *focus;
  PyObject *main;
  PyObject *index;
};

/* "renpy/uguu/gl.pxd":556
 *     GLenum GL_BUFFER_MAP_OFFSET
 * 
 * ctypedef void (__stdcall *glActiveTexture_type)(GLenum  texture) nogil             # <<<<<<<<<<<<<<
 * cdef glActiveTexture_type glActiveTexture
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glActiveTexture_type)(GLenum);

/* "renpy/uguu/gl.pxd":559
 * cdef glActiveTexture_type glActiveTexture
 * 
 * ctypedef void (__stdcall *glAttachShader_type)(GLuint  program, GLuint  shader) nogil             # <<<<<<<<<<<<<<
 * cdef glAttachShader_type glAttachShader
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glAttachShader_type)(GLuint, GLuint);

/* "renpy/uguu/gl.pxd":562
 * cdef glAttachShader_type glAttachShader
 * 
 * ctypedef void (__stdcall *glBeginQuery_type)(GLenum  target, GLuint  id) nogil             # <<<<<<<<<<<<<<
 * cdef glBeginQuery_type glBeginQuery
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBeginQuery_type)(GLenum, GLuint);

/* "renpy/uguu/gl.pxd":565
 * cdef glBeginQuery_type glBeginQuery
 * 
 * ctypedef void (__stdcall *glBeginTransformFeedback_type)(GLenum  primitiveMode) nogil             # <<<<<<<<<<<<<<
 * cdef glBeginTransformFeedback_type glBeginTransformFeedback
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBeginTransformFeedback_type)(GLenum);

/* "renpy/uguu/gl.pxd":568
 * cdef glBeginTransformFeedback_type glBeginTransformFeedback
 * 
 * ctypedef void (__stdcall *glBindAttribLocation_type)(GLuint  program, GLuint  index, const GLchar * name) nogil             # <<<<<<<<<<<<<<
 * cdef glBindAttribLocation_type glBindAttribLocation
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBindAttribLocation_type)(GLuint, GLuint, GLchar const *);

/* "renpy/uguu/gl.pxd":571
 * cdef glBindAttribLocation_type glBindAttribLocation
 * 
 * ctypedef void (__stdcall *glBindBuffer_type)(GLenum  target, GLuint  buffer) nogil             # <<<<<<<<<<<<<<
 * cdef glBindBuffer_type glBindBuffer
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBindBuffer_type)(GLenum, GLuint);

/* "renpy/uguu/gl.pxd":574
 * cdef glBindBuffer_type glBindBuffer
 * 
 * ctypedef void (__stdcall *glBindBufferBase_type)(GLenum  target, GLuint  index, GLuint  buffer) nogil             # <<<<<<<<<<<<<<
 * cdef glBindBufferBase_type glBindBufferBase
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBindBufferBase_type)(GLenum, GLuint, GLuint);

/* "renpy/uguu/gl.pxd":577
 * cdef glBindBufferBase_type glBindBufferBase
 * 
 * ctypedef void (__stdcall *glBindBufferRange_type)(GLenum  target, GLuint  index, GLuint  buffer, GLintptr  offset, GLsizeiptr  size) nogil             # <<<<<<<<<<<<<<
 * cdef glBindBufferRange_type glBindBufferRange
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBindBufferRange_type)(GLenum, GLuint, GLuint, GLintptr, GLsizeiptr);

/* "renpy/uguu/gl.pxd":580
 * cdef glBindBufferRange_type glBindBufferRange
 * 
 * ctypedef void (__stdcall *glBindFramebuffer_type)(GLenum  target, GLuint  framebuffer) nogil             # <<<<<<<<<<<<<<
 * cdef glBindFramebuffer_type glBindFramebuffer
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBindFramebuffer_type)(GLenum, GLuint);

/* "renpy/uguu/gl.pxd":583
 * cdef glBindFramebuffer_type glBindFramebuffer
 * 
 * ctypedef void (__stdcall *glBindRenderbuffer_type)(GLenum  target, GLuint  renderbuffer) nogil             # <<<<<<<<<<<<<<
 * cdef glBindRenderbuffer_type glBindRenderbuffer
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBindRenderbuffer_type)(GLenum, GLuint);

/* "renpy/uguu/gl.pxd":586
 * cdef glBindRenderbuffer_type glBindRenderbuffer
 * 
 * ctypedef void (__stdcall *glBindTexture_type)(GLenum  target, GLuint  texture) nogil             # <<<<<<<<<<<<<<
 * cdef glBindTexture_type glBindTexture
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBindTexture_type)(GLenum, GLuint);

/* "renpy/uguu/gl.pxd":589
 * cdef glBindTexture_type glBindTexture
 * 
 * ctypedef void (__stdcall *glBindVertexArray_type)(GLuint  array) nogil             # <<<<<<<<<<<<<<
 * cdef glBindVertexArray_type glBindVertexArray
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBindVertexArray_type)(GLuint);

/* "renpy/uguu/gl.pxd":592
 * cdef glBindVertexArray_type glBindVertexArray
 * 
 * ctypedef void (__stdcall *glBlendColor_type)(GLfloat  red, GLfloat  green, GLfloat  blue, GLfloat  alpha) nogil             # <<<<<<<<<<<<<<
 * cdef glBlendColor_type glBlendColor
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBlendColor_type)(GLfloat, GLfloat, GLfloat, GLfloat);

/* "renpy/uguu/gl.pxd":595
 * cdef glBlendColor_type glBlendColor
 * 
 * ctypedef void (__stdcall *glBlendEquation_type)(GLenum  mode) nogil             # <<<<<<<<<<<<<<
 * cdef glBlendEquation_type glBlendEquation
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBlendEquation_type)(GLenum);

/* "renpy/uguu/gl.pxd":598
 * cdef glBlendEquation_type glBlendEquation
 * 
 * ctypedef void (__stdcall *glBlendEquationSeparate_type)(GLenum  modeRGB, GLenum  modeAlpha) nogil             # <<<<<<<<<<<<<<
 * cdef glBlendEquationSeparate_type glBlendEquationSeparate
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBlendEquationSeparate_type)(GLenum, GLenum);

/* "renpy/uguu/gl.pxd":601
 * cdef glBlendEquationSeparate_type glBlendEquationSeparate
 * 
 * ctypedef void (__stdcall *glBlendFunc_type)(GLenum  sfactor, GLenum  dfactor) nogil             # <<<<<<<<<<<<<<
 * cdef glBlendFunc_type glBlendFunc
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBlendFunc_type)(GLenum, GLenum);

/* "renpy/uguu/gl.pxd":604
 * cdef glBlendFunc_type glBlendFunc
 * 
 * ctypedef void (__stdcall *glBlendFuncSeparate_type)(GLenum  sfactorRGB, GLenum  dfactorRGB, GLenum  sfactorAlpha, GLenum  dfactorAlpha) nogil             # <<<<<<<<<<<<<<
 * cdef glBlendFuncSeparate_type glBlendFuncSeparate
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBlendFuncSeparate_type)(GLenum, GLenum, GLenum, GLenum);

/* "renpy/uguu/gl.pxd":607
 * cdef glBlendFuncSeparate_type glBlendFuncSeparate
 * 
 * ctypedef void (__stdcall *glBlitFramebuffer_type)(GLint  srcX0, GLint  srcY0, GLint  srcX1, GLint  srcY1, GLint  dstX0, GLint  dstY0, GLint  dstX1, GLint  dstY1, GLbitfield  mask, GLenum  filter) nogil             # <<<<<<<<<<<<<<
 * cdef glBlitFramebuffer_type glBlitFramebuffer
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBlitFramebuffer_type)(GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLint, GLbitfield, GLenum);

/* "renpy/uguu/gl.pxd":610
 * cdef glBlitFramebuffer_type glBlitFramebuffer
 * 
 * ctypedef void (__stdcall *glBufferData_type)(GLenum  target, GLsizeiptr  size, const void * data, GLenum  usage) nogil             # <<<<<<<<<<<<<<
 * cdef glBufferData_type glBufferData
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBufferData_type)(GLenum, GLsizeiptr, void const *, GLenum);

/* "renpy/uguu/gl.pxd":613
 * cdef glBufferData_type glBufferData
 * 
 * ctypedef void (__stdcall *glBufferSubData_type)(GLenum  target, GLintptr  offset, GLsizeiptr  size, const void * data) nogil             # <<<<<<<<<<<<<<
 * cdef glBufferSubData_type glBufferSubData
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glBufferSubData_type)(GLenum, GLintptr, GLsizeiptr, void const *);

/* "renpy/uguu/gl.pxd":616
 * cdef glBufferSubData_type glBufferSubData
 * 
 * ctypedef GLenum (__stdcall *glCheckFramebufferStatus_type)(GLenum  target) nogil             # <<<<<<<<<<<<<<
 * cdef glCheckFramebufferStatus_type glCheckFramebufferStatus
 * 
 */
typedef GLenum (__stdcall *__pyx_t_5renpy_4uguu_2gl_glCheckFramebufferStatus_type)(GLenum);

/* "renpy/uguu/gl.pxd":619
 * cdef glCheckFramebufferStatus_type glCheckFramebufferStatus
 * 
 * ctypedef void (__stdcall *glClear_type)(GLbitfield  mask) nogil             # <<<<<<<<<<<<<<
 * cdef glClear_type glClear
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glClear_type)(GLbitfield);

/* "renpy/uguu/gl.pxd":622
 * cdef glClear_type glClear
 * 
 * ctypedef void (__stdcall *glClearBufferfi_type)(GLenum  buffer, GLint  drawbuffer, GLfloat  depth, GLint  stencil) nogil             # <<<<<<<<<<<<<<
 * cdef glClearBufferfi_type glClearBufferfi
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glClearBufferfi_type)(GLenum, GLint, GLfloat, GLint);

/* "renpy/uguu/gl.pxd":625
 * cdef glClearBufferfi_type glClearBufferfi
 * 
 * ctypedef void (__stdcall *glClearBufferfv_type)(GLenum  buffer, GLint  drawbuffer, const GLfloat * value) nogil             # <<<<<<<<<<<<<<
 * cdef glClearBufferfv_type glClearBufferfv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glClearBufferfv_type)(GLenum, GLint, GLfloat const *);

/* "renpy/uguu/gl.pxd":628
 * cdef glClearBufferfv_type glClearBufferfv
 * 
 * ctypedef void (__stdcall *glClearBufferiv_type)(GLenum  buffer, GLint  drawbuffer, const GLint * value) nogil             # <<<<<<<<<<<<<<
 * cdef glClearBufferiv_type glClearBufferiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glClearBufferiv_type)(GLenum, GLint, GLint const *);

/* "renpy/uguu/gl.pxd":631
 * cdef glClearBufferiv_type glClearBufferiv
 * 
 * ctypedef void (__stdcall *glClearBufferuiv_type)(GLenum  buffer, GLint  drawbuffer, const GLuint * value) nogil             # <<<<<<<<<<<<<<
 * cdef glClearBufferuiv_type glClearBufferuiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glClearBufferuiv_type)(GLenum, GLint, GLuint const *);

/* "renpy/uguu/gl.pxd":634
 * cdef glClearBufferuiv_type glClearBufferuiv
 * 
 * ctypedef void (__stdcall *glClearColor_type)(GLfloat  red, GLfloat  green, GLfloat  blue, GLfloat  alpha) nogil             # <<<<<<<<<<<<<<
 * cdef glClearColor_type glClearColor
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glClearColor_type)(GLfloat, GLfloat, GLfloat, GLfloat);

/* "renpy/uguu/gl.pxd":637
 * cdef glClearColor_type glClearColor
 * 
 * ctypedef void (__stdcall *glClearStencil_type)(GLint  s) nogil             # <<<<<<<<<<<<<<
 * cdef glClearStencil_type glClearStencil
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glClearStencil_type)(GLint);

/* "renpy/uguu/gl.pxd":640
 * cdef glClearStencil_type glClearStencil
 * 
 * ctypedef void (__stdcall *glColorMask_type)(GLboolean  red, GLboolean  green, GLboolean  blue, GLboolean  alpha) nogil             # <<<<<<<<<<<<<<
 * cdef glColorMask_type glColorMask
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glColorMask_type)(GLboolean, GLboolean, GLboolean, GLboolean);

/* "renpy/uguu/gl.pxd":643
 * cdef glColorMask_type glColorMask
 * 
 * ctypedef void (__stdcall *glCompileShader_type)(GLuint  shader) nogil             # <<<<<<<<<<<<<<
 * cdef glCompileShader_type glCompileShader
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glCompileShader_type)(GLuint);

/* "renpy/uguu/gl.pxd":646
 * cdef glCompileShader_type glCompileShader
 * 
 * ctypedef void (__stdcall *glCompressedTexImage2D_type)(GLenum  target, GLint  level, GLenum  internalformat, GLsizei  width, GLsizei  height, GLint  border, GLsizei  imageSize, const void * data) nogil             # <<<<<<<<<<<<<<
 * cdef glCompressedTexImage2D_type glCompressedTexImage2D
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glCompressedTexImage2D_type)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLint, GLsizei, void const *);

/* "renpy/uguu/gl.pxd":649
 * cdef glCompressedTexImage2D_type glCompressedTexImage2D
 * 
 * ctypedef void (__stdcall *glCompressedTexImage3D_type)(GLenum  target, GLint  level, GLenum  internalformat, GLsizei  width, GLsizei  height, GLsizei  depth, GLint  border, GLsizei  imageSize, const void * data) nogil             # <<<<<<<<<<<<<<
 * cdef glCompressedTexImage3D_type glCompressedTexImage3D
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glCompressedTexImage3D_type)(GLenum, GLint, GLenum, GLsizei, GLsizei, GLsizei, GLint, GLsizei, void const *);

/* "renpy/uguu/gl.pxd":652
 * cdef glCompressedTexImage3D_type glCompressedTexImage3D
 * 
 * ctypedef void (__stdcall *glCompressedTexSubImage2D_type)(GLenum  target, GLint  level, GLint  xoffset, GLint  yoffset, GLsizei  width, GLsizei  height, GLenum  format, GLsizei  imageSize, const void * data) nogil             # <<<<<<<<<<<<<<
 * cdef glCompressedTexSubImage2D_type glCompressedTexSubImage2D
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glCompressedTexSubImage2D_type)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLsizei, void const *);

/* "renpy/uguu/gl.pxd":655
 * cdef glCompressedTexSubImage2D_type glCompressedTexSubImage2D
 * 
 * ctypedef void (__stdcall *glCompressedTexSubImage3D_type)(GLenum  target, GLint  level, GLint  xoffset, GLint  yoffset, GLint  zoffset, GLsizei  width, GLsizei  height, GLsizei  depth, GLenum  format, GLsizei  imageSize, const void * data) nogil             # <<<<<<<<<<<<<<
 * cdef glCompressedTexSubImage3D_type glCompressedTexSubImage3D
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glCompressedTexSubImage3D_type)(GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLsizei, void const *);

/* "renpy/uguu/gl.pxd":658
 * cdef glCompressedTexSubImage3D_type glCompressedTexSubImage3D
 * 
 * ctypedef void (__stdcall *glCopyTexImage2D_type)(GLenum  target, GLint  level, GLenum  internalformat, GLint  x, GLint  y, GLsizei  width, GLsizei  height, GLint  border) nogil             # <<<<<<<<<<<<<<
 * cdef glCopyTexImage2D_type glCopyTexImage2D
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glCopyTexImage2D_type)(GLenum, GLint, GLenum, GLint, GLint, GLsizei, GLsizei, GLint);

/* "renpy/uguu/gl.pxd":661
 * cdef glCopyTexImage2D_type glCopyTexImage2D
 * 
 * ctypedef void (__stdcall *glCopyTexSubImage2D_type)(GLenum  target, GLint  level, GLint  xoffset, GLint  yoffset, GLint  x, GLint  y, GLsizei  width, GLsizei  height) nogil             # <<<<<<<<<<<<<<
 * cdef glCopyTexSubImage2D_type glCopyTexSubImage2D
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glCopyTexSubImage2D_type)(GLenum, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);

/* "renpy/uguu/gl.pxd":664
 * cdef glCopyTexSubImage2D_type glCopyTexSubImage2D
 * 
 * ctypedef void (__stdcall *glCopyTexSubImage3D_type)(GLenum  target, GLint  level, GLint  xoffset, GLint  yoffset, GLint  zoffset, GLint  x, GLint  y, GLsizei  width, GLsizei  height) nogil             # <<<<<<<<<<<<<<
 * cdef glCopyTexSubImage3D_type glCopyTexSubImage3D
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glCopyTexSubImage3D_type)(GLenum, GLint, GLint, GLint, GLint, GLint, GLint, GLsizei, GLsizei);

/* "renpy/uguu/gl.pxd":667
 * cdef glCopyTexSubImage3D_type glCopyTexSubImage3D
 * 
 * ctypedef GLuint (__stdcall *glCreateProgram_type)() nogil             # <<<<<<<<<<<<<<
 * cdef glCreateProgram_type glCreateProgram
 * 
 */
typedef GLuint (__stdcall *__pyx_t_5renpy_4uguu_2gl_glCreateProgram_type)(void);

/* "renpy/uguu/gl.pxd":670
 * cdef glCreateProgram_type glCreateProgram
 * 
 * ctypedef GLuint (__stdcall *glCreateShader_type)(GLenum  type) nogil             # <<<<<<<<<<<<<<
 * cdef glCreateShader_type glCreateShader
 * 
 */
typedef GLuint (__stdcall *__pyx_t_5renpy_4uguu_2gl_glCreateShader_type)(GLenum);

/* "renpy/uguu/gl.pxd":673
 * cdef glCreateShader_type glCreateShader
 * 
 * ctypedef void (__stdcall *glCullFace_type)(GLenum  mode) nogil             # <<<<<<<<<<<<<<
 * cdef glCullFace_type glCullFace
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glCullFace_type)(GLenum);

/* "renpy/uguu/gl.pxd":676
 * cdef glCullFace_type glCullFace
 * 
 * ctypedef void (__stdcall *glDeleteBuffers_type)(GLsizei  n, const GLuint * buffers) nogil             # <<<<<<<<<<<<<<
 * cdef glDeleteBuffers_type glDeleteBuffers
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDeleteBuffers_type)(GLsizei, GLuint const *);

/* "renpy/uguu/gl.pxd":679
 * cdef glDeleteBuffers_type glDeleteBuffers
 * 
 * ctypedef void (__stdcall *glDeleteFramebuffers_type)(GLsizei  n, const GLuint * framebuffers) nogil             # <<<<<<<<<<<<<<
 * cdef glDeleteFramebuffers_type glDeleteFramebuffers
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDeleteFramebuffers_type)(GLsizei, GLuint const *);

/* "renpy/uguu/gl.pxd":682
 * cdef glDeleteFramebuffers_type glDeleteFramebuffers
 * 
 * ctypedef void (__stdcall *glDeleteProgram_type)(GLuint  program) nogil             # <<<<<<<<<<<<<<
 * cdef glDeleteProgram_type glDeleteProgram
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDeleteProgram_type)(GLuint);

/* "renpy/uguu/gl.pxd":685
 * cdef glDeleteProgram_type glDeleteProgram
 * 
 * ctypedef void (__stdcall *glDeleteQueries_type)(GLsizei  n, const GLuint * ids) nogil             # <<<<<<<<<<<<<<
 * cdef glDeleteQueries_type glDeleteQueries
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDeleteQueries_type)(GLsizei, GLuint const *);

/* "renpy/uguu/gl.pxd":688
 * cdef glDeleteQueries_type glDeleteQueries
 * 
 * ctypedef void (__stdcall *glDeleteRenderbuffers_type)(GLsizei  n, const GLuint * renderbuffers) nogil             # <<<<<<<<<<<<<<
 * cdef glDeleteRenderbuffers_type glDeleteRenderbuffers
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDeleteRenderbuffers_type)(GLsizei, GLuint const *);

/* "renpy/uguu/gl.pxd":691
 * cdef glDeleteRenderbuffers_type glDeleteRenderbuffers
 * 
 * ctypedef void (__stdcall *glDeleteShader_type)(GLuint  shader) nogil             # <<<<<<<<<<<<<<
 * cdef glDeleteShader_type glDeleteShader
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDeleteShader_type)(GLuint);

/* "renpy/uguu/gl.pxd":694
 * cdef glDeleteShader_type glDeleteShader
 * 
 * ctypedef void (__stdcall *glDeleteTextures_type)(GLsizei  n, const GLuint * textures) nogil             # <<<<<<<<<<<<<<
 * cdef glDeleteTextures_type glDeleteTextures
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDeleteTextures_type)(GLsizei, GLuint const *);

/* "renpy/uguu/gl.pxd":697
 * cdef glDeleteTextures_type glDeleteTextures
 * 
 * ctypedef void (__stdcall *glDeleteVertexArrays_type)(GLsizei  n, const GLuint * arrays) nogil             # <<<<<<<<<<<<<<
 * cdef glDeleteVertexArrays_type glDeleteVertexArrays
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDeleteVertexArrays_type)(GLsizei, GLuint const *);

/* "renpy/uguu/gl.pxd":700
 * cdef glDeleteVertexArrays_type glDeleteVertexArrays
 * 
 * ctypedef void (__stdcall *glDepthFunc_type)(GLenum  func) nogil             # <<<<<<<<<<<<<<
 * cdef glDepthFunc_type glDepthFunc
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDepthFunc_type)(GLenum);

/* "renpy/uguu/gl.pxd":703
 * cdef glDepthFunc_type glDepthFunc
 * 
 * ctypedef void (__stdcall *glDepthMask_type)(GLboolean  flag) nogil             # <<<<<<<<<<<<<<
 * cdef glDepthMask_type glDepthMask
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDepthMask_type)(GLboolean);

/* "renpy/uguu/gl.pxd":706
 * cdef glDepthMask_type glDepthMask
 * 
 * ctypedef void (__stdcall *glDetachShader_type)(GLuint  program, GLuint  shader) nogil             # <<<<<<<<<<<<<<
 * cdef glDetachShader_type glDetachShader
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDetachShader_type)(GLuint, GLuint);

/* "renpy/uguu/gl.pxd":709
 * cdef glDetachShader_type glDetachShader
 * 
 * ctypedef void (__stdcall *glDisable_type)(GLenum  cap) nogil             # <<<<<<<<<<<<<<
 * cdef glDisable_type glDisable
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDisable_type)(GLenum);

/* "renpy/uguu/gl.pxd":712
 * cdef glDisable_type glDisable
 * 
 * ctypedef void (__stdcall *glDisableVertexAttribArray_type)(GLuint  index) nogil             # <<<<<<<<<<<<<<
 * cdef glDisableVertexAttribArray_type glDisableVertexAttribArray
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDisableVertexAttribArray_type)(GLuint);

/* "renpy/uguu/gl.pxd":715
 * cdef glDisableVertexAttribArray_type glDisableVertexAttribArray
 * 
 * ctypedef void (__stdcall *glDrawArrays_type)(GLenum  mode, GLint  first, GLsizei  count) nogil             # <<<<<<<<<<<<<<
 * cdef glDrawArrays_type glDrawArrays
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDrawArrays_type)(GLenum, GLint, GLsizei);

/* "renpy/uguu/gl.pxd":718
 * cdef glDrawArrays_type glDrawArrays
 * 
 * ctypedef void (__stdcall *glDrawBuffers_type)(GLsizei  n, const GLenum * bufs) nogil             # <<<<<<<<<<<<<<
 * cdef glDrawBuffers_type glDrawBuffers
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDrawBuffers_type)(GLsizei, GLenum const *);

/* "renpy/uguu/gl.pxd":721
 * cdef glDrawBuffers_type glDrawBuffers
 * 
 * ctypedef void (__stdcall *glDrawElements_type)(GLenum  mode, GLsizei  count, GLenum  type, const void * indices) nogil             # <<<<<<<<<<<<<<
 * cdef glDrawElements_type glDrawElements
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDrawElements_type)(GLenum, GLsizei, GLenum, void const *);

/* "renpy/uguu/gl.pxd":724
 * cdef glDrawElements_type glDrawElements
 * 
 * ctypedef void (__stdcall *glDrawRangeElements_type)(GLenum  mode, GLuint  start, GLuint  end, GLsizei  count, GLenum  type, const void * indices) nogil             # <<<<<<<<<<<<<<
 * cdef glDrawRangeElements_type glDrawRangeElements
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glDrawRangeElements_type)(GLenum, GLuint, GLuint, GLsizei, GLenum, void const *);

/* "renpy/uguu/gl.pxd":727
 * cdef glDrawRangeElements_type glDrawRangeElements
 * 
 * ctypedef void (__stdcall *glEnable_type)(GLenum  cap) nogil             # <<<<<<<<<<<<<<
 * cdef glEnable_type glEnable
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glEnable_type)(GLenum);

/* "renpy/uguu/gl.pxd":730
 * cdef glEnable_type glEnable
 * 
 * ctypedef void (__stdcall *glEnableVertexAttribArray_type)(GLuint  index) nogil             # <<<<<<<<<<<<<<
 * cdef glEnableVertexAttribArray_type glEnableVertexAttribArray
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glEnableVertexAttribArray_type)(GLuint);

/* "renpy/uguu/gl.pxd":733
 * cdef glEnableVertexAttribArray_type glEnableVertexAttribArray
 * 
 * ctypedef void (__stdcall *glEndQuery_type)(GLenum  target) nogil             # <<<<<<<<<<<<<<
 * cdef glEndQuery_type glEndQuery
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glEndQuery_type)(GLenum);

/* "renpy/uguu/gl.pxd":736
 * cdef glEndQuery_type glEndQuery
 * 
 * ctypedef void (__stdcall *glEndTransformFeedback_type)() nogil             # <<<<<<<<<<<<<<
 * cdef glEndTransformFeedback_type glEndTransformFeedback
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glEndTransformFeedback_type)(void);

/* "renpy/uguu/gl.pxd":739
 * cdef glEndTransformFeedback_type glEndTransformFeedback
 * 
 * ctypedef void (__stdcall *glFinish_type)() nogil             # <<<<<<<<<<<<<<
 * cdef glFinish_type glFinish
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glFinish_type)(void);

/* "renpy/uguu/gl.pxd":742
 * cdef glFinish_type glFinish
 * 
 * ctypedef void (__stdcall *glFlush_type)() nogil             # <<<<<<<<<<<<<<
 * cdef glFlush_type glFlush
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glFlush_type)(void);

/* "renpy/uguu/gl.pxd":745
 * cdef glFlush_type glFlush
 * 
 * ctypedef void (__stdcall *glFlushMappedBufferRange_type)(GLenum  target, GLintptr  offset, GLsizeiptr  length) nogil             # <<<<<<<<<<<<<<
 * cdef glFlushMappedBufferRange_type glFlushMappedBufferRange
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glFlushMappedBufferRange_type)(GLenum, GLintptr, GLsizeiptr);

/* "renpy/uguu/gl.pxd":748
 * cdef glFlushMappedBufferRange_type glFlushMappedBufferRange
 * 
 * ctypedef void (__stdcall *glFramebufferRenderbuffer_type)(GLenum  target, GLenum  attachment, GLenum  renderbuffertarget, GLuint  renderbuffer) nogil             # <<<<<<<<<<<<<<
 * cdef glFramebufferRenderbuffer_type glFramebufferRenderbuffer
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glFramebufferRenderbuffer_type)(GLenum, GLenum, GLenum, GLuint);

/* "renpy/uguu/gl.pxd":751
 * cdef glFramebufferRenderbuffer_type glFramebufferRenderbuffer
 * 
 * ctypedef void (__stdcall *glFramebufferTexture2D_type)(GLenum  target, GLenum  attachment, GLenum  textarget, GLuint  texture, GLint  level) nogil             # <<<<<<<<<<<<<<
 * cdef glFramebufferTexture2D_type glFramebufferTexture2D
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glFramebufferTexture2D_type)(GLenum, GLenum, GLenum, GLuint, GLint);

/* "renpy/uguu/gl.pxd":754
 * cdef glFramebufferTexture2D_type glFramebufferTexture2D
 * 
 * ctypedef void (__stdcall *glFramebufferTextureLayer_type)(GLenum  target, GLenum  attachment, GLuint  texture, GLint  level, GLint  layer) nogil             # <<<<<<<<<<<<<<
 * cdef glFramebufferTextureLayer_type glFramebufferTextureLayer
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glFramebufferTextureLayer_type)(GLenum, GLenum, GLuint, GLint, GLint);

/* "renpy/uguu/gl.pxd":757
 * cdef glFramebufferTextureLayer_type glFramebufferTextureLayer
 * 
 * ctypedef void (__stdcall *glFrontFace_type)(GLenum  mode) nogil             # <<<<<<<<<<<<<<
 * cdef glFrontFace_type glFrontFace
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glFrontFace_type)(GLenum);

/* "renpy/uguu/gl.pxd":760
 * cdef glFrontFace_type glFrontFace
 * 
 * ctypedef void (__stdcall *glGenBuffers_type)(GLsizei  n, GLuint * buffers) nogil             # <<<<<<<<<<<<<<
 * cdef glGenBuffers_type glGenBuffers
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGenBuffers_type)(GLsizei, GLuint *);

/* "renpy/uguu/gl.pxd":763
 * cdef glGenBuffers_type glGenBuffers
 * 
 * ctypedef void (__stdcall *glGenFramebuffers_type)(GLsizei  n, GLuint * framebuffers) nogil             # <<<<<<<<<<<<<<
 * cdef glGenFramebuffers_type glGenFramebuffers
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGenFramebuffers_type)(GLsizei, GLuint *);

/* "renpy/uguu/gl.pxd":766
 * cdef glGenFramebuffers_type glGenFramebuffers
 * 
 * ctypedef void (__stdcall *glGenQueries_type)(GLsizei  n, GLuint * ids) nogil             # <<<<<<<<<<<<<<
 * cdef glGenQueries_type glGenQueries
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGenQueries_type)(GLsizei, GLuint *);

/* "renpy/uguu/gl.pxd":769
 * cdef glGenQueries_type glGenQueries
 * 
 * ctypedef void (__stdcall *glGenRenderbuffers_type)(GLsizei  n, GLuint * renderbuffers) nogil             # <<<<<<<<<<<<<<
 * cdef glGenRenderbuffers_type glGenRenderbuffers
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGenRenderbuffers_type)(GLsizei, GLuint *);

/* "renpy/uguu/gl.pxd":772
 * cdef glGenRenderbuffers_type glGenRenderbuffers
 * 
 * ctypedef void (__stdcall *glGenTextures_type)(GLsizei  n, GLuint * textures) nogil             # <<<<<<<<<<<<<<
 * cdef glGenTextures_type glGenTextures
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGenTextures_type)(GLsizei, GLuint *);

/* "renpy/uguu/gl.pxd":775
 * cdef glGenTextures_type glGenTextures
 * 
 * ctypedef void (__stdcall *glGenVertexArrays_type)(GLsizei  n, GLuint * arrays) nogil             # <<<<<<<<<<<<<<
 * cdef glGenVertexArrays_type glGenVertexArrays
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGenVertexArrays_type)(GLsizei, GLuint *);

/* "renpy/uguu/gl.pxd":778
 * cdef glGenVertexArrays_type glGenVertexArrays
 * 
 * ctypedef void (__stdcall *glGenerateMipmap_type)(GLenum  target) nogil             # <<<<<<<<<<<<<<
 * cdef glGenerateMipmap_type glGenerateMipmap
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGenerateMipmap_type)(GLenum);

/* "renpy/uguu/gl.pxd":781
 * cdef glGenerateMipmap_type glGenerateMipmap
 * 
 * ctypedef void (__stdcall *glGetActiveAttrib_type)(GLuint  program, GLuint  index, GLsizei  bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) nogil             # <<<<<<<<<<<<<<
 * cdef glGetActiveAttrib_type glGetActiveAttrib
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetActiveAttrib_type)(GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *);

/* "renpy/uguu/gl.pxd":784
 * cdef glGetActiveAttrib_type glGetActiveAttrib
 * 
 * ctypedef void (__stdcall *glGetActiveUniform_type)(GLuint  program, GLuint  index, GLsizei  bufSize, GLsizei * length, GLint * size, GLenum * type, GLchar * name) nogil             # <<<<<<<<<<<<<<
 * cdef glGetActiveUniform_type glGetActiveUniform
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetActiveUniform_type)(GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *);

/* "renpy/uguu/gl.pxd":787
 * cdef glGetActiveUniform_type glGetActiveUniform
 * 
 * ctypedef void (__stdcall *glGetAttachedShaders_type)(GLuint  program, GLsizei  maxCount, GLsizei * count, GLuint * shaders) nogil             # <<<<<<<<<<<<<<
 * cdef glGetAttachedShaders_type glGetAttachedShaders
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetAttachedShaders_type)(GLuint, GLsizei, GLsizei *, GLuint *);

/* "renpy/uguu/gl.pxd":790
 * cdef glGetAttachedShaders_type glGetAttachedShaders
 * 
 * ctypedef GLint (__stdcall *glGetAttribLocation_type)(GLuint  program, const GLchar * name) nogil             # <<<<<<<<<<<<<<
 * cdef glGetAttribLocation_type glGetAttribLocation
 * 
 */
typedef GLint (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetAttribLocation_type)(GLuint, GLchar const *);

/* "renpy/uguu/gl.pxd":793
 * cdef glGetAttribLocation_type glGetAttribLocation
 * 
 * ctypedef void (__stdcall *glGetBooleanv_type)(GLenum  pname, GLboolean * data) nogil             # <<<<<<<<<<<<<<
 * cdef glGetBooleanv_type glGetBooleanv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetBooleanv_type)(GLenum, GLboolean *);

/* "renpy/uguu/gl.pxd":796
 * cdef glGetBooleanv_type glGetBooleanv
 * 
 * ctypedef void (__stdcall *glGetBufferParameteriv_type)(GLenum  target, GLenum  pname, GLint * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetBufferParameteriv_type glGetBufferParameteriv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetBufferParameteriv_type)(GLenum, GLenum, GLint *);

/* "renpy/uguu/gl.pxd":799
 * cdef glGetBufferParameteriv_type glGetBufferParameteriv
 * 
 * ctypedef void (__stdcall *glGetBufferPointerv_type)(GLenum  target, GLenum  pname, void ** params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetBufferPointerv_type glGetBufferPointerv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetBufferPointerv_type)(GLenum, GLenum, void **);

/* "renpy/uguu/gl.pxd":802
 * cdef glGetBufferPointerv_type glGetBufferPointerv
 * 
 * ctypedef GLenum (__stdcall *glGetError_type)() nogil             # <<<<<<<<<<<<<<
 * cdef glGetError_type glGetError
 * 
 */
typedef GLenum (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetError_type)(void);

/* "renpy/uguu/gl.pxd":805
 * cdef glGetError_type glGetError
 * 
 * ctypedef void (__stdcall *glGetFloatv_type)(GLenum  pname, GLfloat * data) nogil             # <<<<<<<<<<<<<<
 * cdef glGetFloatv_type glGetFloatv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetFloatv_type)(GLenum, GLfloat *);

/* "renpy/uguu/gl.pxd":808
 * cdef glGetFloatv_type glGetFloatv
 * 
 * ctypedef GLint (__stdcall *glGetFragDataLocation_type)(GLuint  program, const GLchar * name) nogil             # <<<<<<<<<<<<<<
 * cdef glGetFragDataLocation_type glGetFragDataLocation
 * 
 */
typedef GLint (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetFragDataLocation_type)(GLuint, GLchar const *);

/* "renpy/uguu/gl.pxd":811
 * cdef glGetFragDataLocation_type glGetFragDataLocation
 * 
 * ctypedef void (__stdcall *glGetFramebufferAttachmentParameteriv_type)(GLenum  target, GLenum  attachment, GLenum  pname, GLint * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetFramebufferAttachmentParameteriv_type glGetFramebufferAttachmentParameteriv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetFramebufferAttachmentParameteriv_type)(GLenum, GLenum, GLenum, GLint *);

/* "renpy/uguu/gl.pxd":814
 * cdef glGetFramebufferAttachmentParameteriv_type glGetFramebufferAttachmentParameteriv
 * 
 * ctypedef void (__stdcall *glGetIntegeri_v_type)(GLenum  target, GLuint  index, GLint * data) nogil             # <<<<<<<<<<<<<<
 * cdef glGetIntegeri_v_type glGetIntegeri_v
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetIntegeri_v_type)(GLenum, GLuint, GLint *);

/* "renpy/uguu/gl.pxd":817
 * cdef glGetIntegeri_v_type glGetIntegeri_v
 * 
 * ctypedef void (__stdcall *glGetIntegerv_type)(GLenum  pname, GLint * data) nogil             # <<<<<<<<<<<<<<
 * cdef glGetIntegerv_type glGetIntegerv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetIntegerv_type)(GLenum, GLint *);

/* "renpy/uguu/gl.pxd":820
 * cdef glGetIntegerv_type glGetIntegerv
 * 
 * ctypedef void (__stdcall *glGetProgramInfoLog_type)(GLuint  program, GLsizei  bufSize, GLsizei * length, GLchar * infoLog) nogil             # <<<<<<<<<<<<<<
 * cdef glGetProgramInfoLog_type glGetProgramInfoLog
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetProgramInfoLog_type)(GLuint, GLsizei, GLsizei *, GLchar *);

/* "renpy/uguu/gl.pxd":823
 * cdef glGetProgramInfoLog_type glGetProgramInfoLog
 * 
 * ctypedef void (__stdcall *glGetProgramiv_type)(GLuint  program, GLenum  pname, GLint * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetProgramiv_type glGetProgramiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetProgramiv_type)(GLuint, GLenum, GLint *);

/* "renpy/uguu/gl.pxd":826
 * cdef glGetProgramiv_type glGetProgramiv
 * 
 * ctypedef void (__stdcall *glGetQueryObjectuiv_type)(GLuint  id, GLenum  pname, GLuint * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetQueryObjectuiv_type glGetQueryObjectuiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetQueryObjectuiv_type)(GLuint, GLenum, GLuint *);

/* "renpy/uguu/gl.pxd":829
 * cdef glGetQueryObjectuiv_type glGetQueryObjectuiv
 * 
 * ctypedef void (__stdcall *glGetQueryiv_type)(GLenum  target, GLenum  pname, GLint * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetQueryiv_type glGetQueryiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetQueryiv_type)(GLenum, GLenum, GLint *);

/* "renpy/uguu/gl.pxd":832
 * cdef glGetQueryiv_type glGetQueryiv
 * 
 * ctypedef void (__stdcall *glGetRenderbufferParameteriv_type)(GLenum  target, GLenum  pname, GLint * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetRenderbufferParameteriv_type glGetRenderbufferParameteriv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetRenderbufferParameteriv_type)(GLenum, GLenum, GLint *);

/* "renpy/uguu/gl.pxd":835
 * cdef glGetRenderbufferParameteriv_type glGetRenderbufferParameteriv
 * 
 * ctypedef void (__stdcall *glGetShaderInfoLog_type)(GLuint  shader, GLsizei  bufSize, GLsizei * length, GLchar * infoLog) nogil             # <<<<<<<<<<<<<<
 * cdef glGetShaderInfoLog_type glGetShaderInfoLog
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetShaderInfoLog_type)(GLuint, GLsizei, GLsizei *, GLchar *);

/* "renpy/uguu/gl.pxd":838
 * cdef glGetShaderInfoLog_type glGetShaderInfoLog
 * 
 * ctypedef void (__stdcall *glGetShaderSource_type)(GLuint  shader, GLsizei  bufSize, GLsizei * length, GLchar * source) nogil             # <<<<<<<<<<<<<<
 * cdef glGetShaderSource_type glGetShaderSource
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetShaderSource_type)(GLuint, GLsizei, GLsizei *, GLchar *);

/* "renpy/uguu/gl.pxd":841
 * cdef glGetShaderSource_type glGetShaderSource
 * 
 * ctypedef void (__stdcall *glGetShaderiv_type)(GLuint  shader, GLenum  pname, GLint * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetShaderiv_type glGetShaderiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetShaderiv_type)(GLuint, GLenum, GLint *);

/* "renpy/uguu/gl.pxd":844
 * cdef glGetShaderiv_type glGetShaderiv
 * 
 * ctypedef const GLubyte * (__stdcall *glGetString_type)(GLenum  name) nogil             # <<<<<<<<<<<<<<
 * cdef glGetString_type glGetString
 * 
 */
typedef GLubyte const *(__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetString_type)(GLenum);

/* "renpy/uguu/gl.pxd":847
 * cdef glGetString_type glGetString
 * 
 * ctypedef const GLubyte * (__stdcall *glGetStringi_type)(GLenum  name, GLuint  index) nogil             # <<<<<<<<<<<<<<
 * cdef glGetStringi_type glGetStringi
 * 
 */
typedef GLubyte const *(__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetStringi_type)(GLenum, GLuint);

/* "renpy/uguu/gl.pxd":850
 * cdef glGetStringi_type glGetStringi
 * 
 * ctypedef void (__stdcall *glGetTexParameterfv_type)(GLenum  target, GLenum  pname, GLfloat * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetTexParameterfv_type glGetTexParameterfv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetTexParameterfv_type)(GLenum, GLenum, GLfloat *);

/* "renpy/uguu/gl.pxd":853
 * cdef glGetTexParameterfv_type glGetTexParameterfv
 * 
 * ctypedef void (__stdcall *glGetTexParameteriv_type)(GLenum  target, GLenum  pname, GLint * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetTexParameteriv_type glGetTexParameteriv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetTexParameteriv_type)(GLenum, GLenum, GLint *);

/* "renpy/uguu/gl.pxd":856
 * cdef glGetTexParameteriv_type glGetTexParameteriv
 * 
 * ctypedef void (__stdcall *glGetTransformFeedbackVarying_type)(GLuint  program, GLuint  index, GLsizei  bufSize, GLsizei * length, GLsizei * size, GLenum * type, GLchar * name) nogil             # <<<<<<<<<<<<<<
 * cdef glGetTransformFeedbackVarying_type glGetTransformFeedbackVarying
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetTransformFeedbackVarying_type)(GLuint, GLuint, GLsizei, GLsizei *, GLsizei *, GLenum *, GLchar *);

/* "renpy/uguu/gl.pxd":859
 * cdef glGetTransformFeedbackVarying_type glGetTransformFeedbackVarying
 * 
 * ctypedef GLint (__stdcall *glGetUniformLocation_type)(GLuint  program, const GLchar * name) nogil             # <<<<<<<<<<<<<<
 * cdef glGetUniformLocation_type glGetUniformLocation
 * 
 */
typedef GLint (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetUniformLocation_type)(GLuint, GLchar const *);

/* "renpy/uguu/gl.pxd":862
 * cdef glGetUniformLocation_type glGetUniformLocation
 * 
 * ctypedef void (__stdcall *glGetUniformfv_type)(GLuint  program, GLint  location, GLfloat * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetUniformfv_type glGetUniformfv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetUniformfv_type)(GLuint, GLint, GLfloat *);

/* "renpy/uguu/gl.pxd":865
 * cdef glGetUniformfv_type glGetUniformfv
 * 
 * ctypedef void (__stdcall *glGetUniformiv_type)(GLuint  program, GLint  location, GLint * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetUniformiv_type glGetUniformiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetUniformiv_type)(GLuint, GLint, GLint *);

/* "renpy/uguu/gl.pxd":868
 * cdef glGetUniformiv_type glGetUniformiv
 * 
 * ctypedef void (__stdcall *glGetUniformuiv_type)(GLuint  program, GLint  location, GLuint * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetUniformuiv_type glGetUniformuiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetUniformuiv_type)(GLuint, GLint, GLuint *);

/* "renpy/uguu/gl.pxd":871
 * cdef glGetUniformuiv_type glGetUniformuiv
 * 
 * ctypedef void (__stdcall *glGetVertexAttribIiv_type)(GLuint  index, GLenum  pname, GLint * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetVertexAttribIiv_type glGetVertexAttribIiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetVertexAttribIiv_type)(GLuint, GLenum, GLint *);

/* "renpy/uguu/gl.pxd":874
 * cdef glGetVertexAttribIiv_type glGetVertexAttribIiv
 * 
 * ctypedef void (__stdcall *glGetVertexAttribIuiv_type)(GLuint  index, GLenum  pname, GLuint * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetVertexAttribIuiv_type glGetVertexAttribIuiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetVertexAttribIuiv_type)(GLuint, GLenum, GLuint *);

/* "renpy/uguu/gl.pxd":877
 * cdef glGetVertexAttribIuiv_type glGetVertexAttribIuiv
 * 
 * ctypedef void (__stdcall *glGetVertexAttribPointerv_type)(GLuint  index, GLenum  pname, void ** pointer) nogil             # <<<<<<<<<<<<<<
 * cdef glGetVertexAttribPointerv_type glGetVertexAttribPointerv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetVertexAttribPointerv_type)(GLuint, GLenum, void **);

/* "renpy/uguu/gl.pxd":880
 * cdef glGetVertexAttribPointerv_type glGetVertexAttribPointerv
 * 
 * ctypedef void (__stdcall *glGetVertexAttribfv_type)(GLuint  index, GLenum  pname, GLfloat * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetVertexAttribfv_type glGetVertexAttribfv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetVertexAttribfv_type)(GLuint, GLenum, GLfloat *);

/* "renpy/uguu/gl.pxd":883
 * cdef glGetVertexAttribfv_type glGetVertexAttribfv
 * 
 * ctypedef void (__stdcall *glGetVertexAttribiv_type)(GLuint  index, GLenum  pname, GLint * params) nogil             # <<<<<<<<<<<<<<
 * cdef glGetVertexAttribiv_type glGetVertexAttribiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glGetVertexAttribiv_type)(GLuint, GLenum, GLint *);

/* "renpy/uguu/gl.pxd":886
 * cdef glGetVertexAttribiv_type glGetVertexAttribiv
 * 
 * ctypedef void (__stdcall *glHint_type)(GLenum  target, GLenum  mode) nogil             # <<<<<<<<<<<<<<
 * cdef glHint_type glHint
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glHint_type)(GLenum, GLenum);

/* "renpy/uguu/gl.pxd":889
 * cdef glHint_type glHint
 * 
 * ctypedef GLboolean (__stdcall *glIsBuffer_type)(GLuint  buffer) nogil             # <<<<<<<<<<<<<<
 * cdef glIsBuffer_type glIsBuffer
 * 
 */
typedef GLboolean (__stdcall *__pyx_t_5renpy_4uguu_2gl_glIsBuffer_type)(GLuint);

/* "renpy/uguu/gl.pxd":892
 * cdef glIsBuffer_type glIsBuffer
 * 
 * ctypedef GLboolean (__stdcall *glIsEnabled_type)(GLenum  cap) nogil             # <<<<<<<<<<<<<<
 * cdef glIsEnabled_type glIsEnabled
 * 
 */
typedef GLboolean (__stdcall *__pyx_t_5renpy_4uguu_2gl_glIsEnabled_type)(GLenum);

/* "renpy/uguu/gl.pxd":895
 * cdef glIsEnabled_type glIsEnabled
 * 
 * ctypedef GLboolean (__stdcall *glIsFramebuffer_type)(GLuint  framebuffer) nogil             # <<<<<<<<<<<<<<
 * cdef glIsFramebuffer_type glIsFramebuffer
 * 
 */
typedef GLboolean (__stdcall *__pyx_t_5renpy_4uguu_2gl_glIsFramebuffer_type)(GLuint);

/* "renpy/uguu/gl.pxd":898
 * cdef glIsFramebuffer_type glIsFramebuffer
 * 
 * ctypedef GLboolean (__stdcall *glIsProgram_type)(GLuint  program) nogil             # <<<<<<<<<<<<<<
 * cdef glIsProgram_type glIsProgram
 * 
 */
typedef GLboolean (__stdcall *__pyx_t_5renpy_4uguu_2gl_glIsProgram_type)(GLuint);

/* "renpy/uguu/gl.pxd":901
 * cdef glIsProgram_type glIsProgram
 * 
 * ctypedef GLboolean (__stdcall *glIsQuery_type)(GLuint  id) nogil             # <<<<<<<<<<<<<<
 * cdef glIsQuery_type glIsQuery
 * 
 */
typedef GLboolean (__stdcall *__pyx_t_5renpy_4uguu_2gl_glIsQuery_type)(GLuint);

/* "renpy/uguu/gl.pxd":904
 * cdef glIsQuery_type glIsQuery
 * 
 * ctypedef GLboolean (__stdcall *glIsRenderbuffer_type)(GLuint  renderbuffer) nogil             # <<<<<<<<<<<<<<
 * cdef glIsRenderbuffer_type glIsRenderbuffer
 * 
 */
typedef GLboolean (__stdcall *__pyx_t_5renpy_4uguu_2gl_glIsRenderbuffer_type)(GLuint);

/* "renpy/uguu/gl.pxd":907
 * cdef glIsRenderbuffer_type glIsRenderbuffer
 * 
 * ctypedef GLboolean (__stdcall *glIsShader_type)(GLuint  shader) nogil             # <<<<<<<<<<<<<<
 * cdef glIsShader_type glIsShader
 * 
 */
typedef GLboolean (__stdcall *__pyx_t_5renpy_4uguu_2gl_glIsShader_type)(GLuint);

/* "renpy/uguu/gl.pxd":910
 * cdef glIsShader_type glIsShader
 * 
 * ctypedef GLboolean (__stdcall *glIsTexture_type)(GLuint  texture) nogil             # <<<<<<<<<<<<<<
 * cdef glIsTexture_type glIsTexture
 * 
 */
typedef GLboolean (__stdcall *__pyx_t_5renpy_4uguu_2gl_glIsTexture_type)(GLuint);

/* "renpy/uguu/gl.pxd":913
 * cdef glIsTexture_type glIsTexture
 * 
 * ctypedef GLboolean (__stdcall *glIsVertexArray_type)(GLuint  array) nogil             # <<<<<<<<<<<<<<
 * cdef glIsVertexArray_type glIsVertexArray
 * 
 */
typedef GLboolean (__stdcall *__pyx_t_5renpy_4uguu_2gl_glIsVertexArray_type)(GLuint);

/* "renpy/uguu/gl.pxd":916
 * cdef glIsVertexArray_type glIsVertexArray
 * 
 * ctypedef void (__stdcall *glLineWidth_type)(GLfloat  width) nogil             # <<<<<<<<<<<<<<
 * cdef glLineWidth_type glLineWidth
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glLineWidth_type)(GLfloat);

/* "renpy/uguu/gl.pxd":919
 * cdef glLineWidth_type glLineWidth
 * 
 * ctypedef void (__stdcall *glLinkProgram_type)(GLuint  program) nogil             # <<<<<<<<<<<<<<
 * cdef glLinkProgram_type glLinkProgram
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glLinkProgram_type)(GLuint);

/* "renpy/uguu/gl.pxd":922
 * cdef glLinkProgram_type glLinkProgram
 * 
 * ctypedef void * (__stdcall *glMapBufferRange_type)(GLenum  target, GLintptr  offset, GLsizeiptr  length, GLbitfield  access) nogil             # <<<<<<<<<<<<<<
 * cdef glMapBufferRange_type glMapBufferRange
 * 
 */
typedef void *(__stdcall *__pyx_t_5renpy_4uguu_2gl_glMapBufferRange_type)(GLenum, GLintptr, GLsizeiptr, GLbitfield);

/* "renpy/uguu/gl.pxd":925
 * cdef glMapBufferRange_type glMapBufferRange
 * 
 * ctypedef void (__stdcall *glPixelStorei_type)(GLenum  pname, GLint  param) nogil             # <<<<<<<<<<<<<<
 * cdef glPixelStorei_type glPixelStorei
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glPixelStorei_type)(GLenum, GLint);

/* "renpy/uguu/gl.pxd":928
 * cdef glPixelStorei_type glPixelStorei
 * 
 * ctypedef void (__stdcall *glPolygonOffset_type)(GLfloat  factor, GLfloat  units) nogil             # <<<<<<<<<<<<<<
 * cdef glPolygonOffset_type glPolygonOffset
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glPolygonOffset_type)(GLfloat, GLfloat);

/* "renpy/uguu/gl.pxd":931
 * cdef glPolygonOffset_type glPolygonOffset
 * 
 * ctypedef void (__stdcall *glReadBuffer_type)(GLenum  src) nogil             # <<<<<<<<<<<<<<
 * cdef glReadBuffer_type glReadBuffer
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glReadBuffer_type)(GLenum);

/* "renpy/uguu/gl.pxd":934
 * cdef glReadBuffer_type glReadBuffer
 * 
 * ctypedef void (__stdcall *glReadPixels_type)(GLint  x, GLint  y, GLsizei  width, GLsizei  height, GLenum  format, GLenum  type, void * pixels) nogil             # <<<<<<<<<<<<<<
 * cdef glReadPixels_type glReadPixels
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glReadPixels_type)(GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, void *);

/* "renpy/uguu/gl.pxd":937
 * cdef glReadPixels_type glReadPixels
 * 
 * ctypedef void (__stdcall *glRenderbufferStorage_type)(GLenum  target, GLenum  internalformat, GLsizei  width, GLsizei  height) nogil             # <<<<<<<<<<<<<<
 * cdef glRenderbufferStorage_type glRenderbufferStorage
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glRenderbufferStorage_type)(GLenum, GLenum, GLsizei, GLsizei);

/* "renpy/uguu/gl.pxd":940
 * cdef glRenderbufferStorage_type glRenderbufferStorage
 * 
 * ctypedef void (__stdcall *glRenderbufferStorageMultisample_type)(GLenum  target, GLsizei  samples, GLenum  internalformat, GLsizei  width, GLsizei  height) nogil             # <<<<<<<<<<<<<<
 * cdef glRenderbufferStorageMultisample_type glRenderbufferStorageMultisample
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glRenderbufferStorageMultisample_type)(GLenum, GLsizei, GLenum, GLsizei, GLsizei);

/* "renpy/uguu/gl.pxd":943
 * cdef glRenderbufferStorageMultisample_type glRenderbufferStorageMultisample
 * 
 * ctypedef void (__stdcall *glSampleCoverage_type)(GLfloat  value, GLboolean  invert) nogil             # <<<<<<<<<<<<<<
 * cdef glSampleCoverage_type glSampleCoverage
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glSampleCoverage_type)(GLfloat, GLboolean);

/* "renpy/uguu/gl.pxd":946
 * cdef glSampleCoverage_type glSampleCoverage
 * 
 * ctypedef void (__stdcall *glScissor_type)(GLint  x, GLint  y, GLsizei  width, GLsizei  height) nogil             # <<<<<<<<<<<<<<
 * cdef glScissor_type glScissor
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glScissor_type)(GLint, GLint, GLsizei, GLsizei);

/* "renpy/uguu/gl.pxd":949
 * cdef glScissor_type glScissor
 * 
 * ctypedef void (__stdcall *glShaderSource_type)(GLuint  shader, GLsizei  count, const GLchar *const* string, const GLint * length) nogil             # <<<<<<<<<<<<<<
 * cdef glShaderSource_type glShaderSource
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glShaderSource_type)(GLuint, GLsizei, GLchar const *const *, GLint const *);

/* "renpy/uguu/gl.pxd":952
 * cdef glShaderSource_type glShaderSource
 * 
 * ctypedef void (__stdcall *glStencilFunc_type)(GLenum  func, GLint  ref, GLuint  mask) nogil             # <<<<<<<<<<<<<<
 * cdef glStencilFunc_type glStencilFunc
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glStencilFunc_type)(GLenum, GLint, GLuint);

/* "renpy/uguu/gl.pxd":955
 * cdef glStencilFunc_type glStencilFunc
 * 
 * ctypedef void (__stdcall *glStencilFuncSeparate_type)(GLenum  face, GLenum  func, GLint  ref, GLuint  mask) nogil             # <<<<<<<<<<<<<<
 * cdef glStencilFuncSeparate_type glStencilFuncSeparate
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glStencilFuncSeparate_type)(GLenum, GLenum, GLint, GLuint);

/* "renpy/uguu/gl.pxd":958
 * cdef glStencilFuncSeparate_type glStencilFuncSeparate
 * 
 * ctypedef void (__stdcall *glStencilMask_type)(GLuint  mask) nogil             # <<<<<<<<<<<<<<
 * cdef glStencilMask_type glStencilMask
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glStencilMask_type)(GLuint);

/* "renpy/uguu/gl.pxd":961
 * cdef glStencilMask_type glStencilMask
 * 
 * ctypedef void (__stdcall *glStencilMaskSeparate_type)(GLenum  face, GLuint  mask) nogil             # <<<<<<<<<<<<<<
 * cdef glStencilMaskSeparate_type glStencilMaskSeparate
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glStencilMaskSeparate_type)(GLenum, GLuint);

/* "renpy/uguu/gl.pxd":964
 * cdef glStencilMaskSeparate_type glStencilMaskSeparate
 * 
 * ctypedef void (__stdcall *glStencilOp_type)(GLenum  fail, GLenum  zfail, GLenum  zpass) nogil             # <<<<<<<<<<<<<<
 * cdef glStencilOp_type glStencilOp
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glStencilOp_type)(GLenum, GLenum, GLenum);

/* "renpy/uguu/gl.pxd":967
 * cdef glStencilOp_type glStencilOp
 * 
 * ctypedef void (__stdcall *glStencilOpSeparate_type)(GLenum  face, GLenum  sfail, GLenum  dpfail, GLenum  dppass) nogil             # <<<<<<<<<<<<<<
 * cdef glStencilOpSeparate_type glStencilOpSeparate
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glStencilOpSeparate_type)(GLenum, GLenum, GLenum, GLenum);

/* "renpy/uguu/gl.pxd":970
 * cdef glStencilOpSeparate_type glStencilOpSeparate
 * 
 * ctypedef void (__stdcall *glTexImage2D_type)(GLenum  target, GLint  level, GLint  internalformat, GLsizei  width, GLsizei  height, GLint  border, GLenum  format, GLenum  type, const void * pixels) nogil             # <<<<<<<<<<<<<<
 * cdef glTexImage2D_type glTexImage2D
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glTexImage2D_type)(GLenum, GLint, GLint, GLsizei, GLsizei, GLint, GLenum, GLenum, void const *);

/* "renpy/uguu/gl.pxd":973
 * cdef glTexImage2D_type glTexImage2D
 * 
 * ctypedef void (__stdcall *glTexImage3D_type)(GLenum  target, GLint  level, GLint  internalformat, GLsizei  width, GLsizei  height, GLsizei  depth, GLint  border, GLenum  format, GLenum  type, const void * pixels) nogil             # <<<<<<<<<<<<<<
 * cdef glTexImage3D_type glTexImage3D
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glTexImage3D_type)(GLenum, GLint, GLint, GLsizei, GLsizei, GLsizei, GLint, GLenum, GLenum, void const *);

/* "renpy/uguu/gl.pxd":976
 * cdef glTexImage3D_type glTexImage3D
 * 
 * ctypedef void (__stdcall *glTexParameterf_type)(GLenum  target, GLenum  pname, GLfloat  param) nogil             # <<<<<<<<<<<<<<
 * cdef glTexParameterf_type glTexParameterf
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glTexParameterf_type)(GLenum, GLenum, GLfloat);

/* "renpy/uguu/gl.pxd":979
 * cdef glTexParameterf_type glTexParameterf
 * 
 * ctypedef void (__stdcall *glTexParameterfv_type)(GLenum  target, GLenum  pname, const GLfloat * params) nogil             # <<<<<<<<<<<<<<
 * cdef glTexParameterfv_type glTexParameterfv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glTexParameterfv_type)(GLenum, GLenum, GLfloat const *);

/* "renpy/uguu/gl.pxd":982
 * cdef glTexParameterfv_type glTexParameterfv
 * 
 * ctypedef void (__stdcall *glTexParameteri_type)(GLenum  target, GLenum  pname, GLint  param) nogil             # <<<<<<<<<<<<<<
 * cdef glTexParameteri_type glTexParameteri
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glTexParameteri_type)(GLenum, GLenum, GLint);

/* "renpy/uguu/gl.pxd":985
 * cdef glTexParameteri_type glTexParameteri
 * 
 * ctypedef void (__stdcall *glTexParameteriv_type)(GLenum  target, GLenum  pname, const GLint * params) nogil             # <<<<<<<<<<<<<<
 * cdef glTexParameteriv_type glTexParameteriv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glTexParameteriv_type)(GLenum, GLenum, GLint const *);

/* "renpy/uguu/gl.pxd":988
 * cdef glTexParameteriv_type glTexParameteriv
 * 
 * ctypedef void (__stdcall *glTexSubImage2D_type)(GLenum  target, GLint  level, GLint  xoffset, GLint  yoffset, GLsizei  width, GLsizei  height, GLenum  format, GLenum  type, const void * pixels) nogil             # <<<<<<<<<<<<<<
 * cdef glTexSubImage2D_type glTexSubImage2D
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glTexSubImage2D_type)(GLenum, GLint, GLint, GLint, GLsizei, GLsizei, GLenum, GLenum, void const *);

/* "renpy/uguu/gl.pxd":991
 * cdef glTexSubImage2D_type glTexSubImage2D
 * 
 * ctypedef void (__stdcall *glTexSubImage3D_type)(GLenum  target, GLint  level, GLint  xoffset, GLint  yoffset, GLint  zoffset, GLsizei  width, GLsizei  height, GLsizei  depth, GLenum  format, GLenum  type, const void * pixels) nogil             # <<<<<<<<<<<<<<
 * cdef glTexSubImage3D_type glTexSubImage3D
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glTexSubImage3D_type)(GLenum, GLint, GLint, GLint, GLint, GLsizei, GLsizei, GLsizei, GLenum, GLenum, void const *);

/* "renpy/uguu/gl.pxd":994
 * cdef glTexSubImage3D_type glTexSubImage3D
 * 
 * ctypedef void (__stdcall *glTransformFeedbackVaryings_type)(GLuint  program, GLsizei  count, const GLchar *const* varyings, GLenum  bufferMode) nogil             # <<<<<<<<<<<<<<
 * cdef glTransformFeedbackVaryings_type glTransformFeedbackVaryings
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glTransformFeedbackVaryings_type)(GLuint, GLsizei, GLchar const *const *, GLenum);

/* "renpy/uguu/gl.pxd":997
 * cdef glTransformFeedbackVaryings_type glTransformFeedbackVaryings
 * 
 * ctypedef void (__stdcall *glUniform1f_type)(GLint  location, GLfloat  v0) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform1f_type glUniform1f
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform1f_type)(GLint, GLfloat);

/* "renpy/uguu/gl.pxd":1000
 * cdef glUniform1f_type glUniform1f
 * 
 * ctypedef void (__stdcall *glUniform1fv_type)(GLint  location, GLsizei  count, const GLfloat * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform1fv_type glUniform1fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform1fv_type)(GLint, GLsizei, GLfloat const *);

/* "renpy/uguu/gl.pxd":1003
 * cdef glUniform1fv_type glUniform1fv
 * 
 * ctypedef void (__stdcall *glUniform1i_type)(GLint  location, GLint  v0) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform1i_type glUniform1i
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform1i_type)(GLint, GLint);

/* "renpy/uguu/gl.pxd":1006
 * cdef glUniform1i_type glUniform1i
 * 
 * ctypedef void (__stdcall *glUniform1iv_type)(GLint  location, GLsizei  count, const GLint * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform1iv_type glUniform1iv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform1iv_type)(GLint, GLsizei, GLint const *);

/* "renpy/uguu/gl.pxd":1009
 * cdef glUniform1iv_type glUniform1iv
 * 
 * ctypedef void (__stdcall *glUniform1ui_type)(GLint  location, GLuint  v0) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform1ui_type glUniform1ui
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform1ui_type)(GLint, GLuint);

/* "renpy/uguu/gl.pxd":1012
 * cdef glUniform1ui_type glUniform1ui
 * 
 * ctypedef void (__stdcall *glUniform1uiv_type)(GLint  location, GLsizei  count, const GLuint * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform1uiv_type glUniform1uiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform1uiv_type)(GLint, GLsizei, GLuint const *);

/* "renpy/uguu/gl.pxd":1015
 * cdef glUniform1uiv_type glUniform1uiv
 * 
 * ctypedef void (__stdcall *glUniform2f_type)(GLint  location, GLfloat  v0, GLfloat  v1) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform2f_type glUniform2f
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform2f_type)(GLint, GLfloat, GLfloat);

/* "renpy/uguu/gl.pxd":1018
 * cdef glUniform2f_type glUniform2f
 * 
 * ctypedef void (__stdcall *glUniform2fv_type)(GLint  location, GLsizei  count, const GLfloat * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform2fv_type glUniform2fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform2fv_type)(GLint, GLsizei, GLfloat const *);

/* "renpy/uguu/gl.pxd":1021
 * cdef glUniform2fv_type glUniform2fv
 * 
 * ctypedef void (__stdcall *glUniform2i_type)(GLint  location, GLint  v0, GLint  v1) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform2i_type glUniform2i
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform2i_type)(GLint, GLint, GLint);

/* "renpy/uguu/gl.pxd":1024
 * cdef glUniform2i_type glUniform2i
 * 
 * ctypedef void (__stdcall *glUniform2iv_type)(GLint  location, GLsizei  count, const GLint * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform2iv_type glUniform2iv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform2iv_type)(GLint, GLsizei, GLint const *);

/* "renpy/uguu/gl.pxd":1027
 * cdef glUniform2iv_type glUniform2iv
 * 
 * ctypedef void (__stdcall *glUniform2ui_type)(GLint  location, GLuint  v0, GLuint  v1) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform2ui_type glUniform2ui
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform2ui_type)(GLint, GLuint, GLuint);

/* "renpy/uguu/gl.pxd":1030
 * cdef glUniform2ui_type glUniform2ui
 * 
 * ctypedef void (__stdcall *glUniform2uiv_type)(GLint  location, GLsizei  count, const GLuint * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform2uiv_type glUniform2uiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform2uiv_type)(GLint, GLsizei, GLuint const *);

/* "renpy/uguu/gl.pxd":1033
 * cdef glUniform2uiv_type glUniform2uiv
 * 
 * ctypedef void (__stdcall *glUniform3f_type)(GLint  location, GLfloat  v0, GLfloat  v1, GLfloat  v2) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform3f_type glUniform3f
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform3f_type)(GLint, GLfloat, GLfloat, GLfloat);

/* "renpy/uguu/gl.pxd":1036
 * cdef glUniform3f_type glUniform3f
 * 
 * ctypedef void (__stdcall *glUniform3fv_type)(GLint  location, GLsizei  count, const GLfloat * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform3fv_type glUniform3fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform3fv_type)(GLint, GLsizei, GLfloat const *);

/* "renpy/uguu/gl.pxd":1039
 * cdef glUniform3fv_type glUniform3fv
 * 
 * ctypedef void (__stdcall *glUniform3i_type)(GLint  location, GLint  v0, GLint  v1, GLint  v2) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform3i_type glUniform3i
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform3i_type)(GLint, GLint, GLint, GLint);

/* "renpy/uguu/gl.pxd":1042
 * cdef glUniform3i_type glUniform3i
 * 
 * ctypedef void (__stdcall *glUniform3iv_type)(GLint  location, GLsizei  count, const GLint * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform3iv_type glUniform3iv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform3iv_type)(GLint, GLsizei, GLint const *);

/* "renpy/uguu/gl.pxd":1045
 * cdef glUniform3iv_type glUniform3iv
 * 
 * ctypedef void (__stdcall *glUniform3ui_type)(GLint  location, GLuint  v0, GLuint  v1, GLuint  v2) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform3ui_type glUniform3ui
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform3ui_type)(GLint, GLuint, GLuint, GLuint);

/* "renpy/uguu/gl.pxd":1048
 * cdef glUniform3ui_type glUniform3ui
 * 
 * ctypedef void (__stdcall *glUniform3uiv_type)(GLint  location, GLsizei  count, const GLuint * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform3uiv_type glUniform3uiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform3uiv_type)(GLint, GLsizei, GLuint const *);

/* "renpy/uguu/gl.pxd":1051
 * cdef glUniform3uiv_type glUniform3uiv
 * 
 * ctypedef void (__stdcall *glUniform4f_type)(GLint  location, GLfloat  v0, GLfloat  v1, GLfloat  v2, GLfloat  v3) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform4f_type glUniform4f
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform4f_type)(GLint, GLfloat, GLfloat, GLfloat, GLfloat);

/* "renpy/uguu/gl.pxd":1054
 * cdef glUniform4f_type glUniform4f
 * 
 * ctypedef void (__stdcall *glUniform4fv_type)(GLint  location, GLsizei  count, const GLfloat * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform4fv_type glUniform4fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform4fv_type)(GLint, GLsizei, GLfloat const *);

/* "renpy/uguu/gl.pxd":1057
 * cdef glUniform4fv_type glUniform4fv
 * 
 * ctypedef void (__stdcall *glUniform4i_type)(GLint  location, GLint  v0, GLint  v1, GLint  v2, GLint  v3) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform4i_type glUniform4i
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform4i_type)(GLint, GLint, GLint, GLint, GLint);

/* "renpy/uguu/gl.pxd":1060
 * cdef glUniform4i_type glUniform4i
 * 
 * ctypedef void (__stdcall *glUniform4iv_type)(GLint  location, GLsizei  count, const GLint * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform4iv_type glUniform4iv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform4iv_type)(GLint, GLsizei, GLint const *);

/* "renpy/uguu/gl.pxd":1063
 * cdef glUniform4iv_type glUniform4iv
 * 
 * ctypedef void (__stdcall *glUniform4ui_type)(GLint  location, GLuint  v0, GLuint  v1, GLuint  v2, GLuint  v3) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform4ui_type glUniform4ui
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform4ui_type)(GLint, GLuint, GLuint, GLuint, GLuint);

/* "renpy/uguu/gl.pxd":1066
 * cdef glUniform4ui_type glUniform4ui
 * 
 * ctypedef void (__stdcall *glUniform4uiv_type)(GLint  location, GLsizei  count, const GLuint * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniform4uiv_type glUniform4uiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniform4uiv_type)(GLint, GLsizei, GLuint const *);

/* "renpy/uguu/gl.pxd":1069
 * cdef glUniform4uiv_type glUniform4uiv
 * 
 * ctypedef void (__stdcall *glUniformMatrix2fv_type)(GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniformMatrix2fv_type glUniformMatrix2fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniformMatrix2fv_type)(GLint, GLsizei, GLboolean, GLfloat const *);

/* "renpy/uguu/gl.pxd":1072
 * cdef glUniformMatrix2fv_type glUniformMatrix2fv
 * 
 * ctypedef void (__stdcall *glUniformMatrix2x3fv_type)(GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniformMatrix2x3fv_type glUniformMatrix2x3fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniformMatrix2x3fv_type)(GLint, GLsizei, GLboolean, GLfloat const *);

/* "renpy/uguu/gl.pxd":1075
 * cdef glUniformMatrix2x3fv_type glUniformMatrix2x3fv
 * 
 * ctypedef void (__stdcall *glUniformMatrix2x4fv_type)(GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniformMatrix2x4fv_type glUniformMatrix2x4fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniformMatrix2x4fv_type)(GLint, GLsizei, GLboolean, GLfloat const *);

/* "renpy/uguu/gl.pxd":1078
 * cdef glUniformMatrix2x4fv_type glUniformMatrix2x4fv
 * 
 * ctypedef void (__stdcall *glUniformMatrix3fv_type)(GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniformMatrix3fv_type glUniformMatrix3fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniformMatrix3fv_type)(GLint, GLsizei, GLboolean, GLfloat const *);

/* "renpy/uguu/gl.pxd":1081
 * cdef glUniformMatrix3fv_type glUniformMatrix3fv
 * 
 * ctypedef void (__stdcall *glUniformMatrix3x2fv_type)(GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniformMatrix3x2fv_type glUniformMatrix3x2fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniformMatrix3x2fv_type)(GLint, GLsizei, GLboolean, GLfloat const *);

/* "renpy/uguu/gl.pxd":1084
 * cdef glUniformMatrix3x2fv_type glUniformMatrix3x2fv
 * 
 * ctypedef void (__stdcall *glUniformMatrix3x4fv_type)(GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniformMatrix3x4fv_type glUniformMatrix3x4fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniformMatrix3x4fv_type)(GLint, GLsizei, GLboolean, GLfloat const *);

/* "renpy/uguu/gl.pxd":1087
 * cdef glUniformMatrix3x4fv_type glUniformMatrix3x4fv
 * 
 * ctypedef void (__stdcall *glUniformMatrix4fv_type)(GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniformMatrix4fv_type glUniformMatrix4fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniformMatrix4fv_type)(GLint, GLsizei, GLboolean, GLfloat const *);

/* "renpy/uguu/gl.pxd":1090
 * cdef glUniformMatrix4fv_type glUniformMatrix4fv
 * 
 * ctypedef void (__stdcall *glUniformMatrix4x2fv_type)(GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniformMatrix4x2fv_type glUniformMatrix4x2fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniformMatrix4x2fv_type)(GLint, GLsizei, GLboolean, GLfloat const *);

/* "renpy/uguu/gl.pxd":1093
 * cdef glUniformMatrix4x2fv_type glUniformMatrix4x2fv
 * 
 * ctypedef void (__stdcall *glUniformMatrix4x3fv_type)(GLint  location, GLsizei  count, GLboolean  transpose, const GLfloat * value) nogil             # <<<<<<<<<<<<<<
 * cdef glUniformMatrix4x3fv_type glUniformMatrix4x3fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUniformMatrix4x3fv_type)(GLint, GLsizei, GLboolean, GLfloat const *);

/* "renpy/uguu/gl.pxd":1096
 * cdef glUniformMatrix4x3fv_type glUniformMatrix4x3fv
 * 
 * ctypedef GLboolean (__stdcall *glUnmapBuffer_type)(GLenum  target) nogil             # <<<<<<<<<<<<<<
 * cdef glUnmapBuffer_type glUnmapBuffer
 * 
 */
typedef GLboolean (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUnmapBuffer_type)(GLenum);

/* "renpy/uguu/gl.pxd":1099
 * cdef glUnmapBuffer_type glUnmapBuffer
 * 
 * ctypedef void (__stdcall *glUseProgram_type)(GLuint  program) nogil             # <<<<<<<<<<<<<<
 * cdef glUseProgram_type glUseProgram
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glUseProgram_type)(GLuint);

/* "renpy/uguu/gl.pxd":1102
 * cdef glUseProgram_type glUseProgram
 * 
 * ctypedef void (__stdcall *glValidateProgram_type)(GLuint  program) nogil             # <<<<<<<<<<<<<<
 * cdef glValidateProgram_type glValidateProgram
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glValidateProgram_type)(GLuint);

/* "renpy/uguu/gl.pxd":1105
 * cdef glValidateProgram_type glValidateProgram
 * 
 * ctypedef void (__stdcall *glVertexAttrib1f_type)(GLuint  index, GLfloat  x) nogil             # <<<<<<<<<<<<<<
 * cdef glVertexAttrib1f_type glVertexAttrib1f
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glVertexAttrib1f_type)(GLuint, GLfloat);

/* "renpy/uguu/gl.pxd":1108
 * cdef glVertexAttrib1f_type glVertexAttrib1f
 * 
 * ctypedef void (__stdcall *glVertexAttrib1fv_type)(GLuint  index, const GLfloat * v) nogil             # <<<<<<<<<<<<<<
 * cdef glVertexAttrib1fv_type glVertexAttrib1fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glVertexAttrib1fv_type)(GLuint, GLfloat const *);

/* "renpy/uguu/gl.pxd":1111
 * cdef glVertexAttrib1fv_type glVertexAttrib1fv
 * 
 * ctypedef void (__stdcall *glVertexAttrib2f_type)(GLuint  index, GLfloat  x, GLfloat  y) nogil             # <<<<<<<<<<<<<<
 * cdef glVertexAttrib2f_type glVertexAttrib2f
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glVertexAttrib2f_type)(GLuint, GLfloat, GLfloat);

/* "renpy/uguu/gl.pxd":1114
 * cdef glVertexAttrib2f_type glVertexAttrib2f
 * 
 * ctypedef void (__stdcall *glVertexAttrib2fv_type)(GLuint  index, const GLfloat * v) nogil             # <<<<<<<<<<<<<<
 * cdef glVertexAttrib2fv_type glVertexAttrib2fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glVertexAttrib2fv_type)(GLuint, GLfloat const *);

/* "renpy/uguu/gl.pxd":1117
 * cdef glVertexAttrib2fv_type glVertexAttrib2fv
 * 
 * ctypedef void (__stdcall *glVertexAttrib3f_type)(GLuint  index, GLfloat  x, GLfloat  y, GLfloat  z) nogil             # <<<<<<<<<<<<<<
 * cdef glVertexAttrib3f_type glVertexAttrib3f
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glVertexAttrib3f_type)(GLuint, GLfloat, GLfloat, GLfloat);

/* "renpy/uguu/gl.pxd":1120
 * cdef glVertexAttrib3f_type glVertexAttrib3f
 * 
 * ctypedef void (__stdcall *glVertexAttrib3fv_type)(GLuint  index, const GLfloat * v) nogil             # <<<<<<<<<<<<<<
 * cdef glVertexAttrib3fv_type glVertexAttrib3fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glVertexAttrib3fv_type)(GLuint, GLfloat const *);

/* "renpy/uguu/gl.pxd":1123
 * cdef glVertexAttrib3fv_type glVertexAttrib3fv
 * 
 * ctypedef void (__stdcall *glVertexAttrib4f_type)(GLuint  index, GLfloat  x, GLfloat  y, GLfloat  z, GLfloat  w) nogil             # <<<<<<<<<<<<<<
 * cdef glVertexAttrib4f_type glVertexAttrib4f
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glVertexAttrib4f_type)(GLuint, GLfloat, GLfloat, GLfloat, GLfloat);

/* "renpy/uguu/gl.pxd":1126
 * cdef glVertexAttrib4f_type glVertexAttrib4f
 * 
 * ctypedef void (__stdcall *glVertexAttrib4fv_type)(GLuint  index, const GLfloat * v) nogil             # <<<<<<<<<<<<<<
 * cdef glVertexAttrib4fv_type glVertexAttrib4fv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glVertexAttrib4fv_type)(GLuint, GLfloat const *);

/* "renpy/uguu/gl.pxd":1129
 * cdef glVertexAttrib4fv_type glVertexAttrib4fv
 * 
 * ctypedef void (__stdcall *glVertexAttribI4i_type)(GLuint  index, GLint  x, GLint  y, GLint  z, GLint  w) nogil             # <<<<<<<<<<<<<<
 * cdef glVertexAttribI4i_type glVertexAttribI4i
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glVertexAttribI4i_type)(GLuint, GLint, GLint, GLint, GLint);

/* "renpy/uguu/gl.pxd":1132
 * cdef glVertexAttribI4i_type glVertexAttribI4i
 * 
 * ctypedef void (__stdcall *glVertexAttribI4iv_type)(GLuint  index, const GLint * v) nogil             # <<<<<<<<<<<<<<
 * cdef glVertexAttribI4iv_type glVertexAttribI4iv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glVertexAttribI4iv_type)(GLuint, GLint const *);

/* "renpy/uguu/gl.pxd":1135
 * cdef glVertexAttribI4iv_type glVertexAttribI4iv
 * 
 * ctypedef void (__stdcall *glVertexAttribI4ui_type)(GLuint  index, GLuint  x, GLuint  y, GLuint  z, GLuint  w) nogil             # <<<<<<<<<<<<<<
 * cdef glVertexAttribI4ui_type glVertexAttribI4ui
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glVertexAttribI4ui_type)(GLuint, GLuint, GLuint, GLuint, GLuint);

/* "renpy/uguu/gl.pxd":1138
 * cdef glVertexAttribI4ui_type glVertexAttribI4ui
 * 
 * ctypedef void (__stdcall *glVertexAttribI4uiv_type)(GLuint  index, const GLuint * v) nogil             # <<<<<<<<<<<<<<
 * cdef glVertexAttribI4uiv_type glVertexAttribI4uiv
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glVertexAttribI4uiv_type)(GLuint, GLuint const *);

/* "renpy/uguu/gl.pxd":1141
 * cdef glVertexAttribI4uiv_type glVertexAttribI4uiv
 * 
 * ctypedef void (__stdcall *glVertexAttribIPointer_type)(GLuint  index, GLint  size, GLenum  type, GLsizei  stride, const void * pointer) nogil             # <<<<<<<<<<<<<<
 * cdef glVertexAttribIPointer_type glVertexAttribIPointer
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glVertexAttribIPointer_type)(GLuint, GLint, GLenum, GLsizei, void const *);

/* "renpy/uguu/gl.pxd":1144
 * cdef glVertexAttribIPointer_type glVertexAttribIPointer
 * 
 * ctypedef void (__stdcall *glVertexAttribPointer_type)(GLuint  index, GLint  size, GLenum  type, GLboolean  normalized, GLsizei  stride, const void * pointer) nogil             # <<<<<<<<<<<<<<
 * cdef glVertexAttribPointer_type glVertexAttribPointer
 * 
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glVertexAttribPointer_type)(GLuint, GLint, GLenum, GLboolean, GLsizei, void const *);

/* "renpy/uguu/gl.pxd":1147
 * cdef glVertexAttribPointer_type glVertexAttribPointer
 * 
 * ctypedef void (__stdcall *glViewport_type)(GLint  x, GLint  y, GLsizei  width, GLsizei  height) nogil             # <<<<<<<<<<<<<<
 * cdef glViewport_type glViewport
 */
typedef void (__stdcall *__pyx_t_5renpy_4uguu_2gl_glViewport_type)(GLint, GLint, GLsizei, GLsizei);
struct __pyx_t_5renpy_3gl2_10gl2polygon_Point2;

/* "renpy/gl2/gl2polygon.pxd":4
 * 
 * # Represents a 2D point inside a polygon.
 * cdef struct Point2:             # <<<<<<<<<<<<<<
 *     float x
 *     float y
 */
struct __pyx_t_5renpy_3gl2_10gl2polygon_Point2 {
  float x;
  float y;
};
struct __pyx_t_5renpy_3gl2_8gl2mesh3_Point3;

/* "renpy/gl2/gl2mesh3.pxd":5
 * 
 * # Represents a point in three dimensional space.
 * cdef struct Point3:             # <<<<<<<<<<<<<<
 *     float x
 *     float y
 */
struct __pyx_t_5renpy_3gl2_8gl2mesh3_Point3 {
  float x;
  float y;
  float z;
};

/* "renpy/display/matrix.pxd":1
 * cdef class Matrix:             # <<<<<<<<<<<<<<
 * 
 *     cdef float m[0]
 */
struct __pyx_obj_5renpy_7display_6matrix_Matrix {
  PyObject_HEAD
  struct __pyx_vtabstruct_5renpy_7display_6matrix_Matrix *__pyx_vtab;
  float m[0];
  float xdx;
  float ydx;
  float zdx;
  float wdx;
  float xdy;
  float ydy;
  float zdy;
  float wdy;
  float xdz;
  float ydz;
  float zdz;
  float wdz;
  float xdw;
  float ydw;
  float zdw;
  float wdw;
  PyObject *origin;
};


/* "renpy/display/matrix.pxd":71
 * 
 * 
 * cdef class Matrix2D(Matrix):             # <<<<<<<<<<<<<<
 *     pass
 */
struct __pyx_obj_5renpy_7display_6matrix_Matrix2D {
  struct __pyx_obj_5renpy_7display_6matrix_Matrix __pyx_base;
};


/* "renpy/display/render.pxd":25
 * from renpy.display.matrix cimport Matrix, Matrix2D
 * 
 * cdef class Render:             # <<<<<<<<<<<<<<
 * 
 *     cdef public bint mark, cache_killed
 */
struct __pyx_obj_5renpy_7display_6render_Render {
  PyObject_HEAD
  struct __pyx_vtabstruct_5renpy_7display_6render_Render *__pyx_vtab;
  int mark;
  int cache_killed;
  float width;
  float height;
  PyObject *layer_name;
  PyObject *children;
  PyObject *parents;
  PyObject *depends_on_list;
  int operation;
  double operation_complete;
  int operation_alpha;
  PyObject *operation_parameter;
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *forward;
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *reverse;
  double alpha;
  double over;
  PyObject *nearest;
  PyObject *focuses;
  PyObject *pass_focuses;
  PyObject *focus_screen;
  PyObject *draw_func;
  PyObject *render_of;
  int opaque;
  PyObject *visible_children;
  int xclipping;
  int yclipping;
  PyObject *surface;
  PyObject *alpha_surface;
  PyObject *half_cache;
  PyObject *modal;
  int text_input;
  PyObject *mesh;
  PyObject *shaders;
  PyObject *uniforms;
  PyObject *properties;
  PyObject *cached_texture;
  PyObject *cached_model;
  int loaded;
};


/* "renpy/gl2/gl2shader.pxd":3
 * from renpy.uguu.gl cimport *
 * 
 * cdef class Program:             # <<<<<<<<<<<<<<
 * 
 *     # The name of this program.
 */
struct __pyx_obj_5renpy_3gl2_9gl2shader_Program {
  PyObject_HEAD
  struct __pyx_vtabstruct_5renpy_3gl2_9gl2shader_Program *__pyx_vtab;
  PyObject *name;
  GLuint program;
  PyObject *vertex;
  PyObject *fragment;
  PyObject *uniforms;
  PyObject *attributes;
  int samplers;
  int nearest;
};


/* "renpy/gl2/gl2polygon.pxd":8
 *     float y
 * 
 * cdef class Polygon:             # <<<<<<<<<<<<<<
 *     """
 *     Represents a 2-dimensional polygon.
 */
struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon {
  PyObject_HEAD
  struct __pyx_vtabstruct_5renpy_3gl2_10gl2polygon_Polygon *__pyx_vtab;
  int points;
  struct __pyx_t_5renpy_3gl2_10gl2polygon_Point2 *point;
};


/* "renpy/gl2/gl2mesh.pxd":4
 * 
 * 
 * cdef class AttributeLayout:             # <<<<<<<<<<<<<<
 *     """
 *     This represents the layout of attributes inside a mesh.
 */
struct __pyx_obj_5renpy_3gl2_7gl2mesh_AttributeLayout {
  PyObject_HEAD
  PyObject *offset;
  int stride;
};


/* "renpy/gl2/gl2mesh.pxd":17
 *     cdef int stride
 * 
 * cdef class Mesh:             # <<<<<<<<<<<<<<
 *     """
 *     This represents the polygon and vertex data that is stored within
 */
struct __pyx_obj_5renpy_3gl2_7gl2mesh_Mesh {
  PyObject_HEAD
  int allocated_points;
  int points;
  float *point_data;
  int point_size;
  struct __pyx_obj_5renpy_3gl2_7gl2mesh_AttributeLayout *layout;
  float *attribute;
  int allocated_triangles;
  int triangles;
  unsigned short *triangle;
};


/* "renpy/gl2/gl2model.pxd":4
 * from renpy.gl2.gl2mesh cimport Mesh
 * 
 * cdef class Model:             # <<<<<<<<<<<<<<
 * 
 *     # The width and height.
 */
struct __pyx_obj_5renpy_3gl2_8gl2model_Model {
  PyObject_HEAD
  struct __pyx_vtabstruct_5renpy_3gl2_8gl2model_Model *__pyx_vtab;
  int width;
  int height;
  struct __pyx_obj_5renpy_3gl2_7gl2mesh_Mesh *mesh;
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *forward;
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *reverse;
  PyObject *shaders;
  PyObject *uniforms;
  PyObject *properties;
  PyObject *cached_texture;
};


/* "renpy/gl2/gl2texture.pxd":27
 * from renpy.gl2.gl2draw cimport GL2Draw
 * 
 * cdef class TextureLoader:             # <<<<<<<<<<<<<<
 * 
 *     # The draw object associated with this TextureLoader
 */
struct __pyx_obj_5renpy_3gl2_10gl2texture_TextureLoader {
  PyObject_HEAD
  struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *draw;
  PyObject *allocated;
  PyObject *free_list;
  int total_texture_size;
  struct __pyx_obj_5renpy_3gl2_9gl2shader_Program *ftl_program;
  PyObject *texture_load_queue;
  GLint max_texture_width;
  GLint max_texture_height;
  GLfloat max_anisotropy;
};


/* "renpy/gl2/gl2texture.pxd":55
 * 
 * 
 * cdef class GLTexture(Model):             # <<<<<<<<<<<<<<
 * 
 *     # The number of the texture in OpenGL.
 */
struct __pyx_obj_5renpy_3gl2_10gl2texture_GLTexture {
  struct __pyx_obj_5renpy_3gl2_8gl2model_Model __pyx_base;
  unsigned int number;
  int loaded;
  PyObject *surface;
  struct __pyx_obj_5renpy_3gl2_10gl2texture_TextureLoader *loader;
  int texture_width;
  int texture_height;
};


/* "renpy/gl2/gl2mesh3.pxd":10
 *     float z
 * 
 * cdef class Mesh3(Mesh):             # <<<<<<<<<<<<<<
 * 
 *     # The geometry of the points.
 */
struct __pyx_obj_5renpy_3gl2_8gl2mesh3_Mesh3 {
  struct __pyx_obj_5renpy_3gl2_7gl2mesh_Mesh __pyx_base;
  struct __pyx_vtabstruct_5renpy_3gl2_8gl2mesh3_Mesh3 *__pyx_vtab;
  struct __pyx_t_5renpy_3gl2_8gl2mesh3_Point3 *point;
};


/* "renpy/gl2/gl2draw.pxd":27
 * from renpy.uguu.gl cimport *
 * 
 * cdef class GL2Draw:             # <<<<<<<<<<<<<<
 * 
 * 
 */
struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw {
  PyObject_HEAD
  struct __pyx_vtabstruct_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_vtab;
  int gles;
  int angle;
  int did_init;
  PyObject *window;
  PyObject *virtual_size;
  PyObject *physical_size;
  PyObject *drawable_size;
  PyObject *virtual_box;
  PyObject *physical_box;
  double last_redraw_time;
  double redraw_period;
  PyObject *info;
  PyObject *old_fullscreen;
  PyObject *fullscreen_surface;
  PyObject *display_info;
  PyObject *clip_cache;
  PyObject *default_clip;
  float dpi_scale;
  PyObject *shader_cache;
  PyObject *clip_rtt_box;
  float draw_per_phys;
  PyObject *drawable_viewport;
  PyObject *draw_per_virt;
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *virt_to_draw;
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *draw_to_virt;
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *draw_transform;
  int fast_redraw_frames;
  GLuint color_texture;
  GLuint depth_renderbuffer;
  GLuint fbo;
  struct __pyx_obj_5renpy_3gl2_10gl2texture_TextureLoader *texture_loader;
  GLuint default_fbo;
  GLuint current_fbo;
};


/* "renpy/gl2/gl2draw.pyx":1084
 * 
 * 
 * cdef class GL2DrawingContext:             # <<<<<<<<<<<<<<
 *     """
 *     This is an object that represents the state of the GL rendering
 */
struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext {
  PyObject_HEAD
  struct __pyx_vtabstruct_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_vtab;
  struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *gl2draw;
  float width;
  float height;
  int debug;
};


/* "renpy/gl2/gl2draw.pyx":426
 *         return True
 * 
 *     def on_resize(self, first=False):             # <<<<<<<<<<<<<<
 * 
 *         if not first:
 */
struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize {
  PyObject_HEAD
  struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self;
};


/* "renpy/gl2/gl2draw.pyx":496
 * 
 *         # The location of the viewport, in drawable pixels.
 *         self.drawable_viewport = tuple(i * self.draw_per_phys for i in self.physical_box)             # <<<<<<<<<<<<<<
 * 
 *         dwidth = self.drawable_viewport[2]
 */
struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr {
  PyObject_HEAD
  struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize *__pyx_outer_scope;
  PyObject *__pyx_v_i;
  PyObject *__pyx_t_0;
  Py_ssize_t __pyx_t_1;
};



/* "renpy/display/matrix.pxd":1
 * cdef class Matrix:             # <<<<<<<<<<<<<<
 * 
 *     cdef float m[0]
 */

struct __pyx_vtabstruct_5renpy_7display_6matrix_Matrix {
  void (*transform4)(struct __pyx_obj_5renpy_7display_6matrix_Matrix *, float *, float *, float *, float *, float, float, float, float);
  void (*transform3)(struct __pyx_obj_5renpy_7display_6matrix_Matrix *, float *, float *, float *, float, float, float, float);
  void (*transform2)(struct __pyx_obj_5renpy_7display_6matrix_Matrix *, float *, float *, float, float, float, float);
  int (*is_unit_aligned)(struct __pyx_obj_5renpy_7display_6matrix_Matrix *, int __pyx_skip_dispatch);
  int (*is_drawable_aligned)(struct __pyx_obj_5renpy_7display_6matrix_Matrix *, struct __pyx_obj_5renpy_7display_6matrix_Matrix *);
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *(*cidentity)(void);
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *(*coffset)(float, float, float);
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *(*crotate)(float, float, float);
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *(*cscale)(float, float, float);
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *(*cperspective)(float, float, float, float, float);
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *(*cscreen_projection)(float, float);
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *(*ctexture_projection)(float, float);
};
static struct __pyx_vtabstruct_5renpy_7display_6matrix_Matrix *__pyx_vtabptr_5renpy_7display_6matrix_Matrix;
static CYTHON_INLINE void __pyx_f_5renpy_7display_6matrix_6Matrix_transform4(struct __pyx_obj_5renpy_7display_6matrix_Matrix *, float *, float *, float *, float *, float, float, float, float);
static CYTHON_INLINE void __pyx_f_5renpy_7display_6matrix_6Matrix_transform3(struct __pyx_obj_5renpy_7display_6matrix_Matrix *, float *, float *, float *, float, float, float, float);
static CYTHON_INLINE void __pyx_f_5renpy_7display_6matrix_6Matrix_transform2(struct __pyx_obj_5renpy_7display_6matrix_Matrix *, float *, float *, float, float, float, float);


/* "renpy/display/matrix.pxd":71
 * 
 * 
 * cdef class Matrix2D(Matrix):             # <<<<<<<<<<<<<<
 *     pass
 */

struct __pyx_vtabstruct_5renpy_7display_6matrix_Matrix2D {
  struct __pyx_vtabstruct_5renpy_7display_6matrix_Matrix __pyx_base;
};
static struct __pyx_vtabstruct_5renpy_7display_6matrix_Matrix2D *__pyx_vtabptr_5renpy_7display_6matrix_Matrix2D;


/* "renpy/display/render.pxd":25
 * from renpy.display.matrix cimport Matrix, Matrix2D
 * 
 * cdef class Render:             # <<<<<<<<<<<<<<
 * 
 *     cdef public bint mark, cache_killed
 */

struct __pyx_vtabstruct_5renpy_7display_6render_Render {
  int (*blit)(struct __pyx_obj_5renpy_7display_6render_Render *, PyObject *, PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_5renpy_7display_6render_6Render_blit *__pyx_optional_args);
  int (*subpixel_blit)(struct __pyx_obj_5renpy_7display_6render_Render *, PyObject *, PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_5renpy_7display_6render_6Render_subpixel_blit *__pyx_optional_args);
  int (*absolute_blit)(struct __pyx_obj_5renpy_7display_6render_Render *, PyObject *, PyObject *, int __pyx_skip_dispatch, struct __pyx_opt_args_5renpy_7display_6render_6Render_absolute_blit *__pyx_optional_args);
};
static struct __pyx_vtabstruct_5renpy_7display_6render_Render *__pyx_vtabptr_5renpy_7display_6render_Render;


/* "renpy/gl2/gl2shader.pxd":3
 * from renpy.uguu.gl cimport *
 * 
 * cdef class Program:             # <<<<<<<<<<<<<<
 * 
 *     # The name of this program.
 */

struct __pyx_vtabstruct_5renpy_3gl2_9gl2shader_Program {
  GLuint (*load_shader)(struct __pyx_obj_5renpy_3gl2_9gl2shader_Program *, GLenum, PyObject *);
};
static struct __pyx_vtabstruct_5renpy_3gl2_9gl2shader_Program *__pyx_vtabptr_5renpy_3gl2_9gl2shader_Program;


/* "renpy/gl2/gl2polygon.pxd":8
 *     float y
 * 
 * cdef class Polygon:             # <<<<<<<<<<<<<<
 *     """
 *     Represents a 2-dimensional polygon.
 */

struct __pyx_vtabstruct_5renpy_3gl2_10gl2polygon_Polygon {
  struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *(*intersect)(struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *, struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *, int __pyx_skip_dispatch);
  struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *(*copy)(struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *, int __pyx_skip_dispatch);
  void (*multiply_matrix_inplace)(struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *, struct __pyx_obj_5renpy_7display_6matrix_Matrix *, int __pyx_skip_dispatch);
  struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *(*multiply_matrix)(struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *, struct __pyx_obj_5renpy_7display_6matrix_Matrix *, int __pyx_skip_dispatch);
  void (*ensure_winding)(struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5renpy_3gl2_10gl2polygon_Polygon *__pyx_vtabptr_5renpy_3gl2_10gl2polygon_Polygon;


/* "renpy/gl2/gl2model.pxd":4
 * from renpy.gl2.gl2mesh cimport Mesh
 * 
 * cdef class Model:             # <<<<<<<<<<<<<<
 * 
 *     # The width and height.
 */

struct __pyx_vtabstruct_5renpy_3gl2_8gl2model_Model {
  struct __pyx_obj_5renpy_3gl2_8gl2model_Model *(*copy)(struct __pyx_obj_5renpy_3gl2_8gl2model_Model *, int __pyx_skip_dispatch);
  PyObject *(*subsurface)(struct __pyx_obj_5renpy_3gl2_8gl2model_Model *, PyObject *, int __pyx_skip_dispatch);
  PyObject *(*scale)(struct __pyx_obj_5renpy_3gl2_8gl2model_Model *, float, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5renpy_3gl2_8gl2model_Model *__pyx_vtabptr_5renpy_3gl2_8gl2model_Model;


/* "renpy/gl2/gl2texture.pxd":55
 * 
 * 
 * cdef class GLTexture(Model):             # <<<<<<<<<<<<<<
 * 
 *     # The number of the texture in OpenGL.
 */

struct __pyx_vtabstruct_5renpy_3gl2_10gl2texture_GLTexture {
  struct __pyx_vtabstruct_5renpy_3gl2_8gl2model_Model __pyx_base;
};
static struct __pyx_vtabstruct_5renpy_3gl2_10gl2texture_GLTexture *__pyx_vtabptr_5renpy_3gl2_10gl2texture_GLTexture;


/* "renpy/gl2/gl2mesh3.pxd":10
 *     float z
 * 
 * cdef class Mesh3(Mesh):             # <<<<<<<<<<<<<<
 * 
 *     # The geometry of the points.
 */

struct __pyx_vtabstruct_5renpy_3gl2_8gl2mesh3_Mesh3 {
  struct __pyx_obj_5renpy_3gl2_8gl2mesh3_Mesh3 *(*crop)(struct __pyx_obj_5renpy_3gl2_8gl2mesh3_Mesh3 *, struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *, int __pyx_skip_dispatch);
};
static struct __pyx_vtabstruct_5renpy_3gl2_8gl2mesh3_Mesh3 *__pyx_vtabptr_5renpy_3gl2_8gl2mesh3_Mesh3;


/* "renpy/gl2/gl2draw.pyx":79
 * frame_times = [ ]
 * 
 * cdef class GL2Draw:             # <<<<<<<<<<<<<<
 * 
 *     def __init__(self, name):
 */

struct __pyx_vtabstruct_5renpy_3gl2_7gl2draw_GL2Draw {
  void (*change_fbo)(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *, GLuint);
};
static struct __pyx_vtabstruct_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_vtabptr_5renpy_3gl2_7gl2draw_GL2Draw;


/* "renpy/gl2/gl2draw.pyx":1084
 * 
 * 
 * cdef class GL2DrawingContext:             # <<<<<<<<<<<<<<
 *     """
 *     This is an object that represents the state of the GL rendering
 */

struct __pyx_vtabstruct_5renpy_3gl2_7gl2draw_GL2DrawingContext {
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *(*correct_pixel_perfect)(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *, struct __pyx_obj_5renpy_7display_6matrix_Matrix *);
};
static struct __pyx_vtabstruct_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_vtabptr_5renpy_3gl2_7gl2draw_GL2DrawingContext;

/* --- Runtime support code (head) --- */
/* Refnanny.proto */
#ifndef CYTHON_REFNANNY
  #define CYTHON_REFNANNY 0
#endif
#if CYTHON_REFNANNY
  typedef struct {
    void (*INCREF)(void*, PyObject*, int);
    void (*DECREF)(void*, PyObject*, int);
    void (*GOTREF)(void*, PyObject*, int);
    void (*GIVEREF)(void*, PyObject*, int);
    void* (*SetupContext)(const char*, int, const char*);
    void (*FinishContext)(void**);
  } __Pyx_RefNannyAPIStruct;
  static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
  static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
  #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
#ifdef WITH_THREAD
  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
          if (acquire_gil) {\
              PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
              PyGILState_Release(__pyx_gilstate_save);\
          } else {\
              __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__);\
          }
#else
  #define __Pyx_RefNannySetupContext(name, acquire_gil)\
          __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), __LINE__, __FILE__)
#endif
  #define __Pyx_RefNannyFinishContext()\
          __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
  #define __Pyx_INCREF(r)  __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_DECREF(r)  __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_GOTREF(r)  __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), __LINE__)
  #define __Pyx_XINCREF(r)  do { if((r) != NULL) {__Pyx_INCREF(r); }} while(0)
  #define __Pyx_XDECREF(r)  do { if((r) != NULL) {__Pyx_DECREF(r); }} while(0)
  #define __Pyx_XGOTREF(r)  do { if((r) != NULL) {__Pyx_GOTREF(r); }} while(0)
  #define __Pyx_XGIVEREF(r) do { if((r) != NULL) {__Pyx_GIVEREF(r);}} while(0)
#else
  #define __Pyx_RefNannyDeclarations
  #define __Pyx_RefNannySetupContext(name, acquire_gil)
  #define __Pyx_RefNannyFinishContext()
  #define __Pyx_INCREF(r) Py_INCREF(r)
  #define __Pyx_DECREF(r) Py_DECREF(r)
  #define __Pyx_GOTREF(r)
  #define __Pyx_GIVEREF(r)
  #define __Pyx_XINCREF(r) Py_XINCREF(r)
  #define __Pyx_XDECREF(r) Py_XDECREF(r)
  #define __Pyx_XGOTREF(r)
  #define __Pyx_XGIVEREF(r)
#endif
#define __Pyx_XDECREF_SET(r, v) do {\
        PyObject *tmp = (PyObject *) r;\
        r = v; __Pyx_XDECREF(tmp);\
    } while (0)
#define __Pyx_DECREF_SET(r, v) do {\
        PyObject *tmp = (PyObject *) r;\
        r = v; __Pyx_DECREF(tmp);\
    } while (0)
#define __Pyx_CLEAR(r)    do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
#define __Pyx_XCLEAR(r)   do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)

/* PyObjectGetAttrStr.proto */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name);
#else
#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
#endif

/* GetBuiltinName.proto */
static PyObject *__Pyx_GetBuiltinName(PyObject *name);

/* RaiseDoubleKeywords.proto */
static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);

/* ParseKeywords.proto */
static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject **argnames[],\
    PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,\
    const char* function_name);

/* RaiseArgTupleInvalid.proto */
static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
    Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);

/* IncludeStringH.proto */
#include <string.h>

/* BytesEquals.proto */
static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);

/* UnicodeEquals.proto */
static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);

/* StrEquals.proto */
#if PY_MAJOR_VERSION >= 3
#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
#else
#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
#endif

/* PyDictVersioning.proto */
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
#define __PYX_DICT_VERSION_INIT  ((PY_UINT64_T) -1)
#define __PYX_GET_DICT_VERSION(dict)  (((PyDictObject*)(dict))->ma_version_tag)
#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\
    (version_var) = __PYX_GET_DICT_VERSION(dict);\
    (cache_var) = (value);
#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\
    static PY_UINT64_T __pyx_dict_version = 0;\
    static PyObject *__pyx_dict_cached_value = NULL;\
    if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\
        (VAR) = __pyx_dict_cached_value;\
    } else {\
        (VAR) = __pyx_dict_cached_value = (LOOKUP);\
        __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\
    }\
}
static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj);
static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj);
static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version);
#else
#define __PYX_GET_DICT_VERSION(dict)  (0)
#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)
#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP)  (VAR) = (LOOKUP);
#endif

/* GetModuleGlobalName.proto */
#if CYTHON_USE_DICT_VERSIONS
#define __Pyx_GetModuleGlobalName(var, name)  {\
    static PY_UINT64_T __pyx_dict_version = 0;\
    static PyObject *__pyx_dict_cached_value = NULL;\
    (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
        (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
        __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
}
#define __Pyx_GetModuleGlobalNameUncached(var, name)  {\
    PY_UINT64_T __pyx_dict_version;\
    PyObject *__pyx_dict_cached_value;\
    (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
}
static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
#else
#define __Pyx_GetModuleGlobalName(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
#define __Pyx_GetModuleGlobalNameUncached(var, name)  (var) = __Pyx__GetModuleGlobalName(name)
static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name);
#endif

/* PyFunctionFastCall.proto */
#if CYTHON_FAST_PYCALL
#define __Pyx_PyFunction_FastCall(func, args, nargs)\
    __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
#if 1 || PY_VERSION_HEX < 0x030600B1
static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs);
#else
#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs)
#endif
#define __Pyx_BUILD_ASSERT_EXPR(cond)\
    (sizeof(char [1 - 2*!(cond)]) - 1)
#ifndef Py_MEMBER_SIZE
#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
#endif
  static size_t __pyx_pyframe_localsplus_offset = 0;
  #include "frameobject.h"
  #define __Pxy_PyFrame_Initialize_Offsets()\
    ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\
     (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
  #define __Pyx_PyFrame_GetLocalsplus(frame)\
    (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
#endif

/* PyObjectCall.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
#else
#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
#endif

/* PyObjectCallMethO.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
#endif

/* PyObjectCallNoArg.proto */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
#else
#define __Pyx_PyObject_CallNoArg(func) __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL)
#endif

/* PyCFunctionFastCall.proto */
#if CYTHON_FAST_PYCCALL
static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs);
#else
#define __Pyx_PyCFunction_FastCall(func, args, nargs)  (assert(0), NULL)
#endif

/* PyObjectCallOneArg.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);

/* RaiseTooManyValuesToUnpack.proto */
static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);

/* RaiseNeedMoreValuesToUnpack.proto */
static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);

/* RaiseNoneIterError.proto */
static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);

/* IterFinish.proto */
static CYTHON_INLINE int __Pyx_IterFinish(void);

/* UnpackItemEndCheck.proto */
static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);

/* PyIntBinop.proto */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
#else
#define __Pyx_PyInt_SubtractObjC(op1, op2, intval, inplace, zerodivision_check)\
    (inplace ? PyNumber_InPlaceSubtract(op1, op2) : PyNumber_Subtract(op1, op2))
#endif

/* PyObjectCall2Args.proto */
static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2);

/* GetItemInt.proto */
#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
    __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\
    (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
               __Pyx_GetItemInt_Generic(o, to_py_func(i))))
#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
    __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
    (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck);
#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
    (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
    __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
    (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                              int wraparound, int boundscheck);
static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
                                                     int is_list, int wraparound, int boundscheck);

/* py_abs.proto */
#if CYTHON_USE_PYLONG_INTERNALS
static PyObject *__Pyx_PyLong_AbsNeg(PyObject *num);
#define __Pyx_PyNumber_Absolute(x)\
    ((likely(PyLong_CheckExact(x))) ?\
         (likely(Py_SIZE(x) >= 0) ? (Py_INCREF(x), (x)) : __Pyx_PyLong_AbsNeg(x)) :\
         PyNumber_Absolute(x))
#else
#define __Pyx_PyNumber_Absolute(x)  PyNumber_Absolute(x)
#endif

/* PyObjectSetAttrStr.proto */
#if CYTHON_USE_TYPE_SLOTS
#define __Pyx_PyObject_DelAttrStr(o,n) __Pyx_PyObject_SetAttrStr(o, n, NULL)
static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value);
#else
#define __Pyx_PyObject_DelAttrStr(o,n)   PyObject_DelAttr(o,n)
#define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
#endif

/* GetTopmostException.proto */
#if CYTHON_USE_EXC_INFO_STACK
static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate);
#endif

/* PyThreadStateGet.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
#define __Pyx_PyThreadState_assign  __pyx_tstate = __Pyx_PyThreadState_Current;
#define __Pyx_PyErr_Occurred()  __pyx_tstate->curexc_type
#else
#define __Pyx_PyThreadState_declare
#define __Pyx_PyThreadState_assign
#define __Pyx_PyErr_Occurred()  PyErr_Occurred()
#endif

/* SaveResetException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_ExceptionSave(type, value, tb)  __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#define __Pyx_ExceptionReset(type, value, tb)  __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
#else
#define __Pyx_ExceptionSave(type, value, tb)   PyErr_GetExcInfo(type, value, tb)
#define __Pyx_ExceptionReset(type, value, tb)  PyErr_SetExcInfo(type, value, tb)
#endif

/* PyErrFetchRestore.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)
#define __Pyx_ErrRestoreWithState(type, value, tb)  __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
#define __Pyx_ErrFetchWithState(type, value, tb)    __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
#define __Pyx_ErrRestore(type, value, tb)  __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
#define __Pyx_ErrFetch(type, value, tb)    __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
#else
#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
#endif
#else
#define __Pyx_PyErr_Clear() PyErr_Clear()
#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
#define __Pyx_ErrRestoreWithState(type, value, tb)  PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetchWithState(type, value, tb)  PyErr_Fetch(type, value, tb)
#define __Pyx_ErrRestoreInState(tstate, type, value, tb)  PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetchInState(tstate, type, value, tb)  PyErr_Fetch(type, value, tb)
#define __Pyx_ErrRestore(type, value, tb)  PyErr_Restore(type, value, tb)
#define __Pyx_ErrFetch(type, value, tb)  PyErr_Fetch(type, value, tb)
#endif

/* FastTypeChecks.proto */
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
#else
#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))
#endif
#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)

/* GetException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_GetException(type, value, tb)  __Pyx__GetException(__pyx_tstate, type, value, tb)
static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#else
static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
#endif

/* DictGetItem.proto */
#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key);
#define __Pyx_PyObject_Dict_GetItem(obj, name)\
    (likely(PyDict_CheckExact(obj)) ?\
     __Pyx_PyDict_GetItem(obj, name) : PyObject_GetItem(obj, name))
#else
#define __Pyx_PyDict_GetItem(d, key) PyObject_GetItem(d, key)
#define __Pyx_PyObject_Dict_GetItem(obj, name)  PyObject_GetItem(obj, name)
#endif

/* PySequenceContains.proto */
static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) {
    int result = PySequence_Contains(seq, item);
    return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
}

/* None.proto */
static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname);

/* PyFloatBinop.proto */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyFloat_DivideObjC(PyObject *op1, PyObject *op2, double floatval, int inplace, int zerodivision_check);
#else
#define __Pyx_PyFloat_DivideObjC(op1, op2, floatval, inplace, zerodivision_check)\
    ((inplace ? __Pyx_PyNumber_InPlaceDivide(op1, op2) : __Pyx_PyNumber_Divide(op1, op2)))
    #endif

/* ListAppend.proto */
#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
    PyListObject* L = (PyListObject*) list;
    Py_ssize_t len = Py_SIZE(list);
    if (likely(L->allocated > len) & likely(len > (L->allocated >> 1))) {
        Py_INCREF(x);
        PyList_SET_ITEM(list, len, x);
        __Pyx_SET_SIZE(list, len + 1);
        return 0;
    }
    return PyList_Append(list, x);
}
#else
#define __Pyx_PyList_Append(L,x) PyList_Append(L,x)
#endif

/* PyObjectGetMethod.proto */
static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);

/* PyObjectCallMethod1.proto */
static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg);

/* append.proto */
static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x);

/* pop_index.proto */
static PyObject* __Pyx__PyObject_PopNewIndex(PyObject* L, PyObject* py_ix);
static PyObject* __Pyx__PyObject_PopIndex(PyObject* L, PyObject* py_ix);
#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
static PyObject* __Pyx__PyList_PopIndex(PyObject* L, PyObject* py_ix, Py_ssize_t ix);
#define __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\
    (likely(PyList_CheckExact(L) && __Pyx_fits_Py_ssize_t(ix, type, is_signed))) ?\
        __Pyx__PyList_PopIndex(L, py_ix, ix) : (\
        (unlikely((py_ix) == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\
            __Pyx__PyObject_PopIndex(L, py_ix)))
#define __Pyx_PyList_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\
    __Pyx_fits_Py_ssize_t(ix, type, is_signed) ?\
        __Pyx__PyList_PopIndex(L, py_ix, ix) : (\
        (unlikely((py_ix) == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\
            __Pyx__PyObject_PopIndex(L, py_ix)))
#else
#define __Pyx_PyList_PopIndex(L, py_ix, ix, is_signed, type, to_py_func)\
    __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func)
#define __Pyx_PyObject_PopIndex(L, py_ix, ix, is_signed, type, to_py_func) (\
    (unlikely((py_ix) == Py_None)) ? __Pyx__PyObject_PopNewIndex(L, to_py_func(ix)) :\
        __Pyx__PyObject_PopIndex(L, py_ix))
#endif

/* ExtTypeTest.proto */
static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);

/* UnpackUnboundCMethod.proto */
typedef struct {
    PyObject *type;
    PyObject **method_name;
    PyCFunction func;
    PyObject *method;
    int flag;
} __Pyx_CachedCFunction;

/* CallUnboundCMethod1.proto */
static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg);
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg);
#else
#define __Pyx_CallUnboundCMethod1(cfunc, self, arg)  __Pyx__CallUnboundCMethod1(cfunc, self, arg)
#endif

/* PyIntBinop.proto */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
#else
#define __Pyx_PyInt_AddObjC(op1, op2, intval, inplace, zerodivision_check)\
    (inplace ? PyNumber_InPlaceAdd(op1, op2) : PyNumber_Add(op1, op2))
#endif

/* PyErrExceptionMatches.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
#else
#define __Pyx_PyErr_ExceptionMatches(err)  PyErr_ExceptionMatches(err)
#endif

/* GetAttr.proto */
static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *);

/* GetAttr3.proto */
static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *);

/* ArgTypeTest.proto */
#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\
    ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\
        __Pyx__ArgTypeTest(obj, type, name, exact))
static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact);

/* py_dict_items.proto */
static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d);

/* CallUnboundCMethod0.proto */
static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self);
#if CYTHON_COMPILING_IN_CPYTHON
#define __Pyx_CallUnboundCMethod0(cfunc, self)\
    (likely((cfunc)->func) ?\
        (likely((cfunc)->flag == METH_NOARGS) ?  (*((cfunc)->func))(self, NULL) :\
         (PY_VERSION_HEX >= 0x030600B1 && likely((cfunc)->flag == METH_FASTCALL) ?\
            (PY_VERSION_HEX >= 0x030700A0 ?\
                (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0) :\
                (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0, NULL)) :\
          (PY_VERSION_HEX >= 0x030700A0 && (cfunc)->flag == (METH_FASTCALL | METH_KEYWORDS) ?\
            (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, &__pyx_empty_tuple, 0, NULL) :\
            (likely((cfunc)->flag == (METH_VARARGS | METH_KEYWORDS)) ?  ((*(PyCFunctionWithKeywords)(void*)(PyCFunction)(cfunc)->func)(self, __pyx_empty_tuple, NULL)) :\
               ((cfunc)->flag == METH_VARARGS ?  (*((cfunc)->func))(self, __pyx_empty_tuple) :\
               __Pyx__CallUnboundCMethod0(cfunc, self)))))) :\
        __Pyx__CallUnboundCMethod0(cfunc, self))
#else
#define __Pyx_CallUnboundCMethod0(cfunc, self)  __Pyx__CallUnboundCMethod0(cfunc, self)
#endif

/* Import.proto */
static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);

/* PyIntBinop.proto */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyInt_RemainderObjC(PyObject *op1, PyObject *op2, long intval, int inplace, int zerodivision_check);
#else
#define __Pyx_PyInt_RemainderObjC(op1, op2, intval, inplace, zerodivision_check)\
    (inplace ? PyNumber_InPlaceRemainder(op1, op2) : PyNumber_Remainder(op1, op2))
#endif

/* PyDictContains.proto */
static CYTHON_INLINE int __Pyx_PyDict_ContainsTF(PyObject* item, PyObject* dict, int eq) {
    int result = PyDict_Contains(dict, item);
    return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
}

/* ObjectGetItem.proto */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key);
#else
#define __Pyx_PyObject_GetItem(obj, key)  PyObject_GetItem(obj, key)
#endif

/* ImportFrom.proto */
static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);

/* RaiseException.proto */
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);

/* HasAttr.proto */
static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);

/* PyObject_GenericGetAttrNoDict.proto */
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name);
#else
#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr
#endif

/* PyObject_GenericGetAttr.proto */
#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name);
#else
#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr
#endif

/* SetVTable.proto */
static int __Pyx_SetVtable(PyObject *dict, void *vtable);

/* PyObjectGetAttrStrNoError.proto */
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name);

/* SetupReduce.proto */
static int __Pyx_setup_reduce(PyObject* type_obj);

/* TypeImport.proto */
#ifndef __PYX_HAVE_RT_ImportType_proto
#define __PYX_HAVE_RT_ImportType_proto
enum __Pyx_ImportType_CheckSize {
   __Pyx_ImportType_CheckSize_Error = 0,
   __Pyx_ImportType_CheckSize_Warn = 1,
   __Pyx_ImportType_CheckSize_Ignore = 2
};
static PyTypeObject *__Pyx_ImportType(PyObject* module, const char *module_name, const char *class_name, size_t size, enum __Pyx_ImportType_CheckSize check_size);
#endif

/* GetVTable.proto */
static void* __Pyx_GetVtable(PyObject *dict);

/* CLineInTraceback.proto */
#ifdef CYTHON_CLINE_IN_TRACEBACK
#define __Pyx_CLineForTraceback(tstate, c_line)  (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)
#else
static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);
#endif

/* CodeObjectCache.proto */
typedef struct {
    PyCodeObject* code_object;
    int code_line;
} __Pyx_CodeObjectCacheEntry;
struct __Pyx_CodeObjectCache {
    int count;
    int max_count;
    __Pyx_CodeObjectCacheEntry* entries;
};
static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
static PyCodeObject *__pyx_find_code_object(int code_line);
static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);

/* AddTraceback.proto */
static void __Pyx_AddTraceback(const char *funcname, int c_line,
                               int py_line, const char *filename);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_GLuint(GLuint value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_GLint(GLint value);

/* CIntToPy.proto */
static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_char(unsigned char value);

/* CIntFromPy.proto */
static CYTHON_INLINE GLuint __Pyx_PyInt_As_GLuint(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE GLint __Pyx_PyInt_As_GLint(PyObject *);

/* CIntFromPy.proto */
static CYTHON_INLINE GLsizei __Pyx_PyInt_As_GLsizei(PyObject *);

/* FetchCommonType.proto */
static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type);

/* SwapException.proto */
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_ExceptionSwap(type, value, tb)  __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb)
static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
#else
static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
#endif

/* CoroutineBase.proto */
typedef PyObject *(*__pyx_coroutine_body_t)(PyObject *, PyThreadState *, PyObject *);
#if CYTHON_USE_EXC_INFO_STACK
#define __Pyx_ExcInfoStruct  _PyErr_StackItem
#else
typedef struct {
    PyObject *exc_type;
    PyObject *exc_value;
    PyObject *exc_traceback;
} __Pyx_ExcInfoStruct;
#endif
typedef struct {
    PyObject_HEAD
    __pyx_coroutine_body_t body;
    PyObject *closure;
    __Pyx_ExcInfoStruct gi_exc_state;
    PyObject *gi_weakreflist;
    PyObject *classobj;
    PyObject *yieldfrom;
    PyObject *gi_name;
    PyObject *gi_qualname;
    PyObject *gi_modulename;
    PyObject *gi_code;
    int resume_label;
    char is_running;
} __pyx_CoroutineObject;
static __pyx_CoroutineObject *__Pyx__Coroutine_New(
    PyTypeObject *type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
    PyObject *name, PyObject *qualname, PyObject *module_name);
static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
            __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
            PyObject *name, PyObject *qualname, PyObject *module_name);
static CYTHON_INLINE void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *self);
static int __Pyx_Coroutine_clear(PyObject *self);
static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value);
static PyObject *__Pyx_Coroutine_Close(PyObject *self);
static PyObject *__Pyx_Coroutine_Throw(PyObject *gen, PyObject *args);
#if CYTHON_USE_EXC_INFO_STACK
#define __Pyx_Coroutine_SwapException(self)
#define __Pyx_Coroutine_ResetAndClearException(self)  __Pyx_Coroutine_ExceptionClear(&(self)->gi_exc_state)
#else
#define __Pyx_Coroutine_SwapException(self) {\
    __Pyx_ExceptionSwap(&(self)->gi_exc_state.exc_type, &(self)->gi_exc_state.exc_value, &(self)->gi_exc_state.exc_traceback);\
    __Pyx_Coroutine_ResetFrameBackpointer(&(self)->gi_exc_state);\
    }
#define __Pyx_Coroutine_ResetAndClearException(self) {\
    __Pyx_ExceptionReset((self)->gi_exc_state.exc_type, (self)->gi_exc_state.exc_value, (self)->gi_exc_state.exc_traceback);\
    (self)->gi_exc_state.exc_type = (self)->gi_exc_state.exc_value = (self)->gi_exc_state.exc_traceback = NULL;\
    }
#endif
#if CYTHON_FAST_THREAD_STATE
#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\
    __Pyx_PyGen__FetchStopIterationValue(__pyx_tstate, pvalue)
#else
#define __Pyx_PyGen_FetchStopIterationValue(pvalue)\
    __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, pvalue)
#endif
static int __Pyx_PyGen__FetchStopIterationValue(PyThreadState *tstate, PyObject **pvalue);
static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state);

/* PatchModuleWithCoroutine.proto */
static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code);

/* PatchGeneratorABC.proto */
static int __Pyx_patch_abc(void);

/* Generator.proto */
#define __Pyx_Generator_USED
static PyTypeObject *__pyx_GeneratorType = 0;
#define __Pyx_Generator_CheckExact(obj) (Py_TYPE(obj) == __pyx_GeneratorType)
#define __Pyx_Generator_New(body, code, closure, name, qualname, module_name)\
    __Pyx__Coroutine_New(__pyx_GeneratorType, body, code, closure, name, qualname, module_name)
static PyObject *__Pyx_Generator_Next(PyObject *self);
static int __pyx_Generator_init(void);

/* CheckBinaryVersion.proto */
static int __Pyx_check_binary_version(void);

/* VoidPtrImport.proto */
static int __Pyx_ImportVoidPtr(PyObject *module, const char *name, void **p, const char *sig);

/* InitStrings.proto */
static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);

static void __pyx_f_5renpy_3gl2_7gl2draw_7GL2Draw_change_fbo(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, GLuint __pyx_v_fbo); /* proto*/
static struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_f_5renpy_3gl2_7gl2draw_17GL2DrawingContext_correct_pixel_perfect(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self, struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_transform); /* proto*/
static CYTHON_INLINE void __pyx_f_5renpy_7display_6matrix_6Matrix_transform4(struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_self, float *__pyx_v_ox, float *__pyx_v_oy, float *__pyx_v_oz, float *__pyx_v_ow, float __pyx_v_x, float __pyx_v_y, float __pyx_v_z, float __pyx_v_w); /* proto*/
static CYTHON_INLINE void __pyx_f_5renpy_7display_6matrix_6Matrix_transform3(struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_self, float *__pyx_v_ox, float *__pyx_v_oy, float *__pyx_v_oz, float __pyx_v_x, float __pyx_v_y, float __pyx_v_z, float __pyx_v_w); /* proto*/
static CYTHON_INLINE void __pyx_f_5renpy_7display_6matrix_6Matrix_transform2(struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_self, float *__pyx_v_ox, float *__pyx_v_oy, float __pyx_v_x, float __pyx_v_y, float __pyx_v_z, float __pyx_v_w); /* proto*/

/* Module declarations from 'renpy.display.matrix' */
static PyTypeObject *__pyx_ptype_5renpy_7display_6matrix_Matrix = 0;
static PyTypeObject *__pyx_ptype_5renpy_7display_6matrix_Matrix2D = 0;

/* Module declarations from 'renpy.display.render' */
static PyTypeObject *__pyx_ptype_5renpy_7display_6render_Render = 0;

/* Module declarations from 'libc.stdint' */

/* Module declarations from 'libc.stddef' */

/* Module declarations from 'renpy.uguu.gl' */
static __pyx_t_5renpy_4uguu_2gl_glActiveTexture_type *__pyx_vp_5renpy_4uguu_2gl_glActiveTexture = 0;
#define __pyx_v_5renpy_4uguu_2gl_glActiveTexture (*__pyx_vp_5renpy_4uguu_2gl_glActiveTexture)
static __pyx_t_5renpy_4uguu_2gl_glAttachShader_type *__pyx_vp_5renpy_4uguu_2gl_glAttachShader = 0;
#define __pyx_v_5renpy_4uguu_2gl_glAttachShader (*__pyx_vp_5renpy_4uguu_2gl_glAttachShader)
static __pyx_t_5renpy_4uguu_2gl_glBeginQuery_type *__pyx_vp_5renpy_4uguu_2gl_glBeginQuery = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBeginQuery (*__pyx_vp_5renpy_4uguu_2gl_glBeginQuery)
static __pyx_t_5renpy_4uguu_2gl_glBeginTransformFeedback_type *__pyx_vp_5renpy_4uguu_2gl_glBeginTransformFeedback = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBeginTransformFeedback (*__pyx_vp_5renpy_4uguu_2gl_glBeginTransformFeedback)
static __pyx_t_5renpy_4uguu_2gl_glBindAttribLocation_type *__pyx_vp_5renpy_4uguu_2gl_glBindAttribLocation = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBindAttribLocation (*__pyx_vp_5renpy_4uguu_2gl_glBindAttribLocation)
static __pyx_t_5renpy_4uguu_2gl_glBindBuffer_type *__pyx_vp_5renpy_4uguu_2gl_glBindBuffer = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBindBuffer (*__pyx_vp_5renpy_4uguu_2gl_glBindBuffer)
static __pyx_t_5renpy_4uguu_2gl_glBindBufferBase_type *__pyx_vp_5renpy_4uguu_2gl_glBindBufferBase = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBindBufferBase (*__pyx_vp_5renpy_4uguu_2gl_glBindBufferBase)
static __pyx_t_5renpy_4uguu_2gl_glBindBufferRange_type *__pyx_vp_5renpy_4uguu_2gl_glBindBufferRange = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBindBufferRange (*__pyx_vp_5renpy_4uguu_2gl_glBindBufferRange)
static __pyx_t_5renpy_4uguu_2gl_glBindFramebuffer_type *__pyx_vp_5renpy_4uguu_2gl_glBindFramebuffer = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBindFramebuffer (*__pyx_vp_5renpy_4uguu_2gl_glBindFramebuffer)
static __pyx_t_5renpy_4uguu_2gl_glBindRenderbuffer_type *__pyx_vp_5renpy_4uguu_2gl_glBindRenderbuffer = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBindRenderbuffer (*__pyx_vp_5renpy_4uguu_2gl_glBindRenderbuffer)
static __pyx_t_5renpy_4uguu_2gl_glBindTexture_type *__pyx_vp_5renpy_4uguu_2gl_glBindTexture = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBindTexture (*__pyx_vp_5renpy_4uguu_2gl_glBindTexture)
static __pyx_t_5renpy_4uguu_2gl_glBindVertexArray_type *__pyx_vp_5renpy_4uguu_2gl_glBindVertexArray = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBindVertexArray (*__pyx_vp_5renpy_4uguu_2gl_glBindVertexArray)
static __pyx_t_5renpy_4uguu_2gl_glBlendColor_type *__pyx_vp_5renpy_4uguu_2gl_glBlendColor = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBlendColor (*__pyx_vp_5renpy_4uguu_2gl_glBlendColor)
static __pyx_t_5renpy_4uguu_2gl_glBlendEquation_type *__pyx_vp_5renpy_4uguu_2gl_glBlendEquation = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBlendEquation (*__pyx_vp_5renpy_4uguu_2gl_glBlendEquation)
static __pyx_t_5renpy_4uguu_2gl_glBlendEquationSeparate_type *__pyx_vp_5renpy_4uguu_2gl_glBlendEquationSeparate = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBlendEquationSeparate (*__pyx_vp_5renpy_4uguu_2gl_glBlendEquationSeparate)
static __pyx_t_5renpy_4uguu_2gl_glBlendFunc_type *__pyx_vp_5renpy_4uguu_2gl_glBlendFunc = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBlendFunc (*__pyx_vp_5renpy_4uguu_2gl_glBlendFunc)
static __pyx_t_5renpy_4uguu_2gl_glBlendFuncSeparate_type *__pyx_vp_5renpy_4uguu_2gl_glBlendFuncSeparate = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBlendFuncSeparate (*__pyx_vp_5renpy_4uguu_2gl_glBlendFuncSeparate)
static __pyx_t_5renpy_4uguu_2gl_glBlitFramebuffer_type *__pyx_vp_5renpy_4uguu_2gl_glBlitFramebuffer = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBlitFramebuffer (*__pyx_vp_5renpy_4uguu_2gl_glBlitFramebuffer)
static __pyx_t_5renpy_4uguu_2gl_glBufferData_type *__pyx_vp_5renpy_4uguu_2gl_glBufferData = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBufferData (*__pyx_vp_5renpy_4uguu_2gl_glBufferData)
static __pyx_t_5renpy_4uguu_2gl_glBufferSubData_type *__pyx_vp_5renpy_4uguu_2gl_glBufferSubData = 0;
#define __pyx_v_5renpy_4uguu_2gl_glBufferSubData (*__pyx_vp_5renpy_4uguu_2gl_glBufferSubData)
static __pyx_t_5renpy_4uguu_2gl_glCheckFramebufferStatus_type *__pyx_vp_5renpy_4uguu_2gl_glCheckFramebufferStatus = 0;
#define __pyx_v_5renpy_4uguu_2gl_glCheckFramebufferStatus (*__pyx_vp_5renpy_4uguu_2gl_glCheckFramebufferStatus)
static __pyx_t_5renpy_4uguu_2gl_glClear_type *__pyx_vp_5renpy_4uguu_2gl_glClear = 0;
#define __pyx_v_5renpy_4uguu_2gl_glClear (*__pyx_vp_5renpy_4uguu_2gl_glClear)
static __pyx_t_5renpy_4uguu_2gl_glClearBufferfi_type *__pyx_vp_5renpy_4uguu_2gl_glClearBufferfi = 0;
#define __pyx_v_5renpy_4uguu_2gl_glClearBufferfi (*__pyx_vp_5renpy_4uguu_2gl_glClearBufferfi)
static __pyx_t_5renpy_4uguu_2gl_glClearBufferfv_type *__pyx_vp_5renpy_4uguu_2gl_glClearBufferfv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glClearBufferfv (*__pyx_vp_5renpy_4uguu_2gl_glClearBufferfv)
static __pyx_t_5renpy_4uguu_2gl_glClearBufferiv_type *__pyx_vp_5renpy_4uguu_2gl_glClearBufferiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glClearBufferiv (*__pyx_vp_5renpy_4uguu_2gl_glClearBufferiv)
static __pyx_t_5renpy_4uguu_2gl_glClearBufferuiv_type *__pyx_vp_5renpy_4uguu_2gl_glClearBufferuiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glClearBufferuiv (*__pyx_vp_5renpy_4uguu_2gl_glClearBufferuiv)
static __pyx_t_5renpy_4uguu_2gl_glClearColor_type *__pyx_vp_5renpy_4uguu_2gl_glClearColor = 0;
#define __pyx_v_5renpy_4uguu_2gl_glClearColor (*__pyx_vp_5renpy_4uguu_2gl_glClearColor)
static __pyx_t_5renpy_4uguu_2gl_glClearStencil_type *__pyx_vp_5renpy_4uguu_2gl_glClearStencil = 0;
#define __pyx_v_5renpy_4uguu_2gl_glClearStencil (*__pyx_vp_5renpy_4uguu_2gl_glClearStencil)
static __pyx_t_5renpy_4uguu_2gl_glColorMask_type *__pyx_vp_5renpy_4uguu_2gl_glColorMask = 0;
#define __pyx_v_5renpy_4uguu_2gl_glColorMask (*__pyx_vp_5renpy_4uguu_2gl_glColorMask)
static __pyx_t_5renpy_4uguu_2gl_glCompileShader_type *__pyx_vp_5renpy_4uguu_2gl_glCompileShader = 0;
#define __pyx_v_5renpy_4uguu_2gl_glCompileShader (*__pyx_vp_5renpy_4uguu_2gl_glCompileShader)
static __pyx_t_5renpy_4uguu_2gl_glCompressedTexImage2D_type *__pyx_vp_5renpy_4uguu_2gl_glCompressedTexImage2D = 0;
#define __pyx_v_5renpy_4uguu_2gl_glCompressedTexImage2D (*__pyx_vp_5renpy_4uguu_2gl_glCompressedTexImage2D)
static __pyx_t_5renpy_4uguu_2gl_glCompressedTexImage3D_type *__pyx_vp_5renpy_4uguu_2gl_glCompressedTexImage3D = 0;
#define __pyx_v_5renpy_4uguu_2gl_glCompressedTexImage3D (*__pyx_vp_5renpy_4uguu_2gl_glCompressedTexImage3D)
static __pyx_t_5renpy_4uguu_2gl_glCompressedTexSubImage2D_type *__pyx_vp_5renpy_4uguu_2gl_glCompressedTexSubImage2D = 0;
#define __pyx_v_5renpy_4uguu_2gl_glCompressedTexSubImage2D (*__pyx_vp_5renpy_4uguu_2gl_glCompressedTexSubImage2D)
static __pyx_t_5renpy_4uguu_2gl_glCompressedTexSubImage3D_type *__pyx_vp_5renpy_4uguu_2gl_glCompressedTexSubImage3D = 0;
#define __pyx_v_5renpy_4uguu_2gl_glCompressedTexSubImage3D (*__pyx_vp_5renpy_4uguu_2gl_glCompressedTexSubImage3D)
static __pyx_t_5renpy_4uguu_2gl_glCopyTexImage2D_type *__pyx_vp_5renpy_4uguu_2gl_glCopyTexImage2D = 0;
#define __pyx_v_5renpy_4uguu_2gl_glCopyTexImage2D (*__pyx_vp_5renpy_4uguu_2gl_glCopyTexImage2D)
static __pyx_t_5renpy_4uguu_2gl_glCopyTexSubImage2D_type *__pyx_vp_5renpy_4uguu_2gl_glCopyTexSubImage2D = 0;
#define __pyx_v_5renpy_4uguu_2gl_glCopyTexSubImage2D (*__pyx_vp_5renpy_4uguu_2gl_glCopyTexSubImage2D)
static __pyx_t_5renpy_4uguu_2gl_glCopyTexSubImage3D_type *__pyx_vp_5renpy_4uguu_2gl_glCopyTexSubImage3D = 0;
#define __pyx_v_5renpy_4uguu_2gl_glCopyTexSubImage3D (*__pyx_vp_5renpy_4uguu_2gl_glCopyTexSubImage3D)
static __pyx_t_5renpy_4uguu_2gl_glCreateProgram_type *__pyx_vp_5renpy_4uguu_2gl_glCreateProgram = 0;
#define __pyx_v_5renpy_4uguu_2gl_glCreateProgram (*__pyx_vp_5renpy_4uguu_2gl_glCreateProgram)
static __pyx_t_5renpy_4uguu_2gl_glCreateShader_type *__pyx_vp_5renpy_4uguu_2gl_glCreateShader = 0;
#define __pyx_v_5renpy_4uguu_2gl_glCreateShader (*__pyx_vp_5renpy_4uguu_2gl_glCreateShader)
static __pyx_t_5renpy_4uguu_2gl_glCullFace_type *__pyx_vp_5renpy_4uguu_2gl_glCullFace = 0;
#define __pyx_v_5renpy_4uguu_2gl_glCullFace (*__pyx_vp_5renpy_4uguu_2gl_glCullFace)
static __pyx_t_5renpy_4uguu_2gl_glDeleteBuffers_type *__pyx_vp_5renpy_4uguu_2gl_glDeleteBuffers = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDeleteBuffers (*__pyx_vp_5renpy_4uguu_2gl_glDeleteBuffers)
static __pyx_t_5renpy_4uguu_2gl_glDeleteFramebuffers_type *__pyx_vp_5renpy_4uguu_2gl_glDeleteFramebuffers = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDeleteFramebuffers (*__pyx_vp_5renpy_4uguu_2gl_glDeleteFramebuffers)
static __pyx_t_5renpy_4uguu_2gl_glDeleteProgram_type *__pyx_vp_5renpy_4uguu_2gl_glDeleteProgram = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDeleteProgram (*__pyx_vp_5renpy_4uguu_2gl_glDeleteProgram)
static __pyx_t_5renpy_4uguu_2gl_glDeleteQueries_type *__pyx_vp_5renpy_4uguu_2gl_glDeleteQueries = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDeleteQueries (*__pyx_vp_5renpy_4uguu_2gl_glDeleteQueries)
static __pyx_t_5renpy_4uguu_2gl_glDeleteRenderbuffers_type *__pyx_vp_5renpy_4uguu_2gl_glDeleteRenderbuffers = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDeleteRenderbuffers (*__pyx_vp_5renpy_4uguu_2gl_glDeleteRenderbuffers)
static __pyx_t_5renpy_4uguu_2gl_glDeleteShader_type *__pyx_vp_5renpy_4uguu_2gl_glDeleteShader = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDeleteShader (*__pyx_vp_5renpy_4uguu_2gl_glDeleteShader)
static __pyx_t_5renpy_4uguu_2gl_glDeleteTextures_type *__pyx_vp_5renpy_4uguu_2gl_glDeleteTextures = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDeleteTextures (*__pyx_vp_5renpy_4uguu_2gl_glDeleteTextures)
static __pyx_t_5renpy_4uguu_2gl_glDeleteVertexArrays_type *__pyx_vp_5renpy_4uguu_2gl_glDeleteVertexArrays = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDeleteVertexArrays (*__pyx_vp_5renpy_4uguu_2gl_glDeleteVertexArrays)
static __pyx_t_5renpy_4uguu_2gl_glDepthFunc_type *__pyx_vp_5renpy_4uguu_2gl_glDepthFunc = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDepthFunc (*__pyx_vp_5renpy_4uguu_2gl_glDepthFunc)
static __pyx_t_5renpy_4uguu_2gl_glDepthMask_type *__pyx_vp_5renpy_4uguu_2gl_glDepthMask = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDepthMask (*__pyx_vp_5renpy_4uguu_2gl_glDepthMask)
static __pyx_t_5renpy_4uguu_2gl_glDetachShader_type *__pyx_vp_5renpy_4uguu_2gl_glDetachShader = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDetachShader (*__pyx_vp_5renpy_4uguu_2gl_glDetachShader)
static __pyx_t_5renpy_4uguu_2gl_glDisable_type *__pyx_vp_5renpy_4uguu_2gl_glDisable = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDisable (*__pyx_vp_5renpy_4uguu_2gl_glDisable)
static __pyx_t_5renpy_4uguu_2gl_glDisableVertexAttribArray_type *__pyx_vp_5renpy_4uguu_2gl_glDisableVertexAttribArray = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDisableVertexAttribArray (*__pyx_vp_5renpy_4uguu_2gl_glDisableVertexAttribArray)
static __pyx_t_5renpy_4uguu_2gl_glDrawArrays_type *__pyx_vp_5renpy_4uguu_2gl_glDrawArrays = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDrawArrays (*__pyx_vp_5renpy_4uguu_2gl_glDrawArrays)
static __pyx_t_5renpy_4uguu_2gl_glDrawBuffers_type *__pyx_vp_5renpy_4uguu_2gl_glDrawBuffers = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDrawBuffers (*__pyx_vp_5renpy_4uguu_2gl_glDrawBuffers)
static __pyx_t_5renpy_4uguu_2gl_glDrawElements_type *__pyx_vp_5renpy_4uguu_2gl_glDrawElements = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDrawElements (*__pyx_vp_5renpy_4uguu_2gl_glDrawElements)
static __pyx_t_5renpy_4uguu_2gl_glDrawRangeElements_type *__pyx_vp_5renpy_4uguu_2gl_glDrawRangeElements = 0;
#define __pyx_v_5renpy_4uguu_2gl_glDrawRangeElements (*__pyx_vp_5renpy_4uguu_2gl_glDrawRangeElements)
static __pyx_t_5renpy_4uguu_2gl_glEnable_type *__pyx_vp_5renpy_4uguu_2gl_glEnable = 0;
#define __pyx_v_5renpy_4uguu_2gl_glEnable (*__pyx_vp_5renpy_4uguu_2gl_glEnable)
static __pyx_t_5renpy_4uguu_2gl_glEnableVertexAttribArray_type *__pyx_vp_5renpy_4uguu_2gl_glEnableVertexAttribArray = 0;
#define __pyx_v_5renpy_4uguu_2gl_glEnableVertexAttribArray (*__pyx_vp_5renpy_4uguu_2gl_glEnableVertexAttribArray)
static __pyx_t_5renpy_4uguu_2gl_glEndQuery_type *__pyx_vp_5renpy_4uguu_2gl_glEndQuery = 0;
#define __pyx_v_5renpy_4uguu_2gl_glEndQuery (*__pyx_vp_5renpy_4uguu_2gl_glEndQuery)
static __pyx_t_5renpy_4uguu_2gl_glEndTransformFeedback_type *__pyx_vp_5renpy_4uguu_2gl_glEndTransformFeedback = 0;
#define __pyx_v_5renpy_4uguu_2gl_glEndTransformFeedback (*__pyx_vp_5renpy_4uguu_2gl_glEndTransformFeedback)
static __pyx_t_5renpy_4uguu_2gl_glFinish_type *__pyx_vp_5renpy_4uguu_2gl_glFinish = 0;
#define __pyx_v_5renpy_4uguu_2gl_glFinish (*__pyx_vp_5renpy_4uguu_2gl_glFinish)
static __pyx_t_5renpy_4uguu_2gl_glFlush_type *__pyx_vp_5renpy_4uguu_2gl_glFlush = 0;
#define __pyx_v_5renpy_4uguu_2gl_glFlush (*__pyx_vp_5renpy_4uguu_2gl_glFlush)
static __pyx_t_5renpy_4uguu_2gl_glFlushMappedBufferRange_type *__pyx_vp_5renpy_4uguu_2gl_glFlushMappedBufferRange = 0;
#define __pyx_v_5renpy_4uguu_2gl_glFlushMappedBufferRange (*__pyx_vp_5renpy_4uguu_2gl_glFlushMappedBufferRange)
static __pyx_t_5renpy_4uguu_2gl_glFramebufferRenderbuffer_type *__pyx_vp_5renpy_4uguu_2gl_glFramebufferRenderbuffer = 0;
#define __pyx_v_5renpy_4uguu_2gl_glFramebufferRenderbuffer (*__pyx_vp_5renpy_4uguu_2gl_glFramebufferRenderbuffer)
static __pyx_t_5renpy_4uguu_2gl_glFramebufferTexture2D_type *__pyx_vp_5renpy_4uguu_2gl_glFramebufferTexture2D = 0;
#define __pyx_v_5renpy_4uguu_2gl_glFramebufferTexture2D (*__pyx_vp_5renpy_4uguu_2gl_glFramebufferTexture2D)
static __pyx_t_5renpy_4uguu_2gl_glFramebufferTextureLayer_type *__pyx_vp_5renpy_4uguu_2gl_glFramebufferTextureLayer = 0;
#define __pyx_v_5renpy_4uguu_2gl_glFramebufferTextureLayer (*__pyx_vp_5renpy_4uguu_2gl_glFramebufferTextureLayer)
static __pyx_t_5renpy_4uguu_2gl_glFrontFace_type *__pyx_vp_5renpy_4uguu_2gl_glFrontFace = 0;
#define __pyx_v_5renpy_4uguu_2gl_glFrontFace (*__pyx_vp_5renpy_4uguu_2gl_glFrontFace)
static __pyx_t_5renpy_4uguu_2gl_glGenBuffers_type *__pyx_vp_5renpy_4uguu_2gl_glGenBuffers = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGenBuffers (*__pyx_vp_5renpy_4uguu_2gl_glGenBuffers)
static __pyx_t_5renpy_4uguu_2gl_glGenFramebuffers_type *__pyx_vp_5renpy_4uguu_2gl_glGenFramebuffers = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGenFramebuffers (*__pyx_vp_5renpy_4uguu_2gl_glGenFramebuffers)
static __pyx_t_5renpy_4uguu_2gl_glGenQueries_type *__pyx_vp_5renpy_4uguu_2gl_glGenQueries = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGenQueries (*__pyx_vp_5renpy_4uguu_2gl_glGenQueries)
static __pyx_t_5renpy_4uguu_2gl_glGenRenderbuffers_type *__pyx_vp_5renpy_4uguu_2gl_glGenRenderbuffers = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGenRenderbuffers (*__pyx_vp_5renpy_4uguu_2gl_glGenRenderbuffers)
static __pyx_t_5renpy_4uguu_2gl_glGenTextures_type *__pyx_vp_5renpy_4uguu_2gl_glGenTextures = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGenTextures (*__pyx_vp_5renpy_4uguu_2gl_glGenTextures)
static __pyx_t_5renpy_4uguu_2gl_glGenVertexArrays_type *__pyx_vp_5renpy_4uguu_2gl_glGenVertexArrays = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGenVertexArrays (*__pyx_vp_5renpy_4uguu_2gl_glGenVertexArrays)
static __pyx_t_5renpy_4uguu_2gl_glGenerateMipmap_type *__pyx_vp_5renpy_4uguu_2gl_glGenerateMipmap = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGenerateMipmap (*__pyx_vp_5renpy_4uguu_2gl_glGenerateMipmap)
static __pyx_t_5renpy_4uguu_2gl_glGetActiveAttrib_type *__pyx_vp_5renpy_4uguu_2gl_glGetActiveAttrib = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetActiveAttrib (*__pyx_vp_5renpy_4uguu_2gl_glGetActiveAttrib)
static __pyx_t_5renpy_4uguu_2gl_glGetActiveUniform_type *__pyx_vp_5renpy_4uguu_2gl_glGetActiveUniform = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetActiveUniform (*__pyx_vp_5renpy_4uguu_2gl_glGetActiveUniform)
static __pyx_t_5renpy_4uguu_2gl_glGetAttachedShaders_type *__pyx_vp_5renpy_4uguu_2gl_glGetAttachedShaders = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetAttachedShaders (*__pyx_vp_5renpy_4uguu_2gl_glGetAttachedShaders)
static __pyx_t_5renpy_4uguu_2gl_glGetAttribLocation_type *__pyx_vp_5renpy_4uguu_2gl_glGetAttribLocation = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetAttribLocation (*__pyx_vp_5renpy_4uguu_2gl_glGetAttribLocation)
static __pyx_t_5renpy_4uguu_2gl_glGetBooleanv_type *__pyx_vp_5renpy_4uguu_2gl_glGetBooleanv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetBooleanv (*__pyx_vp_5renpy_4uguu_2gl_glGetBooleanv)
static __pyx_t_5renpy_4uguu_2gl_glGetBufferParameteriv_type *__pyx_vp_5renpy_4uguu_2gl_glGetBufferParameteriv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetBufferParameteriv (*__pyx_vp_5renpy_4uguu_2gl_glGetBufferParameteriv)
static __pyx_t_5renpy_4uguu_2gl_glGetBufferPointerv_type *__pyx_vp_5renpy_4uguu_2gl_glGetBufferPointerv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetBufferPointerv (*__pyx_vp_5renpy_4uguu_2gl_glGetBufferPointerv)
static __pyx_t_5renpy_4uguu_2gl_glGetError_type *__pyx_vp_5renpy_4uguu_2gl_glGetError = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetError (*__pyx_vp_5renpy_4uguu_2gl_glGetError)
static __pyx_t_5renpy_4uguu_2gl_glGetFloatv_type *__pyx_vp_5renpy_4uguu_2gl_glGetFloatv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetFloatv (*__pyx_vp_5renpy_4uguu_2gl_glGetFloatv)
static __pyx_t_5renpy_4uguu_2gl_glGetFragDataLocation_type *__pyx_vp_5renpy_4uguu_2gl_glGetFragDataLocation = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetFragDataLocation (*__pyx_vp_5renpy_4uguu_2gl_glGetFragDataLocation)
static __pyx_t_5renpy_4uguu_2gl_glGetFramebufferAttachmentParameteriv_type *__pyx_vp_5renpy_4uguu_2gl_glGetFramebufferAttachmentParameteriv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetFramebufferAttachmentParameteriv (*__pyx_vp_5renpy_4uguu_2gl_glGetFramebufferAttachmentParameteriv)
static __pyx_t_5renpy_4uguu_2gl_glGetIntegeri_v_type *__pyx_vp_5renpy_4uguu_2gl_glGetIntegeri_v = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetIntegeri_v (*__pyx_vp_5renpy_4uguu_2gl_glGetIntegeri_v)
static __pyx_t_5renpy_4uguu_2gl_glGetIntegerv_type *__pyx_vp_5renpy_4uguu_2gl_glGetIntegerv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetIntegerv (*__pyx_vp_5renpy_4uguu_2gl_glGetIntegerv)
static __pyx_t_5renpy_4uguu_2gl_glGetProgramInfoLog_type *__pyx_vp_5renpy_4uguu_2gl_glGetProgramInfoLog = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetProgramInfoLog (*__pyx_vp_5renpy_4uguu_2gl_glGetProgramInfoLog)
static __pyx_t_5renpy_4uguu_2gl_glGetProgramiv_type *__pyx_vp_5renpy_4uguu_2gl_glGetProgramiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetProgramiv (*__pyx_vp_5renpy_4uguu_2gl_glGetProgramiv)
static __pyx_t_5renpy_4uguu_2gl_glGetQueryObjectuiv_type *__pyx_vp_5renpy_4uguu_2gl_glGetQueryObjectuiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetQueryObjectuiv (*__pyx_vp_5renpy_4uguu_2gl_glGetQueryObjectuiv)
static __pyx_t_5renpy_4uguu_2gl_glGetQueryiv_type *__pyx_vp_5renpy_4uguu_2gl_glGetQueryiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetQueryiv (*__pyx_vp_5renpy_4uguu_2gl_glGetQueryiv)
static __pyx_t_5renpy_4uguu_2gl_glGetRenderbufferParameteriv_type *__pyx_vp_5renpy_4uguu_2gl_glGetRenderbufferParameteriv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetRenderbufferParameteriv (*__pyx_vp_5renpy_4uguu_2gl_glGetRenderbufferParameteriv)
static __pyx_t_5renpy_4uguu_2gl_glGetShaderInfoLog_type *__pyx_vp_5renpy_4uguu_2gl_glGetShaderInfoLog = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetShaderInfoLog (*__pyx_vp_5renpy_4uguu_2gl_glGetShaderInfoLog)
static __pyx_t_5renpy_4uguu_2gl_glGetShaderSource_type *__pyx_vp_5renpy_4uguu_2gl_glGetShaderSource = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetShaderSource (*__pyx_vp_5renpy_4uguu_2gl_glGetShaderSource)
static __pyx_t_5renpy_4uguu_2gl_glGetShaderiv_type *__pyx_vp_5renpy_4uguu_2gl_glGetShaderiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetShaderiv (*__pyx_vp_5renpy_4uguu_2gl_glGetShaderiv)
static __pyx_t_5renpy_4uguu_2gl_glGetString_type *__pyx_vp_5renpy_4uguu_2gl_glGetString = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetString (*__pyx_vp_5renpy_4uguu_2gl_glGetString)
static __pyx_t_5renpy_4uguu_2gl_glGetStringi_type *__pyx_vp_5renpy_4uguu_2gl_glGetStringi = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetStringi (*__pyx_vp_5renpy_4uguu_2gl_glGetStringi)
static __pyx_t_5renpy_4uguu_2gl_glGetTexParameterfv_type *__pyx_vp_5renpy_4uguu_2gl_glGetTexParameterfv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetTexParameterfv (*__pyx_vp_5renpy_4uguu_2gl_glGetTexParameterfv)
static __pyx_t_5renpy_4uguu_2gl_glGetTexParameteriv_type *__pyx_vp_5renpy_4uguu_2gl_glGetTexParameteriv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetTexParameteriv (*__pyx_vp_5renpy_4uguu_2gl_glGetTexParameteriv)
static __pyx_t_5renpy_4uguu_2gl_glGetTransformFeedbackVarying_type *__pyx_vp_5renpy_4uguu_2gl_glGetTransformFeedbackVarying = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetTransformFeedbackVarying (*__pyx_vp_5renpy_4uguu_2gl_glGetTransformFeedbackVarying)
static __pyx_t_5renpy_4uguu_2gl_glGetUniformLocation_type *__pyx_vp_5renpy_4uguu_2gl_glGetUniformLocation = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetUniformLocation (*__pyx_vp_5renpy_4uguu_2gl_glGetUniformLocation)
static __pyx_t_5renpy_4uguu_2gl_glGetUniformfv_type *__pyx_vp_5renpy_4uguu_2gl_glGetUniformfv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetUniformfv (*__pyx_vp_5renpy_4uguu_2gl_glGetUniformfv)
static __pyx_t_5renpy_4uguu_2gl_glGetUniformiv_type *__pyx_vp_5renpy_4uguu_2gl_glGetUniformiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetUniformiv (*__pyx_vp_5renpy_4uguu_2gl_glGetUniformiv)
static __pyx_t_5renpy_4uguu_2gl_glGetUniformuiv_type *__pyx_vp_5renpy_4uguu_2gl_glGetUniformuiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetUniformuiv (*__pyx_vp_5renpy_4uguu_2gl_glGetUniformuiv)
static __pyx_t_5renpy_4uguu_2gl_glGetVertexAttribIiv_type *__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribIiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetVertexAttribIiv (*__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribIiv)
static __pyx_t_5renpy_4uguu_2gl_glGetVertexAttribIuiv_type *__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribIuiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetVertexAttribIuiv (*__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribIuiv)
static __pyx_t_5renpy_4uguu_2gl_glGetVertexAttribPointerv_type *__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribPointerv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetVertexAttribPointerv (*__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribPointerv)
static __pyx_t_5renpy_4uguu_2gl_glGetVertexAttribfv_type *__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribfv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetVertexAttribfv (*__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribfv)
static __pyx_t_5renpy_4uguu_2gl_glGetVertexAttribiv_type *__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glGetVertexAttribiv (*__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribiv)
static __pyx_t_5renpy_4uguu_2gl_glHint_type *__pyx_vp_5renpy_4uguu_2gl_glHint = 0;
#define __pyx_v_5renpy_4uguu_2gl_glHint (*__pyx_vp_5renpy_4uguu_2gl_glHint)
static __pyx_t_5renpy_4uguu_2gl_glIsBuffer_type *__pyx_vp_5renpy_4uguu_2gl_glIsBuffer = 0;
#define __pyx_v_5renpy_4uguu_2gl_glIsBuffer (*__pyx_vp_5renpy_4uguu_2gl_glIsBuffer)
static __pyx_t_5renpy_4uguu_2gl_glIsEnabled_type *__pyx_vp_5renpy_4uguu_2gl_glIsEnabled = 0;
#define __pyx_v_5renpy_4uguu_2gl_glIsEnabled (*__pyx_vp_5renpy_4uguu_2gl_glIsEnabled)
static __pyx_t_5renpy_4uguu_2gl_glIsFramebuffer_type *__pyx_vp_5renpy_4uguu_2gl_glIsFramebuffer = 0;
#define __pyx_v_5renpy_4uguu_2gl_glIsFramebuffer (*__pyx_vp_5renpy_4uguu_2gl_glIsFramebuffer)
static __pyx_t_5renpy_4uguu_2gl_glIsProgram_type *__pyx_vp_5renpy_4uguu_2gl_glIsProgram = 0;
#define __pyx_v_5renpy_4uguu_2gl_glIsProgram (*__pyx_vp_5renpy_4uguu_2gl_glIsProgram)
static __pyx_t_5renpy_4uguu_2gl_glIsQuery_type *__pyx_vp_5renpy_4uguu_2gl_glIsQuery = 0;
#define __pyx_v_5renpy_4uguu_2gl_glIsQuery (*__pyx_vp_5renpy_4uguu_2gl_glIsQuery)
static __pyx_t_5renpy_4uguu_2gl_glIsRenderbuffer_type *__pyx_vp_5renpy_4uguu_2gl_glIsRenderbuffer = 0;
#define __pyx_v_5renpy_4uguu_2gl_glIsRenderbuffer (*__pyx_vp_5renpy_4uguu_2gl_glIsRenderbuffer)
static __pyx_t_5renpy_4uguu_2gl_glIsShader_type *__pyx_vp_5renpy_4uguu_2gl_glIsShader = 0;
#define __pyx_v_5renpy_4uguu_2gl_glIsShader (*__pyx_vp_5renpy_4uguu_2gl_glIsShader)
static __pyx_t_5renpy_4uguu_2gl_glIsTexture_type *__pyx_vp_5renpy_4uguu_2gl_glIsTexture = 0;
#define __pyx_v_5renpy_4uguu_2gl_glIsTexture (*__pyx_vp_5renpy_4uguu_2gl_glIsTexture)
static __pyx_t_5renpy_4uguu_2gl_glIsVertexArray_type *__pyx_vp_5renpy_4uguu_2gl_glIsVertexArray = 0;
#define __pyx_v_5renpy_4uguu_2gl_glIsVertexArray (*__pyx_vp_5renpy_4uguu_2gl_glIsVertexArray)
static __pyx_t_5renpy_4uguu_2gl_glLineWidth_type *__pyx_vp_5renpy_4uguu_2gl_glLineWidth = 0;
#define __pyx_v_5renpy_4uguu_2gl_glLineWidth (*__pyx_vp_5renpy_4uguu_2gl_glLineWidth)
static __pyx_t_5renpy_4uguu_2gl_glLinkProgram_type *__pyx_vp_5renpy_4uguu_2gl_glLinkProgram = 0;
#define __pyx_v_5renpy_4uguu_2gl_glLinkProgram (*__pyx_vp_5renpy_4uguu_2gl_glLinkProgram)
static __pyx_t_5renpy_4uguu_2gl_glMapBufferRange_type *__pyx_vp_5renpy_4uguu_2gl_glMapBufferRange = 0;
#define __pyx_v_5renpy_4uguu_2gl_glMapBufferRange (*__pyx_vp_5renpy_4uguu_2gl_glMapBufferRange)
static __pyx_t_5renpy_4uguu_2gl_glPixelStorei_type *__pyx_vp_5renpy_4uguu_2gl_glPixelStorei = 0;
#define __pyx_v_5renpy_4uguu_2gl_glPixelStorei (*__pyx_vp_5renpy_4uguu_2gl_glPixelStorei)
static __pyx_t_5renpy_4uguu_2gl_glPolygonOffset_type *__pyx_vp_5renpy_4uguu_2gl_glPolygonOffset = 0;
#define __pyx_v_5renpy_4uguu_2gl_glPolygonOffset (*__pyx_vp_5renpy_4uguu_2gl_glPolygonOffset)
static __pyx_t_5renpy_4uguu_2gl_glReadBuffer_type *__pyx_vp_5renpy_4uguu_2gl_glReadBuffer = 0;
#define __pyx_v_5renpy_4uguu_2gl_glReadBuffer (*__pyx_vp_5renpy_4uguu_2gl_glReadBuffer)
static __pyx_t_5renpy_4uguu_2gl_glReadPixels_type *__pyx_vp_5renpy_4uguu_2gl_glReadPixels = 0;
#define __pyx_v_5renpy_4uguu_2gl_glReadPixels (*__pyx_vp_5renpy_4uguu_2gl_glReadPixels)
static __pyx_t_5renpy_4uguu_2gl_glRenderbufferStorage_type *__pyx_vp_5renpy_4uguu_2gl_glRenderbufferStorage = 0;
#define __pyx_v_5renpy_4uguu_2gl_glRenderbufferStorage (*__pyx_vp_5renpy_4uguu_2gl_glRenderbufferStorage)
static __pyx_t_5renpy_4uguu_2gl_glRenderbufferStorageMultisample_type *__pyx_vp_5renpy_4uguu_2gl_glRenderbufferStorageMultisample = 0;
#define __pyx_v_5renpy_4uguu_2gl_glRenderbufferStorageMultisample (*__pyx_vp_5renpy_4uguu_2gl_glRenderbufferStorageMultisample)
static __pyx_t_5renpy_4uguu_2gl_glSampleCoverage_type *__pyx_vp_5renpy_4uguu_2gl_glSampleCoverage = 0;
#define __pyx_v_5renpy_4uguu_2gl_glSampleCoverage (*__pyx_vp_5renpy_4uguu_2gl_glSampleCoverage)
static __pyx_t_5renpy_4uguu_2gl_glScissor_type *__pyx_vp_5renpy_4uguu_2gl_glScissor = 0;
#define __pyx_v_5renpy_4uguu_2gl_glScissor (*__pyx_vp_5renpy_4uguu_2gl_glScissor)
static __pyx_t_5renpy_4uguu_2gl_glShaderSource_type *__pyx_vp_5renpy_4uguu_2gl_glShaderSource = 0;
#define __pyx_v_5renpy_4uguu_2gl_glShaderSource (*__pyx_vp_5renpy_4uguu_2gl_glShaderSource)
static __pyx_t_5renpy_4uguu_2gl_glStencilFunc_type *__pyx_vp_5renpy_4uguu_2gl_glStencilFunc = 0;
#define __pyx_v_5renpy_4uguu_2gl_glStencilFunc (*__pyx_vp_5renpy_4uguu_2gl_glStencilFunc)
static __pyx_t_5renpy_4uguu_2gl_glStencilFuncSeparate_type *__pyx_vp_5renpy_4uguu_2gl_glStencilFuncSeparate = 0;
#define __pyx_v_5renpy_4uguu_2gl_glStencilFuncSeparate (*__pyx_vp_5renpy_4uguu_2gl_glStencilFuncSeparate)
static __pyx_t_5renpy_4uguu_2gl_glStencilMask_type *__pyx_vp_5renpy_4uguu_2gl_glStencilMask = 0;
#define __pyx_v_5renpy_4uguu_2gl_glStencilMask (*__pyx_vp_5renpy_4uguu_2gl_glStencilMask)
static __pyx_t_5renpy_4uguu_2gl_glStencilMaskSeparate_type *__pyx_vp_5renpy_4uguu_2gl_glStencilMaskSeparate = 0;
#define __pyx_v_5renpy_4uguu_2gl_glStencilMaskSeparate (*__pyx_vp_5renpy_4uguu_2gl_glStencilMaskSeparate)
static __pyx_t_5renpy_4uguu_2gl_glStencilOp_type *__pyx_vp_5renpy_4uguu_2gl_glStencilOp = 0;
#define __pyx_v_5renpy_4uguu_2gl_glStencilOp (*__pyx_vp_5renpy_4uguu_2gl_glStencilOp)
static __pyx_t_5renpy_4uguu_2gl_glStencilOpSeparate_type *__pyx_vp_5renpy_4uguu_2gl_glStencilOpSeparate = 0;
#define __pyx_v_5renpy_4uguu_2gl_glStencilOpSeparate (*__pyx_vp_5renpy_4uguu_2gl_glStencilOpSeparate)
static __pyx_t_5renpy_4uguu_2gl_glTexImage2D_type *__pyx_vp_5renpy_4uguu_2gl_glTexImage2D = 0;
#define __pyx_v_5renpy_4uguu_2gl_glTexImage2D (*__pyx_vp_5renpy_4uguu_2gl_glTexImage2D)
static __pyx_t_5renpy_4uguu_2gl_glTexImage3D_type *__pyx_vp_5renpy_4uguu_2gl_glTexImage3D = 0;
#define __pyx_v_5renpy_4uguu_2gl_glTexImage3D (*__pyx_vp_5renpy_4uguu_2gl_glTexImage3D)
static __pyx_t_5renpy_4uguu_2gl_glTexParameterf_type *__pyx_vp_5renpy_4uguu_2gl_glTexParameterf = 0;
#define __pyx_v_5renpy_4uguu_2gl_glTexParameterf (*__pyx_vp_5renpy_4uguu_2gl_glTexParameterf)
static __pyx_t_5renpy_4uguu_2gl_glTexParameterfv_type *__pyx_vp_5renpy_4uguu_2gl_glTexParameterfv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glTexParameterfv (*__pyx_vp_5renpy_4uguu_2gl_glTexParameterfv)
static __pyx_t_5renpy_4uguu_2gl_glTexParameteri_type *__pyx_vp_5renpy_4uguu_2gl_glTexParameteri = 0;
#define __pyx_v_5renpy_4uguu_2gl_glTexParameteri (*__pyx_vp_5renpy_4uguu_2gl_glTexParameteri)
static __pyx_t_5renpy_4uguu_2gl_glTexParameteriv_type *__pyx_vp_5renpy_4uguu_2gl_glTexParameteriv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glTexParameteriv (*__pyx_vp_5renpy_4uguu_2gl_glTexParameteriv)
static __pyx_t_5renpy_4uguu_2gl_glTexSubImage2D_type *__pyx_vp_5renpy_4uguu_2gl_glTexSubImage2D = 0;
#define __pyx_v_5renpy_4uguu_2gl_glTexSubImage2D (*__pyx_vp_5renpy_4uguu_2gl_glTexSubImage2D)
static __pyx_t_5renpy_4uguu_2gl_glTexSubImage3D_type *__pyx_vp_5renpy_4uguu_2gl_glTexSubImage3D = 0;
#define __pyx_v_5renpy_4uguu_2gl_glTexSubImage3D (*__pyx_vp_5renpy_4uguu_2gl_glTexSubImage3D)
static __pyx_t_5renpy_4uguu_2gl_glTransformFeedbackVaryings_type *__pyx_vp_5renpy_4uguu_2gl_glTransformFeedbackVaryings = 0;
#define __pyx_v_5renpy_4uguu_2gl_glTransformFeedbackVaryings (*__pyx_vp_5renpy_4uguu_2gl_glTransformFeedbackVaryings)
static __pyx_t_5renpy_4uguu_2gl_glUniform1f_type *__pyx_vp_5renpy_4uguu_2gl_glUniform1f = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform1f (*__pyx_vp_5renpy_4uguu_2gl_glUniform1f)
static __pyx_t_5renpy_4uguu_2gl_glUniform1fv_type *__pyx_vp_5renpy_4uguu_2gl_glUniform1fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform1fv (*__pyx_vp_5renpy_4uguu_2gl_glUniform1fv)
static __pyx_t_5renpy_4uguu_2gl_glUniform1i_type *__pyx_vp_5renpy_4uguu_2gl_glUniform1i = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform1i (*__pyx_vp_5renpy_4uguu_2gl_glUniform1i)
static __pyx_t_5renpy_4uguu_2gl_glUniform1iv_type *__pyx_vp_5renpy_4uguu_2gl_glUniform1iv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform1iv (*__pyx_vp_5renpy_4uguu_2gl_glUniform1iv)
static __pyx_t_5renpy_4uguu_2gl_glUniform1ui_type *__pyx_vp_5renpy_4uguu_2gl_glUniform1ui = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform1ui (*__pyx_vp_5renpy_4uguu_2gl_glUniform1ui)
static __pyx_t_5renpy_4uguu_2gl_glUniform1uiv_type *__pyx_vp_5renpy_4uguu_2gl_glUniform1uiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform1uiv (*__pyx_vp_5renpy_4uguu_2gl_glUniform1uiv)
static __pyx_t_5renpy_4uguu_2gl_glUniform2f_type *__pyx_vp_5renpy_4uguu_2gl_glUniform2f = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform2f (*__pyx_vp_5renpy_4uguu_2gl_glUniform2f)
static __pyx_t_5renpy_4uguu_2gl_glUniform2fv_type *__pyx_vp_5renpy_4uguu_2gl_glUniform2fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform2fv (*__pyx_vp_5renpy_4uguu_2gl_glUniform2fv)
static __pyx_t_5renpy_4uguu_2gl_glUniform2i_type *__pyx_vp_5renpy_4uguu_2gl_glUniform2i = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform2i (*__pyx_vp_5renpy_4uguu_2gl_glUniform2i)
static __pyx_t_5renpy_4uguu_2gl_glUniform2iv_type *__pyx_vp_5renpy_4uguu_2gl_glUniform2iv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform2iv (*__pyx_vp_5renpy_4uguu_2gl_glUniform2iv)
static __pyx_t_5renpy_4uguu_2gl_glUniform2ui_type *__pyx_vp_5renpy_4uguu_2gl_glUniform2ui = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform2ui (*__pyx_vp_5renpy_4uguu_2gl_glUniform2ui)
static __pyx_t_5renpy_4uguu_2gl_glUniform2uiv_type *__pyx_vp_5renpy_4uguu_2gl_glUniform2uiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform2uiv (*__pyx_vp_5renpy_4uguu_2gl_glUniform2uiv)
static __pyx_t_5renpy_4uguu_2gl_glUniform3f_type *__pyx_vp_5renpy_4uguu_2gl_glUniform3f = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform3f (*__pyx_vp_5renpy_4uguu_2gl_glUniform3f)
static __pyx_t_5renpy_4uguu_2gl_glUniform3fv_type *__pyx_vp_5renpy_4uguu_2gl_glUniform3fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform3fv (*__pyx_vp_5renpy_4uguu_2gl_glUniform3fv)
static __pyx_t_5renpy_4uguu_2gl_glUniform3i_type *__pyx_vp_5renpy_4uguu_2gl_glUniform3i = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform3i (*__pyx_vp_5renpy_4uguu_2gl_glUniform3i)
static __pyx_t_5renpy_4uguu_2gl_glUniform3iv_type *__pyx_vp_5renpy_4uguu_2gl_glUniform3iv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform3iv (*__pyx_vp_5renpy_4uguu_2gl_glUniform3iv)
static __pyx_t_5renpy_4uguu_2gl_glUniform3ui_type *__pyx_vp_5renpy_4uguu_2gl_glUniform3ui = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform3ui (*__pyx_vp_5renpy_4uguu_2gl_glUniform3ui)
static __pyx_t_5renpy_4uguu_2gl_glUniform3uiv_type *__pyx_vp_5renpy_4uguu_2gl_glUniform3uiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform3uiv (*__pyx_vp_5renpy_4uguu_2gl_glUniform3uiv)
static __pyx_t_5renpy_4uguu_2gl_glUniform4f_type *__pyx_vp_5renpy_4uguu_2gl_glUniform4f = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform4f (*__pyx_vp_5renpy_4uguu_2gl_glUniform4f)
static __pyx_t_5renpy_4uguu_2gl_glUniform4fv_type *__pyx_vp_5renpy_4uguu_2gl_glUniform4fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform4fv (*__pyx_vp_5renpy_4uguu_2gl_glUniform4fv)
static __pyx_t_5renpy_4uguu_2gl_glUniform4i_type *__pyx_vp_5renpy_4uguu_2gl_glUniform4i = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform4i (*__pyx_vp_5renpy_4uguu_2gl_glUniform4i)
static __pyx_t_5renpy_4uguu_2gl_glUniform4iv_type *__pyx_vp_5renpy_4uguu_2gl_glUniform4iv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform4iv (*__pyx_vp_5renpy_4uguu_2gl_glUniform4iv)
static __pyx_t_5renpy_4uguu_2gl_glUniform4ui_type *__pyx_vp_5renpy_4uguu_2gl_glUniform4ui = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform4ui (*__pyx_vp_5renpy_4uguu_2gl_glUniform4ui)
static __pyx_t_5renpy_4uguu_2gl_glUniform4uiv_type *__pyx_vp_5renpy_4uguu_2gl_glUniform4uiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniform4uiv (*__pyx_vp_5renpy_4uguu_2gl_glUniform4uiv)
static __pyx_t_5renpy_4uguu_2gl_glUniformMatrix2fv_type *__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix2fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniformMatrix2fv (*__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix2fv)
static __pyx_t_5renpy_4uguu_2gl_glUniformMatrix2x3fv_type *__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix2x3fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniformMatrix2x3fv (*__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix2x3fv)
static __pyx_t_5renpy_4uguu_2gl_glUniformMatrix2x4fv_type *__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix2x4fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniformMatrix2x4fv (*__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix2x4fv)
static __pyx_t_5renpy_4uguu_2gl_glUniformMatrix3fv_type *__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix3fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniformMatrix3fv (*__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix3fv)
static __pyx_t_5renpy_4uguu_2gl_glUniformMatrix3x2fv_type *__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix3x2fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniformMatrix3x2fv (*__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix3x2fv)
static __pyx_t_5renpy_4uguu_2gl_glUniformMatrix3x4fv_type *__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix3x4fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniformMatrix3x4fv (*__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix3x4fv)
static __pyx_t_5renpy_4uguu_2gl_glUniformMatrix4fv_type *__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix4fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniformMatrix4fv (*__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix4fv)
static __pyx_t_5renpy_4uguu_2gl_glUniformMatrix4x2fv_type *__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix4x2fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniformMatrix4x2fv (*__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix4x2fv)
static __pyx_t_5renpy_4uguu_2gl_glUniformMatrix4x3fv_type *__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix4x3fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUniformMatrix4x3fv (*__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix4x3fv)
static __pyx_t_5renpy_4uguu_2gl_glUnmapBuffer_type *__pyx_vp_5renpy_4uguu_2gl_glUnmapBuffer = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUnmapBuffer (*__pyx_vp_5renpy_4uguu_2gl_glUnmapBuffer)
static __pyx_t_5renpy_4uguu_2gl_glUseProgram_type *__pyx_vp_5renpy_4uguu_2gl_glUseProgram = 0;
#define __pyx_v_5renpy_4uguu_2gl_glUseProgram (*__pyx_vp_5renpy_4uguu_2gl_glUseProgram)
static __pyx_t_5renpy_4uguu_2gl_glValidateProgram_type *__pyx_vp_5renpy_4uguu_2gl_glValidateProgram = 0;
#define __pyx_v_5renpy_4uguu_2gl_glValidateProgram (*__pyx_vp_5renpy_4uguu_2gl_glValidateProgram)
static __pyx_t_5renpy_4uguu_2gl_glVertexAttrib1f_type *__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib1f = 0;
#define __pyx_v_5renpy_4uguu_2gl_glVertexAttrib1f (*__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib1f)
static __pyx_t_5renpy_4uguu_2gl_glVertexAttrib1fv_type *__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib1fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glVertexAttrib1fv (*__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib1fv)
static __pyx_t_5renpy_4uguu_2gl_glVertexAttrib2f_type *__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib2f = 0;
#define __pyx_v_5renpy_4uguu_2gl_glVertexAttrib2f (*__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib2f)
static __pyx_t_5renpy_4uguu_2gl_glVertexAttrib2fv_type *__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib2fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glVertexAttrib2fv (*__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib2fv)
static __pyx_t_5renpy_4uguu_2gl_glVertexAttrib3f_type *__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib3f = 0;
#define __pyx_v_5renpy_4uguu_2gl_glVertexAttrib3f (*__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib3f)
static __pyx_t_5renpy_4uguu_2gl_glVertexAttrib3fv_type *__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib3fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glVertexAttrib3fv (*__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib3fv)
static __pyx_t_5renpy_4uguu_2gl_glVertexAttrib4f_type *__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib4f = 0;
#define __pyx_v_5renpy_4uguu_2gl_glVertexAttrib4f (*__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib4f)
static __pyx_t_5renpy_4uguu_2gl_glVertexAttrib4fv_type *__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib4fv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glVertexAttrib4fv (*__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib4fv)
static __pyx_t_5renpy_4uguu_2gl_glVertexAttribI4i_type *__pyx_vp_5renpy_4uguu_2gl_glVertexAttribI4i = 0;
#define __pyx_v_5renpy_4uguu_2gl_glVertexAttribI4i (*__pyx_vp_5renpy_4uguu_2gl_glVertexAttribI4i)
static __pyx_t_5renpy_4uguu_2gl_glVertexAttribI4iv_type *__pyx_vp_5renpy_4uguu_2gl_glVertexAttribI4iv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glVertexAttribI4iv (*__pyx_vp_5renpy_4uguu_2gl_glVertexAttribI4iv)
static __pyx_t_5renpy_4uguu_2gl_glVertexAttribI4ui_type *__pyx_vp_5renpy_4uguu_2gl_glVertexAttribI4ui = 0;
#define __pyx_v_5renpy_4uguu_2gl_glVertexAttribI4ui (*__pyx_vp_5renpy_4uguu_2gl_glVertexAttribI4ui)
static __pyx_t_5renpy_4uguu_2gl_glVertexAttribI4uiv_type *__pyx_vp_5renpy_4uguu_2gl_glVertexAttribI4uiv = 0;
#define __pyx_v_5renpy_4uguu_2gl_glVertexAttribI4uiv (*__pyx_vp_5renpy_4uguu_2gl_glVertexAttribI4uiv)
static __pyx_t_5renpy_4uguu_2gl_glVertexAttribIPointer_type *__pyx_vp_5renpy_4uguu_2gl_glVertexAttribIPointer = 0;
#define __pyx_v_5renpy_4uguu_2gl_glVertexAttribIPointer (*__pyx_vp_5renpy_4uguu_2gl_glVertexAttribIPointer)
static __pyx_t_5renpy_4uguu_2gl_glVertexAttribPointer_type *__pyx_vp_5renpy_4uguu_2gl_glVertexAttribPointer = 0;
#define __pyx_v_5renpy_4uguu_2gl_glVertexAttribPointer (*__pyx_vp_5renpy_4uguu_2gl_glVertexAttribPointer)
static __pyx_t_5renpy_4uguu_2gl_glViewport_type *__pyx_vp_5renpy_4uguu_2gl_glViewport = 0;
#define __pyx_v_5renpy_4uguu_2gl_glViewport (*__pyx_vp_5renpy_4uguu_2gl_glViewport)

/* Module declarations from 'renpy.gl2.gl2shader' */
static PyTypeObject *__pyx_ptype_5renpy_3gl2_9gl2shader_Program = 0;

/* Module declarations from 'renpy.gl2.gl2polygon' */
static PyTypeObject *__pyx_ptype_5renpy_3gl2_10gl2polygon_Polygon = 0;

/* Module declarations from 'renpy.gl2.gl2mesh' */
static PyTypeObject *__pyx_ptype_5renpy_3gl2_7gl2mesh_AttributeLayout = 0;
static PyTypeObject *__pyx_ptype_5renpy_3gl2_7gl2mesh_Mesh = 0;

/* Module declarations from 'renpy.gl2.gl2model' */
static PyTypeObject *__pyx_ptype_5renpy_3gl2_8gl2model_Model = 0;

/* Module declarations from 'renpy.gl2.gl2texture' */
static PyTypeObject *__pyx_ptype_5renpy_3gl2_10gl2texture_TextureLoader = 0;
static PyTypeObject *__pyx_ptype_5renpy_3gl2_10gl2texture_GLTexture = 0;

/* Module declarations from 'libc.string' */

/* Module declarations from 'libc.stdlib' */

/* Module declarations from 'libc.stdio' */

/* Module declarations from 'sdl2' */

/* Module declarations from 'pygame_sdl2' */

/* Module declarations from 'renpy.gl2.gl2mesh3' */
static PyTypeObject *__pyx_ptype_5renpy_3gl2_8gl2mesh3_Mesh3 = 0;

/* Module declarations from 'renpy.gl2.gl2draw' */
static PyTypeObject *__pyx_ptype_5renpy_3gl2_7gl2draw_GL2Draw = 0;
static PyTypeObject *__pyx_ptype_5renpy_3gl2_7gl2draw_GL2DrawingContext = 0;
static PyTypeObject *__pyx_ptype_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize = 0;
static PyTypeObject *__pyx_ptype_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr = 0;
static int __pyx_v_5renpy_3gl2_7gl2draw_DISSOLVE;
static int __pyx_v_5renpy_3gl2_7gl2draw_IMAGEDISSOLVE;
static int __pyx_v_5renpy_3gl2_7gl2draw_PIXELLATE;
static PyObject *__pyx_v_5renpy_3gl2_7gl2draw_IDENTITY = 0;
static PyObject *__pyx_f_5renpy_3gl2_7gl2draw___pyx_unpickle_GL2Draw__set_state(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *, PyObject *); /*proto*/
static PyObject *__pyx_f_5renpy_3gl2_7gl2draw___pyx_unpickle_GL2DrawingContext__set_state(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *, PyObject *); /*proto*/
#define __Pyx_MODULE_NAME "renpy.gl2.gl2draw"
extern int __pyx_module_is_main_renpy__gl2__gl2draw;
int __pyx_module_is_main_renpy__gl2__gl2draw = 0;

/* Implementation of 'renpy.gl2.gl2draw' */
static PyObject *__pyx_builtin_round;
static PyObject *__pyx_builtin_enumerate;
static const char __pyx_k_0[] = "0";
static const char __pyx_k_1[] = "1";
static const char __pyx_k_h[] = "h";
static const char __pyx_k_s[] = "    %s";
static const char __pyx_k_w[] = "w";
static const char __pyx_k_x[] = "x";
static const char __pyx_k_y[] = "y";
static const char __pyx_k__6[] = " ";
static const char __pyx_k_gl[] = "gl";
static const char __pyx_k_os[] = "os";
static const char __pyx_k__13[] = "*";
static const char __pyx_k_get[] = "get";
static const char __pyx_k_gl2[] = "gl2";
static const char __pyx_k_ios[] = "ios";
static const char __pyx_k_log[] = "log";
static const char __pyx_k_new[] = "__new__";
static const char __pyx_k_old[] = "old";
static const char __pyx_k_pop[] = "pop";
static const char __pyx_k_pos[] = "pos";
static const char __pyx_k_rgb[] = "rgb";
static const char __pyx_k_tex[] = "tex";
static const char __pyx_k_args[] = "args";
static const char __pyx_k_core[] = "core";
static const char __pyx_k_crop[] = "crop";
static const char __pyx_k_dict[] = "__dict__";
static const char __pyx_k_draw[] = "draw";
static const char __pyx_k_flip[] = "flip";
static const char __pyx_k_game[] = "game";
static const char __pyx_k_hint[] = "hint";
static const char __pyx_k_init[] = "init";
static const char __pyx_k_load[] = "load";
static const char __pyx_k_main[] = "__main__";
static const char __pyx_k_math[] = "math";
static const char __pyx_k_mesh[] = "mesh";
static const char __pyx_k_name[] = "name";
static const char __pyx_k_plog[] = "plog";
static const char __pyx_k_quit[] = "quit";
static const char __pyx_k_save[] = "save";
static const char __pyx_k_send[] = "send";
static const char __pyx_k_surf[] = "surf";
static const char __pyx_k_test[] = "__test__";
static const char __pyx_k_tex0[] = "tex0";
static const char __pyx_k_time[] = "time";
static const char __pyx_k_uguu[] = "uguu";
static const char __pyx_k_what[] = "what";
static const char __pyx_k_Color[] = "Color";
static const char __pyx_k_alpha[] = "alpha";
static const char __pyx_k_array[] = "array";
static const char __pyx_k_child[] = "child";
static const char __pyx_k_clear[] = "clear";
static const char __pyx_k_close[] = "close";
static const char __pyx_k_color[] = "color";
static const char __pyx_k_debug[] = "debug";
static const char __pyx_k_error[] = "error";
static const char __pyx_k_first[] = "first";
static const char __pyx_k_force[] = "force";
static const char __pyx_k_gles2[] = "gles2";
static const char __pyx_k_items[] = "items";
static const char __pyx_k_model[] = "model";
static const char __pyx_k_mouse[] = "mouse";
static const char __pyx_k_movie[] = "movie";
static const char __pyx_k_renpy[] = "renpy";
static const char __pyx_k_round[] = "round";
static const char __pyx_k_sleep[] = "sleep";
static const char __pyx_k_split[] = "split";
static const char __pyx_k_start[] = "start";
static const char __pyx_k_throw[] = "throw";
static const char __pyx_k_upper[] = "upper";
static const char __pyx_k_video[] = "video";
static const char __pyx_k_vsync[] = "vsync";
static const char __pyx_k_width[] = "width";
static const char __pyx_k_write[] = "write";
static const char __pyx_k_OPENGL[] = "OPENGL";
static const char __pyx_k_angle2[] = "angle2";
static const char __pyx_k_append[] = "append";
static const char __pyx_k_config[] = "config";
static const char __pyx_k_finish[] = "finish";
static const char __pyx_k_height[] = "height";
static const char __pyx_k_import[] = "__import__";
static const char __pyx_k_mobile[] = "mobile";
static const char __pyx_k_models[] = "models";
static const char __pyx_k_name_2[] = "__name__";
static const char __pyx_k_opengl[] = "opengl";
static const char __pyx_k_pickle[] = "pickle";
static const char __pyx_k_pygame[] = "pygame";
static const char __pyx_k_random[] = "random";
static const char __pyx_k_reduce[] = "__reduce__";
static const char __pyx_k_render[] = "render";
static const char __pyx_k_resize[] = "resize";
static const char __pyx_k_u_time[] = "u_time";
static const char __pyx_k_uguugl[] = "uguugl";
static const char __pyx_k_update[] = "update";
static const char __pyx_k_GL2Draw[] = "GL2Draw";
static const char __pyx_k_Surface[] = "Surface";
static const char __pyx_k_Texture[] = "Texture";
static const char __pyx_k_android[] = "android";
static const char __pyx_k_cleanup[] = "cleanup";
static const char __pyx_k_display[] = "display";
static const char __pyx_k_environ[] = "environ";
static const char __pyx_k_forward[] = "forward";
static const char __pyx_k_genexpr[] = "genexpr";
static const char __pyx_k_get_pos[] = "get_pos";
static const char __pyx_k_nearest[] = "nearest";
static const char __pyx_k_os_path[] = "os.path";
static const char __pyx_k_restore[] = "restore";
static const char __pyx_k_reverse[] = "reverse";
static const char __pyx_k_set_pos[] = "set_pos";
static const char __pyx_k_shaders[] = "shaders";
static const char __pyx_k_weakref[] = "weakref";
static const char __pyx_k_windows[] = "windows";
static const char __pyx_k_DISSOLVE[] = "DISSOLVE";
static const char __pyx_k_IDENTITY[] = "IDENTITY";
static const char __pyx_k_Vendor_r[] = "Vendor: %r";
static const char __pyx_k_additive[] = "additive";
static const char __pyx_k_draw_one[] = "draw_one";
static const char __pyx_k_fbo_size[] = "fbo_size";
static const char __pyx_k_geometry[] = "geometry";
static const char __pyx_k_get_info[] = "get_info";
static const char __pyx_k_get_size[] = "get_size";
static const char __pyx_k_getstate[] = "__getstate__";
static const char __pyx_k_init_fbo[] = "init_fbo";
static const char __pyx_k_pgrender[] = "pgrender";
static const char __pyx_k_pyx_type[] = "__pyx_type";
static const char __pyx_k_quit_fbo[] = "quit_fbo";
static const char __pyx_k_renderer[] = "renderer";
static const char __pyx_k_set_mode[] = "set_mode";
static const char __pyx_k_setstate[] = "__setstate__";
static const char __pyx_k_u_random[] = "u_random";
static const char __pyx_k_uniforms[] = "uniforms";
static const char __pyx_k_DOUBLEBUF[] = "DOUBLEBUF";
static const char __pyx_k_PIXELLATE[] = "PIXELLATE";
static const char __pyx_k_RESIZABLE[] = "RESIZABLE";
static const char __pyx_k_Version_r[] = "Version: %r";
static const char __pyx_k_can_block[] = "can_block";
static const char __pyx_k_current_h[] = "current_h";
static const char __pyx_k_current_w[] = "current_w";
static const char __pyx_k_dpi_scale[] = "dpi_scale";
static const char __pyx_k_enumerate[] = "enumerate";
static const char __pyx_k_get_flags[] = "get_flags";
static const char __pyx_k_gl_enable[] = "gl_enable";
static const char __pyx_k_gl_resize[] = "gl_resize";
static const char __pyx_k_init_time[] = "init_time";
static const char __pyx_k_interface[] = "interface";
static const char __pyx_k_is_opaque[] = "is_opaque";
static const char __pyx_k_on_resize[] = "on_resize";
static const char __pyx_k_pyx_state[] = "__pyx_state";
static const char __pyx_k_rectangle[] = "rectangle";
static const char __pyx_k_reduce_ex[] = "__reduce_ex__";
static const char __pyx_k_resizable[] = "resizable";
static const char __pyx_k_text_rect[] = "text_rect";
static const char __pyx_k_transform[] = "transform";
static const char __pyx_k_transient[] = "transient";
static const char __pyx_k_Extensions[] = "Extensions:";
static const char __pyx_k_RENPY_FAIL[] = "RENPY_FAIL_";
static const char __pyx_k_Renderer_r[] = "Renderer: %r";
static const char __pyx_k_depth_size[] = "depth_size";
static const char __pyx_k_draw_model[] = "draw_model";
static const char __pyx_k_emscripten[] = "emscripten";
static const char __pyx_k_first_pass[] = "first_pass";
static const char __pyx_k_frame_time[] = "frame_time";
static const char __pyx_k_fullscreen[] = "fullscreen";
static const char __pyx_k_get_window[] = "get_window";
static const char __pyx_k_gl_tearing[] = "gl_tearing";
static const char __pyx_k_properties[] = "properties";
static const char __pyx_k_pyx_result[] = "__pyx_result";
static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
static const char __pyx_k_subsurface[] = "subsurface";
static const char __pyx_k_u_lod_bias[] = "u_lod_bias";
static const char __pyx_k_GL_Disabled[] = "GL Disabled.";
static const char __pyx_k_GL_RED_SIZE[] = "GL_RED_SIZE";
static const char __pyx_k_PickleError[] = "PickleError";
static const char __pyx_k_ShaderCache[] = "ShaderCache";
static const char __pyx_k_draw_screen[] = "draw_screen";
static const char __pyx_k_frame_times[] = "frame_times";
static const char __pyx_k_get_surface[] = "get_surface";
static const char __pyx_k_preferences[] = "preferences";
static const char __pyx_k_pygame_sdl2[] = "pygame_sdl2";
static const char __pyx_k_render_tree[] = "render_tree";
static const char __pyx_k_renpy_solid[] = "renpy.solid";
static const char __pyx_k_screen_rect[] = "screen_rect";
static const char __pyx_k_set_uniform[] = "set_uniform";
static const char __pyx_k_u_transform[] = "u_transform";
static const char __pyx_k_GL_BLUE_SIZE[] = "GL_BLUE_SIZE";
static const char __pyx_k_clip_polygon[] = "clip_polygon";
static const char __pyx_k_gl2functions[] = "gl2functions";
static const char __pyx_k_gl_framerate[] = "gl_framerate";
static const char __pyx_k_gl_powersave[] = "gl_powersave";
static const char __pyx_k_load_surface[] = "load_surface";
static const char __pyx_k_load_texture[] = "load_texture";
static const char __pyx_k_needs_redraw[] = "needs_redraw";
static const char __pyx_k_pyx_checksum[] = "__pyx_checksum";
static const char __pyx_k_refresh_rate[] = "refresh_rate";
static const char __pyx_k_render_movie[] = "render_movie";
static const char __pyx_k_set_uniforms[] = "set_uniforms";
static const char __pyx_k_stringsource[] = "stringsource";
static const char __pyx_k_u_model_size[] = "u_model_size";
static const char __pyx_k_Flip_failed_r[] = "Flip failed %r";
static const char __pyx_k_GL_ALPHA_SIZE[] = "GL_ALPHA_SIZE";
static const char __pyx_k_GL_DEPTH_SIZE[] = "GL_DEPTH_SIZE";
static const char __pyx_k_GL_GREEN_SIZE[] = "GL_GREEN_SIZE";
static const char __pyx_k_IMAGEDISSOLVE[] = "IMAGEDISSOLVE";
static const char __pyx_k_TextureLoader[] = "TextureLoader";
static const char __pyx_k_Windowed_mode[] = "Windowed mode.";
static const char __pyx_k_before_resize[] = "before_resize";
static const char __pyx_k_display_reset[] = "display_reset";
static const char __pyx_k_flip_unscaled[] = "flip_unscaled";
static const char __pyx_k_kill_textures[] = "kill_textures";
static const char __pyx_k_physical_size[] = "physical_size";
static const char __pyx_k_pixel_perfect[] = "pixel_perfect";
static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
static const char __pyx_k_renpy_uguu_gl[] = "renpy.uguu.gl";
static const char __pyx_k_Display_Info_s[] = "Display Info: %s";
static const char __pyx_k_RENPY_GL_VSYNC[] = "RENPY_GL_VSYNC";
static const char __pyx_k_cached_texture[] = "cached_texture";
static const char __pyx_k_frame_duration[] = "frame_duration";
static const char __pyx_k_gl_clear_color[] = "gl_clear_color";
static const char __pyx_k_merge_uniforms[] = "merge_uniforms";
static const char __pyx_k_set_rgba_masks[] = "set_rgba_masks";
static const char __pyx_k_Fullscreen_mode[] = "Fullscreen mode.";
static const char __pyx_k_GL_SWAP_CONTROL[] = "GL_SWAP_CONTROL";
static const char __pyx_k_max_window_size[] = "max_window_size";
static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError";
static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
static const char __pyx_k_texture_scaling[] = "texture_scaling";
static const char __pyx_k_translate_point[] = "translate_point";
static const char __pyx_k_WINDOW_MAXIMIZED[] = "WINDOW_MAXIMIZED";
static const char __pyx_k_adjust_view_size[] = "adjust_view_size";
static const char __pyx_k_get_texture_size[] = "get_texture_size";
static const char __pyx_k_get_window_flags[] = "get_window_flags";
static const char __pyx_k_gl_set_attribute[] = "gl_set_attribute";
static const char __pyx_k_merge_properties[] = "merge_properties";
static const char __pyx_k_nearest_neighbor[] = "nearest_neighbor";
static const char __pyx_k_program_uniforms[] = "program_uniforms";
static const char __pyx_k_surface_unscaled[] = "surface_unscaled";
static const char __pyx_k_GL2DrawingContext[] = "GL2DrawingContext";
static const char __pyx_k_WINDOW_FULLSCREEN[] = "WINDOW_FULLSCREEN";
static const char __pyx_k_cache_shaders_txt[] = "cache/shaders.txt";
static const char __pyx_k_get_drawable_size[] = "get_drawable_size";
static const char __pyx_k_get_physical_size[] = "get_physical_size";
static const char __pyx_k_gl_set_attributes[] = "gl_set_attributes";
static const char __pyx_k_load_all_textures[] = "load_all_textures";
static const char __pyx_k_log_gl_extensions[] = "log_gl_extensions";
static const char __pyx_k_ready_one_texture[] = "ready_one_texture";
static const char __pyx_k_render_to_texture[] = "render_to_texture";
static const char __pyx_k_renpy_gl2_gl2draw[] = "renpy.gl2.gl2draw";
static const char __pyx_k_standard_uniforms[] = "standard_uniforms";
static const char __pyx_k_start_draw_screen[] = "start draw_screen";
static const char __pyx_k_untranslate_point[] = "untranslate_point";
static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
static const char __pyx_k_fast_redraw_frames[] = "fast_redraw_frames";
static const char __pyx_k_get_display_bounds[] = "get_display_bounds";
static const char __pyx_k_renpy_gl2_gl2debug[] = "renpy.gl2.gl2debug";
static const char __pyx_k_required_functions[] = "required_functions";
static const char __pyx_k_gl_reset_attributes[] = "gl_reset_attributes";
static const char __pyx_k_recreate_gl_context[] = "recreate_gl_context";
static const char __pyx_k_u_renpy_solid_color[] = "u_renpy_solid_color";
static const char __pyx_k_SDL_OPENGL_ES_DRIVER[] = "SDL_OPENGL_ES_DRIVER";
static const char __pyx_k_WINDOW_ALLOW_HIGHDPI[] = "WINDOW_ALLOW_HIGHDPI";
static const char __pyx_k_pyx_unpickle_GL2Draw[] = "__pyx_unpickle_GL2Draw";
static const char __pyx_k_renpy_gl2_gl2texture[] = "renpy.gl2.gl2texture";
static const char __pyx_k_select_gl_attributes[] = "select_gl_attributes";
static const char __pyx_k_select_physical_size[] = "select_physical_size";
static const char __pyx_k_GL_CONTEXT_PROFILE_ES[] = "GL_CONTEXT_PROFILE_ES";
static const char __pyx_k_renpy_gl2_gl2functions[] = "renpy.gl2.gl2functions";
static const char __pyx_k_swap_interval_r_frames[] = "swap interval: %r frames";
static const char __pyx_k_GL_CONTEXT_PROFILE_MASK[] = "GL_CONTEXT_PROFILE_MASK";
static const char __pyx_k_check_missing_functions[] = "check_missing_functions";
static const char __pyx_k_clear_missing_functions[] = "clear_missing_functions";
static const char __pyx_k_GL_CONTEXT_MAJOR_VERSION[] = "GL_CONTEXT_MAJOR_VERSION";
static const char __pyx_k_GL_CONTEXT_MINOR_VERSION[] = "GL_CONTEXT_MINOR_VERSION";
static const char __pyx_k_after_broken_vsync_sleep[] = "after broken vsync sleep";
static const char __pyx_k_on_resize_locals_genexpr[] = "on_resize.<locals>.genexpr";
static const char __pyx_k_primary_display_bounds_r[] = "primary display bounds: %r";
static const char __pyx_k_renpy_gl2_gl2shadercache[] = "renpy.gl2.gl2shadercache";
static const char __pyx_k_Maximum_texture_size_dx_d[] = "Maximum texture size: %dx%d";
static const char __pyx_k_WINDOW_FULLSCREEN_DESKTOP[] = "WINDOW_FULLSCREEN_DESKTOP";
static const char __pyx_k_Could_not_get_pygame_screen_r[] = "Could not get pygame screen: %r";
static const char __pyx_k_Opening_in_fullscreen_failed_r[] = "Opening in fullscreen failed: %r";
static const char __pyx_k_pyx_unpickle_GL2DrawingContext[] = "__pyx_unpickle_GL2DrawingContext";
static const char __pyx_k_Screen_sizes_virtual_r_physical[] = "Screen sizes: virtual=%r physical=%r drawable=%r";
static const char __pyx_k_GL_CONTEXT_PROFILE_COMPATIBILITY[] = "GL_CONTEXT_PROFILE_COMPATIBILITY";
static const char __pyx_k_Incompatible_checksums_s_vs_0x11[] = "Incompatible checksums (%s vs 0x11e38ca = (debug, gl2draw, height, width))";
static const char __pyx_k_Incompatible_checksums_s_vs_0xc6[] = "Incompatible checksums (%s vs 0xc664da8 = (angle, clip_cache, clip_rtt_box, color_texture, current_fbo, default_clip, default_fbo, depth_renderbuffer, did_init, display_info, dpi_scale, draw_per_phys, draw_per_virt, draw_to_virt, draw_transform, drawable_size, drawable_viewport, fast_redraw_frames, fbo, fullscreen_surface, gles, info, last_redraw_time, old_fullscreen, physical_box, physical_size, redraw_period, shader_cache, texture_loader, virt_to_draw, virtual_box, virtual_size, window))";
static PyObject *__pyx_kp_s_0;
static PyObject *__pyx_kp_s_1;
static PyObject *__pyx_n_s_Color;
static PyObject *__pyx_kp_s_Could_not_get_pygame_screen_r;
static PyObject *__pyx_n_s_DISSOLVE;
static PyObject *__pyx_n_s_DOUBLEBUF;
static PyObject *__pyx_kp_s_Display_Info_s;
static PyObject *__pyx_kp_s_Extensions;
static PyObject *__pyx_kp_s_Flip_failed_r;
static PyObject *__pyx_kp_s_Fullscreen_mode;
static PyObject *__pyx_n_s_GL2Draw;
static PyObject *__pyx_n_s_GL2DrawingContext;
static PyObject *__pyx_n_s_GL_ALPHA_SIZE;
static PyObject *__pyx_n_s_GL_BLUE_SIZE;
static PyObject *__pyx_n_s_GL_CONTEXT_MAJOR_VERSION;
static PyObject *__pyx_n_s_GL_CONTEXT_MINOR_VERSION;
static PyObject *__pyx_n_s_GL_CONTEXT_PROFILE_COMPATIBILITY;
static PyObject *__pyx_n_s_GL_CONTEXT_PROFILE_ES;
static PyObject *__pyx_n_s_GL_CONTEXT_PROFILE_MASK;
static PyObject *__pyx_n_s_GL_DEPTH_SIZE;
static PyObject *__pyx_kp_s_GL_Disabled;
static PyObject *__pyx_n_s_GL_GREEN_SIZE;
static PyObject *__pyx_n_s_GL_RED_SIZE;
static PyObject *__pyx_n_s_GL_SWAP_CONTROL;
static PyObject *__pyx_n_s_IDENTITY;
static PyObject *__pyx_n_s_IMAGEDISSOLVE;
static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0x11;
static PyObject *__pyx_kp_s_Incompatible_checksums_s_vs_0xc6;
static PyObject *__pyx_kp_s_Maximum_texture_size_dx_d;
static PyObject *__pyx_n_s_OPENGL;
static PyObject *__pyx_kp_s_Opening_in_fullscreen_failed_r;
static PyObject *__pyx_n_s_PIXELLATE;
static PyObject *__pyx_n_s_PickleError;
static PyObject *__pyx_n_s_RENPY_FAIL;
static PyObject *__pyx_n_s_RENPY_GL_VSYNC;
static PyObject *__pyx_n_s_RESIZABLE;
static PyObject *__pyx_kp_s_Renderer_r;
static PyObject *__pyx_n_s_SDL_OPENGL_ES_DRIVER;
static PyObject *__pyx_kp_s_Screen_sizes_virtual_r_physical;
static PyObject *__pyx_n_s_ShaderCache;
static PyObject *__pyx_n_s_Surface;
static PyObject *__pyx_n_s_Texture;
static PyObject *__pyx_n_s_TextureLoader;
static PyObject *__pyx_kp_s_Vendor_r;
static PyObject *__pyx_kp_s_Version_r;
static PyObject *__pyx_n_s_WINDOW_ALLOW_HIGHDPI;
static PyObject *__pyx_n_s_WINDOW_FULLSCREEN;
static PyObject *__pyx_n_s_WINDOW_FULLSCREEN_DESKTOP;
static PyObject *__pyx_n_s_WINDOW_MAXIMIZED;
static PyObject *__pyx_kp_s_Windowed_mode;
static PyObject *__pyx_n_s__13;
static PyObject *__pyx_kp_s__6;
static PyObject *__pyx_n_s_additive;
static PyObject *__pyx_n_s_adjust_view_size;
static PyObject *__pyx_kp_s_after_broken_vsync_sleep;
static PyObject *__pyx_n_s_alpha;
static PyObject *__pyx_n_s_android;
static PyObject *__pyx_n_s_angle2;
static PyObject *__pyx_n_s_append;
static PyObject *__pyx_n_s_args;
static PyObject *__pyx_n_s_array;
static PyObject *__pyx_n_s_before_resize;
static PyObject *__pyx_kp_s_cache_shaders_txt;
static PyObject *__pyx_n_s_cached_texture;
static PyObject *__pyx_n_s_can_block;
static PyObject *__pyx_n_s_check_missing_functions;
static PyObject *__pyx_n_s_child;
static PyObject *__pyx_n_s_cleanup;
static PyObject *__pyx_n_s_clear;
static PyObject *__pyx_n_s_clear_missing_functions;
static PyObject *__pyx_n_s_cline_in_traceback;
static PyObject *__pyx_n_s_clip_polygon;
static PyObject *__pyx_n_s_close;
static PyObject *__pyx_n_s_color;
static PyObject *__pyx_n_s_config;
static PyObject *__pyx_n_s_core;
static PyObject *__pyx_n_s_crop;
static PyObject *__pyx_n_s_current_h;
static PyObject *__pyx_n_s_current_w;
static PyObject *__pyx_n_s_debug;
static PyObject *__pyx_n_s_depth_size;
static PyObject *__pyx_n_s_dict;
static PyObject *__pyx_n_s_display;
static PyObject *__pyx_n_s_display_reset;
static PyObject *__pyx_n_s_dpi_scale;
static PyObject *__pyx_n_s_draw;
static PyObject *__pyx_n_s_draw_model;
static PyObject *__pyx_n_s_draw_one;
static PyObject *__pyx_n_s_draw_screen;
static PyObject *__pyx_n_s_emscripten;
static PyObject *__pyx_n_s_enumerate;
static PyObject *__pyx_n_s_environ;
static PyObject *__pyx_n_s_error;
static PyObject *__pyx_n_s_fast_redraw_frames;
static PyObject *__pyx_n_s_fbo_size;
static PyObject *__pyx_n_s_finish;
static PyObject *__pyx_n_s_first;
static PyObject *__pyx_n_s_first_pass;
static PyObject *__pyx_n_s_flip;
static PyObject *__pyx_n_s_flip_unscaled;
static PyObject *__pyx_n_s_force;
static PyObject *__pyx_n_s_forward;
static PyObject *__pyx_n_s_frame_duration;
static PyObject *__pyx_n_s_frame_time;
static PyObject *__pyx_n_s_frame_times;
static PyObject *__pyx_n_s_fullscreen;
static PyObject *__pyx_n_s_game;
static PyObject *__pyx_n_s_genexpr;
static PyObject *__pyx_n_s_geometry;
static PyObject *__pyx_n_s_get;
static PyObject *__pyx_n_s_get_display_bounds;
static PyObject *__pyx_n_s_get_drawable_size;
static PyObject *__pyx_n_s_get_flags;
static PyObject *__pyx_n_s_get_info;
static PyObject *__pyx_n_s_get_physical_size;
static PyObject *__pyx_n_s_get_pos;
static PyObject *__pyx_n_s_get_size;
static PyObject *__pyx_n_s_get_surface;
static PyObject *__pyx_n_s_get_texture_size;
static PyObject *__pyx_n_s_get_window;
static PyObject *__pyx_n_s_get_window_flags;
static PyObject *__pyx_n_s_getstate;
static PyObject *__pyx_n_s_gl;
static PyObject *__pyx_n_s_gl2;
static PyObject *__pyx_n_s_gl2functions;
static PyObject *__pyx_n_s_gl_clear_color;
static PyObject *__pyx_n_s_gl_enable;
static PyObject *__pyx_n_s_gl_framerate;
static PyObject *__pyx_n_s_gl_powersave;
static PyObject *__pyx_n_s_gl_reset_attributes;
static PyObject *__pyx_n_s_gl_resize;
static PyObject *__pyx_n_s_gl_set_attribute;
static PyObject *__pyx_n_s_gl_set_attributes;
static PyObject *__pyx_n_s_gl_tearing;
static PyObject *__pyx_n_s_gles2;
static PyObject *__pyx_n_s_h;
static PyObject *__pyx_n_s_height;
static PyObject *__pyx_n_s_hint;
static PyObject *__pyx_n_s_import;
static PyObject *__pyx_n_s_init;
static PyObject *__pyx_n_s_init_fbo;
static PyObject *__pyx_n_s_init_time;
static PyObject *__pyx_n_s_interface;
static PyObject *__pyx_n_s_ios;
static PyObject *__pyx_n_s_is_opaque;
static PyObject *__pyx_n_s_items;
static PyObject *__pyx_n_s_kill_textures;
static PyObject *__pyx_n_s_load;
static PyObject *__pyx_n_s_load_all_textures;
static PyObject *__pyx_n_s_load_surface;
static PyObject *__pyx_n_s_load_texture;
static PyObject *__pyx_n_s_log;
static PyObject *__pyx_n_s_log_gl_extensions;
static PyObject *__pyx_n_s_main;
static PyObject *__pyx_n_s_math;
static PyObject *__pyx_n_s_max_window_size;
static PyObject *__pyx_n_s_merge_properties;
static PyObject *__pyx_n_s_merge_uniforms;
static PyObject *__pyx_n_s_mesh;
static PyObject *__pyx_n_s_mobile;
static PyObject *__pyx_n_s_model;
static PyObject *__pyx_n_s_models;
static PyObject *__pyx_n_s_mouse;
static PyObject *__pyx_n_s_movie;
static PyObject *__pyx_n_s_name;
static PyObject *__pyx_n_s_name_2;
static PyObject *__pyx_n_s_nearest;
static PyObject *__pyx_n_s_nearest_neighbor;
static PyObject *__pyx_n_s_needs_redraw;
static PyObject *__pyx_n_s_new;
static PyObject *__pyx_n_s_old;
static PyObject *__pyx_n_s_on_resize;
static PyObject *__pyx_n_s_on_resize_locals_genexpr;
static PyObject *__pyx_n_s_opengl;
static PyObject *__pyx_n_s_os;
static PyObject *__pyx_n_s_os_path;
static PyObject *__pyx_n_s_pgrender;
static PyObject *__pyx_n_s_physical_size;
static PyObject *__pyx_n_s_pickle;
static PyObject *__pyx_n_s_pixel_perfect;
static PyObject *__pyx_n_s_plog;
static PyObject *__pyx_n_s_pop;
static PyObject *__pyx_n_s_pos;
static PyObject *__pyx_n_s_preferences;
static PyObject *__pyx_kp_s_primary_display_bounds_r;
static PyObject *__pyx_n_s_program_uniforms;
static PyObject *__pyx_n_s_properties;
static PyObject *__pyx_n_s_pygame;
static PyObject *__pyx_n_s_pygame_sdl2;
static PyObject *__pyx_n_s_pyx_PickleError;
static PyObject *__pyx_n_s_pyx_checksum;
static PyObject *__pyx_n_s_pyx_result;
static PyObject *__pyx_n_s_pyx_state;
static PyObject *__pyx_n_s_pyx_type;
static PyObject *__pyx_n_s_pyx_unpickle_GL2Draw;
static PyObject *__pyx_n_s_pyx_unpickle_GL2DrawingContext;
static PyObject *__pyx_n_s_pyx_vtable;
static PyObject *__pyx_n_s_quit;
static PyObject *__pyx_n_s_quit_fbo;
static PyObject *__pyx_n_s_random;
static PyObject *__pyx_n_s_ready_one_texture;
static PyObject *__pyx_n_s_recreate_gl_context;
static PyObject *__pyx_n_s_rectangle;
static PyObject *__pyx_n_s_reduce;
static PyObject *__pyx_n_s_reduce_cython;
static PyObject *__pyx_n_s_reduce_ex;
static PyObject *__pyx_n_s_refresh_rate;
static PyObject *__pyx_n_s_render;
static PyObject *__pyx_n_s_render_movie;
static PyObject *__pyx_n_s_render_to_texture;
static PyObject *__pyx_n_s_render_tree;
static PyObject *__pyx_n_s_renderer;
static PyObject *__pyx_n_s_renpy;
static PyObject *__pyx_n_s_renpy_gl2_gl2debug;
static PyObject *__pyx_n_s_renpy_gl2_gl2draw;
static PyObject *__pyx_n_s_renpy_gl2_gl2functions;
static PyObject *__pyx_n_s_renpy_gl2_gl2shadercache;
static PyObject *__pyx_n_s_renpy_gl2_gl2texture;
static PyObject *__pyx_kp_s_renpy_solid;
static PyObject *__pyx_n_s_renpy_uguu_gl;
static PyObject *__pyx_n_s_required_functions;
static PyObject *__pyx_n_s_resizable;
static PyObject *__pyx_n_s_resize;
static PyObject *__pyx_n_s_restore;
static PyObject *__pyx_n_s_reverse;
static PyObject *__pyx_n_s_rgb;
static PyObject *__pyx_n_s_round;
static PyObject *__pyx_kp_s_s;
static PyObject *__pyx_n_s_save;
static PyObject *__pyx_n_s_screen_rect;
static PyObject *__pyx_n_s_select_gl_attributes;
static PyObject *__pyx_n_s_select_physical_size;
static PyObject *__pyx_n_s_send;
static PyObject *__pyx_n_s_set_mode;
static PyObject *__pyx_n_s_set_pos;
static PyObject *__pyx_n_s_set_rgba_masks;
static PyObject *__pyx_n_s_set_uniform;
static PyObject *__pyx_n_s_set_uniforms;
static PyObject *__pyx_n_s_setstate;
static PyObject *__pyx_n_s_setstate_cython;
static PyObject *__pyx_n_s_shaders;
static PyObject *__pyx_n_s_sleep;
static PyObject *__pyx_n_s_split;
static PyObject *__pyx_n_s_standard_uniforms;
static PyObject *__pyx_n_s_start;
static PyObject *__pyx_kp_s_start_draw_screen;
static PyObject *__pyx_kp_s_stringsource;
static PyObject *__pyx_n_s_subsurface;
static PyObject *__pyx_n_s_surf;
static PyObject *__pyx_n_s_surface_unscaled;
static PyObject *__pyx_kp_s_swap_interval_r_frames;
static PyObject *__pyx_n_s_test;
static PyObject *__pyx_n_s_tex;
static PyObject *__pyx_n_s_tex0;
static PyObject *__pyx_n_s_text_rect;
static PyObject *__pyx_n_s_texture_scaling;
static PyObject *__pyx_n_s_throw;
static PyObject *__pyx_n_s_time;
static PyObject *__pyx_n_s_transform;
static PyObject *__pyx_n_s_transient;
static PyObject *__pyx_n_s_translate_point;
static PyObject *__pyx_n_s_u_lod_bias;
static PyObject *__pyx_n_s_u_model_size;
static PyObject *__pyx_n_s_u_random;
static PyObject *__pyx_n_s_u_renpy_solid_color;
static PyObject *__pyx_n_s_u_time;
static PyObject *__pyx_n_s_u_transform;
static PyObject *__pyx_n_s_uguu;
static PyObject *__pyx_n_s_uguugl;
static PyObject *__pyx_n_s_uniforms;
static PyObject *__pyx_n_s_untranslate_point;
static PyObject *__pyx_n_s_update;
static PyObject *__pyx_n_s_upper;
static PyObject *__pyx_n_s_video;
static PyObject *__pyx_n_s_vsync;
static PyObject *__pyx_n_s_w;
static PyObject *__pyx_n_s_weakref;
static PyObject *__pyx_n_s_what;
static PyObject *__pyx_n_s_width;
static PyObject *__pyx_n_s_windows;
static PyObject *__pyx_n_s_write;
static PyObject *__pyx_n_s_x;
static PyObject *__pyx_n_s_y;
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw___init__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_2get_texture_size(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4select_physical_size(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_physical_size); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_6select_framerate(CYTHON_UNUSED struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_8select_gl_attributes(CYTHON_UNUSED struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_gles); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_10init(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_virtual_size); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_9on_resize_genexpr(PyObject *__pyx_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12on_resize(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_first); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14resize(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_16update(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_force); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18quit(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_20init_fbo(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_22quit_fbo(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_24can_block(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_26should_redraw(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_needs_redraw, PyObject *__pyx_v_first_pass, PyObject *__pyx_v_can_block); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_28mutated_surface(CYTHON_UNUSED struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_surf); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_30load_texture(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_surf, CYTHON_UNUSED PyObject *__pyx_v_transient, PyObject *__pyx_v_properties); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_32ready_one_texture(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_34solid_texture(CYTHON_UNUSED struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_w, PyObject *__pyx_v_h, PyObject *__pyx_v_color); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_36flip(CYTHON_UNUSED struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_38draw_screen(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_render_tree, CYTHON_UNUSED PyObject *__pyx_v_flip); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_40load_all_textures(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_what); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_42render_to_texture(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_what, CYTHON_UNUSED PyObject *__pyx_v_alpha, PyObject *__pyx_v_properties); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_44is_pixel_opaque(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_what, PyObject *__pyx_v_x, PyObject *__pyx_v_y); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_46translate_point(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_48untranslate_point(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_50mouse_event(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_ev); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_52get_mouse_pos(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_54set_mouse_pos(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_56screenshot(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_render_tree); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_58kill_textures(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_60event_peek_sleep(CYTHON_UNUSED struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_62get_physical_size(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4gles___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4gles_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_5angle___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_5angle_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4info___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4info_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4info_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_phys___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_phys_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fast_redraw_frames___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fast_redraw_frames_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11default_fbo___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11default_fbo_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11current_fbo___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11current_fbo_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_64__reduce_cython__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_66__setstate_cython__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static int __pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext___init__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self, struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_draw, PyObject *__pyx_v_width, PyObject *__pyx_v_height, PyObject *__pyx_v_debug); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_2merge_properties(CYTHON_UNUSED struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self, PyObject *__pyx_v_old, PyObject *__pyx_v_child); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_4draw_model(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self, PyObject *__pyx_v_model, struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_transform, struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *__pyx_v_clip_polygon, PyObject *__pyx_v_shaders, PyObject *__pyx_v_uniforms, PyObject *__pyx_v_properties); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_6draw_one(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self, PyObject *__pyx_v_what, struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_transform, struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *__pyx_v_clip_polygon, PyObject *__pyx_v_shaders, PyObject *__pyx_v_uniforms, PyObject *__pyx_v_properties); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_8draw(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self, PyObject *__pyx_v_what, struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_transform); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_10__reduce_cython__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_12__setstate_cython__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw___pyx_unpickle_GL2Draw(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_2__pyx_unpickle_GL2DrawingContext(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
static PyObject *__pyx_tp_new_5renpy_3gl2_7gl2draw_GL2Draw(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_5renpy_3gl2_7gl2draw_GL2DrawingContext(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static PyObject *__pyx_tp_new_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_items = {0, &__pyx_n_s_items, 0, 0, 0};
static __Pyx_CachedCFunction __pyx_umethod_PyDict_Type_update = {0, &__pyx_n_s_update, 0, 0, 0};
static PyObject *__pyx_float_1_0;
static PyObject *__pyx_float_2_0;
static PyObject *__pyx_float_255_0;
static PyObject *__pyx_float_neg_1_0;
static PyObject *__pyx_int_0;
static PyObject *__pyx_int_1;
static PyObject *__pyx_int_2;
static PyObject *__pyx_int_3;
static PyObject *__pyx_int_6;
static PyObject *__pyx_int_8;
static PyObject *__pyx_int_60;
static PyObject *__pyx_int_64;
static PyObject *__pyx_int_102;
static PyObject *__pyx_int_86400;
static PyObject *__pyx_int_18757834;
static PyObject *__pyx_int_208031144;
static PyObject *__pyx_k__7;
static PyObject *__pyx_k__12;
static PyObject *__pyx_tuple_;
static PyObject *__pyx_tuple__2;
static PyObject *__pyx_tuple__3;
static PyObject *__pyx_tuple__4;
static PyObject *__pyx_tuple__5;
static PyObject *__pyx_tuple__8;
static PyObject *__pyx_tuple__9;
static PyObject *__pyx_tuple__10;
static PyObject *__pyx_tuple__11;
static PyObject *__pyx_tuple__14;
static PyObject *__pyx_tuple__15;
static PyObject *__pyx_tuple__17;
static PyObject *__pyx_codeobj__16;
static PyObject *__pyx_codeobj__18;
/* Late includes */

/* "renpy/gl2/gl2draw.pyx":81
 * cdef class GL2Draw:
 * 
 *     def __init__(self, name):             # <<<<<<<<<<<<<<
 * 
 *         # Are we in gles mode?
 */

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_name = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
    PyObject* values[1] = {0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 81, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
    }
    __pyx_v_name = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 81, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw___init__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), __pyx_v_name);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw___init__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_name) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  float __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "renpy/gl2/gl2draw.pyx":84
 * 
 *         # Are we in gles mode?
 *         self.gles = (name == "gles2") or (name == "angle2")             # <<<<<<<<<<<<<<
 * 
 *         # How about angle mode?
 */
  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_gles2, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 84, __pyx_L1_error)
  if (!__pyx_t_2) {
  } else {
    __pyx_t_1 = __pyx_t_2;
    goto __pyx_L3_bool_binop_done;
  }
  __pyx_t_2 = (__Pyx_PyString_Equals(__pyx_v_name, __pyx_n_s_angle2, Py_EQ)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 84, __pyx_L1_error)
  __pyx_t_1 = __pyx_t_2;
  __pyx_L3_bool_binop_done:;
  __pyx_v_self->gles = __pyx_t_1;

  /* "renpy/gl2/gl2draw.pyx":87
 * 
 *         # How about angle mode?
 *         self.angle = (name == "angle2")             # <<<<<<<<<<<<<<
 * 
 *         # The screen.
 */
  __pyx_t_3 = PyObject_RichCompare(__pyx_v_name, __pyx_n_s_angle2, Py_EQ); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 87, __pyx_L1_error)
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 87, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_self->angle = __pyx_t_1;

  /* "renpy/gl2/gl2draw.pyx":90
 * 
 *         # The screen.
 *         self.window = None             # <<<<<<<<<<<<<<
 * 
 *         # The virtual size of the screen, as requested by the game.
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->window);
  __Pyx_DECREF(__pyx_v_self->window);
  __pyx_v_self->window = Py_None;

  /* "renpy/gl2/gl2draw.pyx":93
 * 
 *         # The virtual size of the screen, as requested by the game.
 *         self.virtual_size = None             # <<<<<<<<<<<<<<
 * 
 *         # The physical size of the window we got.
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->virtual_size);
  __Pyx_DECREF(__pyx_v_self->virtual_size);
  __pyx_v_self->virtual_size = ((PyObject*)Py_None);

  /* "renpy/gl2/gl2draw.pyx":96
 * 
 *         # The physical size of the window we got.
 *         self.physical_size = None             # <<<<<<<<<<<<<<
 * 
 *         # The time of the last redraw.
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->physical_size);
  __Pyx_DECREF(__pyx_v_self->physical_size);
  __pyx_v_self->physical_size = ((PyObject*)Py_None);

  /* "renpy/gl2/gl2draw.pyx":99
 * 
 *         # The time of the last redraw.
 *         self.last_redraw_time = 0             # <<<<<<<<<<<<<<
 * 
 *         # The time between redraws.
 */
  __pyx_v_self->last_redraw_time = 0.0;

  /* "renpy/gl2/gl2draw.pyx":102
 * 
 *         # The time between redraws.
 *         self.redraw_period = .2             # <<<<<<<<<<<<<<
 * 
 *         # Info.
 */
  __pyx_v_self->redraw_period = .2;

  /* "renpy/gl2/gl2draw.pyx":105
 * 
 *         # Info.
 *         self.info = { "resizable" : True, "additive" : True, "renderer" : name, "models" : True }             # <<<<<<<<<<<<<<
 * 
 *         # We don't use a fullscreen surface, so this needs to be set
 */
  __pyx_t_3 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 105, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_resizable, Py_True) < 0) __PYX_ERR(0, 105, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_additive, Py_True) < 0) __PYX_ERR(0, 105, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_renderer, __pyx_v_name) < 0) __PYX_ERR(0, 105, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_3, __pyx_n_s_models, Py_True) < 0) __PYX_ERR(0, 105, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_v_self->info);
  __Pyx_DECREF(__pyx_v_self->info);
  __pyx_v_self->info = ((PyObject*)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":109
 *         # We don't use a fullscreen surface, so this needs to be set
 *         # to None at all times.
 *         self.fullscreen_surface = None             # <<<<<<<<<<<<<<
 * 
 *         # The display info, from pygame.
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->fullscreen_surface);
  __Pyx_DECREF(__pyx_v_self->fullscreen_surface);
  __pyx_v_self->fullscreen_surface = Py_None;

  /* "renpy/gl2/gl2draw.pyx":112
 * 
 *         # The display info, from pygame.
 *         self.display_info = None             # <<<<<<<<<<<<<<
 * 
 *         # The DPI scale factor.
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->display_info);
  __Pyx_DECREF(__pyx_v_self->display_info);
  __pyx_v_self->display_info = Py_None;

  /* "renpy/gl2/gl2draw.pyx":115
 * 
 *         # The DPI scale factor.
 *         self.dpi_scale = renpy.display.interface.dpi_scale             # <<<<<<<<<<<<<<
 * 
 *         # The number of frames to draw fast if the screen needs to be
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_display); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_interface); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_dpi_scale); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __pyx_PyFloat_AsFloat(__pyx_t_4); if (unlikely((__pyx_t_5 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 115, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_self->dpi_scale = __pyx_t_5;

  /* "renpy/gl2/gl2draw.pyx":119
 *         # The number of frames to draw fast if the screen needs to be
 *         # updated.
 *         self.fast_redraw_frames = 0             # <<<<<<<<<<<<<<
 * 
 *         # The shader cache,
 */
  __pyx_v_self->fast_redraw_frames = 0;

  /* "renpy/gl2/gl2draw.pyx":122
 * 
 *         # The shader cache,
 *         self.shader_cache = None             # <<<<<<<<<<<<<<
 * 
 *     def get_texture_size(self):
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->shader_cache);
  __Pyx_DECREF(__pyx_v_self->shader_cache);
  __pyx_v_self->shader_cache = Py_None;

  /* "renpy/gl2/gl2draw.pyx":81
 * cdef class GL2Draw:
 * 
 *     def __init__(self, name):             # <<<<<<<<<<<<<<
 * 
 *         # Are we in gles mode?
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":124
 *         self.shader_cache = None
 * 
 *     def get_texture_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Returns the amount of memory locked up in textures.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_3get_texture_size(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_2get_texture_size[] = "\n        Returns the amount of memory locked up in textures.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_3get_texture_size(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_texture_size (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_2get_texture_size(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_2get_texture_size(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_texture_size", 0);

  /* "renpy/gl2/gl2draw.pyx":129
 *         """
 * 
 *         if self.texture_loader is None:             # <<<<<<<<<<<<<<
 *             return 0, 0
 * 
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_self->texture_loader) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":130
 * 
 *         if self.texture_loader is None:
 *             return 0, 0             # <<<<<<<<<<<<<<
 * 
 *         return self.texture_loader.get_texture_size()
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_tuple_);
    __pyx_r = __pyx_tuple_;
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":129
 *         """
 * 
 *         if self.texture_loader is None:             # <<<<<<<<<<<<<<
 *             return 0, 0
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":132
 *             return 0, 0
 * 
 *         return self.texture_loader.get_texture_size()             # <<<<<<<<<<<<<<
 * 
 *     def select_physical_size(self, physical_size):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->texture_loader), __pyx_n_s_get_texture_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 132, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":124
 *         self.shader_cache = None
 * 
 *     def get_texture_size(self):             # <<<<<<<<<<<<<<
 *         """
 *         Returns the amount of memory locked up in textures.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.get_texture_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":134
 *         return self.texture_loader.get_texture_size()
 * 
 *     def select_physical_size(self, physical_size):             # <<<<<<<<<<<<<<
 *         """
 *         *Internal* Determines the 'best' physical size to use, and returns
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_5select_physical_size(PyObject *__pyx_v_self, PyObject *__pyx_v_physical_size); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_4select_physical_size[] = "\n        *Internal* Determines the 'best' physical size to use, and returns\n        it.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_5select_physical_size(PyObject *__pyx_v_self, PyObject *__pyx_v_physical_size) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("select_physical_size (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4select_physical_size(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_physical_size));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4select_physical_size(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_physical_size) {
  PyObject *__pyx_v_old_surface = NULL;
  PyObject *__pyx_v_maximized = NULL;
  PyObject *__pyx_v_vwidth = NULL;
  PyObject *__pyx_v_vheight = NULL;
  PyObject *__pyx_v_virtual_ar = NULL;
  PyObject *__pyx_v_pwidth = NULL;
  PyObject *__pyx_v_pheight = NULL;
  PyObject *__pyx_v_info = NULL;
  PyObject *__pyx_v_visible_w = NULL;
  PyObject *__pyx_v_visible_h = NULL;
  PyObject *__pyx_v_bounds = NULL;
  PyObject *__pyx_v_head_w = NULL;
  PyObject *__pyx_v_head_h = NULL;
  PyObject *__pyx_v_bound_w = NULL;
  PyObject *__pyx_v_bound_h = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  long __pyx_t_11;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("select_physical_size", 0);

  /* "renpy/gl2/gl2draw.pyx":141
 * 
 *         # Are we maximized?
 *         old_surface = pygame.display.get_surface()             # <<<<<<<<<<<<<<
 *         if old_surface is not None:
 *             maximized = old_surface.get_flags() & pygame.WINDOW_MAXIMIZED
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get_surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 141, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_old_surface = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":142
 *         # Are we maximized?
 *         old_surface = pygame.display.get_surface()
 *         if old_surface is not None:             # <<<<<<<<<<<<<<
 *             maximized = old_surface.get_flags() & pygame.WINDOW_MAXIMIZED
 *         else:
 */
  __pyx_t_4 = (__pyx_v_old_surface != Py_None);
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "renpy/gl2/gl2draw.pyx":143
 *         old_surface = pygame.display.get_surface()
 *         if old_surface is not None:
 *             maximized = old_surface.get_flags() & pygame.WINDOW_MAXIMIZED             # <<<<<<<<<<<<<<
 *         else:
 *             maximized = False
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_old_surface, __pyx_n_s_get_flags); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 143, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_WINDOW_MAXIMIZED); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 143, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = PyNumber_And(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 143, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_maximized = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "renpy/gl2/gl2draw.pyx":142
 *         # Are we maximized?
 *         old_surface = pygame.display.get_surface()
 *         if old_surface is not None:             # <<<<<<<<<<<<<<
 *             maximized = old_surface.get_flags() & pygame.WINDOW_MAXIMIZED
 *         else:
 */
    goto __pyx_L3;
  }

  /* "renpy/gl2/gl2draw.pyx":145
 *             maximized = old_surface.get_flags() & pygame.WINDOW_MAXIMIZED
 *         else:
 *             maximized = False             # <<<<<<<<<<<<<<
 * 
 *         # Information about the virtual size.
 */
  /*else*/ {
    __Pyx_INCREF(Py_False);
    __pyx_v_maximized = Py_False;
  }
  __pyx_L3:;

  /* "renpy/gl2/gl2draw.pyx":148
 * 
 *         # Information about the virtual size.
 *         vwidth, vheight = self.virtual_size             # <<<<<<<<<<<<<<
 *         virtual_ar = 1.0 * vwidth / vheight
 * 
 */
  __pyx_t_2 = __pyx_v_self->virtual_size;
  __Pyx_INCREF(__pyx_t_2);
  if (likely(__pyx_t_2 != Py_None)) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 148, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_1);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 148, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 148, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 148, __pyx_L1_error)
  }
  __pyx_v_vwidth = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_vheight = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":149
 *         # Information about the virtual size.
 *         vwidth, vheight = self.virtual_size
 *         virtual_ar = 1.0 * vwidth / vheight             # <<<<<<<<<<<<<<
 * 
 *         # The requested size.
 */
  __pyx_t_2 = PyNumber_Multiply(__pyx_float_1_0, __pyx_v_vwidth); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_v_vheight); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 149, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_virtual_ar = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":152
 * 
 *         # The requested size.
 *         pwidth, pheight = physical_size             # <<<<<<<<<<<<<<
 * 
 *         if pwidth is None:
 */
  if ((likely(PyTuple_CheckExact(__pyx_v_physical_size))) || (PyList_CheckExact(__pyx_v_physical_size))) {
    PyObject* sequence = __pyx_v_physical_size;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 152, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 152, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 152, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
  } else {
    Py_ssize_t index = -1;
    __pyx_t_3 = PyObject_GetIter(__pyx_v_physical_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 152, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_6(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L4_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_2 = __pyx_t_6(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L4_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_3), 2) < 0) __PYX_ERR(0, 152, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L5_unpacking_done;
    __pyx_L4_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 152, __pyx_L1_error)
    __pyx_L5_unpacking_done:;
  }
  __pyx_v_pwidth = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_pheight = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":154
 *         pwidth, pheight = physical_size
 * 
 *         if pwidth is None:             # <<<<<<<<<<<<<<
 *             pwidth = vwidth
 *             pheight = vheight
 */
  __pyx_t_5 = (__pyx_v_pwidth == Py_None);
  __pyx_t_4 = (__pyx_t_5 != 0);
  if (__pyx_t_4) {

    /* "renpy/gl2/gl2draw.pyx":155
 * 
 *         if pwidth is None:
 *             pwidth = vwidth             # <<<<<<<<<<<<<<
 *             pheight = vheight
 * 
 */
    __Pyx_INCREF(__pyx_v_vwidth);
    __Pyx_DECREF_SET(__pyx_v_pwidth, __pyx_v_vwidth);

    /* "renpy/gl2/gl2draw.pyx":156
 *         if pwidth is None:
 *             pwidth = vwidth
 *             pheight = vheight             # <<<<<<<<<<<<<<
 * 
 *         # If a DPI scale is present, take it into account.
 */
    __Pyx_INCREF(__pyx_v_vheight);
    __Pyx_DECREF_SET(__pyx_v_pheight, __pyx_v_vheight);

    /* "renpy/gl2/gl2draw.pyx":154
 *         pwidth, pheight = physical_size
 * 
 *         if pwidth is None:             # <<<<<<<<<<<<<<
 *             pwidth = vwidth
 *             pheight = vheight
 */
  }

  /* "renpy/gl2/gl2draw.pyx":159
 * 
 *         # If a DPI scale is present, take it into account.
 *         pwidth *= self.dpi_scale             # <<<<<<<<<<<<<<
 *         pheight *= self.dpi_scale
 * 
 */
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->dpi_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyNumber_InPlaceMultiply(__pyx_v_pwidth, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 159, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_pwidth, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":160
 *         # If a DPI scale is present, take it into account.
 *         pwidth *= self.dpi_scale
 *         pheight *= self.dpi_scale             # <<<<<<<<<<<<<<
 * 
 *         # Determine the visible area of the screen.
 */
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->dpi_scale); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyNumber_InPlaceMultiply(__pyx_v_pheight, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF_SET(__pyx_v_pheight, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":163
 * 
 *         # Determine the visible area of the screen.
 *         info = renpy.display.get_info()             # <<<<<<<<<<<<<<
 * 
 *         visible_w = info.current_w
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_info = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":165
 *         info = renpy.display.get_info()
 * 
 *         visible_w = info.current_w             # <<<<<<<<<<<<<<
 *         visible_h = info.current_h
 * 
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_n_s_current_w); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 165, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_visible_w = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":166
 * 
 *         visible_w = info.current_w
 *         visible_h = info.current_h             # <<<<<<<<<<<<<<
 * 
 *         if renpy.windows and renpy.windows <= (6, 1):
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_n_s_current_h); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 166, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_visible_h = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":168
 *         visible_h = info.current_h
 * 
 *         if renpy.windows and renpy.windows <= (6, 1):             # <<<<<<<<<<<<<<
 *             visible_h -= 102
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_windows); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_5) {
  } else {
    __pyx_t_4 = __pyx_t_5;
    goto __pyx_L8_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_windows); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_tuple__2, Py_LE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __pyx_t_5;
  __pyx_L8_bool_binop_done:;
  if (__pyx_t_4) {

    /* "renpy/gl2/gl2draw.pyx":169
 * 
 *         if renpy.windows and renpy.windows <= (6, 1):
 *             visible_h -= 102             # <<<<<<<<<<<<<<
 * 
 *         # Determine the visible area of the current head.
 */
    __pyx_t_1 = __Pyx_PyInt_SubtractObjC(__pyx_v_visible_h, __pyx_int_102, 0x66, 1, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 169, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_visible_h, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":168
 *         visible_h = info.current_h
 * 
 *         if renpy.windows and renpy.windows <= (6, 1):             # <<<<<<<<<<<<<<
 *             visible_h -= 102
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":172
 * 
 *         # Determine the visible area of the current head.
 *         bounds = pygame.display.get_display_bounds(0)             # <<<<<<<<<<<<<<
 * 
 *         renpy.display.log.write("primary display bounds: %r", bounds)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get_display_bounds); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_3, __pyx_int_0) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_int_0);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 172, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_bounds = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":174
 *         bounds = pygame.display.get_display_bounds(0)
 * 
 *         renpy.display.log.write("primary display bounds: %r", bounds)             # <<<<<<<<<<<<<<
 * 
 *         head_w = bounds[2] - 102
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_s_primary_display_bounds_r, __pyx_v_bounds};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_s_primary_display_bounds_r, __pyx_v_bounds};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 174, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_s_primary_display_bounds_r);
    __Pyx_GIVEREF(__pyx_kp_s_primary_display_bounds_r);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_kp_s_primary_display_bounds_r);
    __Pyx_INCREF(__pyx_v_bounds);
    __Pyx_GIVEREF(__pyx_v_bounds);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_v_bounds);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 174, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":176
 *         renpy.display.log.write("primary display bounds: %r", bounds)
 * 
 *         head_w = bounds[2] - 102             # <<<<<<<<<<<<<<
 *         head_h = bounds[3] - 102
 * 
 */
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_bounds, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_SubtractObjC(__pyx_t_1, __pyx_int_102, 0x66, 0, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 176, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_head_w = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":177
 * 
 *         head_w = bounds[2] - 102
 *         head_h = bounds[3] - 102             # <<<<<<<<<<<<<<
 * 
 *         # Figure out the default window size.
 */
  __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_bounds, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyInt_SubtractObjC(__pyx_t_3, __pyx_int_102, 0x66, 0, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 177, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_head_h = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":180
 * 
 *         # Figure out the default window size.
 *         bound_w = min(visible_w, head_w)             # <<<<<<<<<<<<<<
 *         bound_h = min(visible_h, head_h)
 * 
 */
  __Pyx_INCREF(__pyx_v_head_w);
  __pyx_t_1 = __pyx_v_head_w;
  __Pyx_INCREF(__pyx_v_visible_w);
  __pyx_t_3 = __pyx_v_visible_w;
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 180, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 180, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_4) {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_8 = __pyx_t_1;
  } else {
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_8 = __pyx_t_3;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_8;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_v_bound_w = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":181
 *         # Figure out the default window size.
 *         bound_w = min(visible_w, head_w)
 *         bound_h = min(visible_h, head_h)             # <<<<<<<<<<<<<<
 * 
 *         self.info["max_window_size"] = (
 */
  __Pyx_INCREF(__pyx_v_head_h);
  __pyx_t_1 = __pyx_v_head_h;
  __Pyx_INCREF(__pyx_v_visible_h);
  __pyx_t_8 = __pyx_v_visible_h;
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_8, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 181, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 181, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_4) {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = __pyx_t_1;
  } else {
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_3 = __pyx_t_8;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_bound_h = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":184
 * 
 *         self.info["max_window_size"] = (
 *             int(round(min(bound_h * virtual_ar, bound_w))),             # <<<<<<<<<<<<<<
 *             int(round(min(bound_w / virtual_ar, bound_h))),
 *             )
 */
  __Pyx_INCREF(__pyx_v_bound_w);
  __pyx_t_1 = __pyx_v_bound_w;
  __pyx_t_3 = PyNumber_Multiply(__pyx_v_bound_h, __pyx_v_virtual_ar); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 184, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 184, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_4) {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_8 = __pyx_t_1;
  } else {
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_8 = __pyx_t_3;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_round, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":185
 *         self.info["max_window_size"] = (
 *             int(round(min(bound_h * virtual_ar, bound_w))),
 *             int(round(min(bound_w / virtual_ar, bound_h))),             # <<<<<<<<<<<<<<
 *             )
 * 
 */
  __Pyx_INCREF(__pyx_v_bound_h);
  __pyx_t_1 = __pyx_v_bound_h;
  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_v_bound_w, __pyx_v_virtual_ar); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_9 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 185, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 185, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__pyx_t_4) {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_t_1;
  } else {
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_t_3;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_round, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":184
 * 
 *         self.info["max_window_size"] = (
 *             int(round(min(bound_h * virtual_ar, bound_w))),             # <<<<<<<<<<<<<<
 *             int(round(min(bound_w / virtual_ar, bound_h))),
 *             )
 */
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 184, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_2);
  __pyx_t_8 = 0;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":183
 *         bound_h = min(visible_h, head_h)
 * 
 *         self.info["max_window_size"] = (             # <<<<<<<<<<<<<<
 *             int(round(min(bound_h * virtual_ar, bound_w))),
 *             int(round(min(bound_w / virtual_ar, bound_h))),
 */
  if (unlikely(__pyx_v_self->info == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 183, __pyx_L1_error)
  }
  if (unlikely(PyDict_SetItem(__pyx_v_self->info, __pyx_n_s_max_window_size, __pyx_t_1) < 0)) __PYX_ERR(0, 183, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":188
 *             )
 * 
 *         if (not renpy.mobile) and (not maximized):             # <<<<<<<<<<<<<<
 * 
 *             # Limit to the visible area
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_mobile); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 188, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_10 = ((!__pyx_t_5) != 0);
  if (__pyx_t_10) {
  } else {
    __pyx_t_4 = __pyx_t_10;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_10 = __Pyx_PyObject_IsTrue(__pyx_v_maximized); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 188, __pyx_L1_error)
  __pyx_t_5 = ((!__pyx_t_10) != 0);
  __pyx_t_4 = __pyx_t_5;
  __pyx_L11_bool_binop_done:;
  if (__pyx_t_4) {

    /* "renpy/gl2/gl2draw.pyx":191
 * 
 *             # Limit to the visible area
 *             pwidth = min(visible_w, pwidth)             # <<<<<<<<<<<<<<
 *             pheight = min(visible_h, pheight)
 * 
 */
    __Pyx_INCREF(__pyx_v_pwidth);
    __pyx_t_2 = __pyx_v_pwidth;
    __Pyx_INCREF(__pyx_v_visible_w);
    __pyx_t_1 = __pyx_v_visible_w;
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 191, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 191, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {
      __Pyx_INCREF(__pyx_t_2);
      __pyx_t_8 = __pyx_t_2;
    } else {
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_8 = __pyx_t_1;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __pyx_t_8;
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF_SET(__pyx_v_pwidth, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "renpy/gl2/gl2draw.pyx":192
 *             # Limit to the visible area
 *             pwidth = min(visible_w, pwidth)
 *             pheight = min(visible_h, pheight)             # <<<<<<<<<<<<<<
 * 
 *             pwidth = min(pwidth, head_w)
 */
    __Pyx_INCREF(__pyx_v_pheight);
    __pyx_t_2 = __pyx_v_pheight;
    __Pyx_INCREF(__pyx_v_visible_h);
    __pyx_t_8 = __pyx_v_visible_h;
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_8, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 192, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 192, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {
      __Pyx_INCREF(__pyx_t_2);
      __pyx_t_1 = __pyx_t_2;
    } else {
      __Pyx_INCREF(__pyx_t_8);
      __pyx_t_1 = __pyx_t_8;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __pyx_t_1;
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_pheight, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "renpy/gl2/gl2draw.pyx":194
 *             pheight = min(visible_h, pheight)
 * 
 *             pwidth = min(pwidth, head_w)             # <<<<<<<<<<<<<<
 *             pheight = min(pheight, head_h)
 * 
 */
    __Pyx_INCREF(__pyx_v_head_w);
    __pyx_t_2 = __pyx_v_head_w;
    __Pyx_INCREF(__pyx_v_pwidth);
    __pyx_t_1 = __pyx_v_pwidth;
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 194, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 194, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {
      __Pyx_INCREF(__pyx_t_2);
      __pyx_t_8 = __pyx_t_2;
    } else {
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_8 = __pyx_t_1;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __pyx_t_8;
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF_SET(__pyx_v_pwidth, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "renpy/gl2/gl2draw.pyx":195
 * 
 *             pwidth = min(pwidth, head_w)
 *             pheight = min(pheight, head_h)             # <<<<<<<<<<<<<<
 * 
 *             # Has to be a one-liner as the two values depend on each other.
 */
    __Pyx_INCREF(__pyx_v_head_h);
    __pyx_t_2 = __pyx_v_head_h;
    __Pyx_INCREF(__pyx_v_pheight);
    __pyx_t_8 = __pyx_v_pheight;
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_8, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 195, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 195, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {
      __Pyx_INCREF(__pyx_t_2);
      __pyx_t_1 = __pyx_t_2;
    } else {
      __Pyx_INCREF(__pyx_t_8);
      __pyx_t_1 = __pyx_t_8;
    }
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __pyx_t_1;
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_pheight, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "renpy/gl2/gl2draw.pyx":198
 * 
 *             # Has to be a one-liner as the two values depend on each other.
 *             pwidth, pheight = min(pheight * virtual_ar, pwidth), min(pwidth / virtual_ar, pheight)             # <<<<<<<<<<<<<<
 * 
 *         # Limit to integers.
 */
    __Pyx_INCREF(__pyx_v_pwidth);
    __pyx_t_2 = __pyx_v_pwidth;
    __pyx_t_1 = PyNumber_Multiply(__pyx_v_pheight, __pyx_v_virtual_ar); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 198, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 198, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_4) {
      __Pyx_INCREF(__pyx_t_2);
      __pyx_t_8 = __pyx_t_2;
    } else {
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_8 = __pyx_t_1;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __pyx_t_8;
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_INCREF(__pyx_v_pheight);
    __pyx_t_8 = __pyx_v_pheight;
    __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_v_pwidth, __pyx_v_virtual_ar); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 198, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = PyObject_RichCompare(__pyx_t_8, __pyx_t_1, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 198, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 198, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    if (__pyx_t_4) {
      __Pyx_INCREF(__pyx_t_8);
      __pyx_t_3 = __pyx_t_8;
    } else {
      __Pyx_INCREF(__pyx_t_1);
      __pyx_t_3 = __pyx_t_1;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __pyx_t_3;
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_pwidth, __pyx_t_2);
    __pyx_t_2 = 0;
    __Pyx_DECREF_SET(__pyx_v_pheight, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "renpy/gl2/gl2draw.pyx":188
 *             )
 * 
 *         if (not renpy.mobile) and (not maximized):             # <<<<<<<<<<<<<<
 * 
 *             # Limit to the visible area
 */
  }

  /* "renpy/gl2/gl2draw.pyx":201
 * 
 *         # Limit to integers.
 *         pwidth = int(round(pwidth))             # <<<<<<<<<<<<<<
 *         pheight = int(round(pheight))
 * 
 */
  __pyx_t_8 = __Pyx_PyObject_CallOneArg(__pyx_builtin_round, __pyx_v_pwidth); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = __Pyx_PyNumber_Int(__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 201, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF_SET(__pyx_v_pwidth, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":202
 *         # Limit to integers.
 *         pwidth = int(round(pwidth))
 *         pheight = int(round(pheight))             # <<<<<<<<<<<<<<
 * 
 *         # Keep a minimum size.
 */
  __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_round, __pyx_v_pheight); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 202, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_pheight, __pyx_t_8);
  __pyx_t_8 = 0;

  /* "renpy/gl2/gl2draw.pyx":205
 * 
 *         # Keep a minimum size.
 *         pwidth = max(pwidth, 256)             # <<<<<<<<<<<<<<
 *         pheight = max(pheight, 256)
 * 
 */
  __pyx_t_11 = 0x100;
  __Pyx_INCREF(__pyx_v_pwidth);
  __pyx_t_8 = __pyx_v_pwidth;
  __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 205, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyObject_RichCompare(__pyx_t_3, __pyx_t_8, Py_GT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 205, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_4) {
    __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 205, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_t_1;
    __pyx_t_1 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_2 = __pyx_t_8;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __pyx_t_2;
  __Pyx_INCREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_pwidth, __pyx_t_8);
  __pyx_t_8 = 0;

  /* "renpy/gl2/gl2draw.pyx":206
 *         # Keep a minimum size.
 *         pwidth = max(pwidth, 256)
 *         pheight = max(pheight, 256)             # <<<<<<<<<<<<<<
 * 
 *         return pwidth, pheight
 */
  __pyx_t_11 = 0x100;
  __Pyx_INCREF(__pyx_v_pheight);
  __pyx_t_8 = __pyx_v_pheight;
  __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_t_11); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 206, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_8, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 206, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 206, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_4) {
    __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 206, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = __pyx_t_3;
    __pyx_t_3 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_2 = __pyx_t_8;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __pyx_t_2;
  __Pyx_INCREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_pheight, __pyx_t_8);
  __pyx_t_8 = 0;

  /* "renpy/gl2/gl2draw.pyx":208
 *         pheight = max(pheight, 256)
 * 
 *         return pwidth, pheight             # <<<<<<<<<<<<<<
 * 
 *     def select_framerate(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 208, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_INCREF(__pyx_v_pwidth);
  __Pyx_GIVEREF(__pyx_v_pwidth);
  PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_pwidth);
  __Pyx_INCREF(__pyx_v_pheight);
  __Pyx_GIVEREF(__pyx_v_pheight);
  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_pheight);
  __pyx_r = __pyx_t_8;
  __pyx_t_8 = 0;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":134
 *         return self.texture_loader.get_texture_size()
 * 
 *     def select_physical_size(self, physical_size):             # <<<<<<<<<<<<<<
 *         """
 *         *Internal* Determines the 'best' physical size to use, and returns
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.select_physical_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_old_surface);
  __Pyx_XDECREF(__pyx_v_maximized);
  __Pyx_XDECREF(__pyx_v_vwidth);
  __Pyx_XDECREF(__pyx_v_vheight);
  __Pyx_XDECREF(__pyx_v_virtual_ar);
  __Pyx_XDECREF(__pyx_v_pwidth);
  __Pyx_XDECREF(__pyx_v_pheight);
  __Pyx_XDECREF(__pyx_v_info);
  __Pyx_XDECREF(__pyx_v_visible_w);
  __Pyx_XDECREF(__pyx_v_visible_h);
  __Pyx_XDECREF(__pyx_v_bounds);
  __Pyx_XDECREF(__pyx_v_head_w);
  __Pyx_XDECREF(__pyx_v_head_h);
  __Pyx_XDECREF(__pyx_v_bound_w);
  __Pyx_XDECREF(__pyx_v_bound_h);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":210
 *         return pwidth, pheight
 * 
 *     def select_framerate(self):             # <<<<<<<<<<<<<<
 *         """
 *         *Internal*
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_7select_framerate(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_6select_framerate[] = "\n        *Internal*\n        This selects the framerate to use, the GL swap interval, and various\n        other framerate-related intervals and parameters.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_7select_framerate(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("select_framerate (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_6select_framerate(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_6select_framerate(CYTHON_UNUSED struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_v_info = NULL;
  PyObject *__pyx_v_target_framerate = NULL;
  PyObject *__pyx_v_refresh_rate = NULL;
  PyObject *__pyx_v_sync_frames = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("select_framerate", 0);

  /* "renpy/gl2/gl2draw.pyx":219
 *         global vsync
 * 
 *         info = renpy.display.get_info()             # <<<<<<<<<<<<<<
 * 
 *         target_framerate = renpy.game.preferences.gl_framerate
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get_info); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 219, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_info = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":221
 *         info = renpy.display.get_info()
 * 
 *         target_framerate = renpy.game.preferences.gl_framerate             # <<<<<<<<<<<<<<
 *         refresh_rate = info.refresh_rate
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_game); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_preferences); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_gl_framerate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 221, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_target_framerate = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":222
 * 
 *         target_framerate = renpy.game.preferences.gl_framerate
 *         refresh_rate = info.refresh_rate             # <<<<<<<<<<<<<<
 * 
 *         if not refresh_rate:
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_info, __pyx_n_s_refresh_rate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 222, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_v_refresh_rate = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":224
 *         refresh_rate = info.refresh_rate
 * 
 *         if not refresh_rate:             # <<<<<<<<<<<<<<
 *             refresh_rate = 60
 * 
 */
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_refresh_rate); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 224, __pyx_L1_error)
  __pyx_t_5 = ((!__pyx_t_4) != 0);
  if (__pyx_t_5) {

    /* "renpy/gl2/gl2draw.pyx":225
 * 
 *         if not refresh_rate:
 *             refresh_rate = 60             # <<<<<<<<<<<<<<
 * 
 *         if target_framerate is None:
 */
    __Pyx_INCREF(__pyx_int_60);
    __Pyx_DECREF_SET(__pyx_v_refresh_rate, __pyx_int_60);

    /* "renpy/gl2/gl2draw.pyx":224
 *         refresh_rate = info.refresh_rate
 * 
 *         if not refresh_rate:             # <<<<<<<<<<<<<<
 *             refresh_rate = 60
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":227
 *             refresh_rate = 60
 * 
 *         if target_framerate is None:             # <<<<<<<<<<<<<<
 *             sync_frames = 1
 *         else:
 */
  __pyx_t_5 = (__pyx_v_target_framerate == Py_None);
  __pyx_t_4 = (__pyx_t_5 != 0);
  if (__pyx_t_4) {

    /* "renpy/gl2/gl2draw.pyx":228
 * 
 *         if target_framerate is None:
 *             sync_frames = 1             # <<<<<<<<<<<<<<
 *         else:
 *             sync_frames = int(round(1.0 * refresh_rate) / target_framerate)
 */
    __Pyx_INCREF(__pyx_int_1);
    __pyx_v_sync_frames = __pyx_int_1;

    /* "renpy/gl2/gl2draw.pyx":227
 *             refresh_rate = 60
 * 
 *         if target_framerate is None:             # <<<<<<<<<<<<<<
 *             sync_frames = 1
 *         else:
 */
    goto __pyx_L4;
  }

  /* "renpy/gl2/gl2draw.pyx":230
 *             sync_frames = 1
 *         else:
 *             sync_frames = int(round(1.0 * refresh_rate) / target_framerate)             # <<<<<<<<<<<<<<
 *             if sync_frames < 1:
 *                 sync_frames = 1
 */
  /*else*/ {
    __pyx_t_2 = PyNumber_Multiply(__pyx_float_1_0, __pyx_v_refresh_rate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_builtin_round, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_v_target_framerate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 230, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_sync_frames = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":231
 *         else:
 *             sync_frames = int(round(1.0 * refresh_rate) / target_framerate)
 *             if sync_frames < 1:             # <<<<<<<<<<<<<<
 *                 sync_frames = 1
 * 
 */
    __pyx_t_1 = PyObject_RichCompare(__pyx_v_sync_frames, __pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 231, __pyx_L1_error)
    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 231, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (__pyx_t_4) {

      /* "renpy/gl2/gl2draw.pyx":232
 *             sync_frames = int(round(1.0 * refresh_rate) / target_framerate)
 *             if sync_frames < 1:
 *                 sync_frames = 1             # <<<<<<<<<<<<<<
 * 
 *         if renpy.game.preferences.gl_tearing:
 */
      __Pyx_INCREF(__pyx_int_1);
      __Pyx_DECREF_SET(__pyx_v_sync_frames, __pyx_int_1);

      /* "renpy/gl2/gl2draw.pyx":231
 *         else:
 *             sync_frames = int(round(1.0 * refresh_rate) / target_framerate)
 *             if sync_frames < 1:             # <<<<<<<<<<<<<<
 *                 sync_frames = 1
 * 
 */
    }
  }
  __pyx_L4:;

  /* "renpy/gl2/gl2draw.pyx":234
 *                 sync_frames = 1
 * 
 *         if renpy.game.preferences.gl_tearing:             # <<<<<<<<<<<<<<
 *             sync_frames = -sync_frames
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_game); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_preferences); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_gl_tearing); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 234, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 234, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_4) {

    /* "renpy/gl2/gl2draw.pyx":235
 * 
 *         if renpy.game.preferences.gl_tearing:
 *             sync_frames = -sync_frames             # <<<<<<<<<<<<<<
 * 
 *         vsync = int(os.environ.get("RENPY_GL_VSYNC", sync_frames))
 */
    __pyx_t_2 = PyNumber_Negative(__pyx_v_sync_frames); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 235, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF_SET(__pyx_v_sync_frames, __pyx_t_2);
    __pyx_t_2 = 0;

    /* "renpy/gl2/gl2draw.pyx":234
 *                 sync_frames = 1
 * 
 *         if renpy.game.preferences.gl_tearing:             # <<<<<<<<<<<<<<
 *             sync_frames = -sync_frames
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":237
 *             sync_frames = -sync_frames
 * 
 *         vsync = int(os.environ.get("RENPY_GL_VSYNC", sync_frames))             # <<<<<<<<<<<<<<
 * 
 *         renpy.display.interface.frame_duration = 1.0 * abs(vsync) / refresh_rate
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_os); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_environ); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_n_s_RENPY_GL_VSYNC, __pyx_v_sync_frames};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 237, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_n_s_RENPY_GL_VSYNC, __pyx_v_sync_frames};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 237, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 237, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_n_s_RENPY_GL_VSYNC);
    __Pyx_GIVEREF(__pyx_n_s_RENPY_GL_VSYNC);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_n_s_RENPY_GL_VSYNC);
    __Pyx_INCREF(__pyx_v_sync_frames);
    __Pyx_GIVEREF(__pyx_v_sync_frames);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_sync_frames);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 237, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 237, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_vsync, __pyx_t_1) < 0) __PYX_ERR(0, 237, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":239
 *         vsync = int(os.environ.get("RENPY_GL_VSYNC", sync_frames))
 * 
 *         renpy.display.interface.frame_duration = 1.0 * abs(vsync) / refresh_rate             # <<<<<<<<<<<<<<
 * 
 *         renpy.display.log.write("swap interval: %r frames", vsync)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_vsync); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyNumber_Absolute(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyNumber_Multiply(__pyx_float_1_0, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_v_refresh_rate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_interface); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 239, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_t_1, __pyx_n_s_frame_duration, __pyx_t_2) < 0) __PYX_ERR(0, 239, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":241
 *         renpy.display.interface.frame_duration = 1.0 * abs(vsync) / refresh_rate
 * 
 *         renpy.display.log.write("swap interval: %r frames", vsync)             # <<<<<<<<<<<<<<
 * 
 *     def select_gl_attributes(self, gles):
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_vsync); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 241, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_s_swap_interval_r_frames, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_s_swap_interval_r_frames, __pyx_t_2};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_s_swap_interval_r_frames);
    __Pyx_GIVEREF(__pyx_kp_s_swap_interval_r_frames);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_6, __pyx_kp_s_swap_interval_r_frames);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_6, __pyx_t_2);
    __pyx_t_2 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 241, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":210
 *         return pwidth, pheight
 * 
 *     def select_framerate(self):             # <<<<<<<<<<<<<<
 *         """
 *         *Internal*
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.select_framerate", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_info);
  __Pyx_XDECREF(__pyx_v_target_framerate);
  __Pyx_XDECREF(__pyx_v_refresh_rate);
  __Pyx_XDECREF(__pyx_v_sync_frames);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":243
 *         renpy.display.log.write("swap interval: %r frames", vsync)
 * 
 *     def select_gl_attributes(self, gles):             # <<<<<<<<<<<<<<
 *         """
 *         *Internal*
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_9select_gl_attributes(PyObject *__pyx_v_self, PyObject *__pyx_v_gles); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_8select_gl_attributes[] = "\n        *Internal*\n        Selects the GL attributes and hints to use.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_9select_gl_attributes(PyObject *__pyx_v_self, PyObject *__pyx_v_gles) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("select_gl_attributes (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_8select_gl_attributes(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_gles));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_8select_gl_attributes(CYTHON_UNUSED struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_gles) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("select_gl_attributes", 0);

  /* "renpy/gl2/gl2draw.pyx":249
 *         """
 * 
 *         pygame.display.gl_reset_attributes()             # <<<<<<<<<<<<<<
 * 
 *         pygame.display.gl_set_attribute(pygame.GL_RED_SIZE, 8)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_gl_reset_attributes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":251
 *         pygame.display.gl_reset_attributes()
 * 
 *         pygame.display.gl_set_attribute(pygame.GL_RED_SIZE, 8)             # <<<<<<<<<<<<<<
 *         pygame.display.gl_set_attribute(pygame.GL_GREEN_SIZE, 8)
 *         pygame.display.gl_set_attribute(pygame.GL_BLUE_SIZE, 8)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_gl_set_attribute); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_GL_RED_SIZE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 251, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_4, __pyx_int_8};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 251, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_4, __pyx_int_8};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 251, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 251, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_t_4);
    __Pyx_INCREF(__pyx_int_8);
    __Pyx_GIVEREF(__pyx_int_8);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_int_8);
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 251, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":252
 * 
 *         pygame.display.gl_set_attribute(pygame.GL_RED_SIZE, 8)
 *         pygame.display.gl_set_attribute(pygame.GL_GREEN_SIZE, 8)             # <<<<<<<<<<<<<<
 *         pygame.display.gl_set_attribute(pygame.GL_BLUE_SIZE, 8)
 *         pygame.display.gl_set_attribute(pygame.GL_ALPHA_SIZE, 8)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_gl_set_attribute); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pygame); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_GL_GREEN_SIZE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 252, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_4, __pyx_int_8};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_4, __pyx_int_8};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 252, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_5, __pyx_t_4);
    __Pyx_INCREF(__pyx_int_8);
    __Pyx_GIVEREF(__pyx_int_8);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_5, __pyx_int_8);
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 252, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":253
 *         pygame.display.gl_set_attribute(pygame.GL_RED_SIZE, 8)
 *         pygame.display.gl_set_attribute(pygame.GL_GREEN_SIZE, 8)
 *         pygame.display.gl_set_attribute(pygame.GL_BLUE_SIZE, 8)             # <<<<<<<<<<<<<<
 *         pygame.display.gl_set_attribute(pygame.GL_ALPHA_SIZE, 8)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_gl_set_attribute); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_GL_BLUE_SIZE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 253, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_4, __pyx_int_8};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_4, __pyx_int_8};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_t_4);
    __Pyx_INCREF(__pyx_int_8);
    __Pyx_GIVEREF(__pyx_int_8);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_int_8);
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 253, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":254
 *         pygame.display.gl_set_attribute(pygame.GL_GREEN_SIZE, 8)
 *         pygame.display.gl_set_attribute(pygame.GL_BLUE_SIZE, 8)
 *         pygame.display.gl_set_attribute(pygame.GL_ALPHA_SIZE, 8)             # <<<<<<<<<<<<<<
 * 
 *         if renpy.config.depth_size:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_gl_set_attribute); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pygame); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_GL_ALPHA_SIZE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_4, __pyx_int_8};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_4, __pyx_int_8};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  } else
  #endif
  {
    __pyx_t_3 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_5, __pyx_t_4);
    __Pyx_INCREF(__pyx_int_8);
    __Pyx_GIVEREF(__pyx_int_8);
    PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_5, __pyx_int_8);
    __pyx_t_4 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 254, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":256
 *         pygame.display.gl_set_attribute(pygame.GL_ALPHA_SIZE, 8)
 * 
 *         if renpy.config.depth_size:             # <<<<<<<<<<<<<<
 *             pygame.display.gl_set_attribute(pygame.GL_DEPTH_SIZE, renpy.config.depth_size)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_config); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_depth_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 256, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 256, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_7) {

    /* "renpy/gl2/gl2draw.pyx":257
 * 
 *         if renpy.config.depth_size:
 *             pygame.display.gl_set_attribute(pygame.GL_DEPTH_SIZE, renpy.config.depth_size)             # <<<<<<<<<<<<<<
 * 
 *         pygame.display.gl_set_attribute(pygame.GL_SWAP_CONTROL, vsync)
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_gl_set_attribute); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_GL_DEPTH_SIZE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_config); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_depth_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 257, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_4, __pyx_t_3};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_4, __pyx_t_3};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 257, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__pyx_t_6) {
        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_4);
      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_5, __pyx_t_4);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_5, __pyx_t_3);
      __pyx_t_4 = 0;
      __pyx_t_3 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 257, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":256
 *         pygame.display.gl_set_attribute(pygame.GL_ALPHA_SIZE, 8)
 * 
 *         if renpy.config.depth_size:             # <<<<<<<<<<<<<<
 *             pygame.display.gl_set_attribute(pygame.GL_DEPTH_SIZE, renpy.config.depth_size)
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":259
 *             pygame.display.gl_set_attribute(pygame.GL_DEPTH_SIZE, renpy.config.depth_size)
 * 
 *         pygame.display.gl_set_attribute(pygame.GL_SWAP_CONTROL, vsync)             # <<<<<<<<<<<<<<
 * 
 *         if gles:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_gl_set_attribute); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_pygame); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_GL_SWAP_CONTROL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_vsync); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 259, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_8};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_8};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 259, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_8);
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_t_8);
    __pyx_t_3 = 0;
    __pyx_t_8 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 259, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":261
 *         pygame.display.gl_set_attribute(pygame.GL_SWAP_CONTROL, vsync)
 * 
 *         if gles:             # <<<<<<<<<<<<<<
 *             pygame.display.hint("SDL_OPENGL_ES_DRIVER", "1")
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MAJOR_VERSION, 3);
 */
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_gles); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 261, __pyx_L1_error)
  if (__pyx_t_7) {

    /* "renpy/gl2/gl2draw.pyx":262
 * 
 *         if gles:
 *             pygame.display.hint("SDL_OPENGL_ES_DRIVER", "1")             # <<<<<<<<<<<<<<
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MAJOR_VERSION, 3);
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MINOR_VERSION, 0);
 */
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 262, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_hint); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 262, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 262, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "renpy/gl2/gl2draw.pyx":263
 *         if gles:
 *             pygame.display.hint("SDL_OPENGL_ES_DRIVER", "1")
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MAJOR_VERSION, 3);             # <<<<<<<<<<<<<<
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MINOR_VERSION, 0);
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_PROFILE_MASK, pygame.GL_CONTEXT_PROFILE_ES)
 */
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 263, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 263, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_gl_set_attribute); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 263, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pygame); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 263, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_GL_CONTEXT_MAJOR_VERSION); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 263, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_8, __pyx_int_3};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 263, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_8, __pyx_int_3};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 263, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else
    #endif
    {
      __pyx_t_3 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 263, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      if (__pyx_t_6) {
        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_6); __pyx_t_6 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_5, __pyx_t_8);
      __Pyx_INCREF(__pyx_int_3);
      __Pyx_GIVEREF(__pyx_int_3);
      PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_5, __pyx_int_3);
      __pyx_t_8 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 263, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "renpy/gl2/gl2draw.pyx":264
 *             pygame.display.hint("SDL_OPENGL_ES_DRIVER", "1")
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MAJOR_VERSION, 3);
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MINOR_VERSION, 0);             # <<<<<<<<<<<<<<
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_PROFILE_MASK, pygame.GL_CONTEXT_PROFILE_ES)
 *         else:
 */
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_gl_set_attribute); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_GL_CONTEXT_MINOR_VERSION); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 264, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_8, __pyx_int_0};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 264, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_t_8, __pyx_int_0};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 264, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 264, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_3) {
        __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3); __pyx_t_3 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_t_8);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_int_0);
      __pyx_t_8 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 264, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "renpy/gl2/gl2draw.pyx":265
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MAJOR_VERSION, 3);
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MINOR_VERSION, 0);
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_PROFILE_MASK, pygame.GL_CONTEXT_PROFILE_ES)             # <<<<<<<<<<<<<<
 *         else:
 *             pygame.display.hint("SDL_OPENGL_ES_DRIVER", "0")
 */
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_pygame); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_gl_set_attribute); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pygame); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_GL_CONTEXT_PROFILE_MASK); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_pygame); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_GL_CONTEXT_PROFILE_ES); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 265, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_8, __pyx_t_3};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 265, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_t_8, __pyx_t_3};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 265, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 265, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (__pyx_t_6) {
        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6); __pyx_t_6 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_5, __pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_5, __pyx_t_3);
      __pyx_t_8 = 0;
      __pyx_t_3 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 265, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "renpy/gl2/gl2draw.pyx":261
 *         pygame.display.gl_set_attribute(pygame.GL_SWAP_CONTROL, vsync)
 * 
 *         if gles:             # <<<<<<<<<<<<<<
 *             pygame.display.hint("SDL_OPENGL_ES_DRIVER", "1")
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MAJOR_VERSION, 3);
 */
    goto __pyx_L4;
  }

  /* "renpy/gl2/gl2draw.pyx":267
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_PROFILE_MASK, pygame.GL_CONTEXT_PROFILE_ES)
 *         else:
 *             pygame.display.hint("SDL_OPENGL_ES_DRIVER", "0")             # <<<<<<<<<<<<<<
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MAJOR_VERSION, 2);
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MINOR_VERSION, 1);
 */
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_hint); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 267, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":268
 *         else:
 *             pygame.display.hint("SDL_OPENGL_ES_DRIVER", "0")
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MAJOR_VERSION, 2);             # <<<<<<<<<<<<<<
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MINOR_VERSION, 1);
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_PROFILE_MASK, pygame.GL_CONTEXT_PROFILE_COMPATIBILITY)
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 268, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 268, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_gl_set_attribute); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 268, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pygame); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 268, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_GL_CONTEXT_MAJOR_VERSION); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 268, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_int_2};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_int_2};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 268, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_5, __pyx_t_3);
      __Pyx_INCREF(__pyx_int_2);
      __Pyx_GIVEREF(__pyx_int_2);
      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_5, __pyx_int_2);
      __pyx_t_3 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 268, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":269
 *             pygame.display.hint("SDL_OPENGL_ES_DRIVER", "0")
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MAJOR_VERSION, 2);
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MINOR_VERSION, 1);             # <<<<<<<<<<<<<<
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_PROFILE_MASK, pygame.GL_CONTEXT_PROFILE_COMPATIBILITY)
 * 
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 269, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_gl_set_attribute); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 269, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_pygame); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 269, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_GL_CONTEXT_MINOR_VERSION); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 269, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_3, __pyx_int_1};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_3, __pyx_int_1};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else
    #endif
    {
      __pyx_t_4 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 269, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (__pyx_t_8) {
        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_8); __pyx_t_8 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_5, __pyx_t_3);
      __Pyx_INCREF(__pyx_int_1);
      __Pyx_GIVEREF(__pyx_int_1);
      PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_5, __pyx_int_1);
      __pyx_t_3 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 269, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":270
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MAJOR_VERSION, 2);
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MINOR_VERSION, 1);
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_PROFILE_MASK, pygame.GL_CONTEXT_PROFILE_COMPATIBILITY)             # <<<<<<<<<<<<<<
 * 
 *         if renpy.config.gl_set_attributes is not None:
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_gl_set_attribute); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pygame); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_GL_CONTEXT_PROFILE_MASK); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pygame); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_GL_CONTEXT_PROFILE_COMPATIBILITY); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 270, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    __pyx_t_5 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
        __pyx_t_5 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_8};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
      PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_t_3, __pyx_t_8};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 270, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_4) {
        __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
      }
      __Pyx_GIVEREF(__pyx_t_3);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_t_3);
      __Pyx_GIVEREF(__pyx_t_8);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, __pyx_t_8);
      __pyx_t_3 = 0;
      __pyx_t_8 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 270, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  }
  __pyx_L4:;

  /* "renpy/gl2/gl2draw.pyx":272
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_PROFILE_MASK, pygame.GL_CONTEXT_PROFILE_COMPATIBILITY)
 * 
 *         if renpy.config.gl_set_attributes is not None:             # <<<<<<<<<<<<<<
 *             renpy.config.gl_set_attributes()
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_config); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_gl_set_attributes); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 272, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = (__pyx_t_1 != Py_None);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_9 = (__pyx_t_7 != 0);
  if (__pyx_t_9) {

    /* "renpy/gl2/gl2draw.pyx":273
 * 
 *         if renpy.config.gl_set_attributes is not None:
 *             renpy.config.gl_set_attributes()             # <<<<<<<<<<<<<<
 * 
 *     def init(self, virtual_size):
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 273, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_gl_set_attributes); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 273, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 273, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":272
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_PROFILE_MASK, pygame.GL_CONTEXT_PROFILE_COMPATIBILITY)
 * 
 *         if renpy.config.gl_set_attributes is not None:             # <<<<<<<<<<<<<<
 *             renpy.config.gl_set_attributes()
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":243
 *         renpy.display.log.write("swap interval: %r frames", vsync)
 * 
 *     def select_gl_attributes(self, gles):             # <<<<<<<<<<<<<<
 *         """
 *         *Internal*
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.select_gl_attributes", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":275
 *             renpy.config.gl_set_attributes()
 * 
 *     def init(self, virtual_size):             # <<<<<<<<<<<<<<
 *         """
 *         This changes the video mode. It also initializes OpenGL, if it
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11init(PyObject *__pyx_v_self, PyObject *__pyx_v_virtual_size); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_10init[] = "\n        This changes the video mode. It also initializes OpenGL, if it\n        can. It returns True if it was successful, or False if OpenGL isn't\n        working for some reason.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11init(PyObject *__pyx_v_self, PyObject *__pyx_v_virtual_size) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_10init(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_virtual_size));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_10init(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_virtual_size) {
  CYTHON_UNUSED PyObject *__pyx_v_vwidth = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_vheight = NULL;
  PyObject *__pyx_v_physical_size = NULL;
  PyObject *__pyx_v_pwidth = NULL;
  PyObject *__pyx_v_pheight = NULL;
  PyObject *__pyx_v_fullscreen = NULL;
  PyObject *__pyx_v_target_framerate = NULL;
  PyObject *__pyx_v_refresh_rate = NULL;
  PyObject *__pyx_v_sync_frames = NULL;
  int __pyx_v_gles;
  PyObject *__pyx_v_window_flags = NULL;
  PyObject *__pyx_v_e = NULL;
  char *__pyx_v_renderer;
  char *__pyx_v_version;
  char *__pyx_v_extensions_string;
  PyObject *__pyx_v_extensions = NULL;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *(*__pyx_t_4)(PyObject *);
  int __pyx_t_5;
  int __pyx_t_6;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  int __pyx_t_16;
  Py_ssize_t __pyx_t_17;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init", 0);

  /* "renpy/gl2/gl2draw.pyx":282
 *         """
 * 
 *         self.virtual_size = virtual_size             # <<<<<<<<<<<<<<
 *         vwidth, vheight = virtual_size
 * 
 */
  if (!(likely(PyTuple_CheckExact(__pyx_v_virtual_size))||((__pyx_v_virtual_size) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_virtual_size)->tp_name), 0))) __PYX_ERR(0, 282, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_virtual_size;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->virtual_size);
  __Pyx_DECREF(__pyx_v_self->virtual_size);
  __pyx_v_self->virtual_size = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":283
 * 
 *         self.virtual_size = virtual_size
 *         vwidth, vheight = virtual_size             # <<<<<<<<<<<<<<
 * 
 *         global vsync
 */
  if ((likely(PyTuple_CheckExact(__pyx_v_virtual_size))) || (PyList_CheckExact(__pyx_v_virtual_size))) {
    PyObject* sequence = __pyx_v_virtual_size;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 283, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
  } else {
    Py_ssize_t index = -1;
    __pyx_t_3 = PyObject_GetIter(__pyx_v_virtual_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 283, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = Py_TYPE(__pyx_t_3)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_2 = __pyx_t_4(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < 0) __PYX_ERR(0, 283, __pyx_L1_error)
    __pyx_t_4 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 283, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_vwidth = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_vheight = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":287
 *         global vsync
 * 
 *         if not renpy.config.gl_enable:             # <<<<<<<<<<<<<<
 *             renpy.display.log.write("GL Disabled.")
 *             return False
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_gl_enable); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 287, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 287, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = ((!__pyx_t_5) != 0);
  if (__pyx_t_6) {

    /* "renpy/gl2/gl2draw.pyx":288
 * 
 *         if not renpy.config.gl_enable:
 *             renpy.display.log.write("GL Disabled.")             # <<<<<<<<<<<<<<
 *             return False
 * 
 */
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_write); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_2 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_kp_s_GL_Disabled) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_kp_s_GL_Disabled);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 288, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "renpy/gl2/gl2draw.pyx":289
 *         if not renpy.config.gl_enable:
 *             renpy.display.log.write("GL Disabled.")
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         if renpy.mobile or renpy.game.preferences.physical_size is None: # @UndefinedVariable
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":287
 *         global vsync
 * 
 *         if not renpy.config.gl_enable:             # <<<<<<<<<<<<<<
 *             renpy.display.log.write("GL Disabled.")
 *             return False
 */
  }

  /* "renpy/gl2/gl2draw.pyx":291
 *             return False
 * 
 *         if renpy.mobile or renpy.game.preferences.physical_size is None: # @UndefinedVariable             # <<<<<<<<<<<<<<
 *             physical_size = (None, None)
 *         else:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_mobile); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 291, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_6 = __pyx_t_5;
    goto __pyx_L7_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_game); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_preferences); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_physical_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 291, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = (__pyx_t_2 == Py_None);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = (__pyx_t_5 != 0);
  __pyx_t_6 = __pyx_t_7;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_6) {

    /* "renpy/gl2/gl2draw.pyx":292
 * 
 *         if renpy.mobile or renpy.game.preferences.physical_size is None: # @UndefinedVariable
 *             physical_size = (None, None)             # <<<<<<<<<<<<<<
 *         else:
 *             physical_size = renpy.game.preferences.physical_size
 */
    __Pyx_INCREF(__pyx_tuple__5);
    __pyx_v_physical_size = __pyx_tuple__5;

    /* "renpy/gl2/gl2draw.pyx":291
 *             return False
 * 
 *         if renpy.mobile or renpy.game.preferences.physical_size is None: # @UndefinedVariable             # <<<<<<<<<<<<<<
 *             physical_size = (None, None)
 *         else:
 */
    goto __pyx_L6;
  }

  /* "renpy/gl2/gl2draw.pyx":294
 *             physical_size = (None, None)
 *         else:
 *             physical_size = renpy.game.preferences.physical_size             # <<<<<<<<<<<<<<
 * 
 *         pwidth, pheight = self.select_physical_size(physical_size)
 */
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 294, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_game); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 294, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_preferences); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 294, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_physical_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 294, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_physical_size = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  __pyx_L6:;

  /* "renpy/gl2/gl2draw.pyx":296
 *             physical_size = renpy.game.preferences.physical_size
 * 
 *         pwidth, pheight = self.select_physical_size(physical_size)             # <<<<<<<<<<<<<<
 * 
 *         if renpy.android or renpy.ios:
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_select_physical_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_1, __pyx_v_physical_size) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_physical_size);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 296, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 296, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_1);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 296, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 296, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_8 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 296, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = Py_TYPE(__pyx_t_8)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_4(__pyx_t_8); if (unlikely(!__pyx_t_2)) goto __pyx_L9_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_1 = __pyx_t_4(__pyx_t_8); if (unlikely(!__pyx_t_1)) goto __pyx_L9_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_8), 2) < 0) __PYX_ERR(0, 296, __pyx_L1_error)
    __pyx_t_4 = NULL;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    goto __pyx_L10_unpacking_done;
    __pyx_L9_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_4 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 296, __pyx_L1_error)
    __pyx_L10_unpacking_done:;
  }
  __pyx_v_pwidth = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_pheight = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":298
 *         pwidth, pheight = self.select_physical_size(physical_size)
 * 
 *         if renpy.android or renpy.ios:             # <<<<<<<<<<<<<<
 *             fullscreen = True
 *         else:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_android); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_7) {
  } else {
    __pyx_t_6 = __pyx_t_7;
    goto __pyx_L12_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ios); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 298, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_6 = __pyx_t_7;
  __pyx_L12_bool_binop_done:;
  if (__pyx_t_6) {

    /* "renpy/gl2/gl2draw.pyx":299
 * 
 *         if renpy.android or renpy.ios:
 *             fullscreen = True             # <<<<<<<<<<<<<<
 *         else:
 *             fullscreen = renpy.game.preferences.fullscreen
 */
    __Pyx_INCREF(Py_True);
    __pyx_v_fullscreen = Py_True;

    /* "renpy/gl2/gl2draw.pyx":298
 *         pwidth, pheight = self.select_physical_size(physical_size)
 * 
 *         if renpy.android or renpy.ios:             # <<<<<<<<<<<<<<
 *             fullscreen = True
 *         else:
 */
    goto __pyx_L11;
  }

  /* "renpy/gl2/gl2draw.pyx":301
 *             fullscreen = True
 *         else:
 *             fullscreen = renpy.game.preferences.fullscreen             # <<<<<<<<<<<<<<
 * 
 *         # Handle swap control.
 */
  /*else*/ {
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 301, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_game); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 301, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_preferences); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 301, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_fullscreen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 301, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_fullscreen = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_L11:;

  /* "renpy/gl2/gl2draw.pyx":304
 * 
 *         # Handle swap control.
 *         target_framerate = renpy.game.preferences.gl_framerate             # <<<<<<<<<<<<<<
 *         refresh_rate = renpy.display.get_info().refresh_rate
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_game); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_preferences); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_gl_framerate); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 304, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_target_framerate = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":305
 *         # Handle swap control.
 *         target_framerate = renpy.game.preferences.gl_framerate
 *         refresh_rate = renpy.display.get_info().refresh_rate             # <<<<<<<<<<<<<<
 * 
 *         if not refresh_rate:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get_info); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_3 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_refresh_rate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 305, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_refresh_rate = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":307
 *         refresh_rate = renpy.display.get_info().refresh_rate
 * 
 *         if not refresh_rate:             # <<<<<<<<<<<<<<
 *             refresh_rate = 60
 * 
 */
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_refresh_rate); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 307, __pyx_L1_error)
  __pyx_t_7 = ((!__pyx_t_6) != 0);
  if (__pyx_t_7) {

    /* "renpy/gl2/gl2draw.pyx":308
 * 
 *         if not refresh_rate:
 *             refresh_rate = 60             # <<<<<<<<<<<<<<
 * 
 *         if target_framerate is None:
 */
    __Pyx_INCREF(__pyx_int_60);
    __Pyx_DECREF_SET(__pyx_v_refresh_rate, __pyx_int_60);

    /* "renpy/gl2/gl2draw.pyx":307
 *         refresh_rate = renpy.display.get_info().refresh_rate
 * 
 *         if not refresh_rate:             # <<<<<<<<<<<<<<
 *             refresh_rate = 60
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":310
 *             refresh_rate = 60
 * 
 *         if target_framerate is None:             # <<<<<<<<<<<<<<
 *             sync_frames = 1
 *         else:
 */
  __pyx_t_7 = (__pyx_v_target_framerate == Py_None);
  __pyx_t_6 = (__pyx_t_7 != 0);
  if (__pyx_t_6) {

    /* "renpy/gl2/gl2draw.pyx":311
 * 
 *         if target_framerate is None:
 *             sync_frames = 1             # <<<<<<<<<<<<<<
 *         else:
 *             sync_frames = int(round(1.0 * refresh_rate) / target_framerate)
 */
    __Pyx_INCREF(__pyx_int_1);
    __pyx_v_sync_frames = __pyx_int_1;

    /* "renpy/gl2/gl2draw.pyx":310
 *             refresh_rate = 60
 * 
 *         if target_framerate is None:             # <<<<<<<<<<<<<<
 *             sync_frames = 1
 *         else:
 */
    goto __pyx_L15;
  }

  /* "renpy/gl2/gl2draw.pyx":313
 *             sync_frames = 1
 *         else:
 *             sync_frames = int(round(1.0 * refresh_rate) / target_framerate)             # <<<<<<<<<<<<<<
 *             if sync_frames < 1:
 *                 sync_frames = 1
 */
  /*else*/ {
    __pyx_t_1 = PyNumber_Multiply(__pyx_float_1_0, __pyx_v_refresh_rate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 313, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_round, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 313, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_v_target_framerate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 313, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 313, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_v_sync_frames = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "renpy/gl2/gl2draw.pyx":314
 *         else:
 *             sync_frames = int(round(1.0 * refresh_rate) / target_framerate)
 *             if sync_frames < 1:             # <<<<<<<<<<<<<<
 *                 sync_frames = 1
 * 
 */
    __pyx_t_3 = PyObject_RichCompare(__pyx_v_sync_frames, __pyx_int_1, Py_LT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 314, __pyx_L1_error)
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 314, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (__pyx_t_6) {

      /* "renpy/gl2/gl2draw.pyx":315
 *             sync_frames = int(round(1.0 * refresh_rate) / target_framerate)
 *             if sync_frames < 1:
 *                 sync_frames = 1             # <<<<<<<<<<<<<<
 * 
 *         if renpy.game.preferences.gl_tearing:
 */
      __Pyx_INCREF(__pyx_int_1);
      __Pyx_DECREF_SET(__pyx_v_sync_frames, __pyx_int_1);

      /* "renpy/gl2/gl2draw.pyx":314
 *         else:
 *             sync_frames = int(round(1.0 * refresh_rate) / target_framerate)
 *             if sync_frames < 1:             # <<<<<<<<<<<<<<
 *                 sync_frames = 1
 * 
 */
    }
  }
  __pyx_L15:;

  /* "renpy/gl2/gl2draw.pyx":317
 *                 sync_frames = 1
 * 
 *         if renpy.game.preferences.gl_tearing:             # <<<<<<<<<<<<<<
 *             sync_frames = -sync_frames
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_game); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_preferences); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_gl_tearing); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 317, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_6) {

    /* "renpy/gl2/gl2draw.pyx":318
 * 
 *         if renpy.game.preferences.gl_tearing:
 *             sync_frames = -sync_frames             # <<<<<<<<<<<<<<
 * 
 *         vsync = int(os.environ.get("RENPY_GL_VSYNC", sync_frames))
 */
    __pyx_t_1 = PyNumber_Negative(__pyx_v_sync_frames); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 318, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF_SET(__pyx_v_sync_frames, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":317
 *                 sync_frames = 1
 * 
 *         if renpy.game.preferences.gl_tearing:             # <<<<<<<<<<<<<<
 *             sync_frames = -sync_frames
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":320
 *             sync_frames = -sync_frames
 * 
 *         vsync = int(os.environ.get("RENPY_GL_VSYNC", sync_frames))             # <<<<<<<<<<<<<<
 * 
 *         renpy.display.interface.frame_duration = 1.0 * abs(vsync) / refresh_rate
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_os); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_environ); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_n_s_RENPY_GL_VSYNC, __pyx_v_sync_frames};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_n_s_RENPY_GL_VSYNC, __pyx_v_sync_frames};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 320, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_n_s_RENPY_GL_VSYNC);
    __Pyx_GIVEREF(__pyx_n_s_RENPY_GL_VSYNC);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_9, __pyx_n_s_RENPY_GL_VSYNC);
    __Pyx_INCREF(__pyx_v_sync_frames);
    __Pyx_GIVEREF(__pyx_v_sync_frames);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_9, __pyx_v_sync_frames);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_8, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 320, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 320, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_vsync, __pyx_t_3) < 0) __PYX_ERR(0, 320, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":322
 *         vsync = int(os.environ.get("RENPY_GL_VSYNC", sync_frames))
 * 
 *         renpy.display.interface.frame_duration = 1.0 * abs(vsync) / refresh_rate             # <<<<<<<<<<<<<<
 * 
 *         renpy.display.log.write("swap interval: %r frames", vsync)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_vsync); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyNumber_Absolute(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Multiply(__pyx_float_1_0, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_v_refresh_rate); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_display); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_interface); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_t_3, __pyx_n_s_frame_duration, __pyx_t_1) < 0) __PYX_ERR(0, 322, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":324
 *         renpy.display.interface.frame_duration = 1.0 * abs(vsync) / refresh_rate
 * 
 *         renpy.display.log.write("swap interval: %r frames", vsync)             # <<<<<<<<<<<<<<
 * 
 *         # Determine the GLES mode, the actual window size to request, and the
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_vsync); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 324, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_s_swap_interval_r_frames, __pyx_t_1};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 324, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_s_swap_interval_r_frames, __pyx_t_1};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 324, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 324, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_s_swap_interval_r_frames);
    __Pyx_GIVEREF(__pyx_kp_s_swap_interval_r_frames);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_kp_s_swap_interval_r_frames);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 324, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":328
 *         # Determine the GLES mode, the actual window size to request, and the
 *         # window flags to use. (These are platform dependent.)
 *         gles = self.gles             # <<<<<<<<<<<<<<
 *         window_flags = pygame.OPENGL | pygame.DOUBLEBUF
 * 
 */
  __pyx_t_6 = __pyx_v_self->gles;
  __pyx_v_gles = __pyx_t_6;

  /* "renpy/gl2/gl2draw.pyx":329
 *         # window flags to use. (These are platform dependent.)
 *         gles = self.gles
 *         window_flags = pygame.OPENGL | pygame.DOUBLEBUF             # <<<<<<<<<<<<<<
 * 
 *         if renpy.android:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_OPENGL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_DOUBLEBUF); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Or(__pyx_t_8, __pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 329, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_v_window_flags = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":331
 *         window_flags = pygame.OPENGL | pygame.DOUBLEBUF
 * 
 *         if renpy.android:             # <<<<<<<<<<<<<<
 *             pwidth = 0
 *             pheight = 0
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 331, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_android); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 331, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_10); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 331, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (__pyx_t_6) {

    /* "renpy/gl2/gl2draw.pyx":332
 * 
 *         if renpy.android:
 *             pwidth = 0             # <<<<<<<<<<<<<<
 *             pheight = 0
 *             gles = True
 */
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_DECREF_SET(__pyx_v_pwidth, __pyx_int_0);

    /* "renpy/gl2/gl2draw.pyx":333
 *         if renpy.android:
 *             pwidth = 0
 *             pheight = 0             # <<<<<<<<<<<<<<
 *             gles = True
 * 
 */
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_DECREF_SET(__pyx_v_pheight, __pyx_int_0);

    /* "renpy/gl2/gl2draw.pyx":334
 *             pwidth = 0
 *             pheight = 0
 *             gles = True             # <<<<<<<<<<<<<<
 * 
 *         elif renpy.ios:
 */
    __pyx_v_gles = 1;

    /* "renpy/gl2/gl2draw.pyx":331
 *         window_flags = pygame.OPENGL | pygame.DOUBLEBUF
 * 
 *         if renpy.android:             # <<<<<<<<<<<<<<
 *             pwidth = 0
 *             pheight = 0
 */
    goto __pyx_L18;
  }

  /* "renpy/gl2/gl2draw.pyx":336
 *             gles = True
 * 
 *         elif renpy.ios:             # <<<<<<<<<<<<<<
 *             window_flags |= pygame.WINDOW_ALLOW_HIGHDPI | pygame.RESIZABLE
 *             pwidth = 0
 */
  __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_renpy); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_ios); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 336, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_6) {

    /* "renpy/gl2/gl2draw.pyx":337
 * 
 *         elif renpy.ios:
 *             window_flags |= pygame.WINDOW_ALLOW_HIGHDPI | pygame.RESIZABLE             # <<<<<<<<<<<<<<
 *             pwidth = 0
 *             pheight = 0
 */
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 337, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_WINDOW_ALLOW_HIGHDPI); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 337, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 337, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_RESIZABLE); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 337, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = PyNumber_Or(__pyx_t_10, __pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 337, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = PyNumber_InPlaceOr(__pyx_v_window_flags, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 337, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF_SET(__pyx_v_window_flags, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "renpy/gl2/gl2draw.pyx":338
 *         elif renpy.ios:
 *             window_flags |= pygame.WINDOW_ALLOW_HIGHDPI | pygame.RESIZABLE
 *             pwidth = 0             # <<<<<<<<<<<<<<
 *             pheight = 0
 *             gles = True
 */
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_DECREF_SET(__pyx_v_pwidth, __pyx_int_0);

    /* "renpy/gl2/gl2draw.pyx":339
 *             window_flags |= pygame.WINDOW_ALLOW_HIGHDPI | pygame.RESIZABLE
 *             pwidth = 0
 *             pheight = 0             # <<<<<<<<<<<<<<
 *             gles = True
 * 
 */
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_DECREF_SET(__pyx_v_pheight, __pyx_int_0);

    /* "renpy/gl2/gl2draw.pyx":340
 *             pwidth = 0
 *             pheight = 0
 *             gles = True             # <<<<<<<<<<<<<<
 * 
 *         else:
 */
    __pyx_v_gles = 1;

    /* "renpy/gl2/gl2draw.pyx":336
 *             gles = True
 * 
 *         elif renpy.ios:             # <<<<<<<<<<<<<<
 *             window_flags |= pygame.WINDOW_ALLOW_HIGHDPI | pygame.RESIZABLE
 *             pwidth = 0
 */
    goto __pyx_L18;
  }

  /* "renpy/gl2/gl2draw.pyx":343
 * 
 *         else:
 *             if self.dpi_scale == 1.0:             # <<<<<<<<<<<<<<
 *                 window_flags |= pygame.WINDOW_ALLOW_HIGHDPI
 * 
 */
  /*else*/ {
    __pyx_t_6 = ((__pyx_v_self->dpi_scale == 1.0) != 0);
    if (__pyx_t_6) {

      /* "renpy/gl2/gl2draw.pyx":344
 *         else:
 *             if self.dpi_scale == 1.0:
 *                 window_flags |= pygame.WINDOW_ALLOW_HIGHDPI             # <<<<<<<<<<<<<<
 * 
 *             if renpy.config.gl_resize:
 */
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_pygame); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 344, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_WINDOW_ALLOW_HIGHDPI); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 344, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyNumber_InPlaceOr(__pyx_v_window_flags, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 344, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF_SET(__pyx_v_window_flags, __pyx_t_8);
      __pyx_t_8 = 0;

      /* "renpy/gl2/gl2draw.pyx":343
 * 
 *         else:
 *             if self.dpi_scale == 1.0:             # <<<<<<<<<<<<<<
 *                 window_flags |= pygame.WINDOW_ALLOW_HIGHDPI
 * 
 */
    }

    /* "renpy/gl2/gl2draw.pyx":346
 *                 window_flags |= pygame.WINDOW_ALLOW_HIGHDPI
 * 
 *             if renpy.config.gl_resize:             # <<<<<<<<<<<<<<
 *                 window_flags |= pygame.RESIZABLE
 * 
 */
    __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_renpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_config); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_gl_resize); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 346, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 346, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (__pyx_t_6) {

      /* "renpy/gl2/gl2draw.pyx":347
 * 
 *             if renpy.config.gl_resize:
 *                 window_flags |= pygame.RESIZABLE             # <<<<<<<<<<<<<<
 * 
 *         # Select the GL attributes and hints.
 */
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_pygame); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 347, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_RESIZABLE); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 347, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = PyNumber_InPlaceOr(__pyx_v_window_flags, __pyx_t_3); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 347, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF_SET(__pyx_v_window_flags, __pyx_t_8);
      __pyx_t_8 = 0;

      /* "renpy/gl2/gl2draw.pyx":346
 *                 window_flags |= pygame.WINDOW_ALLOW_HIGHDPI
 * 
 *             if renpy.config.gl_resize:             # <<<<<<<<<<<<<<
 *                 window_flags |= pygame.RESIZABLE
 * 
 */
    }
  }
  __pyx_L18:;

  /* "renpy/gl2/gl2draw.pyx":350
 * 
 *         # Select the GL attributes and hints.
 *         self.select_gl_attributes(gles)             # <<<<<<<<<<<<<<
 * 
 *         # Opens the window.
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_select_gl_attributes); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_10 = __Pyx_PyBool_FromLong(__pyx_v_gles); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_1 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_8 = (__pyx_t_1) ? __Pyx_PyObject_Call2Args(__pyx_t_3, __pyx_t_1, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10);
  __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 350, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

  /* "renpy/gl2/gl2draw.pyx":357
 *         # or fullscreen is False, tries to open a normal window.
 * 
 *         self.window = None             # <<<<<<<<<<<<<<
 * 
 *         if (self.window is None) and fullscreen:
 */
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->window);
  __Pyx_DECREF(__pyx_v_self->window);
  __pyx_v_self->window = Py_None;

  /* "renpy/gl2/gl2draw.pyx":359
 *         self.window = None
 * 
 *         if (self.window is None) and fullscreen:             # <<<<<<<<<<<<<<
 *             try:
 *                 renpy.display.log.write("Fullscreen mode.")
 */
  __pyx_t_7 = (__pyx_v_self->window == Py_None);
  __pyx_t_5 = (__pyx_t_7 != 0);
  if (__pyx_t_5) {
  } else {
    __pyx_t_6 = __pyx_t_5;
    goto __pyx_L22_bool_binop_done;
  }
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_v_fullscreen); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 359, __pyx_L1_error)
  __pyx_t_6 = __pyx_t_5;
  __pyx_L22_bool_binop_done:;
  if (__pyx_t_6) {

    /* "renpy/gl2/gl2draw.pyx":360
 * 
 *         if (self.window is None) and fullscreen:
 *             try:             # <<<<<<<<<<<<<<
 *                 renpy.display.log.write("Fullscreen mode.")
 *                 self.window = pygame.display.set_mode((0, 0), pygame.WINDOW_FULLSCREEN_DESKTOP | window_flags)
 */
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_13);
      /*try:*/ {

        /* "renpy/gl2/gl2draw.pyx":361
 *         if (self.window is None) and fullscreen:
 *             try:
 *                 renpy.display.log.write("Fullscreen mode.")             # <<<<<<<<<<<<<<
 *                 self.window = pygame.display.set_mode((0, 0), pygame.WINDOW_FULLSCREEN_DESKTOP | window_flags)
 *             except pygame.error as e:
 */
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 361, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_display); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 361, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_log); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 361, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 361, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_10);
          if (likely(__pyx_t_3)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_3);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_10, function);
          }
        }
        __pyx_t_8 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_10, __pyx_t_3, __pyx_kp_s_Fullscreen_mode) : __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_kp_s_Fullscreen_mode);
        __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 361, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

        /* "renpy/gl2/gl2draw.pyx":362
 *             try:
 *                 renpy.display.log.write("Fullscreen mode.")
 *                 self.window = pygame.display.set_mode((0, 0), pygame.WINDOW_FULLSCREEN_DESKTOP | window_flags)             # <<<<<<<<<<<<<<
 *             except pygame.error as e:
 *                 renpy.display.log.write("Opening in fullscreen failed: %r", e)
 */
        __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_pygame); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 362, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 362, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_set_mode); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 362, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 362, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_WINDOW_FULLSCREEN_DESKTOP); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 362, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = PyNumber_Or(__pyx_t_1, __pyx_v_window_flags); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 362, __pyx_L24_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = NULL;
        __pyx_t_9 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_10);
          if (likely(__pyx_t_1)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_10, function);
            __pyx_t_9 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_10)) {
          PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_tuple_, __pyx_t_3};
          __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 362, __pyx_L24_error)
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
          PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_tuple_, __pyx_t_3};
          __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 362, __pyx_L24_error)
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        } else
        #endif
        {
          __pyx_t_2 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 362, __pyx_L24_error)
          __Pyx_GOTREF(__pyx_t_2);
          if (__pyx_t_1) {
            __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = NULL;
          }
          __Pyx_INCREF(__pyx_tuple_);
          __Pyx_GIVEREF(__pyx_tuple_);
          PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_9, __pyx_tuple_);
          __Pyx_GIVEREF(__pyx_t_3);
          PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_9, __pyx_t_3);
          __pyx_t_3 = 0;
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 362, __pyx_L24_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        }
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_GIVEREF(__pyx_t_8);
        __Pyx_GOTREF(__pyx_v_self->window);
        __Pyx_DECREF(__pyx_v_self->window);
        __pyx_v_self->window = __pyx_t_8;
        __pyx_t_8 = 0;

        /* "renpy/gl2/gl2draw.pyx":360
 * 
 *         if (self.window is None) and fullscreen:
 *             try:             # <<<<<<<<<<<<<<
 *                 renpy.display.log.write("Fullscreen mode.")
 *                 self.window = pygame.display.set_mode((0, 0), pygame.WINDOW_FULLSCREEN_DESKTOP | window_flags)
 */
      }
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      goto __pyx_L29_try_end;
      __pyx_L24_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;

      /* "renpy/gl2/gl2draw.pyx":363
 *                 renpy.display.log.write("Fullscreen mode.")
 *                 self.window = pygame.display.set_mode((0, 0), pygame.WINDOW_FULLSCREEN_DESKTOP | window_flags)
 *             except pygame.error as e:             # <<<<<<<<<<<<<<
 *                 renpy.display.log.write("Opening in fullscreen failed: %r", e)
 *                 self.window = None
 */
      __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_10, &__pyx_t_2);
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 363, __pyx_L26_except_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_error); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 363, __pyx_L26_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_9 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_8, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_10, __pyx_t_2);
      __pyx_t_8 = 0; __pyx_t_10 = 0; __pyx_t_2 = 0;
      if (__pyx_t_9) {
        __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_10, &__pyx_t_8) < 0) __PYX_ERR(0, 363, __pyx_L26_except_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_10);
        __pyx_v_e = __pyx_t_10;

        /* "renpy/gl2/gl2draw.pyx":364
 *                 self.window = pygame.display.set_mode((0, 0), pygame.WINDOW_FULLSCREEN_DESKTOP | window_flags)
 *             except pygame.error as e:
 *                 renpy.display.log.write("Opening in fullscreen failed: %r", e)             # <<<<<<<<<<<<<<
 *                 self.window = None
 * 
 */
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 364, __pyx_L26_except_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_display); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 364, __pyx_L26_except_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_log); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 364, __pyx_L26_except_error)
        __Pyx_GOTREF(__pyx_t_3);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 364, __pyx_L26_except_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = NULL;
        __pyx_t_9 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_14);
          if (likely(__pyx_t_3)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
            __Pyx_INCREF(__pyx_t_3);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_14, function);
            __pyx_t_9 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_14)) {
          PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_s_Opening_in_fullscreen_failed_r, __pyx_v_e};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 364, __pyx_L26_except_error)
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
          PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_kp_s_Opening_in_fullscreen_failed_r, __pyx_v_e};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 364, __pyx_L26_except_error)
          __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        {
          __pyx_t_15 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 364, __pyx_L26_except_error)
          __Pyx_GOTREF(__pyx_t_15);
          if (__pyx_t_3) {
            __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_3); __pyx_t_3 = NULL;
          }
          __Pyx_INCREF(__pyx_kp_s_Opening_in_fullscreen_failed_r);
          __Pyx_GIVEREF(__pyx_kp_s_Opening_in_fullscreen_failed_r);
          PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_9, __pyx_kp_s_Opening_in_fullscreen_failed_r);
          __Pyx_INCREF(__pyx_v_e);
          __Pyx_GIVEREF(__pyx_v_e);
          PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_9, __pyx_v_e);
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_15, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 364, __pyx_L26_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        }
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "renpy/gl2/gl2draw.pyx":365
 *             except pygame.error as e:
 *                 renpy.display.log.write("Opening in fullscreen failed: %r", e)
 *                 self.window = None             # <<<<<<<<<<<<<<
 * 
 *         if self.window is None:
 */
        __Pyx_INCREF(Py_None);
        __Pyx_GIVEREF(Py_None);
        __Pyx_GOTREF(__pyx_v_self->window);
        __Pyx_DECREF(__pyx_v_self->window);
        __pyx_v_self->window = Py_None;
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        goto __pyx_L25_exception_handled;
      }
      goto __pyx_L26_except_error;
      __pyx_L26_except_error:;

      /* "renpy/gl2/gl2draw.pyx":360
 * 
 *         if (self.window is None) and fullscreen:
 *             try:             # <<<<<<<<<<<<<<
 *                 renpy.display.log.write("Fullscreen mode.")
 *                 self.window = pygame.display.set_mode((0, 0), pygame.WINDOW_FULLSCREEN_DESKTOP | window_flags)
 */
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      goto __pyx_L1_error;
      __pyx_L25_exception_handled:;
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
      __pyx_L29_try_end:;
    }

    /* "renpy/gl2/gl2draw.pyx":359
 *         self.window = None
 * 
 *         if (self.window is None) and fullscreen:             # <<<<<<<<<<<<<<
 *             try:
 *                 renpy.display.log.write("Fullscreen mode.")
 */
  }

  /* "renpy/gl2/gl2draw.pyx":367
 *                 self.window = None
 * 
 *         if self.window is None:             # <<<<<<<<<<<<<<
 *             try:
 *                 renpy.display.log.write("Windowed mode.")
 */
  __pyx_t_6 = (__pyx_v_self->window == Py_None);
  __pyx_t_5 = (__pyx_t_6 != 0);
  if (__pyx_t_5) {

    /* "renpy/gl2/gl2draw.pyx":368
 * 
 *         if self.window is None:
 *             try:             # <<<<<<<<<<<<<<
 *                 renpy.display.log.write("Windowed mode.")
 *                 self.window = pygame.display.set_mode((pwidth, pheight), window_flags)
 */
    {
      __Pyx_PyThreadState_declare
      __Pyx_PyThreadState_assign
      __Pyx_ExceptionSave(&__pyx_t_13, &__pyx_t_12, &__pyx_t_11);
      __Pyx_XGOTREF(__pyx_t_13);
      __Pyx_XGOTREF(__pyx_t_12);
      __Pyx_XGOTREF(__pyx_t_11);
      /*try:*/ {

        /* "renpy/gl2/gl2draw.pyx":369
 *         if self.window is None:
 *             try:
 *                 renpy.display.log.write("Windowed mode.")             # <<<<<<<<<<<<<<
 *                 self.window = pygame.display.set_mode((pwidth, pheight), window_flags)
 * 
 */
        __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_renpy); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 369, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_display); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_log); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 369, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = NULL;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
          __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_2);
          if (likely(__pyx_t_10)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
            __Pyx_INCREF(__pyx_t_10);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_2, function);
          }
        }
        __pyx_t_8 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_10, __pyx_kp_s_Windowed_mode) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_kp_s_Windowed_mode);
        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
        if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 369, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

        /* "renpy/gl2/gl2draw.pyx":370
 *             try:
 *                 renpy.display.log.write("Windowed mode.")
 *                 self.window = pygame.display.set_mode((pwidth, pheight), window_flags)             # <<<<<<<<<<<<<<
 * 
 *             except pygame.error as e:
 */
        __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 370, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_2);
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 370, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_set_mode); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 370, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 370, __pyx_L33_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_INCREF(__pyx_v_pwidth);
        __Pyx_GIVEREF(__pyx_v_pwidth);
        PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_v_pwidth);
        __Pyx_INCREF(__pyx_v_pheight);
        __Pyx_GIVEREF(__pyx_v_pheight);
        PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_v_pheight);
        __pyx_t_1 = NULL;
        __pyx_t_9 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
          __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_2);
          if (likely(__pyx_t_1)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
            __Pyx_INCREF(__pyx_t_1);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_2, function);
            __pyx_t_9 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_10, __pyx_v_window_flags};
          __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 370, __pyx_L33_error)
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
          PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_t_10, __pyx_v_window_flags};
          __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 370, __pyx_L33_error)
          __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        } else
        #endif
        {
          __pyx_t_14 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 370, __pyx_L33_error)
          __Pyx_GOTREF(__pyx_t_14);
          if (__pyx_t_1) {
            __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_1); __pyx_t_1 = NULL;
          }
          __Pyx_GIVEREF(__pyx_t_10);
          PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_9, __pyx_t_10);
          __Pyx_INCREF(__pyx_v_window_flags);
          __Pyx_GIVEREF(__pyx_v_window_flags);
          PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_9, __pyx_v_window_flags);
          __pyx_t_10 = 0;
          __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_14, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 370, __pyx_L33_error)
          __Pyx_GOTREF(__pyx_t_8);
          __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        }
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_GIVEREF(__pyx_t_8);
        __Pyx_GOTREF(__pyx_v_self->window);
        __Pyx_DECREF(__pyx_v_self->window);
        __pyx_v_self->window = __pyx_t_8;
        __pyx_t_8 = 0;

        /* "renpy/gl2/gl2draw.pyx":368
 * 
 *         if self.window is None:
 *             try:             # <<<<<<<<<<<<<<
 *                 renpy.display.log.write("Windowed mode.")
 *                 self.window = pygame.display.set_mode((pwidth, pheight), window_flags)
 */
      }
      __Pyx_XDECREF(__pyx_t_13); __pyx_t_13 = 0;
      __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
      __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
      goto __pyx_L38_try_end;
      __pyx_L33_error:;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;

      /* "renpy/gl2/gl2draw.pyx":372
 *                 self.window = pygame.display.set_mode((pwidth, pheight), window_flags)
 * 
 *             except pygame.error as e:             # <<<<<<<<<<<<<<
 *                 renpy.display.log.write("Could not get pygame screen: %r", e)
 *                 return False
 */
      __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_2, &__pyx_t_14);
      __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_pygame); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 372, __pyx_L35_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_error); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 372, __pyx_L35_except_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_9 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_8, __pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_2, __pyx_t_14);
      __pyx_t_8 = 0; __pyx_t_2 = 0; __pyx_t_14 = 0;
      if (__pyx_t_9) {
        __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
        if (__Pyx_GetException(&__pyx_t_14, &__pyx_t_2, &__pyx_t_8) < 0) __PYX_ERR(0, 372, __pyx_L35_except_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_XDECREF_SET(__pyx_v_e, __pyx_t_2);

        /* "renpy/gl2/gl2draw.pyx":373
 * 
 *             except pygame.error as e:
 *                 renpy.display.log.write("Could not get pygame screen: %r", e)             # <<<<<<<<<<<<<<
 *                 return False
 * 
 */
        __Pyx_GetModuleGlobalName(__pyx_t_10, __pyx_n_s_renpy); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 373, __pyx_L35_except_error)
        __Pyx_GOTREF(__pyx_t_10);
        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_display); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 373, __pyx_L35_except_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_log); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 373, __pyx_L35_except_error)
        __Pyx_GOTREF(__pyx_t_10);
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_write); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 373, __pyx_L35_except_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
        __pyx_t_10 = NULL;
        __pyx_t_9 = 0;
        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) {
          __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_15);
          if (likely(__pyx_t_10)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
            __Pyx_INCREF(__pyx_t_10);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_15, function);
            __pyx_t_9 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_15)) {
          PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_kp_s_Could_not_get_pygame_screen_r, __pyx_v_e};
          __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 373, __pyx_L35_except_error)
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
          PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_kp_s_Could_not_get_pygame_screen_r, __pyx_v_e};
          __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 373, __pyx_L35_except_error)
          __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
          __Pyx_GOTREF(__pyx_t_1);
        } else
        #endif
        {
          __pyx_t_3 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 373, __pyx_L35_except_error)
          __Pyx_GOTREF(__pyx_t_3);
          if (__pyx_t_10) {
            __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_10); __pyx_t_10 = NULL;
          }
          __Pyx_INCREF(__pyx_kp_s_Could_not_get_pygame_screen_r);
          __Pyx_GIVEREF(__pyx_kp_s_Could_not_get_pygame_screen_r);
          PyTuple_SET_ITEM(__pyx_t_3, 0+__pyx_t_9, __pyx_kp_s_Could_not_get_pygame_screen_r);
          __Pyx_INCREF(__pyx_v_e);
          __Pyx_GIVEREF(__pyx_v_e);
          PyTuple_SET_ITEM(__pyx_t_3, 1+__pyx_t_9, __pyx_v_e);
          __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_3, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 373, __pyx_L35_except_error)
          __Pyx_GOTREF(__pyx_t_1);
          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        }
        __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "renpy/gl2/gl2draw.pyx":374
 *             except pygame.error as e:
 *                 renpy.display.log.write("Could not get pygame screen: %r", e)
 *                 return False             # <<<<<<<<<<<<<<
 * 
 *         # Initialize OpenGL.
 */
        __Pyx_XDECREF(__pyx_r);
        __Pyx_INCREF(Py_False);
        __pyx_r = Py_False;
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        goto __pyx_L36_except_return;
      }
      goto __pyx_L35_except_error;
      __pyx_L35_except_error:;

      /* "renpy/gl2/gl2draw.pyx":368
 * 
 *         if self.window is None:
 *             try:             # <<<<<<<<<<<<<<
 *                 renpy.display.log.write("Windowed mode.")
 *                 self.window = pygame.display.set_mode((pwidth, pheight), window_flags)
 */
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11);
      goto __pyx_L1_error;
      __pyx_L36_except_return:;
      __Pyx_XGIVEREF(__pyx_t_13);
      __Pyx_XGIVEREF(__pyx_t_12);
      __Pyx_XGIVEREF(__pyx_t_11);
      __Pyx_ExceptionReset(__pyx_t_13, __pyx_t_12, __pyx_t_11);
      goto __pyx_L0;
      __pyx_L38_try_end:;
    }

    /* "renpy/gl2/gl2draw.pyx":367
 *                 self.window = None
 * 
 *         if self.window is None:             # <<<<<<<<<<<<<<
 *             try:
 *                 renpy.display.log.write("Windowed mode.")
 */
  }

  /* "renpy/gl2/gl2draw.pyx":378
 *         # Initialize OpenGL.
 * 
 *         if "RENPY_FAIL_" + self.info["renderer"].upper() in os.environ:             # <<<<<<<<<<<<<<
 *             self.quit()
 *             return False
 */
  if (unlikely(__pyx_v_self->info == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 378, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_PyDict_GetItem(__pyx_v_self->info, __pyx_n_s_renderer); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_upper); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_14);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_14, function);
    }
  }
  __pyx_t_8 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = PyNumber_Add(__pyx_n_s_RENPY_FAIL, __pyx_t_8); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_os); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_environ); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 378, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_5 = (__Pyx_PySequence_ContainsTF(__pyx_t_14, __pyx_t_2, Py_EQ)); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 378, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = (__pyx_t_5 != 0);
  if (__pyx_t_6) {

    /* "renpy/gl2/gl2draw.pyx":379
 * 
 *         if "RENPY_FAIL_" + self.info["renderer"].upper() in os.environ:
 *             self.quit()             # <<<<<<<<<<<<<<
 *             return False
 * 
 */
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_quit); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 379, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_14, function);
      }
    }
    __pyx_t_2 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_14);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 379, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "renpy/gl2/gl2draw.pyx":380
 *         if "RENPY_FAIL_" + self.info["renderer"].upper() in os.environ:
 *             self.quit()
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         # Load uguu, and init GL.
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":378
 *         # Initialize OpenGL.
 * 
 *         if "RENPY_FAIL_" + self.info["renderer"].upper() in os.environ:             # <<<<<<<<<<<<<<
 *             self.quit()
 *             return False
 */
  }

  /* "renpy/gl2/gl2draw.pyx":383
 * 
 *         # Load uguu, and init GL.
 *         renpy.uguu.gl.clear_missing_functions()             # <<<<<<<<<<<<<<
 *         renpy.uguu.gl.load()
 *         if renpy.uguu.gl.check_missing_functions(renpy.gl2.gl2functions.required_functions):
 */
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_renpy); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_uguu); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_gl); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_clear_missing_functions); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_2 = (__pyx_t_14) ? __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_14) : __Pyx_PyObject_CallNoArg(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 383, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":384
 *         # Load uguu, and init GL.
 *         renpy.uguu.gl.clear_missing_functions()
 *         renpy.uguu.gl.load()             # <<<<<<<<<<<<<<
 *         if renpy.uguu.gl.check_missing_functions(renpy.gl2.gl2functions.required_functions):
 *             return False
 */
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_renpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_uguu); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_gl); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_load); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_14, function);
    }
  }
  __pyx_t_2 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 384, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":385
 *         renpy.uguu.gl.clear_missing_functions()
 *         renpy.uguu.gl.load()
 *         if renpy.uguu.gl.check_missing_functions(renpy.gl2.gl2functions.required_functions):             # <<<<<<<<<<<<<<
 *             return False
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_renpy); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_uguu); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_gl); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_check_missing_functions); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_renpy); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_gl2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_gl2functions); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_required_functions); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_2 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_14, __pyx_t_1) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1);
  __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 385, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 385, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_6) {

    /* "renpy/gl2/gl2draw.pyx":386
 *         renpy.uguu.gl.load()
 *         if renpy.uguu.gl.check_missing_functions(renpy.gl2.gl2functions.required_functions):
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         # Log the GL version.
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":385
 *         renpy.uguu.gl.clear_missing_functions()
 *         renpy.uguu.gl.load()
 *         if renpy.uguu.gl.check_missing_functions(renpy.gl2.gl2functions.required_functions):             # <<<<<<<<<<<<<<
 *             return False
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":389
 * 
 *         # Log the GL version.
 *         renderer = <char *> glGetString(GL_RENDERER)             # <<<<<<<<<<<<<<
 *         version = <char *> glGetString(GL_VERSION)
 * 
 */
  __pyx_v_renderer = ((char *)__pyx_v_5renpy_4uguu_2gl_glGetString(GL_RENDERER));

  /* "renpy/gl2/gl2draw.pyx":390
 *         # Log the GL version.
 *         renderer = <char *> glGetString(GL_RENDERER)
 *         version = <char *> glGetString(GL_VERSION)             # <<<<<<<<<<<<<<
 * 
 *         renpy.display.log.write("Vendor: %r", str(<char *> glGetString(GL_VENDOR)))
 */
  __pyx_v_version = ((char *)__pyx_v_5renpy_4uguu_2gl_glGetString(GL_VERSION));

  /* "renpy/gl2/gl2draw.pyx":392
 *         version = <char *> glGetString(GL_VERSION)
 * 
 *         renpy.display.log.write("Vendor: %r", str(<char *> glGetString(GL_VENDOR)))             # <<<<<<<<<<<<<<
 *         renpy.display.log.write("Renderer: %r", renderer)
 *         renpy.display.log.write("Version: %r", version)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_renpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_display); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_log); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_write); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyBytes_FromString(((char *)__pyx_v_5renpy_4uguu_2gl_glGetString(GL_VENDOR))); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_14 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyString_Type)), __pyx_t_8); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 392, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_kp_s_Vendor_r, __pyx_t_14};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 392, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_kp_s_Vendor_r, __pyx_t_14};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 392, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  } else
  #endif
  {
    __pyx_t_15 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 392, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (__pyx_t_8) {
      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8); __pyx_t_8 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_s_Vendor_r);
    __Pyx_GIVEREF(__pyx_kp_s_Vendor_r);
    PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_9, __pyx_kp_s_Vendor_r);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_9, __pyx_t_14);
    __pyx_t_14 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_15, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 392, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":393
 * 
 *         renpy.display.log.write("Vendor: %r", str(<char *> glGetString(GL_VENDOR)))
 *         renpy.display.log.write("Renderer: %r", renderer)             # <<<<<<<<<<<<<<
 *         renpy.display.log.write("Version: %r", version)
 *         renpy.display.log.write("Display Info: %s", self.display_info)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_log); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_write); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_renderer); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 393, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_14 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_15);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_15, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_15)) {
    PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_kp_s_Renderer_r, __pyx_t_1};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_15)) {
    PyObject *__pyx_temp[3] = {__pyx_t_14, __pyx_kp_s_Renderer_r, __pyx_t_1};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_15, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else
  #endif
  {
    __pyx_t_8 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 393, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    if (__pyx_t_14) {
      __Pyx_GIVEREF(__pyx_t_14); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_14); __pyx_t_14 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_s_Renderer_r);
    __Pyx_GIVEREF(__pyx_kp_s_Renderer_r);
    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_9, __pyx_kp_s_Renderer_r);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_9, __pyx_t_1);
    __pyx_t_1 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_15, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 393, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  }
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":394
 *         renpy.display.log.write("Vendor: %r", str(<char *> glGetString(GL_VENDOR)))
 *         renpy.display.log.write("Renderer: %r", renderer)
 *         renpy.display.log.write("Version: %r", version)             # <<<<<<<<<<<<<<
 *         renpy.display.log.write("Display Info: %s", self.display_info)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_renpy); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_display); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_log); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_15 = __Pyx_PyBytes_FromString(__pyx_v_version); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 394, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_1 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_s_Version_r, __pyx_t_15};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 394, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_s_Version_r, __pyx_t_15};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 394, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  } else
  #endif
  {
    __pyx_t_14 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 394, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_s_Version_r);
    __Pyx_GIVEREF(__pyx_kp_s_Version_r);
    PyTuple_SET_ITEM(__pyx_t_14, 0+__pyx_t_9, __pyx_kp_s_Version_r);
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_14, 1+__pyx_t_9, __pyx_t_15);
    __pyx_t_15 = 0;
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_14, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 394, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":395
 *         renpy.display.log.write("Renderer: %r", renderer)
 *         renpy.display.log.write("Version: %r", version)
 *         renpy.display.log.write("Display Info: %s", self.display_info)             # <<<<<<<<<<<<<<
 * 
 *         extensions_string = <char *> glGetString(GL_EXTENSIONS)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_renpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_display); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_log); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 395, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_14);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_14, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_14)) {
    PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_kp_s_Display_Info_s, __pyx_v_self->display_info};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 395, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
    PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_kp_s_Display_Info_s, __pyx_v_self->display_info};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 395, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  {
    __pyx_t_15 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    if (__pyx_t_8) {
      __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_15, 0, __pyx_t_8); __pyx_t_8 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_s_Display_Info_s);
    __Pyx_GIVEREF(__pyx_kp_s_Display_Info_s);
    PyTuple_SET_ITEM(__pyx_t_15, 0+__pyx_t_9, __pyx_kp_s_Display_Info_s);
    __Pyx_INCREF(__pyx_v_self->display_info);
    __Pyx_GIVEREF(__pyx_v_self->display_info);
    PyTuple_SET_ITEM(__pyx_t_15, 1+__pyx_t_9, __pyx_v_self->display_info);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_15, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 395, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  }
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":397
 *         renpy.display.log.write("Display Info: %s", self.display_info)
 * 
 *         extensions_string = <char *> glGetString(GL_EXTENSIONS)             # <<<<<<<<<<<<<<
 *         extensions = set(extensions_string.split(" "))
 * 
 */
  __pyx_v_extensions_string = ((char *)__pyx_v_5renpy_4uguu_2gl_glGetString(GL_EXTENSIONS));

  /* "renpy/gl2/gl2draw.pyx":398
 * 
 *         extensions_string = <char *> glGetString(GL_EXTENSIONS)
 *         extensions = set(extensions_string.split(" "))             # <<<<<<<<<<<<<<
 * 
 *         if renpy.config.log_gl_extensions:
 */
  __pyx_t_14 = __Pyx_PyBytes_FromString(__pyx_v_extensions_string); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_split); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_14 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_15))) {
    __pyx_t_14 = PyMethod_GET_SELF(__pyx_t_15);
    if (likely(__pyx_t_14)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_15);
      __Pyx_INCREF(__pyx_t_14);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_15, function);
    }
  }
  __pyx_t_2 = (__pyx_t_14) ? __Pyx_PyObject_Call2Args(__pyx_t_15, __pyx_t_14, __pyx_kp_s__6) : __Pyx_PyObject_CallOneArg(__pyx_t_15, __pyx_kp_s__6);
  __Pyx_XDECREF(__pyx_t_14); __pyx_t_14 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_15 = PySet_New(__pyx_t_2); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 398, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_extensions = ((PyObject*)__pyx_t_15);
  __pyx_t_15 = 0;

  /* "renpy/gl2/gl2draw.pyx":400
 *         extensions = set(extensions_string.split(" "))
 * 
 *         if renpy.config.log_gl_extensions:             # <<<<<<<<<<<<<<
 * 
 *             renpy.display.log.write("Extensions:")
 */
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_renpy); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 400, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_config); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 400, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_log_gl_extensions); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 400, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_15); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 400, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  if (__pyx_t_6) {

    /* "renpy/gl2/gl2draw.pyx":402
 *         if renpy.config.log_gl_extensions:
 * 
 *             renpy.display.log.write("Extensions:")             # <<<<<<<<<<<<<<
 * 
 *             for i in sorted(extensions):
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 402, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 402, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 402, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 402, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
      __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_14);
      if (likely(__pyx_t_2)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
        __Pyx_INCREF(__pyx_t_2);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_14, function);
      }
    }
    __pyx_t_15 = (__pyx_t_2) ? __Pyx_PyObject_Call2Args(__pyx_t_14, __pyx_t_2, __pyx_kp_s_Extensions) : __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_kp_s_Extensions);
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 402, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_15);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;

    /* "renpy/gl2/gl2draw.pyx":404
 *             renpy.display.log.write("Extensions:")
 * 
 *             for i in sorted(extensions):             # <<<<<<<<<<<<<<
 *                 renpy.display.log.write("    %s", i)
 * 
 */
    __pyx_t_14 = PySequence_List(__pyx_v_extensions); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 404, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __pyx_t_15 = ((PyObject*)__pyx_t_14);
    __pyx_t_14 = 0;
    __pyx_t_16 = PyList_Sort(__pyx_t_15); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(0, 404, __pyx_L1_error)
    if (unlikely(__pyx_t_15 == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
      __PYX_ERR(0, 404, __pyx_L1_error)
    }
    __pyx_t_14 = __pyx_t_15; __Pyx_INCREF(__pyx_t_14); __pyx_t_17 = 0;
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
    for (;;) {
      if (__pyx_t_17 >= PyList_GET_SIZE(__pyx_t_14)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_15 = PyList_GET_ITEM(__pyx_t_14, __pyx_t_17); __Pyx_INCREF(__pyx_t_15); __pyx_t_17++; if (unlikely(0 < 0)) __PYX_ERR(0, 404, __pyx_L1_error)
      #else
      __pyx_t_15 = PySequence_ITEM(__pyx_t_14, __pyx_t_17); __pyx_t_17++; if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 404, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      #endif
      __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_15);
      __pyx_t_15 = 0;

      /* "renpy/gl2/gl2draw.pyx":405
 * 
 *             for i in sorted(extensions):
 *                 renpy.display.log.write("    %s", i)             # <<<<<<<<<<<<<<
 * 
 *         # Do additional setup needed.
 */
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 405, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      __pyx_t_9 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_8, function);
          __pyx_t_9 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_8)) {
        PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_s_s, __pyx_v_i};
        __pyx_t_15 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 405, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_GOTREF(__pyx_t_15);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
        PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_kp_s_s, __pyx_v_i};
        __pyx_t_15 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 405, __pyx_L1_error)
        __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_GOTREF(__pyx_t_15);
      } else
      #endif
      {
        __pyx_t_1 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 405, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        if (__pyx_t_2) {
          __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_2); __pyx_t_2 = NULL;
        }
        __Pyx_INCREF(__pyx_kp_s_s);
        __Pyx_GIVEREF(__pyx_kp_s_s);
        PyTuple_SET_ITEM(__pyx_t_1, 0+__pyx_t_9, __pyx_kp_s_s);
        __Pyx_INCREF(__pyx_v_i);
        __Pyx_GIVEREF(__pyx_v_i);
        PyTuple_SET_ITEM(__pyx_t_1, 1+__pyx_t_9, __pyx_v_i);
        __pyx_t_15 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_1, NULL); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 405, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_15);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      }
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;

      /* "renpy/gl2/gl2draw.pyx":404
 *             renpy.display.log.write("Extensions:")
 * 
 *             for i in sorted(extensions):             # <<<<<<<<<<<<<<
 *                 renpy.display.log.write("    %s", i)
 * 
 */
    }
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;

    /* "renpy/gl2/gl2draw.pyx":400
 *         extensions = set(extensions_string.split(" "))
 * 
 *         if renpy.config.log_gl_extensions:             # <<<<<<<<<<<<<<
 * 
 *             renpy.display.log.write("Extensions:")
 */
  }

  /* "renpy/gl2/gl2draw.pyx":408
 * 
 *         # Do additional setup needed.
 *         renpy.display.pgrender.set_rgba_masks()             # <<<<<<<<<<<<<<
 * 
 *         if renpy.android or renpy.ios:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_15, __pyx_n_s_renpy); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_display); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_15 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_pgrender); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_15, __pyx_n_s_set_rgba_masks); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  __pyx_t_15 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_15)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_15);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
    }
  }
  __pyx_t_14 = (__pyx_t_15) ? __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_15) : __Pyx_PyObject_CallNoArg(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
  if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 408, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;

  /* "renpy/gl2/gl2draw.pyx":410
 *         renpy.display.pgrender.set_rgba_masks()
 * 
 *         if renpy.android or renpy.ios:             # <<<<<<<<<<<<<<
 *             self.redraw_period = 1.0
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_renpy); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 410, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_android); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 410, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 410, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (!__pyx_t_5) {
  } else {
    __pyx_t_6 = __pyx_t_5;
    goto __pyx_L47_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_renpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 410, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_14 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_ios); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 410, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_14); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 410, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_6 = __pyx_t_5;
  __pyx_L47_bool_binop_done:;
  if (__pyx_t_6) {

    /* "renpy/gl2/gl2draw.pyx":411
 * 
 *         if renpy.android or renpy.ios:
 *             self.redraw_period = 1.0             # <<<<<<<<<<<<<<
 * 
 *         elif renpy.emscripten:
 */
    __pyx_v_self->redraw_period = 1.0;

    /* "renpy/gl2/gl2draw.pyx":410
 *         renpy.display.pgrender.set_rgba_masks()
 * 
 *         if renpy.android or renpy.ios:             # <<<<<<<<<<<<<<
 *             self.redraw_period = 1.0
 * 
 */
    goto __pyx_L46;
  }

  /* "renpy/gl2/gl2draw.pyx":413
 *             self.redraw_period = 1.0
 * 
 *         elif renpy.emscripten:             # <<<<<<<<<<<<<<
 *             # give back control to browser regularly
 *             self.redraw_period = 0.1
 */
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_renpy); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 413, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_14, __pyx_n_s_emscripten); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 413, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 413, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (__pyx_t_6) {

    /* "renpy/gl2/gl2draw.pyx":415
 *         elif renpy.emscripten:
 *             # give back control to browser regularly
 *             self.redraw_period = 0.1             # <<<<<<<<<<<<<<
 * 
 *         self.shader_cache = ShaderCache("cache/shaders.txt", self.gles)
 */
    __pyx_v_self->redraw_period = 0.1;

    /* "renpy/gl2/gl2draw.pyx":413
 *             self.redraw_period = 1.0
 * 
 *         elif renpy.emscripten:             # <<<<<<<<<<<<<<
 *             # give back control to browser regularly
 *             self.redraw_period = 0.1
 */
  }
  __pyx_L46:;

  /* "renpy/gl2/gl2draw.pyx":417
 *             self.redraw_period = 0.1
 * 
 *         self.shader_cache = ShaderCache("cache/shaders.txt", self.gles)             # <<<<<<<<<<<<<<
 * 
 *         # Initialize the texture loader.
 */
  __Pyx_GetModuleGlobalName(__pyx_t_14, __pyx_n_s_ShaderCache); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 417, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_t_15 = __Pyx_PyBool_FromLong(__pyx_v_self->gles); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 417, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_15);
  __pyx_t_1 = NULL;
  __pyx_t_9 = 0;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_14))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_14);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_14, function);
      __pyx_t_9 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_14)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_s_cache_shaders_txt, __pyx_t_15};
    __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 417, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_kp_s_cache_shaders_txt, __pyx_t_15};
    __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 417, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_s_cache_shaders_txt);
    __Pyx_GIVEREF(__pyx_kp_s_cache_shaders_txt);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_9, __pyx_kp_s_cache_shaders_txt);
    __Pyx_GIVEREF(__pyx_t_15);
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_9, __pyx_t_15);
    __pyx_t_15 = 0;
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_14, __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 417, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_GIVEREF(__pyx_t_8);
  __Pyx_GOTREF(__pyx_v_self->shader_cache);
  __Pyx_DECREF(__pyx_v_self->shader_cache);
  __pyx_v_self->shader_cache = __pyx_t_8;
  __pyx_t_8 = 0;

  /* "renpy/gl2/gl2draw.pyx":420
 * 
 *         # Initialize the texture loader.
 *         self.texture_loader = TextureLoader(self)             # <<<<<<<<<<<<<<
 * 
 *         self.on_resize(first=True)
 */
  __pyx_t_8 = __Pyx_PyObject_CallOneArg(((PyObject *)__pyx_ptype_5renpy_3gl2_10gl2texture_TextureLoader), ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 420, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_GIVEREF(__pyx_t_8);
  __Pyx_GOTREF(__pyx_v_self->texture_loader);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->texture_loader));
  __pyx_v_self->texture_loader = ((struct __pyx_obj_5renpy_3gl2_10gl2texture_TextureLoader *)__pyx_t_8);
  __pyx_t_8 = 0;

  /* "renpy/gl2/gl2draw.pyx":422
 *         self.texture_loader = TextureLoader(self)
 * 
 *         self.on_resize(first=True)             # <<<<<<<<<<<<<<
 * 
 *         return True
 */
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_on_resize); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_14 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  if (PyDict_SetItem(__pyx_t_14, __pyx_n_s_first, Py_True) < 0) __PYX_ERR(0, 422, __pyx_L1_error)
  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_empty_tuple, __pyx_t_14); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 422, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":424
 *         self.on_resize(first=True)
 * 
 *         return True             # <<<<<<<<<<<<<<
 * 
 *     def on_resize(self, first=False):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(Py_True);
  __pyx_r = Py_True;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":275
 *             renpy.config.gl_set_attributes()
 * 
 *     def init(self, virtual_size):             # <<<<<<<<<<<<<<
 *         """
 *         This changes the video mode. It also initializes OpenGL, if it
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.init", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_vwidth);
  __Pyx_XDECREF(__pyx_v_vheight);
  __Pyx_XDECREF(__pyx_v_physical_size);
  __Pyx_XDECREF(__pyx_v_pwidth);
  __Pyx_XDECREF(__pyx_v_pheight);
  __Pyx_XDECREF(__pyx_v_fullscreen);
  __Pyx_XDECREF(__pyx_v_target_framerate);
  __Pyx_XDECREF(__pyx_v_refresh_rate);
  __Pyx_XDECREF(__pyx_v_sync_frames);
  __Pyx_XDECREF(__pyx_v_window_flags);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_extensions);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":426
 *         return True
 * 
 *     def on_resize(self, first=False):             # <<<<<<<<<<<<<<
 * 
 *         if not first:
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13on_resize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13on_resize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_first = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("on_resize (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_first,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_first);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "on_resize") < 0)) __PYX_ERR(0, 426, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_first = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("on_resize", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 426, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.on_resize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12on_resize(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), __pyx_v_first);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}
static PyObject *__pyx_gb_5renpy_3gl2_7gl2draw_7GL2Draw_9on_resize_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value); /* proto */

/* "renpy/gl2/gl2draw.pyx":496
 * 
 *         # The location of the viewport, in drawable pixels.
 *         self.drawable_viewport = tuple(i * self.draw_per_phys for i in self.physical_box)             # <<<<<<<<<<<<<<
 * 
 *         dwidth = self.drawable_viewport[2]
 */

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_9on_resize_genexpr(PyObject *__pyx_self) {
  struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr *__pyx_cur_scope;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("genexpr", 0);
  __pyx_cur_scope = (struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr *)__pyx_tp_new_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr(__pyx_ptype_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 496, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_outer_scope = (struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize *) __pyx_self;
  __Pyx_INCREF(((PyObject *)__pyx_cur_scope->__pyx_outer_scope));
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_outer_scope);
  {
    __pyx_CoroutineObject *gen = __Pyx_Generator_New((__pyx_coroutine_body_t) __pyx_gb_5renpy_3gl2_7gl2draw_7GL2Draw_9on_resize_2generator, NULL, (PyObject *) __pyx_cur_scope, __pyx_n_s_genexpr, __pyx_n_s_on_resize_locals_genexpr, __pyx_n_s_renpy_gl2_gl2draw); if (unlikely(!gen)) __PYX_ERR(0, 496, __pyx_L1_error)
    __Pyx_DECREF(__pyx_cur_scope);
    __Pyx_RefNannyFinishContext();
    return (PyObject *) gen;
  }

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.on_resize.genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_gb_5renpy_3gl2_7gl2draw_7GL2Draw_9on_resize_2generator(__pyx_CoroutineObject *__pyx_generator, CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject *__pyx_sent_value) /* generator body */
{
  struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr *__pyx_cur_scope = ((struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr *)__pyx_generator->closure);
  PyObject *__pyx_r = NULL;
  PyObject *__pyx_t_1 = NULL;
  Py_ssize_t __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("genexpr", 0);
  switch (__pyx_generator->resume_label) {
    case 0: goto __pyx_L3_first_run;
    case 1: goto __pyx_L6_resume_from_yield;
    default: /* CPython raises the right error here */
    __Pyx_RefNannyFinishContext();
    return NULL;
  }
  __pyx_L3_first_run:;
  if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 496, __pyx_L1_error)
  if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 496, __pyx_L1_error) }
  if (unlikely(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->physical_box == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 496, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->physical_box; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
  for (;;) {
    if (__pyx_t_2 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_2); __Pyx_INCREF(__pyx_t_3); __pyx_t_2++; if (unlikely(0 < 0)) __PYX_ERR(0, 496, __pyx_L1_error)
    #else
    __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 496, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_XGOTREF(__pyx_cur_scope->__pyx_v_i);
    __Pyx_XDECREF_SET(__pyx_cur_scope->__pyx_v_i, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_3);
    __pyx_t_3 = 0;
    if (unlikely(!__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self)) { __Pyx_RaiseClosureNameError("self"); __PYX_ERR(0, 496, __pyx_L1_error) }
    __pyx_t_3 = PyFloat_FromDouble(__pyx_cur_scope->__pyx_outer_scope->__pyx_v_self->draw_per_phys); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 496, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyNumber_Multiply(__pyx_cur_scope->__pyx_v_i, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 496, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_r = __pyx_t_4;
    __pyx_t_4 = 0;
    __Pyx_XGIVEREF(__pyx_t_1);
    __pyx_cur_scope->__pyx_t_0 = __pyx_t_1;
    __pyx_cur_scope->__pyx_t_1 = __pyx_t_2;
    __Pyx_XGIVEREF(__pyx_r);
    __Pyx_RefNannyFinishContext();
    __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
    /* return from generator, yielding value */
    __pyx_generator->resume_label = 1;
    return __pyx_r;
    __pyx_L6_resume_from_yield:;
    __pyx_t_1 = __pyx_cur_scope->__pyx_t_0;
    __pyx_cur_scope->__pyx_t_0 = 0;
    __Pyx_XGOTREF(__pyx_t_1);
    __pyx_t_2 = __pyx_cur_scope->__pyx_t_1;
    if (unlikely(!__pyx_sent_value)) __PYX_ERR(0, 496, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  CYTHON_MAYBE_UNUSED_VAR(__pyx_cur_scope);

  /* function exit code */
  PyErr_SetNone(PyExc_StopIteration);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("genexpr", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_r); __pyx_r = 0;
  #if !CYTHON_USE_EXC_INFO_STACK
  __Pyx_Coroutine_ResetAndClearException(__pyx_generator);
  #endif
  __pyx_generator->resume_label = -1;
  __Pyx_Coroutine_clear((PyObject*)__pyx_generator);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":426
 *         return True
 * 
 *     def on_resize(self, first=False):             # <<<<<<<<<<<<<<
 * 
 *         if not first:
 */

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12on_resize(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_first) {
  struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize *__pyx_cur_scope;
  PyObject *__pyx_v_fullscreen = NULL;
  PyObject *__pyx_v_pwidth = NULL;
  PyObject *__pyx_v_pheight = NULL;
  PyObject *__pyx_v_vwidth = NULL;
  PyObject *__pyx_v_vheight = NULL;
  PyObject *__pyx_v_view_width = NULL;
  PyObject *__pyx_v_view_height = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_physical_ar = NULL;
  PyObject *__pyx_v_ratio = NULL;
  PyObject *__pyx_v_px_padding = NULL;
  PyObject *__pyx_v_py_padding = NULL;
  PyObject *__pyx_v_x_padding = NULL;
  PyObject *__pyx_v_y_padding = NULL;
  PyObject *__pyx_v_dwidth = NULL;
  PyObject *__pyx_v_dheight = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *(*__pyx_t_7)(PyObject *);
  int __pyx_t_8;
  long __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  float __pyx_t_11;
  float __pyx_t_12;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("on_resize", 0);
  __pyx_cur_scope = (struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize *)__pyx_tp_new_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize(__pyx_ptype_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize, __pyx_empty_tuple, NULL);
  if (unlikely(!__pyx_cur_scope)) {
    __pyx_cur_scope = ((struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize *)Py_None);
    __Pyx_INCREF(Py_None);
    __PYX_ERR(0, 426, __pyx_L1_error)
  } else {
    __Pyx_GOTREF(__pyx_cur_scope);
  }
  __pyx_cur_scope->__pyx_v_self = __pyx_v_self;
  __Pyx_INCREF((PyObject *)__pyx_cur_scope->__pyx_v_self);
  __Pyx_GIVEREF((PyObject *)__pyx_cur_scope->__pyx_v_self);

  /* "renpy/gl2/gl2draw.pyx":428
 *     def on_resize(self, first=False):
 * 
 *         if not first:             # <<<<<<<<<<<<<<
 *             self.quit_fbo()
 *             self.shader_cache.clear()
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_first); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 428, __pyx_L1_error)
  __pyx_t_2 = ((!__pyx_t_1) != 0);
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":429
 * 
 *         if not first:
 *             self.quit_fbo()             # <<<<<<<<<<<<<<
 *             self.shader_cache.clear()
 * 
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_quit_fbo); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 429, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 429, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "renpy/gl2/gl2draw.pyx":430
 *         if not first:
 *             self.quit_fbo()
 *             self.shader_cache.clear()             # <<<<<<<<<<<<<<
 * 
 *         if renpy.android or renpy.ios:
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->shader_cache, __pyx_n_s_clear); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 430, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 430, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "renpy/gl2/gl2draw.pyx":428
 *     def on_resize(self, first=False):
 * 
 *         if not first:             # <<<<<<<<<<<<<<
 *             self.quit_fbo()
 *             self.shader_cache.clear()
 */
  }

  /* "renpy/gl2/gl2draw.pyx":432
 *             self.shader_cache.clear()
 * 
 *         if renpy.android or renpy.ios:             # <<<<<<<<<<<<<<
 *             pygame.display.get_window().recreate_gl_context()
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 432, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_android); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 432, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 432, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_1) {
  } else {
    __pyx_t_2 = __pyx_t_1;
    goto __pyx_L5_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_renpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 432, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_ios); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 432, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 432, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = __pyx_t_1;
  __pyx_L5_bool_binop_done:;
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":433
 * 
 *         if renpy.android or renpy.ios:
 *             pygame.display.get_window().recreate_gl_context()             # <<<<<<<<<<<<<<
 * 
 *         # Are we in fullscreen mode?
 */
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pygame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 433, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_display); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 433, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_get_window); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 433, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_4 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 433, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_recreate_gl_context); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 433, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 433, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "renpy/gl2/gl2draw.pyx":432
 *             self.shader_cache.clear()
 * 
 *         if renpy.android or renpy.ios:             # <<<<<<<<<<<<<<
 *             pygame.display.get_window().recreate_gl_context()
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":436
 * 
 *         # Are we in fullscreen mode?
 *         fullscreen = bool(pygame.display.get_window().get_window_flags() & (pygame.WINDOW_FULLSCREEN_DESKTOP | pygame.WINDOW_FULLSCREEN))             # <<<<<<<<<<<<<<
 * 
 *         # Get the size of the created screen.
 */
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pygame); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_display); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_get_window); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_get_window_flags); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pygame); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_WINDOW_FULLSCREEN_DESKTOP); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pygame); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_WINDOW_FULLSCREEN); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Or(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyNumber_And(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyBool_FromLong((!(!__pyx_t_2))); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 436, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_fullscreen = __pyx_t_6;
  __pyx_t_6 = 0;

  /* "renpy/gl2/gl2draw.pyx":439
 * 
 *         # Get the size of the created screen.
 *         pwidth, pheight = renpy.display.core.get_size()             # <<<<<<<<<<<<<<
 * 
 *         renpy.game.preferences.fullscreen = fullscreen
 */
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_renpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_core); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_get_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 439, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
    PyObject* sequence = __pyx_t_6;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 439, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 439, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 439, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_5 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 439, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_3)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L7_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_5), 2) < 0) __PYX_ERR(0, 439, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L8_unpacking_done;
    __pyx_L7_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 439, __pyx_L1_error)
    __pyx_L8_unpacking_done:;
  }
  __pyx_v_pwidth = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_pheight = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":441
 *         pwidth, pheight = renpy.display.core.get_size()
 * 
 *         renpy.game.preferences.fullscreen = fullscreen             # <<<<<<<<<<<<<<
 *         renpy.game.interface.fullscreen = fullscreen
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_renpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_game); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_preferences); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 441, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_t_6, __pyx_n_s_fullscreen, __pyx_v_fullscreen) < 0) __PYX_ERR(0, 441, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "renpy/gl2/gl2draw.pyx":442
 * 
 *         renpy.game.preferences.fullscreen = fullscreen
 *         renpy.game.interface.fullscreen = fullscreen             # <<<<<<<<<<<<<<
 * 
 *         vwidth, vheight = self.virtual_size
 */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_renpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_game); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_interface); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__Pyx_PyObject_SetAttrStr(__pyx_t_6, __pyx_n_s_fullscreen, __pyx_v_fullscreen) < 0) __PYX_ERR(0, 442, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "renpy/gl2/gl2draw.pyx":444
 *         renpy.game.interface.fullscreen = fullscreen
 * 
 *         vwidth, vheight = self.virtual_size             # <<<<<<<<<<<<<<
 * 
 *         self.physical_size = (pwidth, pheight)
 */
  __pyx_t_6 = __pyx_cur_scope->__pyx_v_self->virtual_size;
  __Pyx_INCREF(__pyx_t_6);
  if (likely(__pyx_t_6 != Py_None)) {
    PyObject* sequence = __pyx_t_6;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 444, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 444, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 444, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 444, __pyx_L1_error)
  }
  __pyx_v_vwidth = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_v_vheight = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":446
 *         vwidth, vheight = self.virtual_size
 * 
 *         self.physical_size = (pwidth, pheight)             # <<<<<<<<<<<<<<
 *         self.drawable_size = pygame.display.get_drawable_size()
 * 
 */
  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 446, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_v_pwidth);
  __Pyx_GIVEREF(__pyx_v_pwidth);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_pwidth);
  __Pyx_INCREF(__pyx_v_pheight);
  __Pyx_GIVEREF(__pyx_v_pheight);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_pheight);
  __Pyx_GIVEREF(__pyx_t_6);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->physical_size);
  __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->physical_size);
  __pyx_cur_scope->__pyx_v_self->physical_size = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;

  /* "renpy/gl2/gl2draw.pyx":447
 * 
 *         self.physical_size = (pwidth, pheight)
 *         self.drawable_size = pygame.display.get_drawable_size()             # <<<<<<<<<<<<<<
 * 
 *         if not fullscreen:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_display); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_get_drawable_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (!(likely(PyTuple_CheckExact(__pyx_t_6))||((__pyx_t_6) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_6)->tp_name), 0))) __PYX_ERR(0, 447, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_6);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->drawable_size);
  __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->drawable_size);
  __pyx_cur_scope->__pyx_v_self->drawable_size = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;

  /* "renpy/gl2/gl2draw.pyx":449
 *         self.drawable_size = pygame.display.get_drawable_size()
 * 
 *         if not fullscreen:             # <<<<<<<<<<<<<<
 *             renpy.game.preferences.physical_size = self.get_physical_size()
 * 
 */
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_fullscreen); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 449, __pyx_L1_error)
  __pyx_t_1 = ((!__pyx_t_2) != 0);
  if (__pyx_t_1) {

    /* "renpy/gl2/gl2draw.pyx":450
 * 
 *         if not fullscreen:
 *             renpy.game.preferences.physical_size = self.get_physical_size()             # <<<<<<<<<<<<<<
 * 
 *         renpy.display.log.write("Screen sizes: virtual=%r physical=%r drawable=%r" % (self.virtual_size, self.physical_size, self.drawable_size))
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_get_physical_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 450, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_4)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_4);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_6 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 450, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 450, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_game); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 450, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_preferences); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 450, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__Pyx_PyObject_SetAttrStr(__pyx_t_3, __pyx_n_s_physical_size, __pyx_t_6) < 0) __PYX_ERR(0, 450, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "renpy/gl2/gl2draw.pyx":449
 *         self.drawable_size = pygame.display.get_drawable_size()
 * 
 *         if not fullscreen:             # <<<<<<<<<<<<<<
 *             renpy.game.preferences.physical_size = self.get_physical_size()
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":452
 *             renpy.game.preferences.physical_size = self.get_physical_size()
 * 
 *         renpy.display.log.write("Screen sizes: virtual=%r physical=%r drawable=%r" % (self.virtual_size, self.physical_size, self.drawable_size))             # <<<<<<<<<<<<<<
 * 
 *         if renpy.config.adjust_view_size is not None:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_renpy); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_display); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_log); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_write); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self->virtual_size);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self->virtual_size);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_cur_scope->__pyx_v_self->virtual_size);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self->physical_size);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self->physical_size);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_cur_scope->__pyx_v_self->physical_size);
  __Pyx_INCREF(__pyx_cur_scope->__pyx_v_self->drawable_size);
  __Pyx_GIVEREF(__pyx_cur_scope->__pyx_v_self->drawable_size);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_cur_scope->__pyx_v_self->drawable_size);
  __pyx_t_5 = __Pyx_PyString_Format(__pyx_kp_s_Screen_sizes_virtual_r_physical, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 452, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":454
 *         renpy.display.log.write("Screen sizes: virtual=%r physical=%r drawable=%r" % (self.virtual_size, self.physical_size, self.drawable_size))
 * 
 *         if renpy.config.adjust_view_size is not None:             # <<<<<<<<<<<<<<
 *             view_width, view_height = renpy.config.adjust_view_size(pwidth, pheight)
 *         else:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 454, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_config); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 454, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_adjust_view_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 454, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_1 = (__pyx_t_3 != Py_None);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":455
 * 
 *         if renpy.config.adjust_view_size is not None:
 *             view_width, view_height = renpy.config.adjust_view_size(pwidth, pheight)             # <<<<<<<<<<<<<<
 *         else:
 * 
 */
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_renpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 455, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_config); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 455, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_adjust_view_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 455, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_pwidth, __pyx_v_pheight};
      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 455, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_pwidth, __pyx_v_pheight};
      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 455, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_3);
    } else
    #endif
    {
      __pyx_t_6 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 455, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_v_pwidth);
      __Pyx_GIVEREF(__pyx_v_pwidth);
      PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_8, __pyx_v_pwidth);
      __Pyx_INCREF(__pyx_v_pheight);
      __Pyx_GIVEREF(__pyx_v_pheight);
      PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_8, __pyx_v_pheight);
      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 455, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
      PyObject* sequence = __pyx_t_3;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 455, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_6 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      #else
      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 455, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 455, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_6);
      #endif
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_5 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 455, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_7 = Py_TYPE(__pyx_t_5)->tp_iternext;
      index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L11_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_4);
      index = 1; __pyx_t_6 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_6)) goto __pyx_L11_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_6);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_5), 2) < 0) __PYX_ERR(0, 455, __pyx_L1_error)
      __pyx_t_7 = NULL;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      goto __pyx_L12_unpacking_done;
      __pyx_L11_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __pyx_t_7 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 455, __pyx_L1_error)
      __pyx_L12_unpacking_done:;
    }
    __pyx_v_view_width = __pyx_t_4;
    __pyx_t_4 = 0;
    __pyx_v_view_height = __pyx_t_6;
    __pyx_t_6 = 0;

    /* "renpy/gl2/gl2draw.pyx":454
 *         renpy.display.log.write("Screen sizes: virtual=%r physical=%r drawable=%r" % (self.virtual_size, self.physical_size, self.drawable_size))
 * 
 *         if renpy.config.adjust_view_size is not None:             # <<<<<<<<<<<<<<
 *             view_width, view_height = renpy.config.adjust_view_size(pwidth, pheight)
 *         else:
 */
    goto __pyx_L10;
  }

  /* "renpy/gl2/gl2draw.pyx":460
 *             # Figure out the virtual box, which includes padding around
 *             # the borders.
 *             physical_ar = 1.0 * pwidth / pheight             # <<<<<<<<<<<<<<
 * 
 *             ratio = min(1.0 * pwidth / vwidth, 1.0 * pheight / vheight)
 */
  /*else*/ {
    __pyx_t_3 = PyNumber_Multiply(__pyx_float_1_0, __pyx_v_pwidth); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 460, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_v_pheight); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 460, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_physical_ar = __pyx_t_6;
    __pyx_t_6 = 0;

    /* "renpy/gl2/gl2draw.pyx":462
 *             physical_ar = 1.0 * pwidth / pheight
 * 
 *             ratio = min(1.0 * pwidth / vwidth, 1.0 * pheight / vheight)             # <<<<<<<<<<<<<<
 * 
 *             view_width = max(int(vwidth * ratio), 1)
 */
    __pyx_t_6 = PyNumber_Multiply(__pyx_float_1_0, __pyx_v_pheight); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 462, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_6, __pyx_v_vheight); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 462, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = PyNumber_Multiply(__pyx_float_1_0, __pyx_v_pwidth); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 462, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_6, __pyx_v_vwidth); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 462, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_5 = PyObject_RichCompare(__pyx_t_3, __pyx_t_4, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 462, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 462, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_2) {
      __Pyx_INCREF(__pyx_t_3);
      __pyx_t_6 = __pyx_t_3;
    } else {
      __Pyx_INCREF(__pyx_t_4);
      __pyx_t_6 = __pyx_t_4;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __pyx_t_6;
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_v_ratio = __pyx_t_3;
    __pyx_t_3 = 0;

    /* "renpy/gl2/gl2draw.pyx":464
 *             ratio = min(1.0 * pwidth / vwidth, 1.0 * pheight / vheight)
 * 
 *             view_width = max(int(vwidth * ratio), 1)             # <<<<<<<<<<<<<<
 *             view_height = max(int(vheight * ratio), 1)
 * 
 */
    __pyx_t_9 = 1;
    __pyx_t_3 = PyNumber_Multiply(__pyx_v_vwidth, __pyx_v_ratio); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 464, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_6 = __Pyx_PyNumber_Int(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 464, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = __Pyx_PyInt_From_long(__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 464, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyObject_RichCompare(__pyx_t_4, __pyx_t_6, Py_GT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 464, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 464, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__pyx_t_2) {
      __pyx_t_5 = __Pyx_PyInt_From_long(__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 464, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_3 = __pyx_t_5;
      __pyx_t_5 = 0;
    } else {
      __Pyx_INCREF(__pyx_t_6);
      __pyx_t_3 = __pyx_t_6;
    }
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_6 = __pyx_t_3;
    __Pyx_INCREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_view_width = __pyx_t_6;
    __pyx_t_6 = 0;

    /* "renpy/gl2/gl2draw.pyx":465
 * 
 *             view_width = max(int(vwidth * ratio), 1)
 *             view_height = max(int(vheight * ratio), 1)             # <<<<<<<<<<<<<<
 * 
 *         px_padding = pwidth - view_width
 */
    __pyx_t_9 = 1;
    __pyx_t_6 = PyNumber_Multiply(__pyx_v_vheight, __pyx_v_ratio); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 465, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_3 = __Pyx_PyNumber_Int(__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 465, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_5 = __Pyx_PyInt_From_long(__pyx_t_9); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 465, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_4 = PyObject_RichCompare(__pyx_t_5, __pyx_t_3, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 465, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 465, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (__pyx_t_2) {
      __pyx_t_4 = __Pyx_PyInt_From_long(__pyx_t_9); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 465, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_6 = __pyx_t_4;
      __pyx_t_4 = 0;
    } else {
      __Pyx_INCREF(__pyx_t_3);
      __pyx_t_6 = __pyx_t_3;
    }
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __pyx_t_6;
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_v_view_height = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  __pyx_L10:;

  /* "renpy/gl2/gl2draw.pyx":467
 *             view_height = max(int(vheight * ratio), 1)
 * 
 *         px_padding = pwidth - view_width             # <<<<<<<<<<<<<<
 *         py_padding = pheight - view_height
 * 
 */
  __pyx_t_3 = PyNumber_Subtract(__pyx_v_pwidth, __pyx_v_view_width); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 467, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_px_padding = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":468
 * 
 *         px_padding = pwidth - view_width
 *         py_padding = pheight - view_height             # <<<<<<<<<<<<<<
 * 
 *         x_padding = px_padding * vwidth / view_width
 */
  __pyx_t_3 = PyNumber_Subtract(__pyx_v_pheight, __pyx_v_view_height); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 468, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_v_py_padding = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":470
 *         py_padding = pheight - view_height
 * 
 *         x_padding = px_padding * vwidth / view_width             # <<<<<<<<<<<<<<
 *         y_padding = py_padding * vheight / view_height
 * 
 */
  __pyx_t_3 = PyNumber_Multiply(__pyx_v_px_padding, __pyx_v_vwidth); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 470, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_v_view_width); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 470, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_x_padding = __pyx_t_6;
  __pyx_t_6 = 0;

  /* "renpy/gl2/gl2draw.pyx":471
 * 
 *         x_padding = px_padding * vwidth / view_width
 *         y_padding = py_padding * vheight / view_height             # <<<<<<<<<<<<<<
 * 
 *         # The position of the physical screen, in virtual pixels
 */
  __pyx_t_6 = PyNumber_Multiply(__pyx_v_py_padding, __pyx_v_vheight); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_6, __pyx_v_view_height); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 471, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_v_y_padding = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":478
 *         # screen.
 *         self.virtual_box = (
 *             -x_padding / 2.0,             # <<<<<<<<<<<<<<
 *             -y_padding / 2.0,
 *              vwidth + x_padding,
 */
  __pyx_t_3 = PyNumber_Negative(__pyx_v_x_padding); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 478, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PyFloat_DivideObjC(__pyx_t_3, __pyx_float_2_0, 2.0, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 478, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":479
 *         self.virtual_box = (
 *             -x_padding / 2.0,
 *             -y_padding / 2.0,             # <<<<<<<<<<<<<<
 *              vwidth + x_padding,
 *              vheight + y_padding)
 */
  __pyx_t_3 = PyNumber_Negative(__pyx_v_y_padding); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 479, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyFloat_DivideObjC(__pyx_t_3, __pyx_float_2_0, 2.0, 0, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 479, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":480
 *             -x_padding / 2.0,
 *             -y_padding / 2.0,
 *              vwidth + x_padding,             # <<<<<<<<<<<<<<
 *              vheight + y_padding)
 * 
 */
  __pyx_t_3 = PyNumber_Add(__pyx_v_vwidth, __pyx_v_x_padding); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 480, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "renpy/gl2/gl2draw.pyx":481
 *             -y_padding / 2.0,
 *              vwidth + x_padding,
 *              vheight + y_padding)             # <<<<<<<<<<<<<<
 * 
 *         # The location of the virtual screen on the physical screen, in
 */
  __pyx_t_5 = PyNumber_Add(__pyx_v_vheight, __pyx_v_y_padding); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 481, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "renpy/gl2/gl2draw.pyx":478
 *         # screen.
 *         self.virtual_box = (
 *             -x_padding / 2.0,             # <<<<<<<<<<<<<<
 *             -y_padding / 2.0,
 *              vwidth + x_padding,
 */
  __pyx_t_10 = PyTuple_New(4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 478, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_10, 2, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_10, 3, __pyx_t_5);
  __pyx_t_6 = 0;
  __pyx_t_4 = 0;
  __pyx_t_3 = 0;
  __pyx_t_5 = 0;

  /* "renpy/gl2/gl2draw.pyx":477
 *         # the virtual screen, the corners are often off the virtual
 *         # screen.
 *         self.virtual_box = (             # <<<<<<<<<<<<<<
 *             -x_padding / 2.0,
 *             -y_padding / 2.0,
 */
  __Pyx_GIVEREF(__pyx_t_10);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->virtual_box);
  __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->virtual_box);
  __pyx_cur_scope->__pyx_v_self->virtual_box = ((PyObject*)__pyx_t_10);
  __pyx_t_10 = 0;

  /* "renpy/gl2/gl2draw.pyx":486
 *         # physical pixels.
 *         self.physical_box = (
 *             px_padding / 2,             # <<<<<<<<<<<<<<
 *             py_padding / 2,
 *             pwidth - px_padding,
 */
  __pyx_t_10 = __Pyx_PyNumber_Divide(__pyx_v_px_padding, __pyx_int_2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);

  /* "renpy/gl2/gl2draw.pyx":487
 *         self.physical_box = (
 *             px_padding / 2,
 *             py_padding / 2,             # <<<<<<<<<<<<<<
 *             pwidth - px_padding,
 *             pheight - py_padding,
 */
  __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_v_py_padding, __pyx_int_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 487, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);

  /* "renpy/gl2/gl2draw.pyx":488
 *             px_padding / 2,
 *             py_padding / 2,
 *             pwidth - px_padding,             # <<<<<<<<<<<<<<
 *             pheight - py_padding,
 *             )
 */
  __pyx_t_3 = PyNumber_Subtract(__pyx_v_pwidth, __pyx_v_px_padding); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 488, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);

  /* "renpy/gl2/gl2draw.pyx":489
 *             py_padding / 2,
 *             pwidth - px_padding,
 *             pheight - py_padding,             # <<<<<<<<<<<<<<
 *             )
 * 
 */
  __pyx_t_4 = PyNumber_Subtract(__pyx_v_pheight, __pyx_v_py_padding); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 489, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);

  /* "renpy/gl2/gl2draw.pyx":486
 *         # physical pixels.
 *         self.physical_box = (
 *             px_padding / 2,             # <<<<<<<<<<<<<<
 *             py_padding / 2,
 *             pwidth - px_padding,
 */
  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 486, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_10);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_4);
  __pyx_t_10 = 0;
  __pyx_t_5 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":485
 *         # The location of the virtual screen on the physical screen, in
 *         # physical pixels.
 *         self.physical_box = (             # <<<<<<<<<<<<<<
 *             px_padding / 2,
 *             py_padding / 2,
 */
  __Pyx_GIVEREF(__pyx_t_6);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->physical_box);
  __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->physical_box);
  __pyx_cur_scope->__pyx_v_self->physical_box = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;

  /* "renpy/gl2/gl2draw.pyx":493
 * 
 *         # The scaling factor of physical_pixels to drawable pixels.
 *         self.draw_per_phys = 1.0 * self.drawable_size[0] / self.physical_size[0]             # <<<<<<<<<<<<<<
 * 
 *         # The location of the viewport, in drawable pixels.
 */
  if (unlikely(__pyx_cur_scope->__pyx_v_self->drawable_size == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 493, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_cur_scope->__pyx_v_self->drawable_size, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = PyNumber_Multiply(__pyx_float_1_0, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(__pyx_cur_scope->__pyx_v_self->physical_size == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 493, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_cur_scope->__pyx_v_self->physical_size, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 493, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_11 = __pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_11 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 493, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_cur_scope->__pyx_v_self->draw_per_phys = __pyx_t_11;

  /* "renpy/gl2/gl2draw.pyx":496
 * 
 *         # The location of the viewport, in drawable pixels.
 *         self.drawable_viewport = tuple(i * self.draw_per_phys for i in self.physical_box)             # <<<<<<<<<<<<<<
 * 
 *         dwidth = self.drawable_viewport[2]
 */
  __pyx_t_3 = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_9on_resize_genexpr(((PyObject*)__pyx_cur_scope)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 496, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 496, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GIVEREF(__pyx_t_6);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->drawable_viewport);
  __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->drawable_viewport);
  __pyx_cur_scope->__pyx_v_self->drawable_viewport = ((PyObject*)__pyx_t_6);
  __pyx_t_6 = 0;

  /* "renpy/gl2/gl2draw.pyx":498
 *         self.drawable_viewport = tuple(i * self.draw_per_phys for i in self.physical_box)
 * 
 *         dwidth = self.drawable_viewport[2]             # <<<<<<<<<<<<<<
 *         dheight = self.drawable_viewport[3]
 * 
 */
  if (unlikely(__pyx_cur_scope->__pyx_v_self->drawable_viewport == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 498, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_cur_scope->__pyx_v_self->drawable_viewport, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 498, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_dwidth = __pyx_t_6;
  __pyx_t_6 = 0;

  /* "renpy/gl2/gl2draw.pyx":499
 * 
 *         dwidth = self.drawable_viewport[2]
 *         dheight = self.drawable_viewport[3]             # <<<<<<<<<<<<<<
 * 
 *         # How many drawable pixels there are per virtual pixel?
 */
  if (unlikely(__pyx_cur_scope->__pyx_v_self->drawable_viewport == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 499, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_cur_scope->__pyx_v_self->drawable_viewport, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 499, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_v_dheight = __pyx_t_6;
  __pyx_t_6 = 0;

  /* "renpy/gl2/gl2draw.pyx":502
 * 
 *         # How many drawable pixels there are per virtual pixel?
 *         self.draw_per_virt = 1.0 * self.drawable_viewport[2] / vwidth             # <<<<<<<<<<<<<<
 * 
 *         # Matrices that transform from virtual space to drawable space, and vice versa.
 */
  if (unlikely(__pyx_cur_scope->__pyx_v_self->drawable_viewport == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 502, __pyx_L1_error)
  }
  __pyx_t_6 = __Pyx_GetItemInt_Tuple(__pyx_cur_scope->__pyx_v_self->drawable_viewport, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = PyNumber_Multiply(__pyx_float_1_0, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_3, __pyx_v_vwidth); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 502, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GIVEREF(__pyx_t_6);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->draw_per_virt);
  __Pyx_DECREF(__pyx_cur_scope->__pyx_v_self->draw_per_virt);
  __pyx_cur_scope->__pyx_v_self->draw_per_virt = __pyx_t_6;
  __pyx_t_6 = 0;

  /* "renpy/gl2/gl2draw.pyx":505
 * 
 *         # Matrices that transform from virtual space to drawable space, and vice versa.
 *         self.virt_to_draw = Matrix2D(1.0 * dwidth / vwidth, 0, 0, 1.0 * dheight / vheight)             # <<<<<<<<<<<<<<
 *         self.draw_to_virt = Matrix2D(1.0 * vwidth / dwidth, 0, 0, 1.0 * vheight / dheight)
 * 
 */
  __pyx_t_6 = PyNumber_Multiply(__pyx_float_1_0, __pyx_v_dwidth); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_6, __pyx_v_vwidth); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyNumber_Multiply(__pyx_float_1_0, __pyx_v_dheight); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_4 = __Pyx_PyNumber_Divide(__pyx_t_6, __pyx_v_vheight); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_6, 3, __pyx_t_4);
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5renpy_7display_6matrix_Matrix2D), __pyx_t_6, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 505, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_GIVEREF(__pyx_t_4);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->virt_to_draw);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope->__pyx_v_self->virt_to_draw));
  __pyx_cur_scope->__pyx_v_self->virt_to_draw = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":506
 *         # Matrices that transform from virtual space to drawable space, and vice versa.
 *         self.virt_to_draw = Matrix2D(1.0 * dwidth / vwidth, 0, 0, 1.0 * dheight / vheight)
 *         self.draw_to_virt = Matrix2D(1.0 * vwidth / dwidth, 0, 0, 1.0 * vheight / dheight)             # <<<<<<<<<<<<<<
 * 
 *         self.draw_transform = Matrix.cscreen_projection(self.drawable_viewport[2], self.drawable_viewport[3])
 */
  __pyx_t_4 = PyNumber_Multiply(__pyx_float_1_0, __pyx_v_vwidth); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_v_dwidth); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_Multiply(__pyx_float_1_0, __pyx_v_vheight); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_t_4, __pyx_v_dheight); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_6);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_0);
  __Pyx_INCREF(__pyx_int_0);
  __Pyx_GIVEREF(__pyx_int_0);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_int_0);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_3);
  __pyx_t_6 = 0;
  __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5renpy_7display_6matrix_Matrix2D), __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 506, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->draw_to_virt);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope->__pyx_v_self->draw_to_virt));
  __pyx_cur_scope->__pyx_v_self->draw_to_virt = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":508
 *         self.draw_to_virt = Matrix2D(1.0 * vwidth / dwidth, 0, 0, 1.0 * vheight / dheight)
 * 
 *         self.draw_transform = Matrix.cscreen_projection(self.drawable_viewport[2], self.drawable_viewport[3])             # <<<<<<<<<<<<<<
 * 
 *         self.shader_cache.load()
 */
  if (unlikely(__pyx_cur_scope->__pyx_v_self->drawable_viewport == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 508, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_cur_scope->__pyx_v_self->drawable_viewport, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_11 = __pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_11 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 508, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(__pyx_cur_scope->__pyx_v_self->drawable_viewport == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 508, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_cur_scope->__pyx_v_self->drawable_viewport, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_12 = __pyx_PyFloat_AsFloat(__pyx_t_3); if (unlikely((__pyx_t_12 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 508, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = ((PyObject *)__pyx_vtabptr_5renpy_7display_6matrix_Matrix->cscreen_projection(__pyx_t_11, __pyx_t_12)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 508, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_3);
  __Pyx_GOTREF(__pyx_cur_scope->__pyx_v_self->draw_transform);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope->__pyx_v_self->draw_transform));
  __pyx_cur_scope->__pyx_v_self->draw_transform = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_3);
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":510
 *         self.draw_transform = Matrix.cscreen_projection(self.drawable_viewport[2], self.drawable_viewport[3])
 * 
 *         self.shader_cache.load()             # <<<<<<<<<<<<<<
 *         self.init_fbo()
 *         self.texture_loader.init()
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_cur_scope->__pyx_v_self->shader_cache, __pyx_n_s_load); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 510, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":511
 * 
 *         self.shader_cache.load()
 *         self.init_fbo()             # <<<<<<<<<<<<<<
 *         self.texture_loader.init()
 * 
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self), __pyx_n_s_init_fbo); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 511, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":512
 *         self.shader_cache.load()
 *         self.init_fbo()
 *         self.texture_loader.init()             # <<<<<<<<<<<<<<
 * 
 *     def resize(self):
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_cur_scope->__pyx_v_self->texture_loader), __pyx_n_s_init); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 512, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 512, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":426
 *         return True
 * 
 *     def on_resize(self, first=False):             # <<<<<<<<<<<<<<
 * 
 *         if not first:
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.on_resize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_fullscreen);
  __Pyx_XDECREF(__pyx_v_pwidth);
  __Pyx_XDECREF(__pyx_v_pheight);
  __Pyx_XDECREF(__pyx_v_vwidth);
  __Pyx_XDECREF(__pyx_v_vheight);
  __Pyx_XDECREF(__pyx_v_view_width);
  __Pyx_XDECREF(__pyx_v_view_height);
  __Pyx_XDECREF(__pyx_v_physical_ar);
  __Pyx_XDECREF(__pyx_v_ratio);
  __Pyx_XDECREF(__pyx_v_px_padding);
  __Pyx_XDECREF(__pyx_v_py_padding);
  __Pyx_XDECREF(__pyx_v_x_padding);
  __Pyx_XDECREF(__pyx_v_y_padding);
  __Pyx_XDECREF(__pyx_v_dwidth);
  __Pyx_XDECREF(__pyx_v_dheight);
  __Pyx_DECREF(((PyObject *)__pyx_cur_scope));
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":514
 *         self.texture_loader.init()
 * 
 *     def resize(self):             # <<<<<<<<<<<<<<
 *         """
 *         Documented in renderer.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_15resize(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_14resize[] = "\n        Documented in renderer.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_15resize(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("resize (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14resize(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14resize(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_v_fullscreen = NULL;
  PyObject *__pyx_v_width = NULL;
  PyObject *__pyx_v_height = NULL;
  PyObject *__pyx_v_max_w = NULL;
  PyObject *__pyx_v_max_h = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *(*__pyx_t_7)(PyObject *);
  long __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("resize", 0);

  /* "renpy/gl2/gl2draw.pyx":519
 *         """
 * 
 *         fullscreen = renpy.game.preferences.fullscreen             # <<<<<<<<<<<<<<
 * 
 *         if renpy.android or renpy.ios:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 519, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_game); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 519, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_preferences); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 519, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_fullscreen); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 519, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_fullscreen = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":521
 *         fullscreen = renpy.game.preferences.fullscreen
 * 
 *         if renpy.android or renpy.ios:             # <<<<<<<<<<<<<<
 *             fullscreen = True
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_android); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 521, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (!__pyx_t_4) {
  } else {
    __pyx_t_3 = __pyx_t_4;
    goto __pyx_L4_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_ios); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 521, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 521, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __pyx_t_4;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_3) {

    /* "renpy/gl2/gl2draw.pyx":522
 * 
 *         if renpy.android or renpy.ios:
 *             fullscreen = True             # <<<<<<<<<<<<<<
 * 
 *         if renpy.game.preferences.physical_size:
 */
    __Pyx_INCREF(Py_True);
    __Pyx_DECREF_SET(__pyx_v_fullscreen, Py_True);

    /* "renpy/gl2/gl2draw.pyx":521
 *         fullscreen = renpy.game.preferences.fullscreen
 * 
 *         if renpy.android or renpy.ios:             # <<<<<<<<<<<<<<
 *             fullscreen = True
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":524
 *             fullscreen = True
 * 
 *         if renpy.game.preferences.physical_size:             # <<<<<<<<<<<<<<
 *             width = renpy.game.preferences.physical_size[0] or self.virtual_size[0]
 *             height = renpy.game.preferences.physical_size[1] or self.virtual_size[1]
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 524, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_game); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 524, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_preferences); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 524, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_physical_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 524, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 524, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {

    /* "renpy/gl2/gl2draw.pyx":525
 * 
 *         if renpy.game.preferences.physical_size:
 *             width = renpy.game.preferences.physical_size[0] or self.virtual_size[0]             # <<<<<<<<<<<<<<
 *             height = renpy.game.preferences.physical_size[1] or self.virtual_size[1]
 *         else:
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 525, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_game); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 525, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_preferences); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 525, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_physical_size); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 525, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_5, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 525, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 525, __pyx_L1_error)
    if (!__pyx_t_3) {
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else {
      __Pyx_INCREF(__pyx_t_2);
      __pyx_t_1 = __pyx_t_2;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L7_bool_binop_done;
    }
    if (unlikely(__pyx_v_self->virtual_size == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 525, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_GetItemInt_Tuple(__pyx_v_self->virtual_size, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 525, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_L7_bool_binop_done:;
    __pyx_v_width = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":526
 *         if renpy.game.preferences.physical_size:
 *             width = renpy.game.preferences.physical_size[0] or self.virtual_size[0]
 *             height = renpy.game.preferences.physical_size[1] or self.virtual_size[1]             # <<<<<<<<<<<<<<
 *         else:
 *             width = self.virtual_size[0]
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 526, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_game); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 526, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_preferences); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 526, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_physical_size); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 526, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_5, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 526, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 526, __pyx_L1_error)
    if (!__pyx_t_3) {
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    } else {
      __Pyx_INCREF(__pyx_t_2);
      __pyx_t_1 = __pyx_t_2;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      goto __pyx_L9_bool_binop_done;
    }
    if (unlikely(__pyx_v_self->virtual_size == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 526, __pyx_L1_error)
    }
    __pyx_t_2 = __Pyx_GetItemInt_Tuple(__pyx_v_self->virtual_size, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 526, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_1 = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_L9_bool_binop_done:;
    __pyx_v_height = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":524
 *             fullscreen = True
 * 
 *         if renpy.game.preferences.physical_size:             # <<<<<<<<<<<<<<
 *             width = renpy.game.preferences.physical_size[0] or self.virtual_size[0]
 *             height = renpy.game.preferences.physical_size[1] or self.virtual_size[1]
 */
    goto __pyx_L6;
  }

  /* "renpy/gl2/gl2draw.pyx":528
 *             height = renpy.game.preferences.physical_size[1] or self.virtual_size[1]
 *         else:
 *             width = self.virtual_size[0]             # <<<<<<<<<<<<<<
 *             height = self.virtual_size[1]
 * 
 */
  /*else*/ {
    if (unlikely(__pyx_v_self->virtual_size == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 528, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->virtual_size, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 528, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_width = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":529
 *         else:
 *             width = self.virtual_size[0]
 *             height = self.virtual_size[1]             # <<<<<<<<<<<<<<
 * 
 *         width *= self.dpi_scale
 */
    if (unlikely(__pyx_v_self->virtual_size == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 529, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->virtual_size, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 529, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_height = __pyx_t_1;
    __pyx_t_1 = 0;
  }
  __pyx_L6:;

  /* "renpy/gl2/gl2draw.pyx":531
 *             height = self.virtual_size[1]
 * 
 *         width *= self.dpi_scale             # <<<<<<<<<<<<<<
 *         height *= self.dpi_scale
 * 
 */
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->dpi_scale); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 531, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyNumber_InPlaceMultiply(__pyx_v_width, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 531, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF_SET(__pyx_v_width, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":532
 * 
 *         width *= self.dpi_scale
 *         height *= self.dpi_scale             # <<<<<<<<<<<<<<
 * 
 *         max_w, max_h = self.info["max_window_size"]
 */
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->dpi_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 532, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyNumber_InPlaceMultiply(__pyx_v_height, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 532, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_height, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":534
 *         height *= self.dpi_scale
 * 
 *         max_w, max_h = self.info["max_window_size"]             # <<<<<<<<<<<<<<
 *         width = min(width, max_w)
 *         height = min(height, max_h)
 */
  if (unlikely(__pyx_v_self->info == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 534, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_self->info, __pyx_n_s_max_window_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 534, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 534, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 534, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 534, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_6 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 534, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_7 = Py_TYPE(__pyx_t_6)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_2)) goto __pyx_L11_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L11_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 534, __pyx_L1_error)
    __pyx_t_7 = NULL;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L12_unpacking_done;
    __pyx_L11_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    __pyx_t_7 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 534, __pyx_L1_error)
    __pyx_L12_unpacking_done:;
  }
  __pyx_v_max_w = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_max_h = __pyx_t_5;
  __pyx_t_5 = 0;

  /* "renpy/gl2/gl2draw.pyx":535
 * 
 *         max_w, max_h = self.info["max_window_size"]
 *         width = min(width, max_w)             # <<<<<<<<<<<<<<
 *         height = min(height, max_h)
 *         width = max(width, 256)
 */
  __Pyx_INCREF(__pyx_v_max_w);
  __pyx_t_1 = __pyx_v_max_w;
  __Pyx_INCREF(__pyx_v_width);
  __pyx_t_5 = __pyx_v_width;
  __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 535, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 535, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_3) {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_2 = __pyx_t_1;
  } else {
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_2 = __pyx_t_5;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_2;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_width, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":536
 *         max_w, max_h = self.info["max_window_size"]
 *         width = min(width, max_w)
 *         height = min(height, max_h)             # <<<<<<<<<<<<<<
 *         width = max(width, 256)
 *         height = max(height, 256)
 */
  __Pyx_INCREF(__pyx_v_max_h);
  __pyx_t_1 = __pyx_v_max_h;
  __Pyx_INCREF(__pyx_v_height);
  __pyx_t_2 = __pyx_v_height;
  __pyx_t_6 = PyObject_RichCompare(__pyx_t_1, __pyx_t_2, Py_LT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 536, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 536, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_3) {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_5 = __pyx_t_1;
  } else {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_5 = __pyx_t_2;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_5;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_height, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":537
 *         width = min(width, max_w)
 *         height = min(height, max_h)
 *         width = max(width, 256)             # <<<<<<<<<<<<<<
 *         height = max(height, 256)
 * 
 */
  __pyx_t_8 = 0x100;
  __Pyx_INCREF(__pyx_v_width);
  __pyx_t_1 = __pyx_v_width;
  __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = PyObject_RichCompare(__pyx_t_2, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 537, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (__pyx_t_3) {
    __pyx_t_6 = __Pyx_PyInt_From_long(__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 537, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_5 = __pyx_t_6;
    __pyx_t_6 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_5 = __pyx_t_1;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_5;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_width, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":538
 *         height = min(height, max_h)
 *         width = max(width, 256)
 *         height = max(height, 256)             # <<<<<<<<<<<<<<
 * 
 *         pygame.display.get_window().restore()
 */
  __pyx_t_8 = 0x100;
  __Pyx_INCREF(__pyx_v_height);
  __pyx_t_1 = __pyx_v_height;
  __pyx_t_6 = __Pyx_PyInt_From_long(__pyx_t_8); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 538, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_6, __pyx_t_1, Py_GT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 538, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 538, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {
    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 538, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_5 = __pyx_t_1;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_5;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_height, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":540
 *         height = max(height, 256)
 * 
 *         pygame.display.get_window().restore()             # <<<<<<<<<<<<<<
 *         pygame.display.get_window().resize((width, height), opengl=True, fullscreen=fullscreen)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_get_window); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_restore); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 540, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":541
 * 
 *         pygame.display.get_window().restore()
 *         pygame.display.get_window().resize((width, height), opengl=True, fullscreen=fullscreen)             # <<<<<<<<<<<<<<
 * 
 *     def update(self, force=False):
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_get_window); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_resize); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_width);
  __Pyx_GIVEREF(__pyx_v_width);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_width);
  __Pyx_INCREF(__pyx_v_height);
  __Pyx_GIVEREF(__pyx_v_height);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_height);
  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyDict_NewPresized(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_opengl, Py_True) < 0) __PYX_ERR(0, 541, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_fullscreen, __pyx_v_fullscreen) < 0) __PYX_ERR(0, 541, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 541, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;

  /* "renpy/gl2/gl2draw.pyx":514
 *         self.texture_loader.init()
 * 
 *     def resize(self):             # <<<<<<<<<<<<<<
 *         """
 *         Documented in renderer.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.resize", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_fullscreen);
  __Pyx_XDECREF(__pyx_v_width);
  __Pyx_XDECREF(__pyx_v_height);
  __Pyx_XDECREF(__pyx_v_max_w);
  __Pyx_XDECREF(__pyx_v_max_h);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":543
 *         pygame.display.get_window().resize((width, height), opengl=True, fullscreen=fullscreen)
 * 
 *     def update(self, force=False):             # <<<<<<<<<<<<<<
 *         """
 *         Documented in renderer.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_17update(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_16update[] = "\n        Documented in renderer.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_17update(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_force = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("update (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_force,0};
    PyObject* values[1] = {0};
    values[0] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_force);
          if (value) { values[0] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "update") < 0)) __PYX_ERR(0, 543, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_force = values[0];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("update", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 543, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_16update(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), __pyx_v_force);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_16update(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_force) {
  PyObject *__pyx_v_fullscreen = NULL;
  PyObject *__pyx_v_size = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("update", 0);

  /* "renpy/gl2/gl2draw.pyx":548
 *         """
 * 
 *         fullscreen = bool(pygame.display.get_window().get_window_flags() & (pygame.WINDOW_FULLSCREEN_DESKTOP | pygame.WINDOW_FULLSCREEN))             # <<<<<<<<<<<<<<
 * 
 *         size = renpy.display.core.get_size()
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_display); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_get_window); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_2 = (__pyx_t_4) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_get_window_flags); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_WINDOW_FULLSCREEN_DESKTOP); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_WINDOW_FULLSCREEN); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyNumber_Or(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyNumber_And(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(0, 548, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyBool_FromLong((!(!__pyx_t_5))); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 548, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v_fullscreen = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":550
 *         fullscreen = bool(pygame.display.get_window().get_window_flags() & (pygame.WINDOW_FULLSCREEN_DESKTOP | pygame.WINDOW_FULLSCREEN))
 * 
 *         size = renpy.display.core.get_size()             # <<<<<<<<<<<<<<
 * 
 *         if force or (fullscreen != renpy.display.interface.fullscreen) or (size != self.physical_size):
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_display); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_core); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_4 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 550, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_size = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":552
 *         size = renpy.display.core.get_size()
 * 
 *         if force or (fullscreen != renpy.display.interface.fullscreen) or (size != self.physical_size):             # <<<<<<<<<<<<<<
 *             renpy.display.interface.before_resize()
 *             self.on_resize()
 */
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_force); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 552, __pyx_L1_error)
  if (!__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L4_bool_binop_done;
  }
  __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_renpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 552, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_display); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_interface); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 552, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_fullscreen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 552, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_fullscreen, __pyx_t_1, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 552, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 552, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_6) {
  } else {
    __pyx_t_5 = __pyx_t_6;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_size, __pyx_v_self->physical_size, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 552, __pyx_L1_error)
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 552, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_5 = __pyx_t_6;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_5) {

    /* "renpy/gl2/gl2draw.pyx":553
 * 
 *         if force or (fullscreen != renpy.display.interface.fullscreen) or (size != self.physical_size):
 *             renpy.display.interface.before_resize()             # <<<<<<<<<<<<<<
 *             self.on_resize()
 * 
 */
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_interface); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_before_resize); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 553, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "renpy/gl2/gl2draw.pyx":554
 *         if force or (fullscreen != renpy.display.interface.fullscreen) or (size != self.physical_size):
 *             renpy.display.interface.before_resize()
 *             self.on_resize()             # <<<<<<<<<<<<<<
 * 
 *             return True
 */
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_on_resize); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_1 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
      __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
      if (likely(__pyx_t_1)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
        __Pyx_INCREF(__pyx_t_1);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_3, function);
      }
    }
    __pyx_t_4 = (__pyx_t_1) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_1) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 554, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "renpy/gl2/gl2draw.pyx":556
 *             self.on_resize()
 * 
 *             return True             # <<<<<<<<<<<<<<
 *         else:
 *             return False
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_True);
    __pyx_r = Py_True;
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":552
 *         size = renpy.display.core.get_size()
 * 
 *         if force or (fullscreen != renpy.display.interface.fullscreen) or (size != self.physical_size):             # <<<<<<<<<<<<<<
 *             renpy.display.interface.before_resize()
 *             self.on_resize()
 */
  }

  /* "renpy/gl2/gl2draw.pyx":558
 *             return True
 *         else:
 *             return False             # <<<<<<<<<<<<<<
 * 
 *     def quit(GL2Draw self):
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;
  }

  /* "renpy/gl2/gl2draw.pyx":543
 *         pygame.display.get_window().resize((width, height), opengl=True, fullscreen=fullscreen)
 * 
 *     def update(self, force=False):             # <<<<<<<<<<<<<<
 *         """
 *         Documented in renderer.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.update", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_fullscreen);
  __Pyx_XDECREF(__pyx_v_size);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":560
 *             return False
 * 
 *     def quit(GL2Draw self):             # <<<<<<<<<<<<<<
 *         """
 *         Called when terminating the use of the OpenGL context.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_19quit(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_18quit[] = "\n        Called when terminating the use of the OpenGL context.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_19quit(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("quit (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18quit(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18quit(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  int __pyx_t_5;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("quit", 0);

  /* "renpy/gl2/gl2draw.pyx":565
 *         """
 * 
 *         self.kill_textures()             # <<<<<<<<<<<<<<
 * 
 *         if self.texture_loader is not None:
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_kill_textures); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 565, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 565, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":567
 *         self.kill_textures()
 * 
 *         if self.texture_loader is not None:             # <<<<<<<<<<<<<<
 *             self.texture_loader.quit()
 *             self.texture_loader = None
 */
  __pyx_t_4 = (((PyObject *)__pyx_v_self->texture_loader) != Py_None);
  __pyx_t_5 = (__pyx_t_4 != 0);
  if (__pyx_t_5) {

    /* "renpy/gl2/gl2draw.pyx":568
 * 
 *         if self.texture_loader is not None:
 *             self.texture_loader.quit()             # <<<<<<<<<<<<<<
 *             self.texture_loader = None
 * 
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->texture_loader), __pyx_n_s_quit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 568, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":569
 *         if self.texture_loader is not None:
 *             self.texture_loader.quit()
 *             self.texture_loader = None             # <<<<<<<<<<<<<<
 * 
 *         self.quit_fbo()
 */
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    __Pyx_GOTREF(__pyx_v_self->texture_loader);
    __Pyx_DECREF(((PyObject *)__pyx_v_self->texture_loader));
    __pyx_v_self->texture_loader = ((struct __pyx_obj_5renpy_3gl2_10gl2texture_TextureLoader *)Py_None);

    /* "renpy/gl2/gl2draw.pyx":567
 *         self.kill_textures()
 * 
 *         if self.texture_loader is not None:             # <<<<<<<<<<<<<<
 *             self.texture_loader.quit()
 *             self.texture_loader = None
 */
  }

  /* "renpy/gl2/gl2draw.pyx":571
 *             self.texture_loader = None
 * 
 *         self.quit_fbo()             # <<<<<<<<<<<<<<
 * 
 *         if self.shader_cache is not None:
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_quit_fbo); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 571, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":573
 *         self.quit_fbo()
 * 
 *         if self.shader_cache is not None:             # <<<<<<<<<<<<<<
 *             self.shader_cache.save()
 * 
 */
  __pyx_t_5 = (__pyx_v_self->shader_cache != Py_None);
  __pyx_t_4 = (__pyx_t_5 != 0);
  if (__pyx_t_4) {

    /* "renpy/gl2/gl2draw.pyx":574
 * 
 *         if self.shader_cache is not None:
 *             self.shader_cache.save()             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->shader_cache, __pyx_n_s_save); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 574, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_3)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_3);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 574, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":573
 *         self.quit_fbo()
 * 
 *         if self.shader_cache is not None:             # <<<<<<<<<<<<<<
 *             self.shader_cache.save()
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":560
 *             return False
 * 
 *     def quit(GL2Draw self):             # <<<<<<<<<<<<<<
 *         """
 *         Called when terminating the use of the OpenGL context.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.quit", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":577
 * 
 * 
 *     def init_fbo(GL2Draw self):             # <<<<<<<<<<<<<<
 *         """
 *         *Internal*
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_21init_fbo(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_20init_fbo[] = "\n        *Internal*\n        Create the FBO.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_21init_fbo(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("init_fbo (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_20init_fbo(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_20init_fbo(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  GLint __pyx_v_max_renderbuffer_size;
  GLint __pyx_v_max_texture_size;
  PyObject *__pyx_v_BORDER = NULL;
  PyObject *__pyx_v_width = NULL;
  PyObject *__pyx_v_height = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  GLuint __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  long __pyx_t_5;
  GLint __pyx_t_6;
  long __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *(*__pyx_t_10)(PyObject *);
  PyObject *__pyx_t_11 = NULL;
  GLint __pyx_t_12;
  int __pyx_t_13;
  GLsizei __pyx_t_14;
  GLsizei __pyx_t_15;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("init_fbo", 0);

  /* "renpy/gl2/gl2draw.pyx":588
 * 
 *         # Store the default FBO.
 *         glGetIntegerv(GL_FRAMEBUFFER_BINDING, <GLint *> &self.default_fbo);             # <<<<<<<<<<<<<<
 *         self.current_fbo = self.default_fbo
 * 
 */
  __pyx_v_5renpy_4uguu_2gl_glGetIntegerv(GL_FRAMEBUFFER_BINDING, ((GLint *)(&__pyx_v_self->default_fbo)));

  /* "renpy/gl2/gl2draw.pyx":589
 *         # Store the default FBO.
 *         glGetIntegerv(GL_FRAMEBUFFER_BINDING, <GLint *> &self.default_fbo);
 *         self.current_fbo = self.default_fbo             # <<<<<<<<<<<<<<
 * 
 *         # Generate the framebuffer.
 */
  __pyx_t_1 = __pyx_v_self->default_fbo;
  __pyx_v_self->current_fbo = __pyx_t_1;

  /* "renpy/gl2/gl2draw.pyx":592
 * 
 *         # Generate the framebuffer.
 *         glGenFramebuffers(1, &self.fbo)             # <<<<<<<<<<<<<<
 * 
 *         glGenTextures(1, &self.color_texture)
 */
  __pyx_v_5renpy_4uguu_2gl_glGenFramebuffers(1, (&__pyx_v_self->fbo));

  /* "renpy/gl2/gl2draw.pyx":594
 *         glGenFramebuffers(1, &self.fbo)
 * 
 *         glGenTextures(1, &self.color_texture)             # <<<<<<<<<<<<<<
 * 
 *         if renpy.config.depth_size:
 */
  __pyx_v_5renpy_4uguu_2gl_glGenTextures(1, (&__pyx_v_self->color_texture));

  /* "renpy/gl2/gl2draw.pyx":596
 *         glGenTextures(1, &self.color_texture)
 * 
 *         if renpy.config.depth_size:             # <<<<<<<<<<<<<<
 *             glGenRenderbuffers(1, &self.depth_renderbuffer)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_depth_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 596, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 596, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_4) {

    /* "renpy/gl2/gl2draw.pyx":597
 * 
 *         if renpy.config.depth_size:
 *             glGenRenderbuffers(1, &self.depth_renderbuffer)             # <<<<<<<<<<<<<<
 * 
 *         glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size)
 */
    __pyx_v_5renpy_4uguu_2gl_glGenRenderbuffers(1, (&__pyx_v_self->depth_renderbuffer));

    /* "renpy/gl2/gl2draw.pyx":596
 *         glGenTextures(1, &self.color_texture)
 * 
 *         if renpy.config.depth_size:             # <<<<<<<<<<<<<<
 *             glGenRenderbuffers(1, &self.depth_renderbuffer)
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":599
 *             glGenRenderbuffers(1, &self.depth_renderbuffer)
 * 
 *         glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size)             # <<<<<<<<<<<<<<
 *         glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, &max_renderbuffer_size)
 * 
 */
  __pyx_v_5renpy_4uguu_2gl_glGetIntegerv(GL_MAX_TEXTURE_SIZE, (&__pyx_v_max_texture_size));

  /* "renpy/gl2/gl2draw.pyx":600
 * 
 *         glGetIntegerv(GL_MAX_TEXTURE_SIZE, &max_texture_size)
 *         glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, &max_renderbuffer_size)             # <<<<<<<<<<<<<<
 * 
 *         max_texture_size = max(max_texture_size, 1024)
 */
  __pyx_v_5renpy_4uguu_2gl_glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, (&__pyx_v_max_renderbuffer_size));

  /* "renpy/gl2/gl2draw.pyx":602
 *         glGetIntegerv(GL_MAX_RENDERBUFFER_SIZE, &max_renderbuffer_size)
 * 
 *         max_texture_size = max(max_texture_size, 1024)             # <<<<<<<<<<<<<<
 *         max_renderbuffer_size = max(max_renderbuffer_size, 1024)
 * 
 */
  __pyx_t_5 = 0x400;
  __pyx_t_6 = __pyx_v_max_texture_size;
  if (((__pyx_t_5 > __pyx_t_6) != 0)) {
    __pyx_t_7 = __pyx_t_5;
  } else {
    __pyx_t_7 = __pyx_t_6;
  }
  __pyx_v_max_texture_size = __pyx_t_7;

  /* "renpy/gl2/gl2draw.pyx":603
 * 
 *         max_texture_size = max(max_texture_size, 1024)
 *         max_renderbuffer_size = max(max_renderbuffer_size, 1024)             # <<<<<<<<<<<<<<
 * 
 *         # The number of pixels of additional border, so we can load textures with
 */
  __pyx_t_7 = 0x400;
  __pyx_t_6 = __pyx_v_max_renderbuffer_size;
  if (((__pyx_t_7 > __pyx_t_6) != 0)) {
    __pyx_t_5 = __pyx_t_7;
  } else {
    __pyx_t_5 = __pyx_t_6;
  }
  __pyx_v_max_renderbuffer_size = __pyx_t_5;

  /* "renpy/gl2/gl2draw.pyx":607
 *         # The number of pixels of additional border, so we can load textures with
 *         # higher pitch.
 *         BORDER = 64             # <<<<<<<<<<<<<<
 * 
 *         width, height = renpy.config.fbo_size
 */
  __Pyx_INCREF(__pyx_int_64);
  __pyx_v_BORDER = __pyx_int_64;

  /* "renpy/gl2/gl2draw.pyx":609
 *         BORDER = 64
 * 
 *         width, height = renpy.config.fbo_size             # <<<<<<<<<<<<<<
 * 
 *         width = max(self.virtual_size[0] + BORDER, self.drawable_size[0] + BORDER, width)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_fbo_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 609, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 609, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_8);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 609, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 609, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_9 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 609, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
    index = 0; __pyx_t_3 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_3)) goto __pyx_L4_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L4_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_8);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(0, 609, __pyx_L1_error)
    __pyx_t_10 = NULL;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    goto __pyx_L5_unpacking_done;
    __pyx_L4_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    __pyx_t_10 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 609, __pyx_L1_error)
    __pyx_L5_unpacking_done:;
  }
  __pyx_v_width = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_height = __pyx_t_8;
  __pyx_t_8 = 0;

  /* "renpy/gl2/gl2draw.pyx":611
 *         width, height = renpy.config.fbo_size
 * 
 *         width = max(self.virtual_size[0] + BORDER, self.drawable_size[0] + BORDER, width)             # <<<<<<<<<<<<<<
 *         width = min(width, max_texture_size, max_renderbuffer_size)
 *         height = max(self.virtual_size[1] + BORDER, self.drawable_size[1] + BORDER, height)
 */
  if (unlikely(__pyx_v_self->drawable_size == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 611, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_GetItemInt_Tuple(__pyx_v_self->drawable_size, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 611, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = PyNumber_Add(__pyx_t_2, __pyx_v_BORDER); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 611, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_INCREF(__pyx_v_width);
  __pyx_t_2 = __pyx_v_width;
  if (unlikely(__pyx_v_self->virtual_size == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 611, __pyx_L1_error)
  }
  __pyx_t_3 = __Pyx_GetItemInt_Tuple(__pyx_v_self->virtual_size, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 611, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_9 = PyNumber_Add(__pyx_t_3, __pyx_v_BORDER); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 611, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_11 = PyObject_RichCompare(__pyx_t_8, __pyx_t_9, Py_GT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 611, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 611, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (__pyx_t_4) {
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_3 = __pyx_t_8;
  } else {
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_3 = __pyx_t_9;
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_9 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_11 = PyObject_RichCompare(__pyx_t_2, __pyx_t_9, Py_GT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 611, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 611, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (__pyx_t_4) {
    __Pyx_INCREF(__pyx_t_2);
    __pyx_t_3 = __pyx_t_2;
  } else {
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_3 = __pyx_t_9;
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v_width, __pyx_t_8);
  __pyx_t_8 = 0;

  /* "renpy/gl2/gl2draw.pyx":612
 * 
 *         width = max(self.virtual_size[0] + BORDER, self.drawable_size[0] + BORDER, width)
 *         width = min(width, max_texture_size, max_renderbuffer_size)             # <<<<<<<<<<<<<<
 *         height = max(self.virtual_size[1] + BORDER, self.drawable_size[1] + BORDER, height)
 *         height = min(height, max_texture_size, max_renderbuffer_size)
 */
  __pyx_t_6 = __pyx_v_max_texture_size;
  __pyx_t_12 = __pyx_v_max_renderbuffer_size;
  __Pyx_INCREF(__pyx_v_width);
  __pyx_t_8 = __pyx_v_width;
  __pyx_t_2 = __Pyx_PyInt_From_GLint(__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 612, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_9 = PyObject_RichCompare(__pyx_t_2, __pyx_t_8, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 612, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 612, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__pyx_t_4) {
    __pyx_t_9 = __Pyx_PyInt_From_GLint(__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 612, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_3 = __pyx_t_9;
    __pyx_t_9 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_3 = __pyx_t_8;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_INCREF(__pyx_t_3);
  __pyx_t_8 = __pyx_t_3;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_9 = __Pyx_PyInt_From_GLint(__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 612, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = PyObject_RichCompare(__pyx_t_9, __pyx_t_8, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 612, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 612, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_4) {
    __pyx_t_2 = __Pyx_PyInt_From_GLint(__pyx_t_12); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 612, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __pyx_t_2;
    __pyx_t_2 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_3 = __pyx_t_8;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v_width, __pyx_t_8);
  __pyx_t_8 = 0;

  /* "renpy/gl2/gl2draw.pyx":613
 *         width = max(self.virtual_size[0] + BORDER, self.drawable_size[0] + BORDER, width)
 *         width = min(width, max_texture_size, max_renderbuffer_size)
 *         height = max(self.virtual_size[1] + BORDER, self.drawable_size[1] + BORDER, height)             # <<<<<<<<<<<<<<
 *         height = min(height, max_texture_size, max_renderbuffer_size)
 * 
 */
  if (unlikely(__pyx_v_self->drawable_size == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 613, __pyx_L1_error)
  }
  __pyx_t_8 = __Pyx_GetItemInt_Tuple(__pyx_v_self->drawable_size, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_3 = PyNumber_Add(__pyx_t_8, __pyx_v_BORDER); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_INCREF(__pyx_v_height);
  __pyx_t_8 = __pyx_v_height;
  if (unlikely(__pyx_v_self->virtual_size == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 613, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_GetItemInt_Tuple(__pyx_v_self->virtual_size, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_9 = PyNumber_Add(__pyx_t_2, __pyx_v_BORDER); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 613, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_11 = PyObject_RichCompare(__pyx_t_3, __pyx_t_9, Py_GT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 613, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (__pyx_t_4) {
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_t_3;
  } else {
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_2 = __pyx_t_9;
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_9 = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_11 = PyObject_RichCompare(__pyx_t_8, __pyx_t_9, Py_GT); __Pyx_XGOTREF(__pyx_t_11); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 613, __pyx_L1_error)
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_11); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 613, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (__pyx_t_4) {
    __Pyx_INCREF(__pyx_t_8);
    __pyx_t_2 = __pyx_t_8;
  } else {
    __Pyx_INCREF(__pyx_t_9);
    __pyx_t_2 = __pyx_t_9;
  }
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_t_2;
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_height, __pyx_t_3);
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":614
 *         width = min(width, max_texture_size, max_renderbuffer_size)
 *         height = max(self.virtual_size[1] + BORDER, self.drawable_size[1] + BORDER, height)
 *         height = min(height, max_texture_size, max_renderbuffer_size)             # <<<<<<<<<<<<<<
 * 
 *         renpy.display.log.write("Maximum texture size: %dx%d", width, height)
 */
  __pyx_t_6 = __pyx_v_max_texture_size;
  __pyx_t_12 = __pyx_v_max_renderbuffer_size;
  __Pyx_INCREF(__pyx_v_height);
  __pyx_t_3 = __pyx_v_height;
  __pyx_t_8 = __Pyx_PyInt_From_GLint(__pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = PyObject_RichCompare(__pyx_t_8, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_9); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 614, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_9); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 614, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (__pyx_t_4) {
    __pyx_t_9 = __Pyx_PyInt_From_GLint(__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 614, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    __pyx_t_2 = __pyx_t_9;
    __pyx_t_9 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_t_3;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_INCREF(__pyx_t_2);
  __pyx_t_3 = __pyx_t_2;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_9 = __Pyx_PyInt_From_GLint(__pyx_t_12); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 614, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_8 = PyObject_RichCompare(__pyx_t_9, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_8); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 614, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 614, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (__pyx_t_4) {
    __pyx_t_8 = __Pyx_PyInt_From_GLint(__pyx_t_12); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 614, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __pyx_t_2 = __pyx_t_8;
    __pyx_t_8 = 0;
  } else {
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_2 = __pyx_t_3;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __pyx_t_2;
  __Pyx_INCREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_height, __pyx_t_3);
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":616
 *         height = min(height, max_texture_size, max_renderbuffer_size)
 * 
 *         renpy.display.log.write("Maximum texture size: %dx%d", width, height)             # <<<<<<<<<<<<<<
 * 
 *         self.texture_loader.max_texture_width = width
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_log); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_write); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 616, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_13 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_8);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_8, function);
      __pyx_t_13 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_s_Maximum_texture_size_dx_d, __pyx_v_width, __pyx_v_height};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 616, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
    PyObject *__pyx_temp[4] = {__pyx_t_2, __pyx_kp_s_Maximum_texture_size_dx_d, __pyx_v_width, __pyx_v_height};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_13, 3+__pyx_t_13); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 616, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(3+__pyx_t_13); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 616, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_kp_s_Maximum_texture_size_dx_d);
    __Pyx_GIVEREF(__pyx_kp_s_Maximum_texture_size_dx_d);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_13, __pyx_kp_s_Maximum_texture_size_dx_d);
    __Pyx_INCREF(__pyx_v_width);
    __Pyx_GIVEREF(__pyx_v_width);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_13, __pyx_v_width);
    __Pyx_INCREF(__pyx_v_height);
    __Pyx_GIVEREF(__pyx_v_height);
    PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_13, __pyx_v_height);
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 616, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":618
 *         renpy.display.log.write("Maximum texture size: %dx%d", width, height)
 * 
 *         self.texture_loader.max_texture_width = width             # <<<<<<<<<<<<<<
 *         self.texture_loader.max_texture_height = height
 * 
 */
  __pyx_t_6 = __Pyx_PyInt_As_GLint(__pyx_v_width); if (unlikely((__pyx_t_6 == ((GLint)-1)) && PyErr_Occurred())) __PYX_ERR(0, 618, __pyx_L1_error)
  __pyx_v_self->texture_loader->max_texture_width = __pyx_t_6;

  /* "renpy/gl2/gl2draw.pyx":619
 * 
 *         self.texture_loader.max_texture_width = width
 *         self.texture_loader.max_texture_height = height             # <<<<<<<<<<<<<<
 * 
 *         self.change_fbo(self.fbo)
 */
  __pyx_t_6 = __Pyx_PyInt_As_GLint(__pyx_v_height); if (unlikely((__pyx_t_6 == ((GLint)-1)) && PyErr_Occurred())) __PYX_ERR(0, 619, __pyx_L1_error)
  __pyx_v_self->texture_loader->max_texture_height = __pyx_t_6;

  /* "renpy/gl2/gl2draw.pyx":621
 *         self.texture_loader.max_texture_height = height
 * 
 *         self.change_fbo(self.fbo)             # <<<<<<<<<<<<<<
 * 
 *         glBindTexture(GL_TEXTURE_2D, self.color_texture)
 */
  ((struct __pyx_vtabstruct_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self->__pyx_vtab)->change_fbo(__pyx_v_self, __pyx_v_self->fbo);

  /* "renpy/gl2/gl2draw.pyx":623
 *         self.change_fbo(self.fbo)
 * 
 *         glBindTexture(GL_TEXTURE_2D, self.color_texture)             # <<<<<<<<<<<<<<
 *         glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0,  GL_RGBA, GL_UNSIGNED_BYTE, NULL)
 *         glFramebufferTexture2D(
 */
  __pyx_v_5renpy_4uguu_2gl_glBindTexture(GL_TEXTURE_2D, __pyx_v_self->color_texture);

  /* "renpy/gl2/gl2draw.pyx":624
 * 
 *         glBindTexture(GL_TEXTURE_2D, self.color_texture)
 *         glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0,  GL_RGBA, GL_UNSIGNED_BYTE, NULL)             # <<<<<<<<<<<<<<
 *         glFramebufferTexture2D(
 *             GL_FRAMEBUFFER,
 */
  __pyx_t_14 = __Pyx_PyInt_As_GLsizei(__pyx_v_width); if (unlikely((__pyx_t_14 == ((GLsizei)-1)) && PyErr_Occurred())) __PYX_ERR(0, 624, __pyx_L1_error)
  __pyx_t_15 = __Pyx_PyInt_As_GLsizei(__pyx_v_height); if (unlikely((__pyx_t_15 == ((GLsizei)-1)) && PyErr_Occurred())) __PYX_ERR(0, 624, __pyx_L1_error)
  __pyx_v_5renpy_4uguu_2gl_glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, __pyx_t_14, __pyx_t_15, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);

  /* "renpy/gl2/gl2draw.pyx":625
 *         glBindTexture(GL_TEXTURE_2D, self.color_texture)
 *         glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0,  GL_RGBA, GL_UNSIGNED_BYTE, NULL)
 *         glFramebufferTexture2D(             # <<<<<<<<<<<<<<
 *             GL_FRAMEBUFFER,
 *             GL_COLOR_ATTACHMENT0,
 */
  __pyx_v_5renpy_4uguu_2gl_glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, __pyx_v_self->color_texture, 0);

  /* "renpy/gl2/gl2draw.pyx":632
 *             0)
 * 
 *         if renpy.config.depth_size:             # <<<<<<<<<<<<<<
 * 
 *             glBindRenderbuffer(GL_RENDERBUFFER, self.depth_renderbuffer)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_renpy); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_config); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_depth_size); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 632, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 632, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_4) {

    /* "renpy/gl2/gl2draw.pyx":634
 *         if renpy.config.depth_size:
 * 
 *             glBindRenderbuffer(GL_RENDERBUFFER, self.depth_renderbuffer)             # <<<<<<<<<<<<<<
 *             glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height)
 * 
 */
    __pyx_v_5renpy_4uguu_2gl_glBindRenderbuffer(GL_RENDERBUFFER, __pyx_v_self->depth_renderbuffer);

    /* "renpy/gl2/gl2draw.pyx":635
 * 
 *             glBindRenderbuffer(GL_RENDERBUFFER, self.depth_renderbuffer)
 *             glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height)             # <<<<<<<<<<<<<<
 * 
 *             glFramebufferRenderbuffer(
 */
    __pyx_t_15 = __Pyx_PyInt_As_GLsizei(__pyx_v_width); if (unlikely((__pyx_t_15 == ((GLsizei)-1)) && PyErr_Occurred())) __PYX_ERR(0, 635, __pyx_L1_error)
    __pyx_t_14 = __Pyx_PyInt_As_GLsizei(__pyx_v_height); if (unlikely((__pyx_t_14 == ((GLsizei)-1)) && PyErr_Occurred())) __PYX_ERR(0, 635, __pyx_L1_error)
    __pyx_v_5renpy_4uguu_2gl_glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, __pyx_t_15, __pyx_t_14);

    /* "renpy/gl2/gl2draw.pyx":637
 *             glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width, height)
 * 
 *             glFramebufferRenderbuffer(             # <<<<<<<<<<<<<<
 *                 GL_FRAMEBUFFER,
 *                 GL_DEPTH_ATTACHMENT,
 */
    __pyx_v_5renpy_4uguu_2gl_glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, __pyx_v_self->depth_renderbuffer);

    /* "renpy/gl2/gl2draw.pyx":632
 *             0)
 * 
 *         if renpy.config.depth_size:             # <<<<<<<<<<<<<<
 * 
 *             glBindRenderbuffer(GL_RENDERBUFFER, self.depth_renderbuffer)
 */
  }

  /* "renpy/gl2/gl2draw.pyx":577
 * 
 * 
 *     def init_fbo(GL2Draw self):             # <<<<<<<<<<<<<<
 *         """
 *         *Internal*
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.init_fbo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_BORDER);
  __Pyx_XDECREF(__pyx_v_width);
  __Pyx_XDECREF(__pyx_v_height);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":643
 *                 self.depth_renderbuffer)
 * 
 *     def quit_fbo(GL2Draw self):             # <<<<<<<<<<<<<<
 * 
 *         self.change_fbo(self.default_fbo)
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_23quit_fbo(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_23quit_fbo(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("quit_fbo (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_22quit_fbo(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_22quit_fbo(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("quit_fbo", 0);

  /* "renpy/gl2/gl2draw.pyx":645
 *     def quit_fbo(GL2Draw self):
 * 
 *         self.change_fbo(self.default_fbo)             # <<<<<<<<<<<<<<
 * 
 *         glDeleteFramebuffers(1, &self.fbo)
 */
  ((struct __pyx_vtabstruct_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self->__pyx_vtab)->change_fbo(__pyx_v_self, __pyx_v_self->default_fbo);

  /* "renpy/gl2/gl2draw.pyx":647
 *         self.change_fbo(self.default_fbo)
 * 
 *         glDeleteFramebuffers(1, &self.fbo)             # <<<<<<<<<<<<<<
 *         glDeleteTextures(1, &self.color_texture)
 * 
 */
  __pyx_v_5renpy_4uguu_2gl_glDeleteFramebuffers(1, (&__pyx_v_self->fbo));

  /* "renpy/gl2/gl2draw.pyx":648
 * 
 *         glDeleteFramebuffers(1, &self.fbo)
 *         glDeleteTextures(1, &self.color_texture)             # <<<<<<<<<<<<<<
 * 
 *         if renpy.config.depth_size:
 */
  __pyx_v_5renpy_4uguu_2gl_glDeleteTextures(1, (&__pyx_v_self->color_texture));

  /* "renpy/gl2/gl2draw.pyx":650
 *         glDeleteTextures(1, &self.color_texture)
 * 
 *         if renpy.config.depth_size:             # <<<<<<<<<<<<<<
 *             glDeleteRenderbuffers(1, &self.depth_renderbuffer)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_config); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_depth_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 650, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 650, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {

    /* "renpy/gl2/gl2draw.pyx":651
 * 
 *         if renpy.config.depth_size:
 *             glDeleteRenderbuffers(1, &self.depth_renderbuffer)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_v_5renpy_4uguu_2gl_glDeleteRenderbuffers(1, (&__pyx_v_self->depth_renderbuffer));

    /* "renpy/gl2/gl2draw.pyx":650
 *         glDeleteTextures(1, &self.color_texture)
 * 
 *         if renpy.config.depth_size:             # <<<<<<<<<<<<<<
 *             glDeleteRenderbuffers(1, &self.depth_renderbuffer)
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":643
 *                 self.depth_renderbuffer)
 * 
 *     def quit_fbo(GL2Draw self):             # <<<<<<<<<<<<<<
 * 
 *         self.change_fbo(self.default_fbo)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.quit_fbo", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":654
 * 
 * 
 *     def can_block(self):             # <<<<<<<<<<<<<<
 *         """
 *         Returns True if we can block to wait for input, False if the screen
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_25can_block(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_24can_block[] = "\n        Returns True if we can block to wait for input, False if the screen\n        needs to be immediately redrawn.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_25can_block(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("can_block (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_24can_block(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_24can_block(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_v_powersave = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_t_4;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("can_block", 0);

  /* "renpy/gl2/gl2draw.pyx":660
 *         """
 * 
 *         powersave = renpy.game.preferences.gl_powersave             # <<<<<<<<<<<<<<
 * 
 *         if not powersave:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_game); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_preferences); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_gl_powersave); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 660, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_powersave = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":662
 *         powersave = renpy.game.preferences.gl_powersave
 * 
 *         if not powersave:             # <<<<<<<<<<<<<<
 *             return False
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_powersave); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 662, __pyx_L1_error)
  __pyx_t_4 = ((!__pyx_t_3) != 0);
  if (__pyx_t_4) {

    /* "renpy/gl2/gl2draw.pyx":663
 * 
 *         if not powersave:
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         return not self.fast_redraw_frames
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":662
 *         powersave = renpy.game.preferences.gl_powersave
 * 
 *         if not powersave:             # <<<<<<<<<<<<<<
 *             return False
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":665
 *             return False
 * 
 *         return not self.fast_redraw_frames             # <<<<<<<<<<<<<<
 * 
 *     def should_redraw(self, needs_redraw, first_pass, can_block):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyBool_FromLong((!(__pyx_v_self->fast_redraw_frames != 0))); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 665, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":654
 * 
 * 
 *     def can_block(self):             # <<<<<<<<<<<<<<
 *         """
 *         Returns True if we can block to wait for input, False if the screen
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.can_block", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_powersave);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":667
 *         return not self.fast_redraw_frames
 * 
 *     def should_redraw(self, needs_redraw, first_pass, can_block):             # <<<<<<<<<<<<<<
 *         """
 *         Redraw whenever the screen needs it, but at least once every
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_27should_redraw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_26should_redraw[] = "\n        Redraw whenever the screen needs it, but at least once every\n        .2 seconds. We rely on VSYNC to slow down our maximum\n        draw speed.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_27should_redraw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_needs_redraw = 0;
  PyObject *__pyx_v_first_pass = 0;
  PyObject *__pyx_v_can_block = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("should_redraw (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_needs_redraw,&__pyx_n_s_first_pass,&__pyx_n_s_can_block,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_needs_redraw)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_first_pass)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("should_redraw", 1, 3, 3, 1); __PYX_ERR(0, 667, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_can_block)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("should_redraw", 1, 3, 3, 2); __PYX_ERR(0, 667, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "should_redraw") < 0)) __PYX_ERR(0, 667, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_needs_redraw = values[0];
    __pyx_v_first_pass = values[1];
    __pyx_v_can_block = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("should_redraw", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 667, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.should_redraw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_26should_redraw(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), __pyx_v_needs_redraw, __pyx_v_first_pass, __pyx_v_can_block);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_26should_redraw(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_needs_redraw, PyObject *__pyx_v_first_pass, PyObject *__pyx_v_can_block) {
  int __pyx_v_rv;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_t_7;
  double __pyx_t_8;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("should_redraw", 0);

  /* "renpy/gl2/gl2draw.pyx":674
 *         """
 * 
 *         rv = False             # <<<<<<<<<<<<<<
 * 
 *         if needs_redraw:
 */
  __pyx_v_rv = 0;

  /* "renpy/gl2/gl2draw.pyx":676
 *         rv = False
 * 
 *         if needs_redraw:             # <<<<<<<<<<<<<<
 *             rv = True
 *         elif first_pass:
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_needs_redraw); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 676, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "renpy/gl2/gl2draw.pyx":677
 * 
 *         if needs_redraw:
 *             rv = True             # <<<<<<<<<<<<<<
 *         elif first_pass:
 *             rv = True
 */
    __pyx_v_rv = 1;

    /* "renpy/gl2/gl2draw.pyx":676
 *         rv = False
 * 
 *         if needs_redraw:             # <<<<<<<<<<<<<<
 *             rv = True
 *         elif first_pass:
 */
    goto __pyx_L3;
  }

  /* "renpy/gl2/gl2draw.pyx":678
 *         if needs_redraw:
 *             rv = True
 *         elif first_pass:             # <<<<<<<<<<<<<<
 *             rv = True
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_first_pass); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 678, __pyx_L1_error)
  if (__pyx_t_1) {

    /* "renpy/gl2/gl2draw.pyx":679
 *             rv = True
 *         elif first_pass:
 *             rv = True             # <<<<<<<<<<<<<<
 * 
 *         # Handle fast redraw.
 */
    __pyx_v_rv = 1;

    /* "renpy/gl2/gl2draw.pyx":678
 *         if needs_redraw:
 *             rv = True
 *         elif first_pass:             # <<<<<<<<<<<<<<
 *             rv = True
 * 
 */
  }
  __pyx_L3:;

  /* "renpy/gl2/gl2draw.pyx":682
 * 
 *         # Handle fast redraw.
 *         if rv:             # <<<<<<<<<<<<<<
 *             self.fast_redraw_frames = renpy.config.fast_redraw_frames
 *         elif self.fast_redraw_frames > 0:
 */
  __pyx_t_1 = (__pyx_v_rv != 0);
  if (__pyx_t_1) {

    /* "renpy/gl2/gl2draw.pyx":683
 *         # Handle fast redraw.
 *         if rv:
 *             self.fast_redraw_frames = renpy.config.fast_redraw_frames             # <<<<<<<<<<<<<<
 *         elif self.fast_redraw_frames > 0:
 *             self.fast_redraw_frames -= 1
 */
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_config); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_fast_redraw_frames); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 683, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 683, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_v_self->fast_redraw_frames = __pyx_t_4;

    /* "renpy/gl2/gl2draw.pyx":682
 * 
 *         # Handle fast redraw.
 *         if rv:             # <<<<<<<<<<<<<<
 *             self.fast_redraw_frames = renpy.config.fast_redraw_frames
 *         elif self.fast_redraw_frames > 0:
 */
    goto __pyx_L4;
  }

  /* "renpy/gl2/gl2draw.pyx":684
 *         if rv:
 *             self.fast_redraw_frames = renpy.config.fast_redraw_frames
 *         elif self.fast_redraw_frames > 0:             # <<<<<<<<<<<<<<
 *             self.fast_redraw_frames -= 1
 *             rv = True
 */
  __pyx_t_1 = ((__pyx_v_self->fast_redraw_frames > 0) != 0);
  if (__pyx_t_1) {

    /* "renpy/gl2/gl2draw.pyx":685
 *             self.fast_redraw_frames = renpy.config.fast_redraw_frames
 *         elif self.fast_redraw_frames > 0:
 *             self.fast_redraw_frames -= 1             # <<<<<<<<<<<<<<
 *             rv = True
 * 
 */
    __pyx_v_self->fast_redraw_frames = (__pyx_v_self->fast_redraw_frames - 1);

    /* "renpy/gl2/gl2draw.pyx":686
 *         elif self.fast_redraw_frames > 0:
 *             self.fast_redraw_frames -= 1
 *             rv = True             # <<<<<<<<<<<<<<
 * 
 *         if time.time() > self.last_redraw_time + self.redraw_period:
 */
    __pyx_v_rv = 1;

    /* "renpy/gl2/gl2draw.pyx":684
 *         if rv:
 *             self.fast_redraw_frames = renpy.config.fast_redraw_frames
 *         elif self.fast_redraw_frames > 0:             # <<<<<<<<<<<<<<
 *             self.fast_redraw_frames -= 1
 *             rv = True
 */
  }
  __pyx_L4:;

  /* "renpy/gl2/gl2draw.pyx":688
 *             rv = True
 * 
 *         if time.time() > self.last_redraw_time + self.redraw_period:             # <<<<<<<<<<<<<<
 *             rv = True
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_2 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyFloat_FromDouble((__pyx_v_self->last_redraw_time + __pyx_v_self->redraw_period)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_2, __pyx_t_5, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 688, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_1) {

    /* "renpy/gl2/gl2draw.pyx":689
 * 
 *         if time.time() > self.last_redraw_time + self.redraw_period:
 *             rv = True             # <<<<<<<<<<<<<<
 * 
 *         # Store the redraw time.
 */
    __pyx_v_rv = 1;

    /* "renpy/gl2/gl2draw.pyx":688
 *             rv = True
 * 
 *         if time.time() > self.last_redraw_time + self.redraw_period:             # <<<<<<<<<<<<<<
 *             rv = True
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":692
 * 
 *         # Store the redraw time.
 *         if rv or (not can_block):             # <<<<<<<<<<<<<<
 *             self.last_redraw_time = time.time()
 *             return True
 */
  __pyx_t_6 = (__pyx_v_rv != 0);
  if (!__pyx_t_6) {
  } else {
    __pyx_t_1 = __pyx_t_6;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_can_block); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(0, 692, __pyx_L1_error)
  __pyx_t_7 = ((!__pyx_t_6) != 0);
  __pyx_t_1 = __pyx_t_7;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_1) {

    /* "renpy/gl2/gl2draw.pyx":693
 *         # Store the redraw time.
 *         if rv or (not can_block):
 *             self.last_redraw_time = time.time()             # <<<<<<<<<<<<<<
 *             return True
 *         else:
 */
    __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_time); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 693, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 693, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 693, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_8 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_8 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 693, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_v_self->last_redraw_time = __pyx_t_8;

    /* "renpy/gl2/gl2draw.pyx":694
 *         if rv or (not can_block):
 *             self.last_redraw_time = time.time()
 *             return True             # <<<<<<<<<<<<<<
 *         else:
 *             return False
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_True);
    __pyx_r = Py_True;
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":692
 * 
 *         # Store the redraw time.
 *         if rv or (not can_block):             # <<<<<<<<<<<<<<
 *             self.last_redraw_time = time.time()
 *             return True
 */
  }

  /* "renpy/gl2/gl2draw.pyx":696
 *             return True
 *         else:
 *             return False             # <<<<<<<<<<<<<<
 * 
 *     def mutated_surface(self, surf):
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;
  }

  /* "renpy/gl2/gl2draw.pyx":667
 *         return not self.fast_redraw_frames
 * 
 *     def should_redraw(self, needs_redraw, first_pass, can_block):             # <<<<<<<<<<<<<<
 *         """
 *         Redraw whenever the screen needs it, but at least once every
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.should_redraw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":698
 *             return False
 * 
 *     def mutated_surface(self, surf):             # <<<<<<<<<<<<<<
 *         return
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_29mutated_surface(PyObject *__pyx_v_self, PyObject *__pyx_v_surf); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_29mutated_surface(PyObject *__pyx_v_self, PyObject *__pyx_v_surf) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mutated_surface (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_28mutated_surface(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_surf));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_28mutated_surface(CYTHON_UNUSED struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v_surf) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mutated_surface", 0);

  /* "renpy/gl2/gl2draw.pyx":699
 * 
 *     def mutated_surface(self, surf):
 *         return             # <<<<<<<<<<<<<<
 * 
 *     def load_texture(self, surf, transient=False, properties={}):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":698
 *             return False
 * 
 *     def mutated_surface(self, surf):             # <<<<<<<<<<<<<<
 *         return
 * 
 */

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":701
 *         return
 * 
 *     def load_texture(self, surf, transient=False, properties={}):             # <<<<<<<<<<<<<<
 *         """
 *         Loads a texture into memory.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_31load_texture(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_30load_texture[] = "\n        Loads a texture into memory.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_31load_texture(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_surf = 0;
  CYTHON_UNUSED PyObject *__pyx_v_transient = 0;
  PyObject *__pyx_v_properties = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("load_texture (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_surf,&__pyx_n_s_transient,&__pyx_n_s_properties,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)Py_False);
    values[2] = __pyx_k__7;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_surf)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_transient);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_properties);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "load_texture") < 0)) __PYX_ERR(0, 701, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_surf = values[0];
    __pyx_v_transient = values[1];
    __pyx_v_properties = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("load_texture", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 701, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.load_texture", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_30load_texture(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), __pyx_v_surf, __pyx_v_transient, __pyx_v_properties);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_30load_texture(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_surf, CYTHON_UNUSED PyObject *__pyx_v_transient, PyObject *__pyx_v_properties) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("load_texture", 0);

  /* "renpy/gl2/gl2draw.pyx":706
 *         """
 * 
 *         return self.texture_loader.load_surface(surf, properties)             # <<<<<<<<<<<<<<
 * 
 *     def ready_one_texture(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->texture_loader), __pyx_n_s_load_surface); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 706, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_surf, __pyx_v_properties};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 706, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_surf, __pyx_v_properties};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 706, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 706, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_surf);
    __Pyx_GIVEREF(__pyx_v_surf);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_surf);
    __Pyx_INCREF(__pyx_v_properties);
    __Pyx_GIVEREF(__pyx_v_properties);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_properties);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 706, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":701
 *         return
 * 
 *     def load_texture(self, surf, transient=False, properties={}):             # <<<<<<<<<<<<<<
 *         """
 *         Loads a texture into memory.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.load_texture", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":708
 *         return self.texture_loader.load_surface(surf, properties)
 * 
 *     def ready_one_texture(self):             # <<<<<<<<<<<<<<
 *         """
 *         Call from the main thread to make a single texture ready.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_33ready_one_texture(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_32ready_one_texture[] = "\n        Call from the main thread to make a single texture ready.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_33ready_one_texture(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("ready_one_texture (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_32ready_one_texture(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_32ready_one_texture(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("ready_one_texture", 0);

  /* "renpy/gl2/gl2draw.pyx":713
 *         """
 * 
 *         if self.texture_loader is None:             # <<<<<<<<<<<<<<
 *             return False
 * 
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_self->texture_loader) == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":714
 * 
 *         if self.texture_loader is None:
 *             return False             # <<<<<<<<<<<<<<
 * 
 *         return self.texture_loader.ready_one_texture()
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(Py_False);
    __pyx_r = Py_False;
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":713
 *         """
 * 
 *         if self.texture_loader is None:             # <<<<<<<<<<<<<<
 *             return False
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":716
 *             return False
 * 
 *         return self.texture_loader.ready_one_texture()             # <<<<<<<<<<<<<<
 * 
 *     def solid_texture(self, w, h, color):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->texture_loader), __pyx_n_s_ready_one_texture); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 716, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_r = __pyx_t_3;
  __pyx_t_3 = 0;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":708
 *         return self.texture_loader.load_surface(surf, properties)
 * 
 *     def ready_one_texture(self):             # <<<<<<<<<<<<<<
 *         """
 *         Call from the main thread to make a single texture ready.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.ready_one_texture", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":718
 *         return self.texture_loader.ready_one_texture()
 * 
 *     def solid_texture(self, w, h, color):             # <<<<<<<<<<<<<<
 *         """
 *         Returns a texture that represents a solid color.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_35solid_texture(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_34solid_texture[] = "\n        Returns a texture that represents a solid color.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_35solid_texture(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_w = 0;
  PyObject *__pyx_v_h = 0;
  PyObject *__pyx_v_color = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("solid_texture (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_w,&__pyx_n_s_h,&__pyx_n_s_color,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_w)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_h)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("solid_texture", 1, 3, 3, 1); __PYX_ERR(0, 718, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_color)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("solid_texture", 1, 3, 3, 2); __PYX_ERR(0, 718, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solid_texture") < 0)) __PYX_ERR(0, 718, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_w = values[0];
    __pyx_v_h = values[1];
    __pyx_v_color = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("solid_texture", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 718, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.solid_texture", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_34solid_texture(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), __pyx_v_w, __pyx_v_h, __pyx_v_color);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_34solid_texture(CYTHON_UNUSED struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_w, PyObject *__pyx_v_h, PyObject *__pyx_v_color) {
  PyObject *__pyx_v_mesh = NULL;
  PyObject *__pyx_v_a = NULL;
  PyObject *__pyx_v_r = NULL;
  PyObject *__pyx_v_g = NULL;
  PyObject *__pyx_v_b = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("solid_texture", 0);
  __Pyx_INCREF(__pyx_v_color);

  /* "renpy/gl2/gl2draw.pyx":723
 *         """
 * 
 *         mesh = Mesh3.rectangle(0, 0, w, h)             # <<<<<<<<<<<<<<
 * 
 *         a = color[3] / 255.0
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_5renpy_3gl2_8gl2mesh3_Mesh3), __pyx_n_s_rectangle); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 723, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[5] = {__pyx_t_3, __pyx_int_0, __pyx_int_0, __pyx_v_w, __pyx_v_h};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 723, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[5] = {__pyx_t_3, __pyx_int_0, __pyx_int_0, __pyx_v_w, __pyx_v_h};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 723, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(4+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 723, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_GIVEREF(__pyx_int_0);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_int_0);
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_GIVEREF(__pyx_int_0);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_int_0);
    __Pyx_INCREF(__pyx_v_w);
    __Pyx_GIVEREF(__pyx_v_w);
    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_w);
    __Pyx_INCREF(__pyx_v_h);
    __Pyx_GIVEREF(__pyx_v_h);
    PyTuple_SET_ITEM(__pyx_t_5, 3+__pyx_t_4, __pyx_v_h);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 723, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_mesh = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":725
 *         mesh = Mesh3.rectangle(0, 0, w, h)
 * 
 *         a = color[3] / 255.0             # <<<<<<<<<<<<<<
 *         r = a * color[0] / 255.0
 *         g = a * color[1] / 255.0
 */
  __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_color, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyFloat_DivideObjC(__pyx_t_1, __pyx_float_255_0, 255.0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 725, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_a = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":726
 * 
 *         a = color[3] / 255.0
 *         r = a * color[0] / 255.0             # <<<<<<<<<<<<<<
 *         g = a * color[1] / 255.0
 *         b = a * color[2] / 255.0
 */
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_color, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyNumber_Multiply(__pyx_v_a, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyFloat_DivideObjC(__pyx_t_1, __pyx_float_255_0, 255.0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 726, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_r = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":727
 *         a = color[3] / 255.0
 *         r = a * color[0] / 255.0
 *         g = a * color[1] / 255.0             # <<<<<<<<<<<<<<
 *         b = a * color[2] / 255.0
 * 
 */
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_color, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyNumber_Multiply(__pyx_v_a, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyFloat_DivideObjC(__pyx_t_1, __pyx_float_255_0, 255.0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 727, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_g = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":728
 *         r = a * color[0] / 255.0
 *         g = a * color[1] / 255.0
 *         b = a * color[2] / 255.0             # <<<<<<<<<<<<<<
 * 
 *         color = (r, g, b, a)
 */
  __pyx_t_2 = __Pyx_GetItemInt(__pyx_v_color, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 728, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = PyNumber_Multiply(__pyx_v_a, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 728, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyFloat_DivideObjC(__pyx_t_1, __pyx_float_255_0, 255.0, 0, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 728, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_b = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":730
 *         b = a * color[2] / 255.0
 * 
 *         color = (r, g, b, a)             # <<<<<<<<<<<<<<
 * 
 *         return Model((w, h), mesh, ("renpy.solid", ), { "u_renpy_solid_color" : color })
 */
  __pyx_t_2 = PyTuple_New(4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 730, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_r);
  __Pyx_GIVEREF(__pyx_v_r);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_r);
  __Pyx_INCREF(__pyx_v_g);
  __Pyx_GIVEREF(__pyx_v_g);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_g);
  __Pyx_INCREF(__pyx_v_b);
  __Pyx_GIVEREF(__pyx_v_b);
  PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_b);
  __Pyx_INCREF(__pyx_v_a);
  __Pyx_GIVEREF(__pyx_v_a);
  PyTuple_SET_ITEM(__pyx_t_2, 3, __pyx_v_a);
  __Pyx_DECREF_SET(__pyx_v_color, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":732
 *         color = (r, g, b, a)
 * 
 *         return Model((w, h), mesh, ("renpy.solid", ), { "u_renpy_solid_color" : color })             # <<<<<<<<<<<<<<
 * 
 *     def flip(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 732, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_w);
  __Pyx_GIVEREF(__pyx_v_w);
  PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_v_w);
  __Pyx_INCREF(__pyx_v_h);
  __Pyx_GIVEREF(__pyx_v_h);
  PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_v_h);
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 732, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_u_renpy_solid_color, __pyx_v_color) < 0) __PYX_ERR(0, 732, __pyx_L1_error)
  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 732, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
  __Pyx_INCREF(__pyx_v_mesh);
  __Pyx_GIVEREF(__pyx_v_mesh);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_mesh);
  __Pyx_INCREF(__pyx_tuple__8);
  __Pyx_GIVEREF(__pyx_tuple__8);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_tuple__8);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_1);
  __pyx_t_2 = 0;
  __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5renpy_3gl2_8gl2model_Model), __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 732, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":718
 *         return self.texture_loader.ready_one_texture()
 * 
 *     def solid_texture(self, w, h, color):             # <<<<<<<<<<<<<<
 *         """
 *         Returns a texture that represents a solid color.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.solid_texture", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_mesh);
  __Pyx_XDECREF(__pyx_v_a);
  __Pyx_XDECREF(__pyx_v_r);
  __Pyx_XDECREF(__pyx_v_g);
  __Pyx_XDECREF(__pyx_v_b);
  __Pyx_XDECREF(__pyx_v_color);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":734
 *         return Model((w, h), mesh, ("renpy.solid", ), { "u_renpy_solid_color" : color })
 * 
 *     def flip(self):             # <<<<<<<<<<<<<<
 *         """
 *         Called to flip the screen after it's drawn.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_37flip(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_36flip[] = "\n        Called to flip the screen after it's drawn.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_37flip(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("flip (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_36flip(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_36flip(CYTHON_UNUSED struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  CYTHON_UNUSED PyObject *__pyx_v_start = NULL;
  PyObject *__pyx_v_e = NULL;
  PyObject *__pyx_v_end = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  int __pyx_t_12;
  int __pyx_t_13;
  Py_ssize_t __pyx_t_14;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("flip", 0);

  /* "renpy/gl2/gl2draw.pyx":739
 *         """
 * 
 *         start = time.time()             # <<<<<<<<<<<<<<
 * 
 *         renpy.plog(1, "flip")
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
    }
  }
  __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 739, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_start = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":741
 *         start = time.time()
 * 
 *         renpy.plog(1, "flip")             # <<<<<<<<<<<<<<
 * 
 *         try:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 741, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_plog); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 741, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 741, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":743
 *         renpy.plog(1, "flip")
 * 
 *         try:             # <<<<<<<<<<<<<<
 *             pygame.display.flip()
 *         except pygame.error as e:
 */
  {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ExceptionSave(&__pyx_t_4, &__pyx_t_5, &__pyx_t_6);
    __Pyx_XGOTREF(__pyx_t_4);
    __Pyx_XGOTREF(__pyx_t_5);
    __Pyx_XGOTREF(__pyx_t_6);
    /*try:*/ {

      /* "renpy/gl2/gl2draw.pyx":744
 * 
 *         try:
 *             pygame.display.flip()             # <<<<<<<<<<<<<<
 *         except pygame.error as e:
 *             renpy.display.log.write("Flip failed %r", e)
 */
      __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pygame); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 744, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_display); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 744, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_flip); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 744, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = NULL;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
        __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
        if (likely(__pyx_t_2)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
          __Pyx_INCREF(__pyx_t_2);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_3, function);
        }
      }
      __pyx_t_1 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_3);
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 744, __pyx_L3_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "renpy/gl2/gl2draw.pyx":743
 *         renpy.plog(1, "flip")
 * 
 *         try:             # <<<<<<<<<<<<<<
 *             pygame.display.flip()
 *         except pygame.error as e:
 */
    }
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    goto __pyx_L8_try_end;
    __pyx_L3_error:;
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "renpy/gl2/gl2draw.pyx":745
 *         try:
 *             pygame.display.flip()
 *         except pygame.error as e:             # <<<<<<<<<<<<<<
 *             renpy.display.log.write("Flip failed %r", e)
 *             renpy.game.interface.display_reset = True
 */
    __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_3, &__pyx_t_2);
    __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_pygame); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 745, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_error); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 745, __pyx_L5_except_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    __pyx_t_9 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_8);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_ErrRestore(__pyx_t_1, __pyx_t_3, __pyx_t_2);
    __pyx_t_1 = 0; __pyx_t_3 = 0; __pyx_t_2 = 0;
    if (__pyx_t_9) {
      __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.flip", __pyx_clineno, __pyx_lineno, __pyx_filename);
      if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_3, &__pyx_t_1) < 0) __PYX_ERR(0, 745, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_3);
      __pyx_v_e = __pyx_t_3;

      /* "renpy/gl2/gl2draw.pyx":746
 *             pygame.display.flip()
 *         except pygame.error as e:
 *             renpy.display.log.write("Flip failed %r", e)             # <<<<<<<<<<<<<<
 *             renpy.game.interface.display_reset = True
 * 
 */
      __Pyx_GetModuleGlobalName(__pyx_t_7, __pyx_n_s_renpy); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 746, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_display); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 746, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_log); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 746, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_7);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_write); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 746, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = NULL;
      __pyx_t_9 = 0;
      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_10))) {
        __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_10);
        if (likely(__pyx_t_7)) {
          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
          __Pyx_INCREF(__pyx_t_7);
          __Pyx_INCREF(function);
          __Pyx_DECREF_SET(__pyx_t_10, function);
          __pyx_t_9 = 1;
        }
      }
      #if CYTHON_FAST_PYCALL
      if (PyFunction_Check(__pyx_t_10)) {
        PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_kp_s_Flip_failed_r, __pyx_v_e};
        __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 746, __pyx_L5_except_error)
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_GOTREF(__pyx_t_8);
      } else
      #endif
      #if CYTHON_FAST_PYCCALL
      if (__Pyx_PyFastCFunction_Check(__pyx_t_10)) {
        PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_kp_s_Flip_failed_r, __pyx_v_e};
        __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_10, __pyx_temp+1-__pyx_t_9, 2+__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 746, __pyx_L5_except_error)
        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
        __Pyx_GOTREF(__pyx_t_8);
      } else
      #endif
      {
        __pyx_t_11 = PyTuple_New(2+__pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 746, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_11);
        if (__pyx_t_7) {
          __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_7); __pyx_t_7 = NULL;
        }
        __Pyx_INCREF(__pyx_kp_s_Flip_failed_r);
        __Pyx_GIVEREF(__pyx_kp_s_Flip_failed_r);
        PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_9, __pyx_kp_s_Flip_failed_r);
        __Pyx_INCREF(__pyx_v_e);
        __Pyx_GIVEREF(__pyx_v_e);
        PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_9, __pyx_v_e);
        __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_10, __pyx_t_11, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 746, __pyx_L5_except_error)
        __Pyx_GOTREF(__pyx_t_8);
        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
      }
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

      /* "renpy/gl2/gl2draw.pyx":747
 *         except pygame.error as e:
 *             renpy.display.log.write("Flip failed %r", e)
 *             renpy.game.interface.display_reset = True             # <<<<<<<<<<<<<<
 * 
 *         end = time.time()
 */
      __Pyx_GetModuleGlobalName(__pyx_t_8, __pyx_n_s_renpy); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 747, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_game); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 747, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_interface); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 747, __pyx_L5_except_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
      if (__Pyx_PyObject_SetAttrStr(__pyx_t_8, __pyx_n_s_display_reset, Py_True) < 0) __PYX_ERR(0, 747, __pyx_L5_except_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
      __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
      goto __pyx_L4_exception_handled;
    }
    goto __pyx_L5_except_error;
    __pyx_L5_except_error:;

    /* "renpy/gl2/gl2draw.pyx":743
 *         renpy.plog(1, "flip")
 * 
 *         try:             # <<<<<<<<<<<<<<
 *             pygame.display.flip()
 *         except pygame.error as e:
 */
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    goto __pyx_L1_error;
    __pyx_L4_exception_handled:;
    __Pyx_XGIVEREF(__pyx_t_4);
    __Pyx_XGIVEREF(__pyx_t_5);
    __Pyx_XGIVEREF(__pyx_t_6);
    __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
    __pyx_L8_try_end:;
  }

  /* "renpy/gl2/gl2draw.pyx":749
 *             renpy.game.interface.display_reset = True
 * 
 *         end = time.time()             # <<<<<<<<<<<<<<
 * 
 *         if vsync:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 749, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_end = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":751
 *         end = time.time()
 * 
 *         if vsync:             # <<<<<<<<<<<<<<
 * 
 *             # When the window is covered, we can get into a state where no
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_vsync); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 751, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 751, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_12) {

    /* "renpy/gl2/gl2draw.pyx":757
 *             # sleep.
 * 
 *             frame_times.append(end)             # <<<<<<<<<<<<<<
 * 
 *             if len(frame_times) > 10:
 */
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_frame_times); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 757, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_13 = __Pyx_PyObject_Append(__pyx_t_1, __pyx_v_end); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(0, 757, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":759
 *             frame_times.append(end)
 * 
 *             if len(frame_times) > 10:             # <<<<<<<<<<<<<<
 *                 frame_times.pop(0)
 * 
 */
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_frame_times); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 759, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_14 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_14 == ((Py_ssize_t)-1))) __PYX_ERR(0, 759, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_12 = ((__pyx_t_14 > 10) != 0);
    if (__pyx_t_12) {

      /* "renpy/gl2/gl2draw.pyx":760
 * 
 *             if len(frame_times) > 10:
 *                 frame_times.pop(0)             # <<<<<<<<<<<<<<
 * 
 *                 # If we're running at over 1000 fps, vsync is broken.
 */
      __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_frame_times); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_2 = __Pyx_PyObject_PopIndex(__pyx_t_1, __pyx_int_0, 0, 1, Py_ssize_t, PyInt_FromSsize_t); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 760, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

      /* "renpy/gl2/gl2draw.pyx":763
 * 
 *                 # If we're running at over 1000 fps, vsync is broken.
 *                 if (frame_times[-1] - frame_times[0] < .001 * 10):             # <<<<<<<<<<<<<<
 *                     time.sleep(1.0 / 120.0)
 *                     renpy.plog(1, "after broken vsync sleep")
 */
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frame_times); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_1 = __Pyx_GetItemInt(__pyx_t_2, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 763, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_frame_times); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_2, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 763, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __pyx_t_2 = PyNumber_Subtract(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 763, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_3 = PyFloat_FromDouble((.001 * 10.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 763, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_3);
      __pyx_t_1 = PyObject_RichCompare(__pyx_t_2, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 763, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
      __pyx_t_12 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_12 < 0)) __PYX_ERR(0, 763, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (__pyx_t_12) {

        /* "renpy/gl2/gl2draw.pyx":764
 *                 # If we're running at over 1000 fps, vsync is broken.
 *                 if (frame_times[-1] - frame_times[0] < .001 * 10):
 *                     time.sleep(1.0 / 120.0)             # <<<<<<<<<<<<<<
 *                     renpy.plog(1, "after broken vsync sleep")
 * 
 */
        __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_time); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 764, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_sleep); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 764, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        __pyx_t_3 = PyFloat_FromDouble((1.0 / 120.0)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 764, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_3);
        __pyx_t_8 = NULL;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
          __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_2);
          if (likely(__pyx_t_8)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
            __Pyx_INCREF(__pyx_t_8);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_2, function);
          }
        }
        __pyx_t_1 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_8, __pyx_t_3) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3);
        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
        if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 764, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "renpy/gl2/gl2draw.pyx":765
 *                 if (frame_times[-1] - frame_times[0] < .001 * 10):
 *                     time.sleep(1.0 / 120.0)
 *                     renpy.plog(1, "after broken vsync sleep")             # <<<<<<<<<<<<<<
 * 
 * 
 */
        __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 765, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_plog); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 765, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_2);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__10, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 765, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

        /* "renpy/gl2/gl2draw.pyx":763
 * 
 *                 # If we're running at over 1000 fps, vsync is broken.
 *                 if (frame_times[-1] - frame_times[0] < .001 * 10):             # <<<<<<<<<<<<<<
 *                     time.sleep(1.0 / 120.0)
 *                     renpy.plog(1, "after broken vsync sleep")
 */
      }

      /* "renpy/gl2/gl2draw.pyx":759
 *             frame_times.append(end)
 * 
 *             if len(frame_times) > 10:             # <<<<<<<<<<<<<<
 *                 frame_times.pop(0)
 * 
 */
    }

    /* "renpy/gl2/gl2draw.pyx":751
 *         end = time.time()
 * 
 *         if vsync:             # <<<<<<<<<<<<<<
 * 
 *             # When the window is covered, we can get into a state where no
 */
  }

  /* "renpy/gl2/gl2draw.pyx":734
 *         return Model((w, h), mesh, ("renpy.solid", ), { "u_renpy_solid_color" : color })
 * 
 *     def flip(self):             # <<<<<<<<<<<<<<
 *         """
 *         Called to flip the screen after it's drawn.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.flip", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_start);
  __Pyx_XDECREF(__pyx_v_e);
  __Pyx_XDECREF(__pyx_v_end);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":768
 * 
 * 
 *     def draw_screen(self, render_tree, flip=True):             # <<<<<<<<<<<<<<
 *         """
 *         Draws the screen.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_39draw_screen(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_38draw_screen[] = "\n        Draws the screen.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_39draw_screen(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_render_tree = 0;
  CYTHON_UNUSED PyObject *__pyx_v_flip = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("draw_screen (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_render_tree,&__pyx_n_s_flip,0};
    PyObject* values[2] = {0,0};
    values[1] = ((PyObject *)Py_True);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_render_tree)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_flip);
          if (value) { values[1] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "draw_screen") < 0)) __PYX_ERR(0, 768, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_render_tree = values[0];
    __pyx_v_flip = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("draw_screen", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 768, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.draw_screen", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_38draw_screen(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), __pyx_v_render_tree, __pyx_v_flip);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_38draw_screen(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_render_tree, CYTHON_UNUSED PyObject *__pyx_v_flip) {
  PyObject *__pyx_v_surf = NULL;
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_v_y = NULL;
  PyObject *__pyx_v_w = NULL;
  PyObject *__pyx_v_h = NULL;
  PyObject *__pyx_v_clear_r = NULL;
  PyObject *__pyx_v_clear_g = NULL;
  PyObject *__pyx_v_clear_b = NULL;
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_transform = 0;
  struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_context = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  GLint __pyx_t_10;
  GLint __pyx_t_11;
  GLsizei __pyx_t_12;
  GLsizei __pyx_t_13;
  PyObject *(*__pyx_t_14)(PyObject *);
  GLfloat __pyx_t_15;
  GLfloat __pyx_t_16;
  GLfloat __pyx_t_17;
  float __pyx_t_18;
  float __pyx_t_19;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("draw_screen", 0);

  /* "renpy/gl2/gl2draw.pyx":775
 *         # NOTE: This needs to set interface.text_rect as a side effect.
 * 
 *         renpy.plog(1, "start draw_screen")             # <<<<<<<<<<<<<<
 * 
 *         if renpy.display.video.fullscreen:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_plog); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__11, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":777
 *         renpy.plog(1, "start draw_screen")
 * 
 *         if renpy.display.video.fullscreen:             # <<<<<<<<<<<<<<
 *             surf = renpy.display.video.render_movie("movie", self.virtual_size[0], self.virtual_size[1])
 *         else:
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_video); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_fullscreen); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 777, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 777, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (__pyx_t_3) {

    /* "renpy/gl2/gl2draw.pyx":778
 * 
 *         if renpy.display.video.fullscreen:
 *             surf = renpy.display.video.render_movie("movie", self.virtual_size[0], self.virtual_size[1])             # <<<<<<<<<<<<<<
 *         else:
 *             surf = render_tree
 */
    __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 778, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 778, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_video); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 778, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_render_movie); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 778, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (unlikely(__pyx_v_self->virtual_size == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 778, __pyx_L1_error)
    }
    __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->virtual_size, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 778, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    if (unlikely(__pyx_v_self->virtual_size == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 778, __pyx_L1_error)
    }
    __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v_self->virtual_size, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 778, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = NULL;
    __pyx_t_7 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_6)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_6);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_7 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_n_s_movie, __pyx_t_1, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 778, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_n_s_movie, __pyx_t_1, __pyx_t_5};
      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 778, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    } else
    #endif
    {
      __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 778, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      if (__pyx_t_6) {
        __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6); __pyx_t_6 = NULL;
      }
      __Pyx_INCREF(__pyx_n_s_movie);
      __Pyx_GIVEREF(__pyx_n_s_movie);
      PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_n_s_movie);
      __Pyx_GIVEREF(__pyx_t_1);
      PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_1);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_5);
      __pyx_t_1 = 0;
      __pyx_t_5 = 0;
      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_8, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 778, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_2);
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_surf = __pyx_t_2;
    __pyx_t_2 = 0;

    /* "renpy/gl2/gl2draw.pyx":777
 *         renpy.plog(1, "start draw_screen")
 * 
 *         if renpy.display.video.fullscreen:             # <<<<<<<<<<<<<<
 *             surf = renpy.display.video.render_movie("movie", self.virtual_size[0], self.virtual_size[1])
 *         else:
 */
    goto __pyx_L3;
  }

  /* "renpy/gl2/gl2draw.pyx":780
 *             surf = renpy.display.video.render_movie("movie", self.virtual_size[0], self.virtual_size[1])
 *         else:
 *             surf = render_tree             # <<<<<<<<<<<<<<
 * 
 *         if surf is None:
 */
  /*else*/ {
    __Pyx_INCREF(__pyx_v_render_tree);
    __pyx_v_surf = __pyx_v_render_tree;
  }
  __pyx_L3:;

  /* "renpy/gl2/gl2draw.pyx":782
 *             surf = render_tree
 * 
 *         if surf is None:             # <<<<<<<<<<<<<<
 *             return
 * 
 */
  __pyx_t_3 = (__pyx_v_surf == Py_None);
  __pyx_t_9 = (__pyx_t_3 != 0);
  if (__pyx_t_9) {

    /* "renpy/gl2/gl2draw.pyx":783
 * 
 *         if surf is None:
 *             return             # <<<<<<<<<<<<<<
 * 
 *         # Compute visible_children.
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":782
 *             surf = render_tree
 * 
 *         if surf is None:             # <<<<<<<<<<<<<<
 *             return
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":786
 * 
 *         # Compute visible_children.
 *         surf.is_opaque()             # <<<<<<<<<<<<<<
 * 
 *         # Load all the textures and RTTs.
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_surf, __pyx_n_s_is_opaque); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_8) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_8) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":789
 * 
 *         # Load all the textures and RTTs.
 *         self.load_all_textures(surf)             # <<<<<<<<<<<<<<
 * 
 *         # Switch to the right FBO, and the right viewport.
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_load_all_textures); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 789, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_8, __pyx_v_surf) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_surf);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 789, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":792
 * 
 *         # Switch to the right FBO, and the right viewport.
 *         self.change_fbo(self.default_fbo)             # <<<<<<<<<<<<<<
 * 
 *         # Set up the viewport.
 */
  ((struct __pyx_vtabstruct_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self->__pyx_vtab)->change_fbo(__pyx_v_self, __pyx_v_self->default_fbo);

  /* "renpy/gl2/gl2draw.pyx":795
 * 
 *         # Set up the viewport.
 *         x, y, w, h = self.drawable_viewport             # <<<<<<<<<<<<<<
 *         glViewport(x, y, w, h)
 * 
 */
  __pyx_t_2 = __pyx_v_self->drawable_viewport;
  __Pyx_INCREF(__pyx_t_2);
  if (likely(__pyx_t_2 != Py_None)) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 795, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
    __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
    __pyx_t_1 = PyTuple_GET_ITEM(sequence, 3); 
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_8);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_1);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_4,&__pyx_t_8,&__pyx_t_5,&__pyx_t_1};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 795, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 795, __pyx_L1_error)
  }
  __pyx_v_x = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_v_y = __pyx_t_8;
  __pyx_t_8 = 0;
  __pyx_v_w = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_h = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":796
 *         # Set up the viewport.
 *         x, y, w, h = self.drawable_viewport
 *         glViewport(x, y, w, h)             # <<<<<<<<<<<<<<
 * 
 *         # Clear the screen.
 */
  __pyx_t_10 = __Pyx_PyInt_As_GLint(__pyx_v_x); if (unlikely((__pyx_t_10 == ((GLint)-1)) && PyErr_Occurred())) __PYX_ERR(0, 796, __pyx_L1_error)
  __pyx_t_11 = __Pyx_PyInt_As_GLint(__pyx_v_y); if (unlikely((__pyx_t_11 == ((GLint)-1)) && PyErr_Occurred())) __PYX_ERR(0, 796, __pyx_L1_error)
  __pyx_t_12 = __Pyx_PyInt_As_GLsizei(__pyx_v_w); if (unlikely((__pyx_t_12 == ((GLsizei)-1)) && PyErr_Occurred())) __PYX_ERR(0, 796, __pyx_L1_error)
  __pyx_t_13 = __Pyx_PyInt_As_GLsizei(__pyx_v_h); if (unlikely((__pyx_t_13 == ((GLsizei)-1)) && PyErr_Occurred())) __PYX_ERR(0, 796, __pyx_L1_error)
  __pyx_v_5renpy_4uguu_2gl_glViewport(__pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13);

  /* "renpy/gl2/gl2draw.pyx":799
 * 
 *         # Clear the screen.
 *         clear_r, clear_g, clear_b = renpy.color.Color(renpy.config.gl_clear_color).rgb             # <<<<<<<<<<<<<<
 *         glClearColor(clear_r, clear_g, clear_b, 1.0)
 *         glClear(GL_COLOR_BUFFER_BIT)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_color); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 799, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_Color); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_renpy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 799, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_config); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 799, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_8, __pyx_n_s_gl_clear_color); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 799, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
  __pyx_t_8 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_8)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_2 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_8, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 799, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_rgb); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 799, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 3)) {
      if (size > 3) __Pyx_RaiseTooManyValuesError(3);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 799, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
      __pyx_t_8 = PyList_GET_ITEM(sequence, 2); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_8);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 799, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 799, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 799, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 799, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_14 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_14(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_5 = __pyx_t_14(__pyx_t_4); if (unlikely(!__pyx_t_5)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    index = 2; __pyx_t_8 = __pyx_t_14(__pyx_t_4); if (unlikely(!__pyx_t_8)) goto __pyx_L5_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_8);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_4), 3) < 0) __PYX_ERR(0, 799, __pyx_L1_error)
    __pyx_t_14 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L6_unpacking_done;
    __pyx_L5_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_14 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 799, __pyx_L1_error)
    __pyx_L6_unpacking_done:;
  }
  __pyx_v_clear_r = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_clear_g = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_clear_b = __pyx_t_8;
  __pyx_t_8 = 0;

  /* "renpy/gl2/gl2draw.pyx":800
 *         # Clear the screen.
 *         clear_r, clear_g, clear_b = renpy.color.Color(renpy.config.gl_clear_color).rgb
 *         glClearColor(clear_r, clear_g, clear_b, 1.0)             # <<<<<<<<<<<<<<
 *         glClear(GL_COLOR_BUFFER_BIT)
 * 
 */
  __pyx_t_15 = __pyx_PyFloat_AsFloat(__pyx_v_clear_r); if (unlikely((__pyx_t_15 == ((GLfloat)-1)) && PyErr_Occurred())) __PYX_ERR(0, 800, __pyx_L1_error)
  __pyx_t_16 = __pyx_PyFloat_AsFloat(__pyx_v_clear_g); if (unlikely((__pyx_t_16 == ((GLfloat)-1)) && PyErr_Occurred())) __PYX_ERR(0, 800, __pyx_L1_error)
  __pyx_t_17 = __pyx_PyFloat_AsFloat(__pyx_v_clear_b); if (unlikely((__pyx_t_17 == ((GLfloat)-1)) && PyErr_Occurred())) __PYX_ERR(0, 800, __pyx_L1_error)
  __pyx_v_5renpy_4uguu_2gl_glClearColor(__pyx_t_15, __pyx_t_16, __pyx_t_17, 1.0);

  /* "renpy/gl2/gl2draw.pyx":801
 *         clear_r, clear_g, clear_b = renpy.color.Color(renpy.config.gl_clear_color).rgb
 *         glClearColor(clear_r, clear_g, clear_b, 1.0)
 *         glClear(GL_COLOR_BUFFER_BIT)             # <<<<<<<<<<<<<<
 * 
 *         # Project the child from virtual space to the screen space.
 */
  __pyx_v_5renpy_4uguu_2gl_glClear(GL_COLOR_BUFFER_BIT);

  /* "renpy/gl2/gl2draw.pyx":805
 *         # Project the child from virtual space to the screen space.
 *         cdef Matrix transform
 *         transform = Matrix.cscreen_projection(self.virtual_size[0], self.virtual_size[1])             # <<<<<<<<<<<<<<
 * 
 *         # Set up the default modes.
 */
  if (unlikely(__pyx_v_self->virtual_size == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 805, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->virtual_size, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_18 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_18 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 805, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (unlikely(__pyx_v_self->virtual_size == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 805, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->virtual_size, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_19 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_19 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 805, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = ((PyObject *)__pyx_vtabptr_5renpy_7display_6matrix_Matrix->cscreen_projection(__pyx_t_18, __pyx_t_19)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 805, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_transform = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":808
 * 
 *         # Set up the default modes.
 *         glEnable(GL_BLEND)             # <<<<<<<<<<<<<<
 *         glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
 * 
 */
  __pyx_v_5renpy_4uguu_2gl_glEnable(GL_BLEND);

  /* "renpy/gl2/gl2draw.pyx":809
 *         # Set up the default modes.
 *         glEnable(GL_BLEND)
 *         glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)             # <<<<<<<<<<<<<<
 * 
 *         # Use the context to draw the surface tree.
 */
  __pyx_v_5renpy_4uguu_2gl_glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

  /* "renpy/gl2/gl2draw.pyx":812
 * 
 *         # Use the context to draw the surface tree.
 *         context = GL2DrawingContext(self, w, h)             # <<<<<<<<<<<<<<
 *         context.draw(surf, transform)
 * 
 */
  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 812, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_self));
  __Pyx_INCREF(__pyx_v_w);
  __Pyx_GIVEREF(__pyx_v_w);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_w);
  __Pyx_INCREF(__pyx_v_h);
  __Pyx_GIVEREF(__pyx_v_h);
  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_h);
  __pyx_t_8 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5renpy_3gl2_7gl2draw_GL2DrawingContext), __pyx_t_1, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 812, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_context = ((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *)__pyx_t_8);
  __pyx_t_8 = 0;

  /* "renpy/gl2/gl2draw.pyx":813
 *         # Use the context to draw the surface tree.
 *         context = GL2DrawingContext(self, w, h)
 *         context.draw(surf, transform)             # <<<<<<<<<<<<<<
 * 
 *         self.flip()
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context), __pyx_n_s_draw); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 813, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_surf, ((PyObject *)__pyx_v_transform)};
    __pyx_t_8 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 813, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_8);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_surf, ((PyObject *)__pyx_v_transform)};
    __pyx_t_8 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 813, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_8);
  } else
  #endif
  {
    __pyx_t_2 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_surf);
    __Pyx_GIVEREF(__pyx_v_surf);
    PyTuple_SET_ITEM(__pyx_t_2, 0+__pyx_t_7, __pyx_v_surf);
    __Pyx_INCREF(((PyObject *)__pyx_v_transform));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_transform));
    PyTuple_SET_ITEM(__pyx_t_2, 1+__pyx_t_7, ((PyObject *)__pyx_v_transform));
    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_2, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 813, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

  /* "renpy/gl2/gl2draw.pyx":815
 *         context.draw(surf, transform)
 * 
 *         self.flip()             # <<<<<<<<<<<<<<
 * 
 *         self.texture_loader.cleanup()
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_flip); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_8 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 815, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

  /* "renpy/gl2/gl2draw.pyx":817
 *         self.flip()
 * 
 *         self.texture_loader.cleanup()             # <<<<<<<<<<<<<<
 * 
 *     def load_all_textures(self, what):
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->texture_loader), __pyx_n_s_cleanup); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 817, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_8 = (__pyx_t_2) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_2) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 817, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;

  /* "renpy/gl2/gl2draw.pyx":768
 * 
 * 
 *     def draw_screen(self, render_tree, flip=True):             # <<<<<<<<<<<<<<
 *         """
 *         Draws the screen.
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.draw_screen", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_surf);
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_y);
  __Pyx_XDECREF(__pyx_v_w);
  __Pyx_XDECREF(__pyx_v_h);
  __Pyx_XDECREF(__pyx_v_clear_r);
  __Pyx_XDECREF(__pyx_v_clear_g);
  __Pyx_XDECREF(__pyx_v_clear_b);
  __Pyx_XDECREF((PyObject *)__pyx_v_transform);
  __Pyx_XDECREF((PyObject *)__pyx_v_context);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":819
 *         self.texture_loader.cleanup()
 * 
 *     def load_all_textures(self, what):             # <<<<<<<<<<<<<<
 *         """
 *         This loads all textures from the surface tree before drawing to
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_41load_all_textures(PyObject *__pyx_v_self, PyObject *__pyx_v_what); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_40load_all_textures[] = "\n        This loads all textures from the surface tree before drawing to\n        the actual framebuffer. This is responsible for walking the\n        surface tree, and loading framebuffers and texture.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_41load_all_textures(PyObject *__pyx_v_self, PyObject *__pyx_v_what) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("load_all_textures (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_40load_all_textures(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_what));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_40load_all_textures(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_what) {
  struct __pyx_obj_5renpy_7display_6render_Render *__pyx_v_r = 0;
  PyObject *__pyx_v_i = NULL;
  PyObject *__pyx_v_uniforms = NULL;
  PyObject *__pyx_v_c = NULL;
  PyObject *__pyx_v_mesh = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  Py_ssize_t __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  int __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("load_all_textures", 0);
  __Pyx_INCREF(__pyx_v_what);

  /* "renpy/gl2/gl2draw.pyx":826
 *         """
 * 
 *         if isinstance(what, Surface):             # <<<<<<<<<<<<<<
 *             what = self.load_texture(what)
 *             self.load_all_textures(what)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 826, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_what, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 826, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "renpy/gl2/gl2draw.pyx":827
 * 
 *         if isinstance(what, Surface):
 *             what = self.load_texture(what)             # <<<<<<<<<<<<<<
 *             self.load_all_textures(what)
 *             return
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_load_texture); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 827, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_what) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_what);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 827, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_what, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":828
 *         if isinstance(what, Surface):
 *             what = self.load_texture(what)
 *             self.load_all_textures(what)             # <<<<<<<<<<<<<<
 *             return
 * 
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_load_all_textures); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 828, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_what) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_what);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 828, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":829
 *             what = self.load_texture(what)
 *             self.load_all_textures(what)
 *             return             # <<<<<<<<<<<<<<
 * 
 *         if isinstance(what, Model):
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":826
 *         """
 * 
 *         if isinstance(what, Surface):             # <<<<<<<<<<<<<<
 *             what = self.load_texture(what)
 *             self.load_all_textures(what)
 */
  }

  /* "renpy/gl2/gl2draw.pyx":831
 *             return
 * 
 *         if isinstance(what, Model):             # <<<<<<<<<<<<<<
 *             what.load()
 *             return
 */
  __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_what, __pyx_ptype_5renpy_3gl2_8gl2model_Model); 
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":832
 * 
 *         if isinstance(what, Model):
 *             what.load()             # <<<<<<<<<<<<<<
 *             return
 * 
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_what, __pyx_n_s_load); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 832, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 832, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":833
 *         if isinstance(what, Model):
 *             what.load()
 *             return             # <<<<<<<<<<<<<<
 * 
 *         # what is a Render.
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":831
 *             return
 * 
 *         if isinstance(what, Model):             # <<<<<<<<<<<<<<
 *             what.load()
 *             return
 */
  }

  /* "renpy/gl2/gl2draw.pyx":837
 *         # what is a Render.
 * 
 *         cdef Render r = what             # <<<<<<<<<<<<<<
 * 
 *         if r.loaded:
 */
  if (!(likely(((__pyx_v_what) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_what, __pyx_ptype_5renpy_7display_6render_Render))))) __PYX_ERR(0, 837, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_what;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_r = ((struct __pyx_obj_5renpy_7display_6render_Render *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":839
 *         cdef Render r = what
 * 
 *         if r.loaded:             # <<<<<<<<<<<<<<
 *             return
 * 
 */
  __pyx_t_2 = (__pyx_v_r->loaded != 0);
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":840
 * 
 *         if r.loaded:
 *             return             # <<<<<<<<<<<<<<
 * 
 *         r.loaded = True
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":839
 *         cdef Render r = what
 * 
 *         if r.loaded:             # <<<<<<<<<<<<<<
 *             return
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":842
 *             return
 * 
 *         r.loaded = True             # <<<<<<<<<<<<<<
 * 
 *         # Load the child textures.
 */
  __pyx_v_r->loaded = 1;

  /* "renpy/gl2/gl2draw.pyx":845
 * 
 *         # Load the child textures.
 *         for i in r.children:             # <<<<<<<<<<<<<<
 *             self.load_all_textures(i[0])
 * 
 */
  if (unlikely(__pyx_v_r->children == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 845, __pyx_L1_error)
  }
  __pyx_t_1 = __pyx_v_r->children; __Pyx_INCREF(__pyx_t_1); __pyx_t_6 = 0;
  for (;;) {
    if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_1)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_6); __Pyx_INCREF(__pyx_t_4); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 845, __pyx_L1_error)
    #else
    __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 845, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_4);
    __pyx_t_4 = 0;

    /* "renpy/gl2/gl2draw.pyx":846
 *         # Load the child textures.
 *         for i in r.children:
 *             self.load_all_textures(i[0])             # <<<<<<<<<<<<<<
 * 
 *         # If we have a mesh (or mesh=True), create the Model.
 */
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_load_all_textures); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_i, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_5);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_5, function);
      }
    }
    __pyx_t_4 = (__pyx_t_8) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_8, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_7);
    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 846, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "renpy/gl2/gl2draw.pyx":845
 * 
 *         # Load the child textures.
 *         for i in r.children:             # <<<<<<<<<<<<<<
 *             self.load_all_textures(i[0])
 * 
 */
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":849
 * 
 *         # If we have a mesh (or mesh=True), create the Model.
 *         if r.mesh:             # <<<<<<<<<<<<<<
 * 
 *             if (r.mesh is True) and (not r.children):
 */
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_r->mesh); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 849, __pyx_L1_error)
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":851
 *         if r.mesh:
 * 
 *             if (r.mesh is True) and (not r.children):             # <<<<<<<<<<<<<<
 *                 return
 * 
 */
    __pyx_t_3 = (__pyx_v_r->mesh == Py_True);
    __pyx_t_9 = (__pyx_t_3 != 0);
    if (__pyx_t_9) {
    } else {
      __pyx_t_2 = __pyx_t_9;
      goto __pyx_L10_bool_binop_done;
    }
    __pyx_t_9 = (__pyx_v_r->children != Py_None)&&(PyList_GET_SIZE(__pyx_v_r->children) != 0);
    __pyx_t_3 = ((!__pyx_t_9) != 0);
    __pyx_t_2 = __pyx_t_3;
    __pyx_L10_bool_binop_done:;
    if (__pyx_t_2) {

      /* "renpy/gl2/gl2draw.pyx":852
 * 
 *             if (r.mesh is True) and (not r.children):
 *                 return             # <<<<<<<<<<<<<<
 * 
 *             uniforms = { }
 */
      __Pyx_XDECREF(__pyx_r);
      __pyx_r = Py_None; __Pyx_INCREF(Py_None);
      goto __pyx_L0;

      /* "renpy/gl2/gl2draw.pyx":851
 *         if r.mesh:
 * 
 *             if (r.mesh is True) and (not r.children):             # <<<<<<<<<<<<<<
 *                 return
 * 
 */
    }

    /* "renpy/gl2/gl2draw.pyx":854
 *                 return
 * 
 *             uniforms = { }             # <<<<<<<<<<<<<<
 *             if r.uniforms:
 *                 uniforms.update(r.uniforms)
 */
    __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 854, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_v_uniforms = ((PyObject*)__pyx_t_1);
    __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":855
 * 
 *             uniforms = { }
 *             if r.uniforms:             # <<<<<<<<<<<<<<
 *                 uniforms.update(r.uniforms)
 * 
 */
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_r->uniforms); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 855, __pyx_L1_error)
    if (__pyx_t_2) {

      /* "renpy/gl2/gl2draw.pyx":856
 *             uniforms = { }
 *             if r.uniforms:
 *                 uniforms.update(r.uniforms)             # <<<<<<<<<<<<<<
 * 
 *             for i, c in enumerate(r.children):
 */
      __pyx_t_1 = __Pyx_CallUnboundCMethod1(&__pyx_umethod_PyDict_Type_update, __pyx_v_uniforms, __pyx_v_r->uniforms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 856, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

      /* "renpy/gl2/gl2draw.pyx":855
 * 
 *             uniforms = { }
 *             if r.uniforms:             # <<<<<<<<<<<<<<
 *                 uniforms.update(r.uniforms)
 * 
 */
    }

    /* "renpy/gl2/gl2draw.pyx":858
 *                 uniforms.update(r.uniforms)
 * 
 *             for i, c in enumerate(r.children):             # <<<<<<<<<<<<<<
 *                 uniforms["tex" + str(i)] = self.render_to_texture(c[0], properties=r.properties)
 * 
 */
    __Pyx_INCREF(__pyx_int_0);
    __pyx_t_1 = __pyx_int_0;
    __pyx_t_4 = __pyx_v_r->children; __Pyx_INCREF(__pyx_t_4); __pyx_t_6 = 0;
    for (;;) {
      if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_4)) break;
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      __pyx_t_5 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_6); __Pyx_INCREF(__pyx_t_5); __pyx_t_6++; if (unlikely(0 < 0)) __PYX_ERR(0, 858, __pyx_L1_error)
      #else
      __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      #endif
      __Pyx_XDECREF_SET(__pyx_v_c, __pyx_t_5);
      __pyx_t_5 = 0;
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_XDECREF_SET(__pyx_v_i, __pyx_t_1);
      __pyx_t_5 = __Pyx_PyInt_AddObjC(__pyx_t_1, __pyx_int_1, 1, 0, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 858, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __Pyx_DECREF(__pyx_t_1);
      __pyx_t_1 = __pyx_t_5;
      __pyx_t_5 = 0;

      /* "renpy/gl2/gl2draw.pyx":859
 * 
 *             for i, c in enumerate(r.children):
 *                 uniforms["tex" + str(i)] = self.render_to_texture(c[0], properties=r.properties)             # <<<<<<<<<<<<<<
 * 
 *             if r.mesh is True:
 */
      __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_render_to_texture); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 859, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      __pyx_t_7 = __Pyx_GetItemInt(__pyx_v_c, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 859, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 859, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
      __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 859, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (PyDict_SetItem(__pyx_t_7, __pyx_n_s_properties, __pyx_v_r->properties) < 0) __PYX_ERR(0, 859, __pyx_L1_error)
      __pyx_t_10 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_t_8, __pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 859, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_10);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      __pyx_t_7 = __Pyx_PyObject_CallOneArg(((PyObject *)(&PyString_Type)), __pyx_v_i); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 859, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = PyNumber_Add(__pyx_n_s_tex, __pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 859, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
      if (unlikely(PyDict_SetItem(__pyx_v_uniforms, __pyx_t_8, __pyx_t_10) < 0)) __PYX_ERR(0, 859, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;

      /* "renpy/gl2/gl2draw.pyx":858
 *                 uniforms.update(r.uniforms)
 * 
 *             for i, c in enumerate(r.children):             # <<<<<<<<<<<<<<
 *                 uniforms["tex" + str(i)] = self.render_to_texture(c[0], properties=r.properties)
 * 
 */
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":861
 *                 uniforms["tex" + str(i)] = self.render_to_texture(c[0], properties=r.properties)
 * 
 *             if r.mesh is True:             # <<<<<<<<<<<<<<
 *                 mesh = uniforms["tex0"].mesh
 *             else:
 */
    __pyx_t_2 = (__pyx_v_r->mesh == Py_True);
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (__pyx_t_3) {

      /* "renpy/gl2/gl2draw.pyx":862
 * 
 *             if r.mesh is True:
 *                 mesh = uniforms["tex0"].mesh             # <<<<<<<<<<<<<<
 *             else:
 *                 mesh = r.mesh
 */
      __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_uniforms, __pyx_n_s_tex0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 862, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_mesh); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 862, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_v_mesh = __pyx_t_4;
      __pyx_t_4 = 0;

      /* "renpy/gl2/gl2draw.pyx":861
 *                 uniforms["tex" + str(i)] = self.render_to_texture(c[0], properties=r.properties)
 * 
 *             if r.mesh is True:             # <<<<<<<<<<<<<<
 *                 mesh = uniforms["tex0"].mesh
 *             else:
 */
      goto __pyx_L15;
    }

    /* "renpy/gl2/gl2draw.pyx":864
 *                 mesh = uniforms["tex0"].mesh
 *             else:
 *                 mesh = r.mesh             # <<<<<<<<<<<<<<
 * 
 *             r.cached_model = Model(
 */
    /*else*/ {
      __pyx_t_4 = __pyx_v_r->mesh;
      __Pyx_INCREF(__pyx_t_4);
      __pyx_v_mesh = __pyx_t_4;
      __pyx_t_4 = 0;
    }
    __pyx_L15:;

    /* "renpy/gl2/gl2draw.pyx":867
 * 
 *             r.cached_model = Model(
 *                 (r.width, r.height),             # <<<<<<<<<<<<<<
 *                 mesh,
 *                 r.shaders,
 */
    __pyx_t_4 = PyFloat_FromDouble(__pyx_v_r->width); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_r->height); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_10 = PyTuple_New(2); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 867, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_1);
    PyTuple_SET_ITEM(__pyx_t_10, 1, __pyx_t_1);
    __pyx_t_4 = 0;
    __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":866
 *                 mesh = r.mesh
 * 
 *             r.cached_model = Model(             # <<<<<<<<<<<<<<
 *                 (r.width, r.height),
 *                 mesh,
 */
    __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 866, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_GIVEREF(__pyx_t_10);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_t_10);
    __Pyx_INCREF(__pyx_v_mesh);
    __Pyx_GIVEREF(__pyx_v_mesh);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_mesh);
    __Pyx_INCREF(__pyx_v_r->shaders);
    __Pyx_GIVEREF(__pyx_v_r->shaders);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_r->shaders);
    __Pyx_INCREF(__pyx_v_uniforms);
    __Pyx_GIVEREF(__pyx_v_uniforms);
    PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_uniforms);
    __pyx_t_10 = 0;
    __pyx_t_10 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5renpy_3gl2_8gl2model_Model), __pyx_t_1, NULL); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 866, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GIVEREF(__pyx_t_10);
    __Pyx_GOTREF(__pyx_v_r->cached_model);
    __Pyx_DECREF(__pyx_v_r->cached_model);
    __pyx_v_r->cached_model = __pyx_t_10;
    __pyx_t_10 = 0;

    /* "renpy/gl2/gl2draw.pyx":849
 * 
 *         # If we have a mesh (or mesh=True), create the Model.
 *         if r.mesh:             # <<<<<<<<<<<<<<
 * 
 *             if (r.mesh is True) and (not r.children):
 */
  }

  /* "renpy/gl2/gl2draw.pyx":819
 *         self.texture_loader.cleanup()
 * 
 *     def load_all_textures(self, what):             # <<<<<<<<<<<<<<
 *         """
 *         This loads all textures from the surface tree before drawing to
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.load_all_textures", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_r);
  __Pyx_XDECREF(__pyx_v_i);
  __Pyx_XDECREF(__pyx_v_uniforms);
  __Pyx_XDECREF(__pyx_v_c);
  __Pyx_XDECREF(__pyx_v_mesh);
  __Pyx_XDECREF(__pyx_v_what);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":873
 * 
 * 
 *     def render_to_texture(self, what, alpha=True, properties={}):             # <<<<<<<<<<<<<<
 *         """
 *         Renders `what` to a texture. The texture will have the drawable
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_43render_to_texture(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_42render_to_texture[] = "\n        Renders `what` to a texture. The texture will have the drawable\n        size of `what`.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_43render_to_texture(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_what = 0;
  CYTHON_UNUSED PyObject *__pyx_v_alpha = 0;
  PyObject *__pyx_v_properties = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("render_to_texture (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_what,&__pyx_n_s_alpha,&__pyx_n_s_properties,0};
    PyObject* values[3] = {0,0,0};
    values[1] = ((PyObject *)Py_True);
    values[2] = __pyx_k__12;
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_what)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_alpha);
          if (value) { values[1] = value; kw_args--; }
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_properties);
          if (value) { values[2] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "render_to_texture") < 0)) __PYX_ERR(0, 873, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_what = values[0];
    __pyx_v_alpha = values[1];
    __pyx_v_properties = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("render_to_texture", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 873, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.render_to_texture", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_42render_to_texture(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), __pyx_v_what, __pyx_v_alpha, __pyx_v_properties);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_42render_to_texture(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_what, CYTHON_UNUSED PyObject *__pyx_v_alpha, PyObject *__pyx_v_properties) {
  PyObject *__pyx_v_rv = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("render_to_texture", 0);
  __Pyx_INCREF(__pyx_v_what);
  __Pyx_INCREF(__pyx_v_properties);

  /* "renpy/gl2/gl2draw.pyx":879
 *         """
 * 
 *         if properties is None:             # <<<<<<<<<<<<<<
 *             properties = {}
 * 
 */
  __pyx_t_1 = (__pyx_v_properties == Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":880
 * 
 *         if properties is None:
 *             properties = {}             # <<<<<<<<<<<<<<
 * 
 *         if isinstance(what, Surface):
 */
    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 880, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF_SET(__pyx_v_properties, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "renpy/gl2/gl2draw.pyx":879
 *         """
 * 
 *         if properties is None:             # <<<<<<<<<<<<<<
 *             properties = {}
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":882
 *             properties = {}
 * 
 *         if isinstance(what, Surface):             # <<<<<<<<<<<<<<
 *             what = self.load_texture(what)
 *             self.load_all_textures(what)
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Surface); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 882, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_what, __pyx_t_3); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 882, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "renpy/gl2/gl2draw.pyx":883
 * 
 *         if isinstance(what, Surface):
 *             what = self.load_texture(what)             # <<<<<<<<<<<<<<
 *             self.load_all_textures(what)
 * 
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_load_texture); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 883, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_what) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_what);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 883, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_what, __pyx_t_3);
    __pyx_t_3 = 0;

    /* "renpy/gl2/gl2draw.pyx":884
 *         if isinstance(what, Surface):
 *             what = self.load_texture(what)
 *             self.load_all_textures(what)             # <<<<<<<<<<<<<<
 * 
 *         if isinstance(what, Texture):
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_load_all_textures); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 884, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_what) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_what);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 884, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "renpy/gl2/gl2draw.pyx":882
 *             properties = {}
 * 
 *         if isinstance(what, Surface):             # <<<<<<<<<<<<<<
 *             what = self.load_texture(what)
 *             self.load_all_textures(what)
 */
  }

  /* "renpy/gl2/gl2draw.pyx":886
 *             self.load_all_textures(what)
 * 
 *         if isinstance(what, Texture):             # <<<<<<<<<<<<<<
 *             return what
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_Texture); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 886, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = PyObject_IsInstance(__pyx_v_what, __pyx_t_3); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 886, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":887
 * 
 *         if isinstance(what, Texture):
 *             return what             # <<<<<<<<<<<<<<
 * 
 *         if what.cached_texture is not None:
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_what);
    __pyx_r = __pyx_v_what;
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":886
 *             self.load_all_textures(what)
 * 
 *         if isinstance(what, Texture):             # <<<<<<<<<<<<<<
 *             return what
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":889
 *             return what
 * 
 *         if what.cached_texture is not None:             # <<<<<<<<<<<<<<
 *             return what.cached_texture
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_what, __pyx_n_s_cached_texture); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 889, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = (__pyx_t_3 != Py_None);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_1 = (__pyx_t_2 != 0);
  if (__pyx_t_1) {

    /* "renpy/gl2/gl2draw.pyx":890
 * 
 *         if what.cached_texture is not None:
 *             return what.cached_texture             # <<<<<<<<<<<<<<
 * 
 *         rv = self.texture_loader.render_to_texture(what, properties)
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_what, __pyx_n_s_cached_texture); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 890, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":889
 *             return what
 * 
 *         if what.cached_texture is not None:             # <<<<<<<<<<<<<<
 *             return what.cached_texture
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":892
 *             return what.cached_texture
 * 
 *         rv = self.texture_loader.render_to_texture(what, properties)             # <<<<<<<<<<<<<<
 * 
 *         what.cached_texture = rv
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->texture_loader), __pyx_n_s_render_to_texture); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 892, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_what, __pyx_v_properties};
    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 892, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_what, __pyx_v_properties};
    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 892, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_3);
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 892, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_what);
    __Pyx_GIVEREF(__pyx_v_what);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_what);
    __Pyx_INCREF(__pyx_v_properties);
    __Pyx_GIVEREF(__pyx_v_properties);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_properties);
    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 892, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_rv = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":894
 *         rv = self.texture_loader.render_to_texture(what, properties)
 * 
 *         what.cached_texture = rv             # <<<<<<<<<<<<<<
 * 
 *         return rv
 */
  if (__Pyx_PyObject_SetAttrStr(__pyx_v_what, __pyx_n_s_cached_texture, __pyx_v_rv) < 0) __PYX_ERR(0, 894, __pyx_L1_error)

  /* "renpy/gl2/gl2draw.pyx":896
 *         what.cached_texture = rv
 * 
 *         return rv             # <<<<<<<<<<<<<<
 * 
 *     def is_pixel_opaque(self, what, x, y):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rv);
  __pyx_r = __pyx_v_rv;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":873
 * 
 * 
 *     def render_to_texture(self, what, alpha=True, properties={}):             # <<<<<<<<<<<<<<
 *         """
 *         Renders `what` to a texture. The texture will have the drawable
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.render_to_texture", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rv);
  __Pyx_XDECREF(__pyx_v_what);
  __Pyx_XDECREF(__pyx_v_properties);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":898
 *         return rv
 * 
 *     def is_pixel_opaque(self, what, x, y):             # <<<<<<<<<<<<<<
 *         """
 *         Returns true if the pixel is not 100% transparent.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_45is_pixel_opaque(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_44is_pixel_opaque[] = "\n        Returns true if the pixel is not 100% transparent.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_45is_pixel_opaque(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_what = 0;
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_y = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("is_pixel_opaque (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_what,&__pyx_n_s_x,&__pyx_n_s_y,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_what)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_pixel_opaque", 1, 3, 3, 1); __PYX_ERR(0, 898, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("is_pixel_opaque", 1, 3, 3, 2); __PYX_ERR(0, 898, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "is_pixel_opaque") < 0)) __PYX_ERR(0, 898, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v_what = values[0];
    __pyx_v_x = values[1];
    __pyx_v_y = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("is_pixel_opaque", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 898, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.is_pixel_opaque", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_44is_pixel_opaque(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), __pyx_v_what, __pyx_v_x, __pyx_v_y);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_44is_pixel_opaque(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_what, PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_transform = 0;
  struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_context = NULL;
  unsigned char __pyx_v_pixel[4];
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("is_pixel_opaque", 0);
  __Pyx_INCREF(__pyx_v_what);

  /* "renpy/gl2/gl2draw.pyx":903
 *         """
 * 
 *         if x < 0 or y < 0 or x >= what.width or y >= what.height:             # <<<<<<<<<<<<<<
 *             return 0
 * 
 */
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_x, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 903, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 903, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_y, __pyx_int_0, Py_LT); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 903, __pyx_L1_error)
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 903, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_what, __pyx_n_s_width); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyObject_RichCompare(__pyx_v_x, __pyx_t_2, Py_GE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 903, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 903, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!__pyx_t_3) {
  } else {
    __pyx_t_1 = __pyx_t_3;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_what, __pyx_n_s_height); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 903, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyObject_RichCompare(__pyx_v_y, __pyx_t_4, Py_GE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 903, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 903, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_1 = __pyx_t_3;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_1) {

    /* "renpy/gl2/gl2draw.pyx":904
 * 
 *         if x < 0 or y < 0 or x >= what.width or y >= what.height:
 *             return 0             # <<<<<<<<<<<<<<
 * 
 *         what = what.subsurface((x, y, 1, 1))
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_int_0);
    __pyx_r = __pyx_int_0;
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":903
 *         """
 * 
 *         if x < 0 or y < 0 or x >= what.width or y >= what.height:             # <<<<<<<<<<<<<<
 *             return 0
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":906
 *             return 0
 * 
 *         what = what.subsurface((x, y, 1, 1))             # <<<<<<<<<<<<<<
 * 
 *         # Compute visible_children.
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_what, __pyx_n_s_subsurface); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_INCREF(__pyx_v_x);
  __Pyx_GIVEREF(__pyx_v_x);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_v_x);
  __Pyx_INCREF(__pyx_v_y);
  __Pyx_GIVEREF(__pyx_v_y);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_v_y);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_int_1);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_int_1);
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_6) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_6, __pyx_t_5) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 906, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF_SET(__pyx_v_what, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":909
 * 
 *         # Compute visible_children.
 *         what.is_opaque()             # <<<<<<<<<<<<<<
 * 
 *         # Load all the textures and RTTs.
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_what, __pyx_n_s_is_opaque); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 909, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 909, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":912
 * 
 *         # Load all the textures and RTTs.
 *         self.load_all_textures(what)             # <<<<<<<<<<<<<<
 * 
 *         # Switch to the right FBO, and the right viewport.
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_load_all_textures); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_2 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_what) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_what);
  __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 912, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":915
 * 
 *         # Switch to the right FBO, and the right viewport.
 *         self.change_fbo(self.fbo)             # <<<<<<<<<<<<<<
 * 
 *         # Set up the viewport.
 */
  ((struct __pyx_vtabstruct_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self->__pyx_vtab)->change_fbo(__pyx_v_self, __pyx_v_self->fbo);

  /* "renpy/gl2/gl2draw.pyx":918
 * 
 *         # Set up the viewport.
 *         glViewport(0, 0, 1, 1)             # <<<<<<<<<<<<<<
 * 
 *         # Clear the screen.
 */
  __pyx_v_5renpy_4uguu_2gl_glViewport(0, 0, 1, 1);

  /* "renpy/gl2/gl2draw.pyx":921
 * 
 *         # Clear the screen.
 *         glClearColor(0.0, 0.0, 0.0, 0.0)             # <<<<<<<<<<<<<<
 *         glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
 * 
 */
  __pyx_v_5renpy_4uguu_2gl_glClearColor(0.0, 0.0, 0.0, 0.0);

  /* "renpy/gl2/gl2draw.pyx":922
 *         # Clear the screen.
 *         glClearColor(0.0, 0.0, 0.0, 0.0)
 *         glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)             # <<<<<<<<<<<<<<
 * 
 *         # Project the child from virtual space to the screen space.
 */
  __pyx_v_5renpy_4uguu_2gl_glClear((GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT));

  /* "renpy/gl2/gl2draw.pyx":926
 *         # Project the child from virtual space to the screen space.
 *         cdef Matrix transform
 *         transform = renpy.display.render.IDENTITY             # <<<<<<<<<<<<<<
 *         transform = Matrix.cscreen_projection(1, 1)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_render); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_IDENTITY); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 926, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5renpy_7display_6matrix_Matrix))))) __PYX_ERR(0, 926, __pyx_L1_error)
  __pyx_v_transform = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":927
 *         cdef Matrix transform
 *         transform = renpy.display.render.IDENTITY
 *         transform = Matrix.cscreen_projection(1, 1)             # <<<<<<<<<<<<<<
 * 
 *         # Set up the default modes.
 */
  __pyx_t_4 = ((PyObject *)__pyx_vtabptr_5renpy_7display_6matrix_Matrix->cscreen_projection(1.0, 1.0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 927, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF_SET(__pyx_v_transform, ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_4));
  __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":930
 * 
 *         # Set up the default modes.
 *         glEnable(GL_BLEND)             # <<<<<<<<<<<<<<
 *         glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)
 * 
 */
  __pyx_v_5renpy_4uguu_2gl_glEnable(GL_BLEND);

  /* "renpy/gl2/gl2draw.pyx":931
 *         # Set up the default modes.
 *         glEnable(GL_BLEND)
 *         glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)             # <<<<<<<<<<<<<<
 * 
 *         # Use the context to draw the surface tree.
 */
  __pyx_v_5renpy_4uguu_2gl_glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

  /* "renpy/gl2/gl2draw.pyx":934
 * 
 *         # Use the context to draw the surface tree.
 *         context = GL2DrawingContext(self, 1, 1)             # <<<<<<<<<<<<<<
 *         context.draw(what, transform)
 * 
 */
  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_INCREF(((PyObject *)__pyx_v_self));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self));
  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_self));
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_1);
  __Pyx_INCREF(__pyx_int_1);
  __Pyx_GIVEREF(__pyx_int_1);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_int_1);
  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_5renpy_3gl2_7gl2draw_GL2DrawingContext), __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 934, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_context = ((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *)__pyx_t_2);
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":935
 *         # Use the context to draw the surface tree.
 *         context = GL2DrawingContext(self, 1, 1)
 *         context.draw(what, transform)             # <<<<<<<<<<<<<<
 * 
 *         cdef unsigned char pixel[4]
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_context), __pyx_n_s_draw); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 935, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = NULL;
  __pyx_t_7 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_7 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_what, ((PyObject *)__pyx_v_transform)};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 935, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_what, ((PyObject *)__pyx_v_transform)};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 935, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 935, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_v_what);
    __Pyx_GIVEREF(__pyx_v_what);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_7, __pyx_v_what);
    __Pyx_INCREF(((PyObject *)__pyx_v_transform));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_transform));
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_7, ((PyObject *)__pyx_v_transform));
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 935, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":938
 * 
 *         cdef unsigned char pixel[4]
 *         glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixel)             # <<<<<<<<<<<<<<
 * 
 *         return pixel[3]
 */
  __pyx_v_5renpy_4uguu_2gl_glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, __pyx_v_pixel);

  /* "renpy/gl2/gl2draw.pyx":940
 *         glReadPixels(0, 0, 1, 1, GL_RGBA, GL_UNSIGNED_BYTE, pixel)
 * 
 *         return pixel[3]             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_2 = __Pyx_PyInt_From_unsigned_char((__pyx_v_pixel[3])); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 940, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":898
 *         return rv
 * 
 *     def is_pixel_opaque(self, what, x, y):             # <<<<<<<<<<<<<<
 *         """
 *         Returns true if the pixel is not 100% transparent.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.is_pixel_opaque", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_transform);
  __Pyx_XDECREF((PyObject *)__pyx_v_context);
  __Pyx_XDECREF(__pyx_v_what);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":943
 * 
 * 
 *     def translate_point(self, x, y):             # <<<<<<<<<<<<<<
 *         """
 *         Translates (x, y) from physical to virtual coordinates.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_47translate_point(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_46translate_point[] = "\n        Translates (x, y) from physical to virtual coordinates.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_47translate_point(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_y = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("translate_point (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("translate_point", 1, 2, 2, 1); __PYX_ERR(0, 943, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "translate_point") < 0)) __PYX_ERR(0, 943, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_x = values[0];
    __pyx_v_y = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("translate_point", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 943, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.translate_point", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_46translate_point(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), __pyx_v_x, __pyx_v_y);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_46translate_point(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_v_pw = NULL;
  PyObject *__pyx_v_ph = NULL;
  PyObject *__pyx_v_vw = NULL;
  PyObject *__pyx_v_vh = NULL;
  PyObject *__pyx_v_vx = NULL;
  PyObject *__pyx_v_vy = NULL;
  PyObject *__pyx_v_vbw = NULL;
  PyObject *__pyx_v_vbh = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  long __pyx_t_6;
  int __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("translate_point", 0);
  __Pyx_INCREF(__pyx_v_x);
  __Pyx_INCREF(__pyx_v_y);

  /* "renpy/gl2/gl2draw.pyx":949
 * 
 *         # Screen sizes.
 *         pw, ph = self.physical_size             # <<<<<<<<<<<<<<
 *         vw, vh = self.virtual_size
 *         vx, vy, vbw, vbh = self.virtual_box
 */
  __pyx_t_1 = __pyx_v_self->physical_size;
  __Pyx_INCREF(__pyx_t_1);
  if (likely(__pyx_t_1 != Py_None)) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 949, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 949, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 949, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 949, __pyx_L1_error)
  }
  __pyx_v_pw = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_ph = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":950
 *         # Screen sizes.
 *         pw, ph = self.physical_size
 *         vw, vh = self.virtual_size             # <<<<<<<<<<<<<<
 *         vx, vy, vbw, vbh = self.virtual_box
 * 
 */
  __pyx_t_1 = __pyx_v_self->virtual_size;
  __Pyx_INCREF(__pyx_t_1);
  if (likely(__pyx_t_1 != Py_None)) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 950, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    #else
    __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 950, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 950, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 950, __pyx_L1_error)
  }
  __pyx_v_vw = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_vh = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":951
 *         pw, ph = self.physical_size
 *         vw, vh = self.virtual_size
 *         vx, vy, vbw, vbh = self.virtual_box             # <<<<<<<<<<<<<<
 * 
 *         # Translate to fractional screen.
 */
  __pyx_t_1 = __pyx_v_self->virtual_box;
  __Pyx_INCREF(__pyx_t_1);
  if (likely(__pyx_t_1 != Py_None)) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 951, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
    __pyx_t_5 = PyTuple_GET_ITEM(sequence, 3); 
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_5);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_2,&__pyx_t_3,&__pyx_t_4,&__pyx_t_5};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 951, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 951, __pyx_L1_error)
  }
  __pyx_v_vx = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_vy = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_vbw = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_v_vbh = __pyx_t_5;
  __pyx_t_5 = 0;

  /* "renpy/gl2/gl2draw.pyx":954
 * 
 *         # Translate to fractional screen.
 *         x = 1.0 * x / pw             # <<<<<<<<<<<<<<
 *         y = 1.0 * y / ph
 * 
 */
  __pyx_t_1 = PyNumber_Multiply(__pyx_float_1_0, __pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 954, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_v_pw); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 954, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_5);
  __pyx_t_5 = 0;

  /* "renpy/gl2/gl2draw.pyx":955
 *         # Translate to fractional screen.
 *         x = 1.0 * x / pw
 *         y = 1.0 * y / ph             # <<<<<<<<<<<<<<
 * 
 *         # Translate to virtual size.
 */
  __pyx_t_5 = PyNumber_Multiply(__pyx_float_1_0, __pyx_v_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_5, __pyx_v_ph); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 955, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":958
 * 
 *         # Translate to virtual size.
 *         x = vx + vbw * x             # <<<<<<<<<<<<<<
 *         y = vy + vbh * y
 * 
 */
  __pyx_t_1 = PyNumber_Multiply(__pyx_v_vbw, __pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 958, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = PyNumber_Add(__pyx_v_vx, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 958, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_5);
  __pyx_t_5 = 0;

  /* "renpy/gl2/gl2draw.pyx":959
 *         # Translate to virtual size.
 *         x = vx + vbw * x
 *         y = vy + vbh * y             # <<<<<<<<<<<<<<
 * 
 *         x = int(x)
 */
  __pyx_t_5 = PyNumber_Multiply(__pyx_v_vbh, __pyx_v_y); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 959, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = PyNumber_Add(__pyx_v_vy, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 959, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":961
 *         y = vy + vbh * y
 * 
 *         x = int(x)             # <<<<<<<<<<<<<<
 *         y = int(y)
 * 
 */
  __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 961, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":962
 * 
 *         x = int(x)
 *         y = int(y)             # <<<<<<<<<<<<<<
 * 
 *         x = max(0, x)
 */
  __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 962, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":964
 *         y = int(y)
 * 
 *         x = max(0, x)             # <<<<<<<<<<<<<<
 *         x = min(vw, x)
 *         y = max(0, y)
 */
  __Pyx_INCREF(__pyx_v_x);
  __pyx_t_1 = __pyx_v_x;
  __pyx_t_6 = 0;
  __pyx_t_4 = __Pyx_PyInt_From_long(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 964, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = PyObject_RichCompare(__pyx_t_1, __pyx_t_4, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 964, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 964, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (__pyx_t_7) {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_5 = __pyx_t_1;
  } else {
    __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 964, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_5 = __pyx_t_3;
    __pyx_t_3 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_5;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":965
 * 
 *         x = max(0, x)
 *         x = min(vw, x)             # <<<<<<<<<<<<<<
 *         y = max(0, y)
 *         y = min(vh, y)
 */
  __Pyx_INCREF(__pyx_v_x);
  __pyx_t_1 = __pyx_v_x;
  __Pyx_INCREF(__pyx_v_vw);
  __pyx_t_5 = __pyx_v_vw;
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_LT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 965, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 965, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_7) {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = __pyx_t_1;
  } else {
    __Pyx_INCREF(__pyx_t_5);
    __pyx_t_3 = __pyx_t_5;
  }
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":966
 *         x = max(0, x)
 *         x = min(vw, x)
 *         y = max(0, y)             # <<<<<<<<<<<<<<
 *         y = min(vh, y)
 * 
 */
  __Pyx_INCREF(__pyx_v_y);
  __pyx_t_1 = __pyx_v_y;
  __pyx_t_6 = 0;
  __pyx_t_5 = __Pyx_PyInt_From_long(__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 966, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_4 = PyObject_RichCompare(__pyx_t_1, __pyx_t_5, Py_GT); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 966, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 966, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_7) {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_3 = __pyx_t_1;
  } else {
    __pyx_t_4 = __Pyx_PyInt_From_long(__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 966, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_3 = __pyx_t_4;
    __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_3;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":967
 *         x = min(vw, x)
 *         y = max(0, y)
 *         y = min(vh, y)             # <<<<<<<<<<<<<<
 * 
 *         return x, y
 */
  __Pyx_INCREF(__pyx_v_y);
  __pyx_t_1 = __pyx_v_y;
  __Pyx_INCREF(__pyx_v_vh);
  __pyx_t_3 = __pyx_v_vh;
  __pyx_t_5 = PyObject_RichCompare(__pyx_t_1, __pyx_t_3, Py_LT); __Pyx_XGOTREF(__pyx_t_5); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 967, __pyx_L1_error)
  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(0, 967, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  if (__pyx_t_7) {
    __Pyx_INCREF(__pyx_t_1);
    __pyx_t_4 = __pyx_t_1;
  } else {
    __Pyx_INCREF(__pyx_t_3);
    __pyx_t_4 = __pyx_t_3;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __pyx_t_4;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":969
 *         y = min(vh, y)
 * 
 *         return x, y             # <<<<<<<<<<<<<<
 * 
 *     def untranslate_point(self, x, y):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 969, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_x);
  __Pyx_GIVEREF(__pyx_v_x);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_x);
  __Pyx_INCREF(__pyx_v_y);
  __Pyx_GIVEREF(__pyx_v_y);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_y);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":943
 * 
 * 
 *     def translate_point(self, x, y):             # <<<<<<<<<<<<<<
 *         """
 *         Translates (x, y) from physical to virtual coordinates.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.translate_point", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pw);
  __Pyx_XDECREF(__pyx_v_ph);
  __Pyx_XDECREF(__pyx_v_vw);
  __Pyx_XDECREF(__pyx_v_vh);
  __Pyx_XDECREF(__pyx_v_vx);
  __Pyx_XDECREF(__pyx_v_vy);
  __Pyx_XDECREF(__pyx_v_vbw);
  __Pyx_XDECREF(__pyx_v_vbh);
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_y);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":971
 *         return x, y
 * 
 *     def untranslate_point(self, x, y):             # <<<<<<<<<<<<<<
 *         """
 *         Untranslates (x, y) from virtual to physical coordinates.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_49untranslate_point(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_48untranslate_point[] = "\n        Untranslates (x, y) from virtual to physical coordinates.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_49untranslate_point(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_y = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("untranslate_point (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("untranslate_point", 1, 2, 2, 1); __PYX_ERR(0, 971, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "untranslate_point") < 0)) __PYX_ERR(0, 971, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_x = values[0];
    __pyx_v_y = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("untranslate_point", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 971, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.untranslate_point", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_48untranslate_point(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), __pyx_v_x, __pyx_v_y);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_48untranslate_point(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_v_pw = NULL;
  PyObject *__pyx_v_ph = NULL;
  PyObject *__pyx_v_vx = NULL;
  PyObject *__pyx_v_vy = NULL;
  PyObject *__pyx_v_vbw = NULL;
  PyObject *__pyx_v_vbh = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("untranslate_point", 0);
  __Pyx_INCREF(__pyx_v_x);
  __Pyx_INCREF(__pyx_v_y);

  /* "renpy/gl2/gl2draw.pyx":977
 * 
 *         # Screen sizes.
 *         pw, ph = self.physical_size             # <<<<<<<<<<<<<<
 *         vx, vy, vbw, vbh = self.virtual_box
 * 
 */
  __pyx_t_1 = __pyx_v_self->physical_size;
  __Pyx_INCREF(__pyx_t_1);
  if (likely(__pyx_t_1 != Py_None)) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 977, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 977, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 977, __pyx_L1_error)
  }
  __pyx_v_pw = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_ph = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":978
 *         # Screen sizes.
 *         pw, ph = self.physical_size
 *         vx, vy, vbw, vbh = self.virtual_box             # <<<<<<<<<<<<<<
 * 
 *         # Translate from virtual to fractional screen.
 */
  __pyx_t_1 = __pyx_v_self->virtual_box;
  __Pyx_INCREF(__pyx_t_1);
  if (likely(__pyx_t_1 != Py_None)) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 978, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
    __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
    __pyx_t_5 = PyTuple_GET_ITEM(sequence, 3); 
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_t_5);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_3,&__pyx_t_2,&__pyx_t_4,&__pyx_t_5};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 978, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 978, __pyx_L1_error)
  }
  __pyx_v_vx = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_vy = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_vbw = __pyx_t_4;
  __pyx_t_4 = 0;
  __pyx_v_vbh = __pyx_t_5;
  __pyx_t_5 = 0;

  /* "renpy/gl2/gl2draw.pyx":981
 * 
 *         # Translate from virtual to fractional screen.
 *         x = ( x - vx ) / vbw             # <<<<<<<<<<<<<<
 *         y = ( y - vy ) / vbh
 * 
 */
  __pyx_t_1 = PyNumber_Subtract(__pyx_v_x, __pyx_v_vx); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_v_vbw); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 981, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_5);
  __pyx_t_5 = 0;

  /* "renpy/gl2/gl2draw.pyx":982
 *         # Translate from virtual to fractional screen.
 *         x = ( x - vx ) / vbw
 *         y = ( y - vy ) / vbh             # <<<<<<<<<<<<<<
 * 
 *         # Translate from fractional screen to physical.
 */
  __pyx_t_5 = PyNumber_Subtract(__pyx_v_y, __pyx_v_vy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_5, __pyx_v_vbh); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 982, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":985
 * 
 *         # Translate from fractional screen to physical.
 *         x = x * pw             # <<<<<<<<<<<<<<
 *         y = y * ph
 * 
 */
  __pyx_t_1 = PyNumber_Multiply(__pyx_v_x, __pyx_v_pw); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 985, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":986
 *         # Translate from fractional screen to physical.
 *         x = x * pw
 *         y = y * ph             # <<<<<<<<<<<<<<
 * 
 *         x = int(x)
 */
  __pyx_t_1 = PyNumber_Multiply(__pyx_v_y, __pyx_v_ph); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 986, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":988
 *         y = y * ph
 * 
 *         x = int(x)             # <<<<<<<<<<<<<<
 *         y = int(y)
 * 
 */
  __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_v_x); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 988, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":989
 * 
 *         x = int(x)
 *         y = int(y)             # <<<<<<<<<<<<<<
 * 
 *         return x, y
 */
  __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_v_y); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 989, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":991
 *         y = int(y)
 * 
 *         return x, y             # <<<<<<<<<<<<<<
 * 
 *     def mouse_event(self, ev):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 991, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_x);
  __Pyx_GIVEREF(__pyx_v_x);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_x);
  __Pyx_INCREF(__pyx_v_y);
  __Pyx_GIVEREF(__pyx_v_y);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_y);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":971
 *         return x, y
 * 
 *     def untranslate_point(self, x, y):             # <<<<<<<<<<<<<<
 *         """
 *         Untranslates (x, y) from virtual to physical coordinates.
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.untranslate_point", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_pw);
  __Pyx_XDECREF(__pyx_v_ph);
  __Pyx_XDECREF(__pyx_v_vx);
  __Pyx_XDECREF(__pyx_v_vy);
  __Pyx_XDECREF(__pyx_v_vbw);
  __Pyx_XDECREF(__pyx_v_vbh);
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_y);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":993
 *         return x, y
 * 
 *     def mouse_event(self, ev):             # <<<<<<<<<<<<<<
 *         x, y = getattr(ev, 'pos', pygame.mouse.get_pos())
 *         return self.translate_point(x, y)
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_51mouse_event(PyObject *__pyx_v_self, PyObject *__pyx_v_ev); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_51mouse_event(PyObject *__pyx_v_self, PyObject *__pyx_v_ev) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("mouse_event (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_50mouse_event(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_ev));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_50mouse_event(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_ev) {
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_v_y = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *(*__pyx_t_5)(PyObject *);
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("mouse_event", 0);

  /* "renpy/gl2/gl2draw.pyx":994
 * 
 *     def mouse_event(self, ev):
 *         x, y = getattr(ev, 'pos', pygame.mouse.get_pos())             # <<<<<<<<<<<<<<
 *         return self.translate_point(x, y)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 994, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_mouse); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 994, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get_pos); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 994, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 994, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_GetAttr3(__pyx_v_ev, __pyx_n_s_pos, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 994, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 994, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 994, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 994, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 994, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_1 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_1);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 994, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 994, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_x = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_y = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":995
 *     def mouse_event(self, ev):
 *         x, y = getattr(ev, 'pos', pygame.mouse.get_pos())
 *         return self.translate_point(x, y)             # <<<<<<<<<<<<<<
 * 
 *     def get_mouse_pos(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_translate_point); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 995, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_1 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_1)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_1);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_x, __pyx_v_y};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 995, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_1, __pyx_v_x, __pyx_v_y};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 995, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 995, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_1) {
      __Pyx_GIVEREF(__pyx_t_1); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1); __pyx_t_1 = NULL;
    }
    __Pyx_INCREF(__pyx_v_x);
    __Pyx_GIVEREF(__pyx_v_x);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_6, __pyx_v_x);
    __Pyx_INCREF(__pyx_v_y);
    __Pyx_GIVEREF(__pyx_v_y);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_6, __pyx_v_y);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 995, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_2;
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":993
 *         return x, y
 * 
 *     def mouse_event(self, ev):             # <<<<<<<<<<<<<<
 *         x, y = getattr(ev, 'pos', pygame.mouse.get_pos())
 *         return self.translate_point(x, y)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.mouse_event", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_y);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":997
 *         return self.translate_point(x, y)
 * 
 *     def get_mouse_pos(self):             # <<<<<<<<<<<<<<
 *         x, y = pygame.mouse.get_pos()
 *         return self.translate_point(x, y)
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_53get_mouse_pos(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_53get_mouse_pos(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_mouse_pos (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_52get_mouse_pos(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_52get_mouse_pos(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_v_y = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *(*__pyx_t_5)(PyObject *);
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_mouse_pos", 0);

  /* "renpy/gl2/gl2draw.pyx":998
 * 
 *     def get_mouse_pos(self):
 *         x, y = pygame.mouse.get_pos()             # <<<<<<<<<<<<<<
 *         return self.translate_point(x, y)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pygame); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_mouse); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_get_pos); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3) : __Pyx_PyObject_CallNoArg(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 998, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 998, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 998, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 998, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 998, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_3 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_3)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_3);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 998, __pyx_L1_error)
    __pyx_t_5 = NULL;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_5 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 998, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_v_x = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_y = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":999
 *     def get_mouse_pos(self):
 *         x, y = pygame.mouse.get_pos()
 *         return self.translate_point(x, y)             # <<<<<<<<<<<<<<
 * 
 *     def set_mouse_pos(self, x, y):
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_translate_point); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 999, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = NULL;
  __pyx_t_6 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_6 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_x, __pyx_v_y};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 999, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_x, __pyx_v_y};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 999, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_4 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 999, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_v_x);
    __Pyx_GIVEREF(__pyx_v_x);
    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_6, __pyx_v_x);
    __Pyx_INCREF(__pyx_v_y);
    __Pyx_GIVEREF(__pyx_v_y);
    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_6, __pyx_v_y);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 999, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":997
 *         return self.translate_point(x, y)
 * 
 *     def get_mouse_pos(self):             # <<<<<<<<<<<<<<
 *         x, y = pygame.mouse.get_pos()
 *         return self.translate_point(x, y)
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.get_mouse_pos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_y);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":1001
 *         return self.translate_point(x, y)
 * 
 *     def set_mouse_pos(self, x, y):             # <<<<<<<<<<<<<<
 *         x, y = self.untranslate_point(x, y)
 *         pygame.mouse.set_pos([x, y])
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_55set_mouse_pos(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_55set_mouse_pos(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_x = 0;
  PyObject *__pyx_v_y = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("set_mouse_pos (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_y,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("set_mouse_pos", 1, 2, 2, 1); __PYX_ERR(0, 1001, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "set_mouse_pos") < 0)) __PYX_ERR(0, 1001, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_x = values[0];
    __pyx_v_y = values[1];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("set_mouse_pos", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1001, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.set_mouse_pos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_54set_mouse_pos(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), __pyx_v_x, __pyx_v_y);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_54set_mouse_pos(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_x, PyObject *__pyx_v_y) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  PyObject *(*__pyx_t_6)(PyObject *);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("set_mouse_pos", 0);
  __Pyx_INCREF(__pyx_v_x);
  __Pyx_INCREF(__pyx_v_y);

  /* "renpy/gl2/gl2draw.pyx":1002
 * 
 *     def set_mouse_pos(self, x, y):
 *         x, y = self.untranslate_point(x, y)             # <<<<<<<<<<<<<<
 *         pygame.mouse.set_pos([x, y])
 * 
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_untranslate_point); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1002, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_x, __pyx_v_y};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1002, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_x, __pyx_v_y};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1002, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1002, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_3) {
      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3); __pyx_t_3 = NULL;
    }
    __Pyx_INCREF(__pyx_v_x);
    __Pyx_GIVEREF(__pyx_v_x);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_x);
    __Pyx_INCREF(__pyx_v_y);
    __Pyx_GIVEREF(__pyx_v_y);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_y);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1002, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1002, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_5 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_5);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1002, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1002, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_3 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1002, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_3)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_3); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_5 = __pyx_t_6(__pyx_t_3); if (unlikely(!__pyx_t_5)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_5);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_3), 2) < 0) __PYX_ERR(0, 1002, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1002, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_2);
  __pyx_t_2 = 0;
  __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_5);
  __pyx_t_5 = 0;

  /* "renpy/gl2/gl2draw.pyx":1003
 *     def set_mouse_pos(self, x, y):
 *         x, y = self.untranslate_point(x, y)
 *         pygame.mouse.set_pos([x, y])             # <<<<<<<<<<<<<<
 * 
 *     def screenshot(self, render_tree):
 */
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_pygame); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_mouse); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_set_pos); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyList_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_v_x);
  __Pyx_GIVEREF(__pyx_v_x);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_v_x);
  __Pyx_INCREF(__pyx_v_y);
  __Pyx_GIVEREF(__pyx_v_y);
  PyList_SET_ITEM(__pyx_t_2, 1, __pyx_v_y);
  __pyx_t_3 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_3)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_3);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_1 = (__pyx_t_3) ? __Pyx_PyObject_Call2Args(__pyx_t_5, __pyx_t_3, __pyx_t_2) : __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1003, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1001
 *         return self.translate_point(x, y)
 * 
 *     def set_mouse_pos(self, x, y):             # <<<<<<<<<<<<<<
 *         x, y = self.untranslate_point(x, y)
 *         pygame.mouse.set_pos([x, y])
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.set_mouse_pos", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_y);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":1005
 *         pygame.mouse.set_pos([x, y])
 * 
 *     def screenshot(self, render_tree):             # <<<<<<<<<<<<<<
 *         cdef unsigned char *pixels
 *         cdef SDL_Surface *surf
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_57screenshot(PyObject *__pyx_v_self, PyObject *__pyx_v_render_tree); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_57screenshot(PyObject *__pyx_v_self, PyObject *__pyx_v_render_tree) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("screenshot (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_56screenshot(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_render_tree));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_56screenshot(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_render_tree) {
  unsigned char *__pyx_v_pixels;
  SDL_Surface *__pyx_v_surf;
  unsigned char *__pyx_v_raw_pixels;
  unsigned char *__pyx_v_rpp;
  int __pyx_v_x;
  CYTHON_UNUSED int __pyx_v_y;
  int __pyx_v_pitch;
  PyObject *__pyx_v_full = NULL;
  PyObject *__pyx_v_px = NULL;
  PyObject *__pyx_v_py = NULL;
  PyObject *__pyx_v_pw = NULL;
  PyObject *__pyx_v_ph = NULL;
  PyObject *__pyx_v_xmul = NULL;
  PyObject *__pyx_v_ymul = NULL;
  PyObject *__pyx_v_rv = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_t_4;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_t_7;
  long __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("screenshot", 0);

  /* "renpy/gl2/gl2draw.pyx":1014
 * 
 *         # A surface the size of the framebuffer.
 *         full = renpy.display.pgrender.surface_unscaled(self.drawable_size, False)             # <<<<<<<<<<<<<<
 *         surf = PySurface_AsSurface(full)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_pgrender); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_surface_unscaled); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1014, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
    __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_3);
    if (likely(__pyx_t_2)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
      __Pyx_INCREF(__pyx_t_2);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_3, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_self->drawable_size, Py_False};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1014, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
    PyObject *__pyx_temp[3] = {__pyx_t_2, __pyx_v_self->drawable_size, Py_False};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1014, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1014, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_2) {
      __Pyx_GIVEREF(__pyx_t_2); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2); __pyx_t_2 = NULL;
    }
    __Pyx_INCREF(__pyx_v_self->drawable_size);
    __Pyx_GIVEREF(__pyx_v_self->drawable_size);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_self->drawable_size);
    __Pyx_INCREF(Py_False);
    __Pyx_GIVEREF(Py_False);
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, Py_False);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1014, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_v_full = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1015
 *         # A surface the size of the framebuffer.
 *         full = renpy.display.pgrender.surface_unscaled(self.drawable_size, False)
 *         surf = PySurface_AsSurface(full)             # <<<<<<<<<<<<<<
 * 
 *         # Create an array that can hold densely-packed pixels.
 */
  __pyx_v_surf = PySurface_AsSurface(__pyx_v_full);

  /* "renpy/gl2/gl2draw.pyx":1018
 * 
 *         # Create an array that can hold densely-packed pixels.
 *         raw_pixels = <unsigned char *> malloc(surf.w * surf.h * 4)             # <<<<<<<<<<<<<<
 * 
 *         # Draw the last screen to the back buffer.
 */
  __pyx_v_raw_pixels = ((unsigned char *)malloc(((__pyx_v_surf->w * __pyx_v_surf->h) * 4)));

  /* "renpy/gl2/gl2draw.pyx":1021
 * 
 *         # Draw the last screen to the back buffer.
 *         if render_tree is not None:             # <<<<<<<<<<<<<<
 *             self.draw_screen(render_tree, flip=False)
 *             glFinish()
 */
  __pyx_t_6 = (__pyx_v_render_tree != Py_None);
  __pyx_t_7 = (__pyx_t_6 != 0);
  if (__pyx_t_7) {

    /* "renpy/gl2/gl2draw.pyx":1022
 *         # Draw the last screen to the back buffer.
 *         if render_tree is not None:
 *             self.draw_screen(render_tree, flip=False)             # <<<<<<<<<<<<<<
 *             glFinish()
 * 
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_draw_screen); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1022, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1022, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_v_render_tree);
    __Pyx_GIVEREF(__pyx_v_render_tree);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_render_tree);
    __pyx_t_5 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1022, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (PyDict_SetItem(__pyx_t_5, __pyx_n_s_flip, Py_False) < 0) __PYX_ERR(0, 1022, __pyx_L1_error)
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_3, __pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1022, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

    /* "renpy/gl2/gl2draw.pyx":1023
 *         if render_tree is not None:
 *             self.draw_screen(render_tree, flip=False)
 *             glFinish()             # <<<<<<<<<<<<<<
 * 
 *         # Read the pixels.
 */
    __pyx_v_5renpy_4uguu_2gl_glFinish();

    /* "renpy/gl2/gl2draw.pyx":1021
 * 
 *         # Draw the last screen to the back buffer.
 *         if render_tree is not None:             # <<<<<<<<<<<<<<
 *             self.draw_screen(render_tree, flip=False)
 *             glFinish()
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1026
 * 
 *         # Read the pixels.
 *         glReadPixels(             # <<<<<<<<<<<<<<
 *             0,
 *             0,
 */
  __pyx_v_5renpy_4uguu_2gl_glReadPixels(0, 0, __pyx_v_surf->w, __pyx_v_surf->h, GL_RGBA, GL_UNSIGNED_BYTE, __pyx_v_raw_pixels);

  /* "renpy/gl2/gl2draw.pyx":1036
 * 
 *         # Copy the pixels from raw_pixels to the surface.
 *         pixels = <unsigned char *> surf.pixels             # <<<<<<<<<<<<<<
 *         pitch = surf.pitch
 *         rpp = raw_pixels
 */
  __pyx_v_pixels = ((unsigned char *)__pyx_v_surf->pixels);

  /* "renpy/gl2/gl2draw.pyx":1037
 *         # Copy the pixels from raw_pixels to the surface.
 *         pixels = <unsigned char *> surf.pixels
 *         pitch = surf.pitch             # <<<<<<<<<<<<<<
 *         rpp = raw_pixels
 * 
 */
  __pyx_t_4 = __pyx_v_surf->pitch;
  __pyx_v_pitch = __pyx_t_4;

  /* "renpy/gl2/gl2draw.pyx":1038
 *         pixels = <unsigned char *> surf.pixels
 *         pitch = surf.pitch
 *         rpp = raw_pixels             # <<<<<<<<<<<<<<
 * 
 *         with nogil:
 */
  __pyx_v_rpp = __pyx_v_raw_pixels;

  /* "renpy/gl2/gl2draw.pyx":1040
 *         rpp = raw_pixels
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             for y from 0 <= y < surf.h:
 *                 for x from 0 <= x < (surf.w * 4):
 */
  {
      #ifdef WITH_THREAD
      PyThreadState *_save;
      Py_UNBLOCK_THREADS
      __Pyx_FastGIL_Remember();
      #endif
      /*try:*/ {

        /* "renpy/gl2/gl2draw.pyx":1041
 * 
 *         with nogil:
 *             for y from 0 <= y < surf.h:             # <<<<<<<<<<<<<<
 *                 for x from 0 <= x < (surf.w * 4):
 *                     pixels[x] = rpp[x]
 */
        __pyx_t_4 = __pyx_v_surf->h;
        for (__pyx_v_y = 0; __pyx_v_y < __pyx_t_4; __pyx_v_y++) {

          /* "renpy/gl2/gl2draw.pyx":1042
 *         with nogil:
 *             for y from 0 <= y < surf.h:
 *                 for x from 0 <= x < (surf.w * 4):             # <<<<<<<<<<<<<<
 *                     pixels[x] = rpp[x]
 * 
 */
          __pyx_t_8 = (__pyx_v_surf->w * 4);
          for (__pyx_v_x = 0; __pyx_v_x < __pyx_t_8; __pyx_v_x++) {

            /* "renpy/gl2/gl2draw.pyx":1043
 *             for y from 0 <= y < surf.h:
 *                 for x from 0 <= x < (surf.w * 4):
 *                     pixels[x] = rpp[x]             # <<<<<<<<<<<<<<
 * 
 *                 pixels += pitch
 */
            (__pyx_v_pixels[__pyx_v_x]) = (__pyx_v_rpp[__pyx_v_x]);
          }

          /* "renpy/gl2/gl2draw.pyx":1045
 *                     pixels[x] = rpp[x]
 * 
 *                 pixels += pitch             # <<<<<<<<<<<<<<
 *                 rpp += surf.w * 4
 * 
 */
          __pyx_v_pixels = (__pyx_v_pixels + __pyx_v_pitch);

          /* "renpy/gl2/gl2draw.pyx":1046
 * 
 *                 pixels += pitch
 *                 rpp += surf.w * 4             # <<<<<<<<<<<<<<
 * 
 *         free(raw_pixels)
 */
          __pyx_v_rpp = (__pyx_v_rpp + (__pyx_v_surf->w * 4));
        }
      }

      /* "renpy/gl2/gl2draw.pyx":1040
 *         rpp = raw_pixels
 * 
 *         with nogil:             # <<<<<<<<<<<<<<
 *             for y from 0 <= y < surf.h:
 *                 for x from 0 <= x < (surf.w * 4):
 */
      /*finally:*/ {
        /*normal exit:*/{
          #ifdef WITH_THREAD
          __Pyx_FastGIL_Forget();
          Py_BLOCK_THREADS
          #endif
          goto __pyx_L6;
        }
        __pyx_L6:;
      }
  }

  /* "renpy/gl2/gl2draw.pyx":1048
 *                 rpp += surf.w * 4
 * 
 *         free(raw_pixels)             # <<<<<<<<<<<<<<
 * 
 *         px, py, pw, ph = self.physical_box
 */
  free(__pyx_v_raw_pixels);

  /* "renpy/gl2/gl2draw.pyx":1050
 *         free(raw_pixels)
 * 
 *         px, py, pw, ph = self.physical_box             # <<<<<<<<<<<<<<
 *         xmul = self.drawable_size[0] / self.physical_size[0]
 *         ymul = self.drawable_size[1] / self.physical_size[1]
 */
  __pyx_t_2 = __pyx_v_self->physical_box;
  __Pyx_INCREF(__pyx_t_2);
  if (likely(__pyx_t_2 != Py_None)) {
    PyObject* sequence = __pyx_t_2;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 4)) {
      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1050, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    __pyx_t_1 = PyTuple_GET_ITEM(sequence, 2); 
    __pyx_t_9 = PyTuple_GET_ITEM(sequence, 3); 
    __Pyx_INCREF(__pyx_t_5);
    __Pyx_INCREF(__pyx_t_3);
    __Pyx_INCREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_t_9);
    #else
    {
      Py_ssize_t i;
      PyObject** temps[4] = {&__pyx_t_5,&__pyx_t_3,&__pyx_t_1,&__pyx_t_9};
      for (i=0; i < 4; i++) {
        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1050, __pyx_L1_error)
        __Pyx_GOTREF(item);
        *(temps[i]) = item;
      }
    }
    #endif
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 1050, __pyx_L1_error)
  }
  __pyx_v_px = __pyx_t_5;
  __pyx_t_5 = 0;
  __pyx_v_py = __pyx_t_3;
  __pyx_t_3 = 0;
  __pyx_v_pw = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_v_ph = __pyx_t_9;
  __pyx_t_9 = 0;

  /* "renpy/gl2/gl2draw.pyx":1051
 * 
 *         px, py, pw, ph = self.physical_box
 *         xmul = self.drawable_size[0] / self.physical_size[0]             # <<<<<<<<<<<<<<
 *         ymul = self.drawable_size[1] / self.physical_size[1]
 * 
 */
  if (unlikely(__pyx_v_self->drawable_size == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 1051, __pyx_L1_error)
  }
  __pyx_t_2 = __Pyx_GetItemInt_Tuple(__pyx_v_self->drawable_size, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (unlikely(__pyx_v_self->physical_size == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 1051, __pyx_L1_error)
  }
  __pyx_t_9 = __Pyx_GetItemInt_Tuple(__pyx_v_self->physical_size, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_1 = __Pyx_PyNumber_Divide(__pyx_t_2, __pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1051, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_xmul = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1052
 *         px, py, pw, ph = self.physical_box
 *         xmul = self.drawable_size[0] / self.physical_size[0]
 *         ymul = self.drawable_size[1] / self.physical_size[1]             # <<<<<<<<<<<<<<
 * 
 *         # Crop and flip it, since it's upside down.
 */
  if (unlikely(__pyx_v_self->drawable_size == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 1052, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v_self->drawable_size, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1052, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (unlikely(__pyx_v_self->physical_size == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 1052, __pyx_L1_error)
  }
  __pyx_t_9 = __Pyx_GetItemInt_Tuple(__pyx_v_self->physical_size, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1052, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_2 = __Pyx_PyNumber_Divide(__pyx_t_1, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1052, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_ymul = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":1055
 * 
 *         # Crop and flip it, since it's upside down.
 *         rv = full.subsurface((px * xmul, py * ymul, pw * xmul, ph * ymul))             # <<<<<<<<<<<<<<
 *         rv = renpy.display.pgrender.flip_unscaled(rv, False, True)
 * 
 */
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_full, __pyx_n_s_subsurface); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_1 = PyNumber_Multiply(__pyx_v_px, __pyx_v_xmul); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = PyNumber_Multiply(__pyx_v_py, __pyx_v_ymul); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_5 = PyNumber_Multiply(__pyx_v_pw, __pyx_v_xmul); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_10 = PyNumber_Multiply(__pyx_v_ph, __pyx_v_ymul); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = PyTuple_New(4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_3);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_10);
  __pyx_t_1 = 0;
  __pyx_t_3 = 0;
  __pyx_t_5 = 0;
  __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_9))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_9);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_9, function);
    }
  }
  __pyx_t_2 = (__pyx_t_10) ? __Pyx_PyObject_Call2Args(__pyx_t_9, __pyx_t_10, __pyx_t_11) : __Pyx_PyObject_CallOneArg(__pyx_t_9, __pyx_t_11);
  __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1055, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_v_rv = __pyx_t_2;
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":1056
 *         # Crop and flip it, since it's upside down.
 *         rv = full.subsurface((px * xmul, py * ymul, pw * xmul, ph * ymul))
 *         rv = renpy.display.pgrender.flip_unscaled(rv, False, True)             # <<<<<<<<<<<<<<
 * 
 *         return rv
 */
  __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_renpy); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_display); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_11, __pyx_n_s_pgrender); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_flip_unscaled); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1056, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = NULL;
  __pyx_t_4 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
      __pyx_t_4 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_11)) {
    PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_v_rv, Py_False, Py_True};
    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1056, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_11)) {
    PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_v_rv, Py_False, Py_True};
    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_11, __pyx_temp+1-__pyx_t_4, 3+__pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1056, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_2);
  } else
  #endif
  {
    __pyx_t_10 = PyTuple_New(3+__pyx_t_4); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1056, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    if (__pyx_t_9) {
      __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
    }
    __Pyx_INCREF(__pyx_v_rv);
    __Pyx_GIVEREF(__pyx_v_rv);
    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_4, __pyx_v_rv);
    __Pyx_INCREF(Py_False);
    __Pyx_GIVEREF(Py_False);
    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_4, Py_False);
    __Pyx_INCREF(Py_True);
    __Pyx_GIVEREF(Py_True);
    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_4, Py_True);
    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_11, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1056, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  }
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __Pyx_DECREF_SET(__pyx_v_rv, __pyx_t_2);
  __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":1058
 *         rv = renpy.display.pgrender.flip_unscaled(rv, False, True)
 * 
 *         return rv             # <<<<<<<<<<<<<<
 * 
 *     def kill_textures(self):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rv);
  __pyx_r = __pyx_v_rv;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":1005
 *         pygame.mouse.set_pos([x, y])
 * 
 *     def screenshot(self, render_tree):             # <<<<<<<<<<<<<<
 *         cdef unsigned char *pixels
 *         cdef SDL_Surface *surf
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.screenshot", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_full);
  __Pyx_XDECREF(__pyx_v_px);
  __Pyx_XDECREF(__pyx_v_py);
  __Pyx_XDECREF(__pyx_v_pw);
  __Pyx_XDECREF(__pyx_v_ph);
  __Pyx_XDECREF(__pyx_v_xmul);
  __Pyx_XDECREF(__pyx_v_ymul);
  __Pyx_XDECREF(__pyx_v_rv);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":1060
 *         return rv
 * 
 *     def kill_textures(self):             # <<<<<<<<<<<<<<
 *         if self.texture_loader is not None:
 *             self.texture_loader.cleanup()
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_59kill_textures(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_59kill_textures(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("kill_textures (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_58kill_textures(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_58kill_textures(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_t_2;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("kill_textures", 0);

  /* "renpy/gl2/gl2draw.pyx":1061
 * 
 *     def kill_textures(self):
 *         if self.texture_loader is not None:             # <<<<<<<<<<<<<<
 *             self.texture_loader.cleanup()
 * 
 */
  __pyx_t_1 = (((PyObject *)__pyx_v_self->texture_loader) != Py_None);
  __pyx_t_2 = (__pyx_t_1 != 0);
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":1062
 *     def kill_textures(self):
 *         if self.texture_loader is not None:
 *             self.texture_loader.cleanup()             # <<<<<<<<<<<<<<
 * 
 *     def event_peek_sleep(self):
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->texture_loader), __pyx_n_s_cleanup); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1062, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "renpy/gl2/gl2draw.pyx":1061
 * 
 *     def kill_textures(self):
 *         if self.texture_loader is not None:             # <<<<<<<<<<<<<<
 *             self.texture_loader.cleanup()
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1060
 *         return rv
 * 
 *     def kill_textures(self):             # <<<<<<<<<<<<<<
 *         if self.texture_loader is not None:
 *             self.texture_loader.cleanup()
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.kill_textures", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":1064
 *             self.texture_loader.cleanup()
 * 
 *     def event_peek_sleep(self):             # <<<<<<<<<<<<<<
 *         pass
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_61event_peek_sleep(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_61event_peek_sleep(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("event_peek_sleep (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_60event_peek_sleep(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_60event_peek_sleep(CYTHON_UNUSED struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("event_peek_sleep", 0);

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":1067
 *         pass
 * 
 *     def get_physical_size(self):             # <<<<<<<<<<<<<<
 *         x, y = self.physical_size
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_63get_physical_size(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_63get_physical_size(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("get_physical_size (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_62get_physical_size(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_62get_physical_size(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_v_x = NULL;
  PyObject *__pyx_v_y = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("get_physical_size", 0);

  /* "renpy/gl2/gl2draw.pyx":1068
 * 
 *     def get_physical_size(self):
 *         x, y = self.physical_size             # <<<<<<<<<<<<<<
 * 
 *         x = int(x / self.dpi_scale)
 */
  __pyx_t_1 = __pyx_v_self->physical_size;
  __Pyx_INCREF(__pyx_t_1);
  if (likely(__pyx_t_1 != Py_None)) {
    PyObject* sequence = __pyx_t_1;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1068, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
    __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_3);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1068, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1068, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    #endif
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  } else {
    __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(0, 1068, __pyx_L1_error)
  }
  __pyx_v_x = __pyx_t_2;
  __pyx_t_2 = 0;
  __pyx_v_y = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "renpy/gl2/gl2draw.pyx":1070
 *         x, y = self.physical_size
 * 
 *         x = int(x / self.dpi_scale)             # <<<<<<<<<<<<<<
 *         y = int(y / self.dpi_scale)
 * 
 */
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->dpi_scale); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1070, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_v_x, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1070, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1070, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1071
 * 
 *         x = int(x / self.dpi_scale)
 *         y = int(y / self.dpi_scale)             # <<<<<<<<<<<<<<
 * 
 *         return (x, y)
 */
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->dpi_scale); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyNumber_Divide(__pyx_v_y, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyNumber_Int(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1071, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1073
 *         y = int(y / self.dpi_scale)
 * 
 *         return (x, y)             # <<<<<<<<<<<<<<
 * 
 *     ############################################################################
 */
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1073, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_v_x);
  __Pyx_GIVEREF(__pyx_v_x);
  PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_x);
  __Pyx_INCREF(__pyx_v_y);
  __Pyx_GIVEREF(__pyx_v_y);
  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_y);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":1067
 *         pass
 * 
 *     def get_physical_size(self):             # <<<<<<<<<<<<<<
 *         x, y = self.physical_size
 * 
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.get_physical_size", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_x);
  __Pyx_XDECREF(__pyx_v_y);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":1078
 *     # Everything below this point is an internal detail.
 * 
 *     cdef void change_fbo(self, GLuint fbo):             # <<<<<<<<<<<<<<
 *         if self.current_fbo != fbo:
 *             glBindFramebuffer(GL_FRAMEBUFFER, fbo)
 */

static void __pyx_f_5renpy_3gl2_7gl2draw_7GL2Draw_change_fbo(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, GLuint __pyx_v_fbo) {
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  __Pyx_RefNannySetupContext("change_fbo", 0);

  /* "renpy/gl2/gl2draw.pyx":1079
 * 
 *     cdef void change_fbo(self, GLuint fbo):
 *         if self.current_fbo != fbo:             # <<<<<<<<<<<<<<
 *             glBindFramebuffer(GL_FRAMEBUFFER, fbo)
 *             self.current_fbo = fbo
 */
  __pyx_t_1 = ((__pyx_v_self->current_fbo != __pyx_v_fbo) != 0);
  if (__pyx_t_1) {

    /* "renpy/gl2/gl2draw.pyx":1080
 *     cdef void change_fbo(self, GLuint fbo):
 *         if self.current_fbo != fbo:
 *             glBindFramebuffer(GL_FRAMEBUFFER, fbo)             # <<<<<<<<<<<<<<
 *             self.current_fbo = fbo
 * 
 */
    __pyx_v_5renpy_4uguu_2gl_glBindFramebuffer(GL_FRAMEBUFFER, __pyx_v_fbo);

    /* "renpy/gl2/gl2draw.pyx":1081
 *         if self.current_fbo != fbo:
 *             glBindFramebuffer(GL_FRAMEBUFFER, fbo)
 *             self.current_fbo = fbo             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_v_self->current_fbo = __pyx_v_fbo;

    /* "renpy/gl2/gl2draw.pyx":1079
 * 
 *     cdef void change_fbo(self, GLuint fbo):
 *         if self.current_fbo != fbo:             # <<<<<<<<<<<<<<
 *             glBindFramebuffer(GL_FRAMEBUFFER, fbo)
 *             self.current_fbo = fbo
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1078
 *     # Everything below this point is an internal detail.
 * 
 *     cdef void change_fbo(self, GLuint fbo):             # <<<<<<<<<<<<<<
 *         if self.current_fbo != fbo:
 *             glBindFramebuffer(GL_FRAMEBUFFER, fbo)
 */

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

/* "renpy/gl2/gl2draw.pxd":30
 * 
 * 
 *     cdef public bint gles             # <<<<<<<<<<<<<<
 *     cdef public bint angle
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4gles_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4gles_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4gles___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4gles___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->gles); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 30, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.gles.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4gles_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4gles_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4gles_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4gles_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 30, __pyx_L1_error)
  __pyx_v_self->gles = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.gles.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":31
 * 
 *     cdef public bint gles
 *     cdef public bint angle             # <<<<<<<<<<<<<<
 * 
 *     cdef bint did_init
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_5angle_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_5angle_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_5angle___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_5angle___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->angle); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.angle.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_5angle_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_5angle_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_5angle_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_5angle_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 31, __pyx_L1_error)
  __pyx_v_self->angle = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.angle.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":36
 *     cdef object window
 *     cdef tuple virtual_size
 *     cdef public tuple physical_size             # <<<<<<<<<<<<<<
 *     cdef public tuple drawable_size
 *     cdef public tuple virtual_box
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->physical_size);
  __pyx_r = __pyx_v_self->physical_size;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 36, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->physical_size);
  __Pyx_DECREF(__pyx_v_self->physical_size);
  __pyx_v_self->physical_size = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.physical_size.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_4__del__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->physical_size);
  __Pyx_DECREF(__pyx_v_self->physical_size);
  __pyx_v_self->physical_size = ((PyObject*)Py_None);

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":37
 *     cdef tuple virtual_size
 *     cdef public tuple physical_size
 *     cdef public tuple drawable_size             # <<<<<<<<<<<<<<
 *     cdef public tuple virtual_box
 *     cdef public tuple physical_box
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->drawable_size);
  __pyx_r = __pyx_v_self->drawable_size;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 37, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->drawable_size);
  __Pyx_DECREF(__pyx_v_self->drawable_size);
  __pyx_v_self->drawable_size = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.drawable_size.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_4__del__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->drawable_size);
  __Pyx_DECREF(__pyx_v_self->drawable_size);
  __pyx_v_self->drawable_size = ((PyObject*)Py_None);

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":38
 *     cdef public tuple physical_size
 *     cdef public tuple drawable_size
 *     cdef public tuple virtual_box             # <<<<<<<<<<<<<<
 *     cdef public tuple physical_box
 *     cdef double last_redraw_time
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->virtual_box);
  __pyx_r = __pyx_v_self->virtual_box;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 38, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->virtual_box);
  __Pyx_DECREF(__pyx_v_self->virtual_box);
  __pyx_v_self->virtual_box = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.virtual_box.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_4__del__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->virtual_box);
  __Pyx_DECREF(__pyx_v_self->virtual_box);
  __pyx_v_self->virtual_box = ((PyObject*)Py_None);

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":39
 *     cdef public tuple drawable_size
 *     cdef public tuple virtual_box
 *     cdef public tuple physical_box             # <<<<<<<<<<<<<<
 *     cdef double last_redraw_time
 *     cdef double redraw_period
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->physical_box);
  __pyx_r = __pyx_v_self->physical_box;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 39, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->physical_box);
  __Pyx_DECREF(__pyx_v_self->physical_box);
  __pyx_v_self->physical_box = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.physical_box.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_4__del__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->physical_box);
  __Pyx_DECREF(__pyx_v_self->physical_box);
  __pyx_v_self->physical_box = ((PyObject*)Py_None);

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":42
 *     cdef double last_redraw_time
 *     cdef double redraw_period
 *     cdef public dict info             # <<<<<<<<<<<<<<
 *     cdef object old_fullscreen
 *     cdef public object fullscreen_surface
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4info_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4info_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4info___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4info___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->info);
  __pyx_r = __pyx_v_self->info;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4info_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4info_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4info_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4info_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyDict_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 42, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->info);
  __Pyx_DECREF(__pyx_v_self->info);
  __pyx_v_self->info = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.info.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4info_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4info_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4info_4__del__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_4info_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->info);
  __Pyx_DECREF(__pyx_v_self->info);
  __pyx_v_self->info = ((PyObject*)Py_None);

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":44
 *     cdef public dict info
 *     cdef object old_fullscreen
 *     cdef public object fullscreen_surface             # <<<<<<<<<<<<<<
 *     cdef object display_info
 *     cdef tuple clip_cache
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->fullscreen_surface);
  __pyx_r = __pyx_v_self->fullscreen_surface;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(__pyx_v_self->fullscreen_surface);
  __Pyx_DECREF(__pyx_v_self->fullscreen_surface);
  __pyx_v_self->fullscreen_surface = __pyx_v_value;

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_4__del__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->fullscreen_surface);
  __Pyx_DECREF(__pyx_v_self->fullscreen_surface);
  __pyx_v_self->fullscreen_surface = Py_None;

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":51
 *     cdef object shader_cache
 * 
 *     cdef public tuple clip_rtt_box             # <<<<<<<<<<<<<<
 * 
 *     cdef public float draw_per_phys
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->clip_rtt_box);
  __pyx_r = __pyx_v_self->clip_rtt_box;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 51, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->clip_rtt_box);
  __Pyx_DECREF(__pyx_v_self->clip_rtt_box);
  __pyx_v_self->clip_rtt_box = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.clip_rtt_box.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_4__del__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->clip_rtt_box);
  __Pyx_DECREF(__pyx_v_self->clip_rtt_box);
  __pyx_v_self->clip_rtt_box = ((PyObject*)Py_None);

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":53
 *     cdef public tuple clip_rtt_box
 * 
 *     cdef public float draw_per_phys             # <<<<<<<<<<<<<<
 *     cdef public tuple drawable_viewport
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_phys_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_phys_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_phys___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_phys___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_self->draw_per_phys); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 53, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.draw_per_phys.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_phys_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_phys_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_phys_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_phys_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  float __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __pyx_PyFloat_AsFloat(__pyx_v_value); if (unlikely((__pyx_t_1 == (float)-1) && PyErr_Occurred())) __PYX_ERR(1, 53, __pyx_L1_error)
  __pyx_v_self->draw_per_phys = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.draw_per_phys.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":54
 * 
 *     cdef public float draw_per_phys
 *     cdef public tuple drawable_viewport             # <<<<<<<<<<<<<<
 * 
 *     cdef public object draw_per_virt
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->drawable_viewport);
  __pyx_r = __pyx_v_self->drawable_viewport;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(PyTuple_CheckExact(__pyx_v_value))||((__pyx_v_value) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v_value)->tp_name), 0))) __PYX_ERR(1, 54, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->drawable_viewport);
  __Pyx_DECREF(__pyx_v_self->drawable_viewport);
  __pyx_v_self->drawable_viewport = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.drawable_viewport.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_4__del__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->drawable_viewport);
  __Pyx_DECREF(__pyx_v_self->drawable_viewport);
  __pyx_v_self->drawable_viewport = ((PyObject*)Py_None);

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":56
 *     cdef public tuple drawable_viewport
 * 
 *     cdef public object draw_per_virt             # <<<<<<<<<<<<<<
 *     cdef public Matrix virt_to_draw
 *     cdef public Matrix draw_to_virt
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_self->draw_per_virt);
  __pyx_r = __pyx_v_self->draw_per_virt;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__", 0);
  __Pyx_INCREF(__pyx_v_value);
  __Pyx_GIVEREF(__pyx_v_value);
  __Pyx_GOTREF(__pyx_v_self->draw_per_virt);
  __Pyx_DECREF(__pyx_v_self->draw_per_virt);
  __pyx_v_self->draw_per_virt = __pyx_v_value;

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_4__del__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->draw_per_virt);
  __Pyx_DECREF(__pyx_v_self->draw_per_virt);
  __pyx_v_self->draw_per_virt = Py_None;

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":57
 * 
 *     cdef public object draw_per_virt
 *     cdef public Matrix virt_to_draw             # <<<<<<<<<<<<<<
 *     cdef public Matrix draw_to_virt
 * 
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->virt_to_draw));
  __pyx_r = ((PyObject *)__pyx_v_self->virt_to_draw);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5renpy_7display_6matrix_Matrix))))) __PYX_ERR(1, 57, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->virt_to_draw);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->virt_to_draw));
  __pyx_v_self->virt_to_draw = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.virt_to_draw.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_4__del__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->virt_to_draw);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->virt_to_draw));
  __pyx_v_self->virt_to_draw = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)Py_None);

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":58
 *     cdef public object draw_per_virt
 *     cdef public Matrix virt_to_draw
 *     cdef public Matrix draw_to_virt             # <<<<<<<<<<<<<<
 * 
 *     # The matrix that goes from drawable space to the window. This isn't used
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->draw_to_virt));
  __pyx_r = ((PyObject *)__pyx_v_self->draw_to_virt);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5renpy_7display_6matrix_Matrix))))) __PYX_ERR(1, 58, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->draw_to_virt);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->draw_to_virt));
  __pyx_v_self->draw_to_virt = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.draw_to_virt.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_4__del__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->draw_to_virt);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->draw_to_virt));
  __pyx_v_self->draw_to_virt = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)Py_None);

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":63
 *     # directly, it's used to determine if something is being drawn in a wa
 *     # that it shoudl be lined up with pixels.
 *     cdef public Matrix draw_transform             # <<<<<<<<<<<<<<
 * 
 *     cdef public int fast_redraw_frames
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->draw_transform));
  __pyx_r = ((PyObject *)__pyx_v_self->draw_transform);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5renpy_7display_6matrix_Matrix))))) __PYX_ERR(1, 63, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->draw_transform);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->draw_transform));
  __pyx_v_self->draw_transform = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.draw_transform.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_4__del__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->draw_transform);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->draw_transform));
  __pyx_v_self->draw_transform = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)Py_None);

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":65
 *     cdef public Matrix draw_transform
 * 
 *     cdef public int fast_redraw_frames             # <<<<<<<<<<<<<<
 * 
 *     # The color texture object used for offscreen rendering.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fast_redraw_frames_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fast_redraw_frames_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fast_redraw_frames___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fast_redraw_frames___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->fast_redraw_frames); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 65, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.fast_redraw_frames.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fast_redraw_frames_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fast_redraw_frames_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fast_redraw_frames_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_18fast_redraw_frames_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyInt_As_int(__pyx_v_value); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 65, __pyx_L1_error)
  __pyx_v_self->fast_redraw_frames = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.fast_redraw_frames.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":77
 * 
 *     # The texture_loader singleton.
 *     cdef public TextureLoader texture_loader             # <<<<<<<<<<<<<<
 * 
 *     # The default FBO.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->texture_loader));
  __pyx_r = ((PyObject *)__pyx_v_self->texture_loader);
  goto __pyx_L0;

  /* function exit code */
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  if (!(likely(((__pyx_v_value) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_value, __pyx_ptype_5renpy_3gl2_10gl2texture_TextureLoader))))) __PYX_ERR(1, 77, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_value;
  __Pyx_INCREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v_self->texture_loader);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->texture_loader));
  __pyx_v_self->texture_loader = ((struct __pyx_obj_5renpy_3gl2_10gl2texture_TextureLoader *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.texture_loader.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_5__del__(PyObject *__pyx_v_self); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_5__del__(PyObject *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_4__del__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_4__del__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__del__", 0);
  __Pyx_INCREF(Py_None);
  __Pyx_GIVEREF(Py_None);
  __Pyx_GOTREF(__pyx_v_self->texture_loader);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->texture_loader));
  __pyx_v_self->texture_loader = ((struct __pyx_obj_5renpy_3gl2_10gl2texture_TextureLoader *)Py_None);

  /* function exit code */
  __pyx_r = 0;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":80
 * 
 *     # The default FBO.
 *     cdef public GLuint default_fbo             # <<<<<<<<<<<<<<
 * 
 *     # The current FBO.
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11default_fbo_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11default_fbo_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11default_fbo___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11default_fbo___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_GLuint(__pyx_v_self->default_fbo); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 80, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.default_fbo.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11default_fbo_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11default_fbo_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11default_fbo_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11default_fbo_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  GLuint __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyInt_As_GLuint(__pyx_v_value); if (unlikely((__pyx_t_1 == ((GLuint)-1)) && PyErr_Occurred())) __PYX_ERR(1, 80, __pyx_L1_error)
  __pyx_v_self->default_fbo = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.default_fbo.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pxd":83
 * 
 *     # The current FBO.
 *     cdef public GLuint current_fbo             # <<<<<<<<<<<<<<
 * 
 *     cdef void change_fbo(self, GLuint fbo)
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11current_fbo_1__get__(PyObject *__pyx_v_self); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11current_fbo_1__get__(PyObject *__pyx_v_self) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11current_fbo___get__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11current_fbo___get__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__get__", 0);
  __Pyx_XDECREF(__pyx_r);
  __pyx_t_1 = __Pyx_PyInt_From_GLuint(__pyx_v_self->current_fbo); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 83, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_r = __pyx_t_1;
  __pyx_t_1 = 0;
  goto __pyx_L0;

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.current_fbo.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11current_fbo_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11current_fbo_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11current_fbo_2__set__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v_value));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_11current_fbo_2__set__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v_value) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  GLuint __pyx_t_1;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__set__", 0);
  __pyx_t_1 = __Pyx_PyInt_As_GLuint(__pyx_v_value); if (unlikely((__pyx_t_1 == ((GLuint)-1)) && PyErr_Occurred())) __PYX_ERR(1, 83, __pyx_L1_error)
  __pyx_v_self->current_fbo = __pyx_t_1;

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.current_fbo.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_65__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_65__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_64__reduce_cython__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_64__reduce_cython__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  PyObject *__pyx_t_13 = NULL;
  PyObject *__pyx_t_14 = NULL;
  int __pyx_t_15;
  int __pyx_t_16;
  int __pyx_t_17;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = (self.angle, self.clip_cache, self.clip_rtt_box, self.color_texture, self.current_fbo, self.default_clip, self.default_fbo, self.depth_renderbuffer, self.did_init, self.display_info, self.dpi_scale, self.draw_per_phys, self.draw_per_virt, self.draw_to_virt, self.draw_transform, self.drawable_size, self.drawable_viewport, self.fast_redraw_frames, self.fbo, self.fullscreen_surface, self.gles, self.info, self.last_redraw_time, self.old_fullscreen, self.physical_box, self.physical_size, self.redraw_period, self.shader_cache, self.texture_loader, self.virt_to_draw, self.virtual_box, self.virtual_size, self.window)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 */
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->angle); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyInt_From_GLuint(__pyx_v_self->color_texture); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyInt_From_GLuint(__pyx_v_self->current_fbo); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyInt_From_GLuint(__pyx_v_self->default_fbo); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_5 = __Pyx_PyInt_From_GLuint(__pyx_v_self->depth_renderbuffer); if (unlikely(!__pyx_t_5)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_self->did_init); if (unlikely(!__pyx_t_6)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = PyFloat_FromDouble(__pyx_v_self->dpi_scale); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __pyx_t_8 = PyFloat_FromDouble(__pyx_v_self->draw_per_phys); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_8);
  __pyx_t_9 = __Pyx_PyInt_From_int(__pyx_v_self->fast_redraw_frames); if (unlikely(!__pyx_t_9)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_10 = __Pyx_PyInt_From_GLuint(__pyx_v_self->fbo); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __pyx_t_11 = __Pyx_PyBool_FromLong(__pyx_v_self->gles); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __pyx_t_12 = PyFloat_FromDouble(__pyx_v_self->last_redraw_time); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_12);
  __pyx_t_13 = PyFloat_FromDouble(__pyx_v_self->redraw_period); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_13);
  __pyx_t_14 = PyTuple_New(33); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_t_1);
  __Pyx_INCREF(__pyx_v_self->clip_cache);
  __Pyx_GIVEREF(__pyx_v_self->clip_cache);
  PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_v_self->clip_cache);
  __Pyx_INCREF(__pyx_v_self->clip_rtt_box);
  __Pyx_GIVEREF(__pyx_v_self->clip_rtt_box);
  PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_v_self->clip_rtt_box);
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_14, 3, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_14, 4, __pyx_t_3);
  __Pyx_INCREF(__pyx_v_self->default_clip);
  __Pyx_GIVEREF(__pyx_v_self->default_clip);
  PyTuple_SET_ITEM(__pyx_t_14, 5, __pyx_v_self->default_clip);
  __Pyx_GIVEREF(__pyx_t_4);
  PyTuple_SET_ITEM(__pyx_t_14, 6, __pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_14, 7, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_14, 8, __pyx_t_6);
  __Pyx_INCREF(__pyx_v_self->display_info);
  __Pyx_GIVEREF(__pyx_v_self->display_info);
  PyTuple_SET_ITEM(__pyx_t_14, 9, __pyx_v_self->display_info);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_14, 10, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_8);
  PyTuple_SET_ITEM(__pyx_t_14, 11, __pyx_t_8);
  __Pyx_INCREF(__pyx_v_self->draw_per_virt);
  __Pyx_GIVEREF(__pyx_v_self->draw_per_virt);
  PyTuple_SET_ITEM(__pyx_t_14, 12, __pyx_v_self->draw_per_virt);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->draw_to_virt));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->draw_to_virt));
  PyTuple_SET_ITEM(__pyx_t_14, 13, ((PyObject *)__pyx_v_self->draw_to_virt));
  __Pyx_INCREF(((PyObject *)__pyx_v_self->draw_transform));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->draw_transform));
  PyTuple_SET_ITEM(__pyx_t_14, 14, ((PyObject *)__pyx_v_self->draw_transform));
  __Pyx_INCREF(__pyx_v_self->drawable_size);
  __Pyx_GIVEREF(__pyx_v_self->drawable_size);
  PyTuple_SET_ITEM(__pyx_t_14, 15, __pyx_v_self->drawable_size);
  __Pyx_INCREF(__pyx_v_self->drawable_viewport);
  __Pyx_GIVEREF(__pyx_v_self->drawable_viewport);
  PyTuple_SET_ITEM(__pyx_t_14, 16, __pyx_v_self->drawable_viewport);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_14, 17, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_14, 18, __pyx_t_10);
  __Pyx_INCREF(__pyx_v_self->fullscreen_surface);
  __Pyx_GIVEREF(__pyx_v_self->fullscreen_surface);
  PyTuple_SET_ITEM(__pyx_t_14, 19, __pyx_v_self->fullscreen_surface);
  __Pyx_GIVEREF(__pyx_t_11);
  PyTuple_SET_ITEM(__pyx_t_14, 20, __pyx_t_11);
  __Pyx_INCREF(__pyx_v_self->info);
  __Pyx_GIVEREF(__pyx_v_self->info);
  PyTuple_SET_ITEM(__pyx_t_14, 21, __pyx_v_self->info);
  __Pyx_GIVEREF(__pyx_t_12);
  PyTuple_SET_ITEM(__pyx_t_14, 22, __pyx_t_12);
  __Pyx_INCREF(__pyx_v_self->old_fullscreen);
  __Pyx_GIVEREF(__pyx_v_self->old_fullscreen);
  PyTuple_SET_ITEM(__pyx_t_14, 23, __pyx_v_self->old_fullscreen);
  __Pyx_INCREF(__pyx_v_self->physical_box);
  __Pyx_GIVEREF(__pyx_v_self->physical_box);
  PyTuple_SET_ITEM(__pyx_t_14, 24, __pyx_v_self->physical_box);
  __Pyx_INCREF(__pyx_v_self->physical_size);
  __Pyx_GIVEREF(__pyx_v_self->physical_size);
  PyTuple_SET_ITEM(__pyx_t_14, 25, __pyx_v_self->physical_size);
  __Pyx_GIVEREF(__pyx_t_13);
  PyTuple_SET_ITEM(__pyx_t_14, 26, __pyx_t_13);
  __Pyx_INCREF(__pyx_v_self->shader_cache);
  __Pyx_GIVEREF(__pyx_v_self->shader_cache);
  PyTuple_SET_ITEM(__pyx_t_14, 27, __pyx_v_self->shader_cache);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->texture_loader));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->texture_loader));
  PyTuple_SET_ITEM(__pyx_t_14, 28, ((PyObject *)__pyx_v_self->texture_loader));
  __Pyx_INCREF(((PyObject *)__pyx_v_self->virt_to_draw));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->virt_to_draw));
  PyTuple_SET_ITEM(__pyx_t_14, 29, ((PyObject *)__pyx_v_self->virt_to_draw));
  __Pyx_INCREF(__pyx_v_self->virtual_box);
  __Pyx_GIVEREF(__pyx_v_self->virtual_box);
  PyTuple_SET_ITEM(__pyx_t_14, 30, __pyx_v_self->virtual_box);
  __Pyx_INCREF(__pyx_v_self->virtual_size);
  __Pyx_GIVEREF(__pyx_v_self->virtual_size);
  PyTuple_SET_ITEM(__pyx_t_14, 31, __pyx_v_self->virtual_size);
  __Pyx_INCREF(__pyx_v_self->window);
  __Pyx_GIVEREF(__pyx_v_self->window);
  PyTuple_SET_ITEM(__pyx_t_14, 32, __pyx_v_self->window);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_t_4 = 0;
  __pyx_t_5 = 0;
  __pyx_t_6 = 0;
  __pyx_t_7 = 0;
  __pyx_t_8 = 0;
  __pyx_t_9 = 0;
  __pyx_t_10 = 0;
  __pyx_t_11 = 0;
  __pyx_t_12 = 0;
  __pyx_t_13 = 0;
  __pyx_v_state = ((PyObject*)__pyx_t_14);
  __pyx_t_14 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.angle, self.clip_cache, self.clip_rtt_box, self.color_texture, self.current_fbo, self.default_clip, self.default_fbo, self.depth_renderbuffer, self.did_init, self.display_info, self.dpi_scale, self.draw_per_phys, self.draw_per_virt, self.draw_to_virt, self.draw_transform, self.drawable_size, self.drawable_viewport, self.fast_redraw_frames, self.fbo, self.fullscreen_surface, self.gles, self.info, self.last_redraw_time, self.old_fullscreen, self.physical_box, self.physical_size, self.redraw_period, self.shader_cache, self.texture_loader, self.virt_to_draw, self.virtual_box, self.virtual_size, self.window)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None:
 *         state += (_dict,)
 */
  __pyx_t_14 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_14);
  __pyx_v__dict = __pyx_t_14;
  __pyx_t_14 = 0;

  /* "(tree fragment)":7
 *     state = (self.angle, self.clip_cache, self.clip_rtt_box, self.color_texture, self.current_fbo, self.default_clip, self.default_fbo, self.depth_renderbuffer, self.did_init, self.display_info, self.dpi_scale, self.draw_per_phys, self.draw_per_virt, self.draw_to_virt, self.draw_transform, self.drawable_size, self.drawable_viewport, self.fast_redraw_frames, self.fbo, self.fullscreen_surface, self.gles, self.info, self.last_redraw_time, self.old_fullscreen, self.physical_box, self.physical_size, self.redraw_period, self.shader_cache, self.texture_loader, self.virt_to_draw, self.virtual_box, self.virtual_size, self.window)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
  __pyx_t_15 = (__pyx_v__dict != Py_None);
  __pyx_t_16 = (__pyx_t_15 != 0);
  if (__pyx_t_16) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
 */
    __pyx_t_14 = PyTuple_New(1); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    PyTuple_SET_ITEM(__pyx_t_14, 0, __pyx_v__dict);
    __pyx_t_13 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_14); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_13));
    __pyx_t_13 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = self.clip_cache is not None or self.clip_rtt_box is not None or self.default_clip is not None or self.display_info is not None or self.draw_per_virt is not None or self.draw_to_virt is not None or self.draw_transform is not None or self.drawable_size is not None or self.drawable_viewport is not None or self.fullscreen_surface is not None or self.info is not None or self.old_fullscreen is not None or self.physical_box is not None or self.physical_size is not None or self.shader_cache is not None or self.texture_loader is not None or self.virt_to_draw is not None or self.virtual_box is not None or self.virtual_size is not None or self.window is not None
 */
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = (self.angle, self.clip_cache, self.clip_rtt_box, self.color_texture, self.current_fbo, self.default_clip, self.default_fbo, self.depth_renderbuffer, self.did_init, self.display_info, self.dpi_scale, self.draw_per_phys, self.draw_per_virt, self.draw_to_virt, self.draw_transform, self.drawable_size, self.drawable_viewport, self.fast_redraw_frames, self.fbo, self.fullscreen_surface, self.gles, self.info, self.last_redraw_time, self.old_fullscreen, self.physical_box, self.physical_size, self.redraw_period, self.shader_cache, self.texture_loader, self.virt_to_draw, self.virtual_box, self.virtual_size, self.window)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = self.clip_cache is not None or self.clip_rtt_box is not None or self.default_clip is not None or self.display_info is not None or self.draw_per_virt is not None or self.draw_to_virt is not None or self.draw_transform is not None or self.drawable_size is not None or self.drawable_viewport is not None or self.fullscreen_surface is not None or self.info is not None or self.old_fullscreen is not None or self.physical_box is not None or self.physical_size is not None or self.shader_cache is not None or self.texture_loader is not None or self.virt_to_draw is not None or self.virtual_box is not None or self.virtual_size is not None or self.window is not None             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_GL2Draw, (type(self), 0xc664da8, None), state
 */
  /*else*/ {
    __pyx_t_15 = (__pyx_v_self->clip_cache != ((PyObject*)Py_None));
    __pyx_t_17 = (__pyx_t_15 != 0);
    if (!__pyx_t_17) {
    } else {
      __pyx_t_16 = __pyx_t_17;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_17 = (__pyx_v_self->clip_rtt_box != ((PyObject*)Py_None));
    __pyx_t_15 = (__pyx_t_17 != 0);
    if (!__pyx_t_15) {
    } else {
      __pyx_t_16 = __pyx_t_15;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_15 = (__pyx_v_self->default_clip != ((PyObject*)Py_None));
    __pyx_t_17 = (__pyx_t_15 != 0);
    if (!__pyx_t_17) {
    } else {
      __pyx_t_16 = __pyx_t_17;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_17 = (__pyx_v_self->display_info != Py_None);
    __pyx_t_15 = (__pyx_t_17 != 0);
    if (!__pyx_t_15) {
    } else {
      __pyx_t_16 = __pyx_t_15;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_15 = (__pyx_v_self->draw_per_virt != Py_None);
    __pyx_t_17 = (__pyx_t_15 != 0);
    if (!__pyx_t_17) {
    } else {
      __pyx_t_16 = __pyx_t_17;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_17 = (((PyObject *)__pyx_v_self->draw_to_virt) != Py_None);
    __pyx_t_15 = (__pyx_t_17 != 0);
    if (!__pyx_t_15) {
    } else {
      __pyx_t_16 = __pyx_t_15;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_15 = (((PyObject *)__pyx_v_self->draw_transform) != Py_None);
    __pyx_t_17 = (__pyx_t_15 != 0);
    if (!__pyx_t_17) {
    } else {
      __pyx_t_16 = __pyx_t_17;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_17 = (__pyx_v_self->drawable_size != ((PyObject*)Py_None));
    __pyx_t_15 = (__pyx_t_17 != 0);
    if (!__pyx_t_15) {
    } else {
      __pyx_t_16 = __pyx_t_15;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_15 = (__pyx_v_self->drawable_viewport != ((PyObject*)Py_None));
    __pyx_t_17 = (__pyx_t_15 != 0);
    if (!__pyx_t_17) {
    } else {
      __pyx_t_16 = __pyx_t_17;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_17 = (__pyx_v_self->fullscreen_surface != Py_None);
    __pyx_t_15 = (__pyx_t_17 != 0);
    if (!__pyx_t_15) {
    } else {
      __pyx_t_16 = __pyx_t_15;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_15 = (__pyx_v_self->info != ((PyObject*)Py_None));
    __pyx_t_17 = (__pyx_t_15 != 0);
    if (!__pyx_t_17) {
    } else {
      __pyx_t_16 = __pyx_t_17;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_17 = (__pyx_v_self->old_fullscreen != Py_None);
    __pyx_t_15 = (__pyx_t_17 != 0);
    if (!__pyx_t_15) {
    } else {
      __pyx_t_16 = __pyx_t_15;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_15 = (__pyx_v_self->physical_box != ((PyObject*)Py_None));
    __pyx_t_17 = (__pyx_t_15 != 0);
    if (!__pyx_t_17) {
    } else {
      __pyx_t_16 = __pyx_t_17;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_17 = (__pyx_v_self->physical_size != ((PyObject*)Py_None));
    __pyx_t_15 = (__pyx_t_17 != 0);
    if (!__pyx_t_15) {
    } else {
      __pyx_t_16 = __pyx_t_15;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_15 = (__pyx_v_self->shader_cache != Py_None);
    __pyx_t_17 = (__pyx_t_15 != 0);
    if (!__pyx_t_17) {
    } else {
      __pyx_t_16 = __pyx_t_17;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_17 = (((PyObject *)__pyx_v_self->texture_loader) != Py_None);
    __pyx_t_15 = (__pyx_t_17 != 0);
    if (!__pyx_t_15) {
    } else {
      __pyx_t_16 = __pyx_t_15;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_15 = (((PyObject *)__pyx_v_self->virt_to_draw) != Py_None);
    __pyx_t_17 = (__pyx_t_15 != 0);
    if (!__pyx_t_17) {
    } else {
      __pyx_t_16 = __pyx_t_17;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_17 = (__pyx_v_self->virtual_box != ((PyObject*)Py_None));
    __pyx_t_15 = (__pyx_t_17 != 0);
    if (!__pyx_t_15) {
    } else {
      __pyx_t_16 = __pyx_t_15;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_15 = (__pyx_v_self->virtual_size != ((PyObject*)Py_None));
    __pyx_t_17 = (__pyx_t_15 != 0);
    if (!__pyx_t_17) {
    } else {
      __pyx_t_16 = __pyx_t_17;
      goto __pyx_L4_bool_binop_done;
    }
    __pyx_t_17 = (__pyx_v_self->window != Py_None);
    __pyx_t_15 = (__pyx_t_17 != 0);
    __pyx_t_16 = __pyx_t_15;
    __pyx_L4_bool_binop_done:;
    __pyx_v_use_setstate = __pyx_t_16;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.clip_cache is not None or self.clip_rtt_box is not None or self.default_clip is not None or self.display_info is not None or self.draw_per_virt is not None or self.draw_to_virt is not None or self.draw_transform is not None or self.drawable_size is not None or self.drawable_viewport is not None or self.fullscreen_surface is not None or self.info is not None or self.old_fullscreen is not None or self.physical_box is not None or self.physical_size is not None or self.shader_cache is not None or self.texture_loader is not None or self.virt_to_draw is not None or self.virtual_box is not None or self.virtual_size is not None or self.window is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_GL2Draw, (type(self), 0xc664da8, None), state
 *     else:
 */
  __pyx_t_16 = (__pyx_v_use_setstate != 0);
  if (__pyx_t_16) {

    /* "(tree fragment)":13
 *         use_setstate = self.clip_cache is not None or self.clip_rtt_box is not None or self.default_clip is not None or self.display_info is not None or self.draw_per_virt is not None or self.draw_to_virt is not None or self.draw_transform is not None or self.drawable_size is not None or self.drawable_viewport is not None or self.fullscreen_surface is not None or self.info is not None or self.old_fullscreen is not None or self.physical_box is not None or self.physical_size is not None or self.shader_cache is not None or self.texture_loader is not None or self.virt_to_draw is not None or self.virtual_box is not None or self.virtual_size is not None or self.window is not None
 *     if use_setstate:
 *         return __pyx_unpickle_GL2Draw, (type(self), 0xc664da8, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_GL2Draw, (type(self), 0xc664da8, state)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_13, __pyx_n_s_pyx_unpickle_GL2Draw); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_14, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_208031144);
    __Pyx_GIVEREF(__pyx_int_208031144);
    PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_int_208031144);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_14, 2, Py_None);
    __pyx_t_12 = PyTuple_New(3); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_13);
    PyTuple_SET_ITEM(__pyx_t_12, 0, __pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_12, 1, __pyx_t_14);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_12, 2, __pyx_v_state);
    __pyx_t_13 = 0;
    __pyx_t_14 = 0;
    __pyx_r = __pyx_t_12;
    __pyx_t_12 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.clip_cache is not None or self.clip_rtt_box is not None or self.default_clip is not None or self.display_info is not None or self.draw_per_virt is not None or self.draw_to_virt is not None or self.draw_transform is not None or self.drawable_size is not None or self.drawable_viewport is not None or self.fullscreen_surface is not None or self.info is not None or self.old_fullscreen is not None or self.physical_box is not None or self.physical_size is not None or self.shader_cache is not None or self.texture_loader is not None or self.virt_to_draw is not None or self.virtual_box is not None or self.virtual_size is not None or self.window is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_GL2Draw, (type(self), 0xc664da8, None), state
 *     else:
 */
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_GL2Draw, (type(self), 0xc664da8, None), state
 *     else:
 *         return __pyx_unpickle_GL2Draw, (type(self), 0xc664da8, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_GL2Draw__set_state(self, __pyx_state)
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_12, __pyx_n_s_pyx_unpickle_GL2Draw); if (unlikely(!__pyx_t_12)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_12);
    __pyx_t_14 = PyTuple_New(3); if (unlikely(!__pyx_t_14)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_14);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_14, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_208031144);
    __Pyx_GIVEREF(__pyx_int_208031144);
    PyTuple_SET_ITEM(__pyx_t_14, 1, __pyx_int_208031144);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_14, 2, __pyx_v_state);
    __pyx_t_13 = PyTuple_New(2); if (unlikely(!__pyx_t_13)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_13);
    __Pyx_GIVEREF(__pyx_t_12);
    PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_12);
    __Pyx_GIVEREF(__pyx_t_14);
    PyTuple_SET_ITEM(__pyx_t_13, 1, __pyx_t_14);
    __pyx_t_12 = 0;
    __pyx_t_14 = 0;
    __pyx_r = __pyx_t_13;
    __pyx_t_13 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_XDECREF(__pyx_t_13);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_GL2Draw, (type(self), 0xc664da8, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_GL2Draw__set_state(self, __pyx_state)
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_67__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_67__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_66__setstate_cython__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_7GL2Draw_66__setstate_cython__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":17
 *         return __pyx_unpickle_GL2Draw, (type(self), 0xc664da8, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_GL2Draw__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
 */
  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_5renpy_3gl2_7gl2draw___pyx_unpickle_GL2Draw__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_GL2Draw, (type(self), 0xc664da8, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_GL2Draw__set_state(self, __pyx_state)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2Draw.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":1102
 *     cdef bint debug
 * 
 *     def __init__(self, GL2Draw draw, width, height, debug=False):             # <<<<<<<<<<<<<<
 *         self.gl2draw = draw
 * 
 */

/* Python wrapper */
static int __pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static int __pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_1__init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_draw = 0;
  PyObject *__pyx_v_width = 0;
  PyObject *__pyx_v_height = 0;
  PyObject *__pyx_v_debug = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_draw,&__pyx_n_s_width,&__pyx_n_s_height,&__pyx_n_s_debug,0};
    PyObject* values[4] = {0,0,0,0};
    values[3] = ((PyObject *)Py_False);
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_draw)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_width)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, 1); __PYX_ERR(0, 1102, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_height)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, 2); __PYX_ERR(0, 1102, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (kw_args > 0) {
          PyObject* value = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_debug);
          if (value) { values[3] = value; kw_args--; }
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(0, 1102, __pyx_L3_error)
      }
    } else {
      switch (PyTuple_GET_SIZE(__pyx_args)) {
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        break;
        default: goto __pyx_L5_argtuple_error;
      }
    }
    __pyx_v_draw = ((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)values[0]);
    __pyx_v_width = values[1];
    __pyx_v_height = values[2];
    __pyx_v_debug = values[3];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__init__", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1102, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2DrawingContext.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return -1;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_draw), __pyx_ptype_5renpy_3gl2_7gl2draw_GL2Draw, 1, "draw", 0))) __PYX_ERR(0, 1102, __pyx_L1_error)
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext___init__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *)__pyx_v_self), __pyx_v_draw, __pyx_v_width, __pyx_v_height, __pyx_v_debug);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static int __pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext___init__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self, struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v_draw, PyObject *__pyx_v_width, PyObject *__pyx_v_height, PyObject *__pyx_v_debug) {
  int __pyx_r;
  __Pyx_RefNannyDeclarations
  float __pyx_t_1;
  int __pyx_t_2;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__init__", 0);

  /* "renpy/gl2/gl2draw.pyx":1103
 * 
 *     def __init__(self, GL2Draw draw, width, height, debug=False):
 *         self.gl2draw = draw             # <<<<<<<<<<<<<<
 * 
 *         self.width = width
 */
  __Pyx_INCREF(((PyObject *)__pyx_v_draw));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_draw));
  __Pyx_GOTREF(__pyx_v_self->gl2draw);
  __Pyx_DECREF(((PyObject *)__pyx_v_self->gl2draw));
  __pyx_v_self->gl2draw = __pyx_v_draw;

  /* "renpy/gl2/gl2draw.pyx":1105
 *         self.gl2draw = draw
 * 
 *         self.width = width             # <<<<<<<<<<<<<<
 *         self.height = height
 * 
 */
  __pyx_t_1 = __pyx_PyFloat_AsFloat(__pyx_v_width); if (unlikely((__pyx_t_1 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1105, __pyx_L1_error)
  __pyx_v_self->width = __pyx_t_1;

  /* "renpy/gl2/gl2draw.pyx":1106
 * 
 *         self.width = width
 *         self.height = height             # <<<<<<<<<<<<<<
 * 
 *         self.debug = debug
 */
  __pyx_t_1 = __pyx_PyFloat_AsFloat(__pyx_v_height); if (unlikely((__pyx_t_1 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1106, __pyx_L1_error)
  __pyx_v_self->height = __pyx_t_1;

  /* "renpy/gl2/gl2draw.pyx":1108
 *         self.height = height
 * 
 *         self.debug = debug             # <<<<<<<<<<<<<<
 * 
 *     def merge_properties(self, dict old, dict child):
 */
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_debug); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 1108, __pyx_L1_error)
  __pyx_v_self->debug = __pyx_t_2;

  /* "renpy/gl2/gl2draw.pyx":1102
 *     cdef bint debug
 * 
 *     def __init__(self, GL2Draw draw, width, height, debug=False):             # <<<<<<<<<<<<<<
 *         self.gl2draw = draw
 * 
 */

  /* function exit code */
  __pyx_r = 0;
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2DrawingContext.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = -1;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":1110
 *         self.debug = debug
 * 
 *     def merge_properties(self, dict old, dict child):             # <<<<<<<<<<<<<<
 *         """
 *         Merges the child properties into the old properties,
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_3merge_properties(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_17GL2DrawingContext_2merge_properties[] = "\n        Merges the child properties into the old properties,\n        returning new properties.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_3merge_properties(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_old = 0;
  PyObject *__pyx_v_child = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("merge_properties (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_old,&__pyx_n_s_child,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_old)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_child)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("merge_properties", 1, 2, 2, 1); __PYX_ERR(0, 1110, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "merge_properties") < 0)) __PYX_ERR(0, 1110, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_old = ((PyObject*)values[0]);
    __pyx_v_child = ((PyObject*)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("merge_properties", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1110, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2DrawingContext.merge_properties", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_old), (&PyDict_Type), 1, "old", 1))) __PYX_ERR(0, 1110, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_child), (&PyDict_Type), 1, "child", 1))) __PYX_ERR(0, 1110, __pyx_L1_error)
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_2merge_properties(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *)__pyx_v_self), __pyx_v_old, __pyx_v_child);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_2merge_properties(CYTHON_UNUSED struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self, PyObject *__pyx_v_old, PyObject *__pyx_v_child) {
  PyObject *__pyx_v_rv = NULL;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  Py_ssize_t __pyx_t_5;
  PyObject *(*__pyx_t_6)(PyObject *);
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  PyObject *(*__pyx_t_10)(PyObject *);
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("merge_properties", 0);

  /* "renpy/gl2/gl2draw.pyx":1116
 *         """
 * 
 *         rv = dict(old)             # <<<<<<<<<<<<<<
 * 
 *         if not child:
 */
  if (unlikely(__pyx_v_old == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
    __PYX_ERR(0, 1116, __pyx_L1_error)
  }
  __pyx_t_1 = PyDict_Copy(__pyx_v_old); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1116, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_rv = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1118
 *         rv = dict(old)
 * 
 *         if not child:             # <<<<<<<<<<<<<<
 *             return rv
 * 
 */
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_child); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1118, __pyx_L1_error)
  __pyx_t_3 = ((!__pyx_t_2) != 0);
  if (__pyx_t_3) {

    /* "renpy/gl2/gl2draw.pyx":1119
 * 
 *         if not child:
 *             return rv             # <<<<<<<<<<<<<<
 * 
 *         for k, v in child.items():
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_INCREF(__pyx_v_rv);
    __pyx_r = __pyx_v_rv;
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":1118
 *         rv = dict(old)
 * 
 *         if not child:             # <<<<<<<<<<<<<<
 *             return rv
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1121
 *             return rv
 * 
 *         for k, v in child.items():             # <<<<<<<<<<<<<<
 *             if k == "pixel_perfect":
 *                 if old["pixel_perfect"] is False:
 */
  if (unlikely(__pyx_v_child == Py_None)) {
    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
    __PYX_ERR(0, 1121, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_PyDict_Items(__pyx_v_child); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1121, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (likely(PyList_CheckExact(__pyx_t_1)) || PyTuple_CheckExact(__pyx_t_1)) {
    __pyx_t_4 = __pyx_t_1; __Pyx_INCREF(__pyx_t_4); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
  } else {
    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1121, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1121, __pyx_L1_error)
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  for (;;) {
    if (likely(!__pyx_t_6)) {
      if (likely(PyList_CheckExact(__pyx_t_4))) {
        if (__pyx_t_5 >= PyList_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1121, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1121, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      } else {
        if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        __pyx_t_1 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_5); __Pyx_INCREF(__pyx_t_1); __pyx_t_5++; if (unlikely(0 < 0)) __PYX_ERR(0, 1121, __pyx_L1_error)
        #else
        __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1121, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        #endif
      }
    } else {
      __pyx_t_1 = __pyx_t_6(__pyx_t_4);
      if (unlikely(!__pyx_t_1)) {
        PyObject* exc_type = PyErr_Occurred();
        if (exc_type) {
          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
          else __PYX_ERR(0, 1121, __pyx_L1_error)
        }
        break;
      }
      __Pyx_GOTREF(__pyx_t_1);
    }
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 2)) {
        if (size > 2) __Pyx_RaiseTooManyValuesError(2);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 1121, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
      } else {
        __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
      }
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_8);
      #else
      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1121, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1121, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_8);
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      __pyx_t_9 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1121, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
      index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_7);
      index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L6_unpacking_failed;
      __Pyx_GOTREF(__pyx_t_8);
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(0, 1121, __pyx_L1_error)
      __pyx_t_10 = NULL;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      goto __pyx_L7_unpacking_done;
      __pyx_L6_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_10 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 1121, __pyx_L1_error)
      __pyx_L7_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_7);
    __pyx_t_7 = 0;
    __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_8);
    __pyx_t_8 = 0;

    /* "renpy/gl2/gl2draw.pyx":1122
 * 
 *         for k, v in child.items():
 *             if k == "pixel_perfect":             # <<<<<<<<<<<<<<
 *                 if old["pixel_perfect"] is False:
 *                     continue
 */
    __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_k, __pyx_n_s_pixel_perfect, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1122, __pyx_L1_error)
    if (__pyx_t_3) {

      /* "renpy/gl2/gl2draw.pyx":1123
 *         for k, v in child.items():
 *             if k == "pixel_perfect":
 *                 if old["pixel_perfect"] is False:             # <<<<<<<<<<<<<<
 *                     continue
 * 
 */
      if (unlikely(__pyx_v_old == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1123, __pyx_L1_error)
      }
      __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_old, __pyx_n_s_pixel_perfect); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1123, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = (__pyx_t_1 == Py_False);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {

        /* "renpy/gl2/gl2draw.pyx":1124
 *             if k == "pixel_perfect":
 *                 if old["pixel_perfect"] is False:
 *                     continue             # <<<<<<<<<<<<<<
 * 
 *             rv[k] = v
 */
        goto __pyx_L4_continue;

        /* "renpy/gl2/gl2draw.pyx":1123
 *         for k, v in child.items():
 *             if k == "pixel_perfect":
 *                 if old["pixel_perfect"] is False:             # <<<<<<<<<<<<<<
 *                     continue
 * 
 */
      }

      /* "renpy/gl2/gl2draw.pyx":1122
 * 
 *         for k, v in child.items():
 *             if k == "pixel_perfect":             # <<<<<<<<<<<<<<
 *                 if old["pixel_perfect"] is False:
 *                     continue
 */
    }

    /* "renpy/gl2/gl2draw.pyx":1126
 *                     continue
 * 
 *             rv[k] = v             # <<<<<<<<<<<<<<
 * 
 *         return rv
 */
    if (unlikely(PyDict_SetItem(__pyx_v_rv, __pyx_v_k, __pyx_v_v) < 0)) __PYX_ERR(0, 1126, __pyx_L1_error)

    /* "renpy/gl2/gl2draw.pyx":1121
 *             return rv
 * 
 *         for k, v in child.items():             # <<<<<<<<<<<<<<
 *             if k == "pixel_perfect":
 *                 if old["pixel_perfect"] is False:
 */
    __pyx_L4_continue:;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":1128
 *             rv[k] = v
 * 
 *         return rv             # <<<<<<<<<<<<<<
 * 
 *     cdef Matrix correct_pixel_perfect(self, Matrix transform):
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v_rv);
  __pyx_r = __pyx_v_rv;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":1110
 *         self.debug = debug
 * 
 *     def merge_properties(self, dict old, dict child):             # <<<<<<<<<<<<<<
 *         """
 *         Merges the child properties into the old properties,
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2DrawingContext.merge_properties", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_rv);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":1130
 *         return rv
 * 
 *     cdef Matrix correct_pixel_perfect(self, Matrix transform):             # <<<<<<<<<<<<<<
 *         """
 *         Corrects `transform` so that the (0, 0) pixel is aligned with a
 */

static struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_f_5renpy_3gl2_7gl2draw_17GL2DrawingContext_correct_pixel_perfect(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self, struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_transform) {
  float __pyx_v_halfwidth;
  float __pyx_v_sx;
  float __pyx_v_sy;
  double __pyx_v_halfheight;
  float __pyx_v_xoff;
  float __pyx_v_yoff;
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  float __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *(*__pyx_t_6)(PyObject *);
  float __pyx_t_7;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("correct_pixel_perfect", 0);

  /* "renpy/gl2/gl2draw.pyx":1140
 * 
 *         # This is the equivalent of projecting (0, 0, 0, 1), and getting x and y.
 *         cdef float sx = transform.xdw             # <<<<<<<<<<<<<<
 *         cdef float sy = transform.ydw
 * 
 */
  __pyx_t_1 = __pyx_v_transform->xdw;
  __pyx_v_sx = __pyx_t_1;

  /* "renpy/gl2/gl2draw.pyx":1141
 *         # This is the equivalent of projecting (0, 0, 0, 1), and getting x and y.
 *         cdef float sx = transform.xdw
 *         cdef float sy = transform.ydw             # <<<<<<<<<<<<<<
 * 
 *         halfwidth = self.width / 2.0
 */
  __pyx_t_1 = __pyx_v_transform->ydw;
  __pyx_v_sy = __pyx_t_1;

  /* "renpy/gl2/gl2draw.pyx":1143
 *         cdef float sy = transform.ydw
 * 
 *         halfwidth = self.width / 2.0             # <<<<<<<<<<<<<<
 *         halfheight = self.height / 2.0
 * 
 */
  __pyx_v_halfwidth = (__pyx_v_self->width / 2.0);

  /* "renpy/gl2/gl2draw.pyx":1144
 * 
 *         halfwidth = self.width / 2.0
 *         halfheight = self.height / 2.0             # <<<<<<<<<<<<<<
 * 
 *         sx, sy = transform.transform(0, 0)
 */
  __pyx_v_halfheight = (__pyx_v_self->height / 2.0);

  /* "renpy/gl2/gl2draw.pyx":1146
 *         halfheight = self.height / 2.0
 * 
 *         sx, sy = transform.transform(0, 0)             # <<<<<<<<<<<<<<
 * 
 *         sx = sx * halfwidth + halfwidth
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_transform), __pyx_n_s_transform); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple_, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1146, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
    PyObject* sequence = __pyx_t_3;
    Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
    if (unlikely(size != 2)) {
      if (size > 2) __Pyx_RaiseTooManyValuesError(2);
      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
      __PYX_ERR(0, 1146, __pyx_L1_error)
    }
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    if (likely(PyTuple_CheckExact(sequence))) {
      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
    } else {
      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
    }
    __Pyx_INCREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_4);
    #else
    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1146, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1146, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    #endif
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  } else {
    Py_ssize_t index = -1;
    __pyx_t_5 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1146, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __pyx_t_6 = Py_TYPE(__pyx_t_5)->tp_iternext;
    index = 0; __pyx_t_2 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_2)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_2);
    index = 1; __pyx_t_4 = __pyx_t_6(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L3_unpacking_failed;
    __Pyx_GOTREF(__pyx_t_4);
    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 2) < 0) __PYX_ERR(0, 1146, __pyx_L1_error)
    __pyx_t_6 = NULL;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    goto __pyx_L4_unpacking_done;
    __pyx_L3_unpacking_failed:;
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    __pyx_t_6 = NULL;
    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
    __PYX_ERR(0, 1146, __pyx_L1_error)
    __pyx_L4_unpacking_done:;
  }
  __pyx_t_1 = __pyx_PyFloat_AsFloat(__pyx_t_2); if (unlikely((__pyx_t_1 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1146, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __pyx_PyFloat_AsFloat(__pyx_t_4); if (unlikely((__pyx_t_7 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1146, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_sx = __pyx_t_1;
  __pyx_v_sy = __pyx_t_7;

  /* "renpy/gl2/gl2draw.pyx":1148
 *         sx, sy = transform.transform(0, 0)
 * 
 *         sx = sx * halfwidth + halfwidth             # <<<<<<<<<<<<<<
 *         sy = sy * halfheight + halfheight
 * 
 */
  __pyx_v_sx = ((__pyx_v_sx * __pyx_v_halfwidth) + __pyx_v_halfwidth);

  /* "renpy/gl2/gl2draw.pyx":1149
 * 
 *         sx = sx * halfwidth + halfwidth
 *         sy = sy * halfheight + halfheight             # <<<<<<<<<<<<<<
 * 
 *         cdef float xoff = round(sx) - sx
 */
  __pyx_v_sy = ((__pyx_v_sy * __pyx_v_halfheight) + __pyx_v_halfheight);

  /* "renpy/gl2/gl2draw.pyx":1151
 *         sy = sy * halfheight + halfheight
 * 
 *         cdef float xoff = round(sx) - sx             # <<<<<<<<<<<<<<
 *         cdef float yoff = round(sy) - sy
 * 
 */
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_sx); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_builtin_round, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_sx); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_2 = PyNumber_Subtract(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __pyx_t_7 = __pyx_PyFloat_AsFloat(__pyx_t_2); if (unlikely((__pyx_t_7 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1151, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_xoff = __pyx_t_7;

  /* "renpy/gl2/gl2draw.pyx":1152
 * 
 *         cdef float xoff = round(sx) - sx
 *         cdef float yoff = round(sy) - sy             # <<<<<<<<<<<<<<
 * 
 *         return Matrix.coffset(xoff / halfwidth, yoff / halfheight, 0) * transform
 */
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_sy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_builtin_round, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_sy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = PyNumber_Subtract(__pyx_t_3, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1152, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_7 = __pyx_PyFloat_AsFloat(__pyx_t_4); if (unlikely((__pyx_t_7 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1152, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_yoff = __pyx_t_7;

  /* "renpy/gl2/gl2draw.pyx":1154
 *         cdef float yoff = round(sy) - sy
 * 
 *         return Matrix.coffset(xoff / halfwidth, yoff / halfheight, 0) * transform             # <<<<<<<<<<<<<<
 * 
 *     def draw_model(self, model, Matrix transform, Polygon clip_polygon, tuple shaders, dict uniforms, dict properties):
 */
  __Pyx_XDECREF(((PyObject *)__pyx_r));
  if (unlikely(__pyx_v_halfwidth == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 1154, __pyx_L1_error)
  }
  if (unlikely(__pyx_v_halfheight == 0)) {
    PyErr_SetString(PyExc_ZeroDivisionError, "float division");
    __PYX_ERR(0, 1154, __pyx_L1_error)
  }
  __pyx_t_4 = ((PyObject *)__pyx_vtabptr_5renpy_7display_6matrix_Matrix->coffset((__pyx_v_xoff / __pyx_v_halfwidth), (__pyx_v_yoff / __pyx_v_halfheight), 0.0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_2 = PyNumber_Multiply(__pyx_t_4, ((PyObject *)__pyx_v_transform)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1154, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_5renpy_7display_6matrix_Matrix))))) __PYX_ERR(0, 1154, __pyx_L1_error)
  __pyx_r = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_2);
  __pyx_t_2 = 0;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":1130
 *         return rv
 * 
 *     cdef Matrix correct_pixel_perfect(self, Matrix transform):             # <<<<<<<<<<<<<<
 *         """
 *         Corrects `transform` so that the (0, 0) pixel is aligned with a
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2DrawingContext.correct_pixel_perfect", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF((PyObject *)__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":1156
 *         return Matrix.coffset(xoff / halfwidth, yoff / halfheight, 0) * transform
 * 
 *     def draw_model(self, model, Matrix transform, Polygon clip_polygon, tuple shaders, dict uniforms, dict properties):             # <<<<<<<<<<<<<<
 * 
 *         cdef Mesh mesh = model.mesh
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_5draw_model(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_5draw_model(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_model = 0;
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_transform = 0;
  struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *__pyx_v_clip_polygon = 0;
  PyObject *__pyx_v_shaders = 0;
  PyObject *__pyx_v_uniforms = 0;
  PyObject *__pyx_v_properties = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("draw_model (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_model,&__pyx_n_s_transform,&__pyx_n_s_clip_polygon,&__pyx_n_s_shaders,&__pyx_n_s_uniforms,&__pyx_n_s_properties,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_model)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_transform)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("draw_model", 1, 6, 6, 1); __PYX_ERR(0, 1156, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_clip_polygon)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("draw_model", 1, 6, 6, 2); __PYX_ERR(0, 1156, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shaders)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("draw_model", 1, 6, 6, 3); __PYX_ERR(0, 1156, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_uniforms)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("draw_model", 1, 6, 6, 4); __PYX_ERR(0, 1156, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_properties)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("draw_model", 1, 6, 6, 5); __PYX_ERR(0, 1156, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "draw_model") < 0)) __PYX_ERR(0, 1156, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
    }
    __pyx_v_model = values[0];
    __pyx_v_transform = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)values[1]);
    __pyx_v_clip_polygon = ((struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *)values[2]);
    __pyx_v_shaders = ((PyObject*)values[3]);
    __pyx_v_uniforms = ((PyObject*)values[4]);
    __pyx_v_properties = ((PyObject*)values[5]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("draw_model", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1156, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2DrawingContext.draw_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_transform), __pyx_ptype_5renpy_7display_6matrix_Matrix, 1, "transform", 0))) __PYX_ERR(0, 1156, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_clip_polygon), __pyx_ptype_5renpy_3gl2_10gl2polygon_Polygon, 1, "clip_polygon", 0))) __PYX_ERR(0, 1156, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shaders), (&PyTuple_Type), 1, "shaders", 1))) __PYX_ERR(0, 1156, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_uniforms), (&PyDict_Type), 1, "uniforms", 1))) __PYX_ERR(0, 1156, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_properties), (&PyDict_Type), 1, "properties", 1))) __PYX_ERR(0, 1156, __pyx_L1_error)
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_4draw_model(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *)__pyx_v_self), __pyx_v_model, __pyx_v_transform, __pyx_v_clip_polygon, __pyx_v_shaders, __pyx_v_uniforms, __pyx_v_properties);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_4draw_model(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self, PyObject *__pyx_v_model, struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_transform, struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *__pyx_v_clip_polygon, PyObject *__pyx_v_shaders, PyObject *__pyx_v_uniforms, PyObject *__pyx_v_properties) {
  struct __pyx_obj_5renpy_3gl2_7gl2mesh_Mesh *__pyx_v_mesh = 0;
  PyObject *__pyx_v_gl2debug = NULL;
  PyObject *__pyx_v_program = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  PyObject *__pyx_t_6 = NULL;
  PyObject *__pyx_t_7 = NULL;
  int __pyx_t_8;
  PyObject *__pyx_t_9 = NULL;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("draw_model", 0);
  __Pyx_INCREF((PyObject *)__pyx_v_transform);
  __Pyx_INCREF((PyObject *)__pyx_v_clip_polygon);
  __Pyx_INCREF(__pyx_v_shaders);

  /* "renpy/gl2/gl2draw.pyx":1158
 *     def draw_model(self, model, Matrix transform, Polygon clip_polygon, tuple shaders, dict uniforms, dict properties):
 * 
 *         cdef Mesh mesh = model.mesh             # <<<<<<<<<<<<<<
 * 
 *         if model.reverse is not IDENTITY:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_model, __pyx_n_s_mesh); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1158, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5renpy_3gl2_7gl2mesh_Mesh))))) __PYX_ERR(0, 1158, __pyx_L1_error)
  __pyx_v_mesh = ((struct __pyx_obj_5renpy_3gl2_7gl2mesh_Mesh *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1160
 *         cdef Mesh mesh = model.mesh
 * 
 *         if model.reverse is not IDENTITY:             # <<<<<<<<<<<<<<
 *              transform = transform * model.reverse
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_model, __pyx_n_s_reverse); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1160, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = (__pyx_t_1 != __pyx_v_5renpy_3gl2_7gl2draw_IDENTITY);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "renpy/gl2/gl2draw.pyx":1161
 * 
 *         if model.reverse is not IDENTITY:
 *              transform = transform * model.reverse             # <<<<<<<<<<<<<<
 * 
 *         if properties["pixel_perfect"]:
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_model, __pyx_n_s_reverse); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1161, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyNumber_Multiply(((PyObject *)__pyx_v_transform), __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1161, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5renpy_7display_6matrix_Matrix))))) __PYX_ERR(0, 1161, __pyx_L1_error)
    __Pyx_DECREF_SET(__pyx_v_transform, ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "renpy/gl2/gl2draw.pyx":1160
 *         cdef Mesh mesh = model.mesh
 * 
 *         if model.reverse is not IDENTITY:             # <<<<<<<<<<<<<<
 *              transform = transform * model.reverse
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1163
 *              transform = transform * model.reverse
 * 
 *         if properties["pixel_perfect"]:             # <<<<<<<<<<<<<<
 *             transform = self.correct_pixel_perfect(transform)
 * 
 */
  if (unlikely(__pyx_v_properties == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 1163, __pyx_L1_error)
  }
  __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_properties, __pyx_n_s_pixel_perfect); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1163, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1163, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (__pyx_t_3) {

    /* "renpy/gl2/gl2draw.pyx":1164
 * 
 *         if properties["pixel_perfect"]:
 *             transform = self.correct_pixel_perfect(transform)             # <<<<<<<<<<<<<<
 * 
 *         # If a clip polygon is in place, clip the mesh with it.
 */
    __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_5renpy_3gl2_7gl2draw_GL2DrawingContext *)__pyx_v_self->__pyx_vtab)->correct_pixel_perfect(__pyx_v_self, __pyx_v_transform)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1164, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF_SET(__pyx_v_transform, ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "renpy/gl2/gl2draw.pyx":1163
 *              transform = transform * model.reverse
 * 
 *         if properties["pixel_perfect"]:             # <<<<<<<<<<<<<<
 *             transform = self.correct_pixel_perfect(transform)
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1167
 * 
 *         # If a clip polygon is in place, clip the mesh with it.
 *         if clip_polygon is not None:             # <<<<<<<<<<<<<<
 * 
 *             if model.reverse is not IDENTITY:
 */
  __pyx_t_3 = (((PyObject *)__pyx_v_clip_polygon) != Py_None);
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":1169
 *         if clip_polygon is not None:
 * 
 *             if model.reverse is not IDENTITY:             # <<<<<<<<<<<<<<
 *                 clip_polygon = clip_polygon.multiply_matrix(model.forward)
 * 
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_model, __pyx_n_s_reverse); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1169, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_2 = (__pyx_t_4 != __pyx_v_5renpy_3gl2_7gl2draw_IDENTITY);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (__pyx_t_3) {

      /* "renpy/gl2/gl2draw.pyx":1170
 * 
 *             if model.reverse is not IDENTITY:
 *                 clip_polygon = clip_polygon.multiply_matrix(model.forward)             # <<<<<<<<<<<<<<
 * 
 *             mesh = mesh.crop(clip_polygon)
 */
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_model, __pyx_n_s_forward); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1170, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5renpy_7display_6matrix_Matrix))))) __PYX_ERR(0, 1170, __pyx_L1_error)
      __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_5renpy_3gl2_10gl2polygon_Polygon *)__pyx_v_clip_polygon->__pyx_vtab)->multiply_matrix(__pyx_v_clip_polygon, ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_4), 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1170, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __Pyx_DECREF_SET(__pyx_v_clip_polygon, ((struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *)__pyx_t_1));
      __pyx_t_1 = 0;

      /* "renpy/gl2/gl2draw.pyx":1169
 *         if clip_polygon is not None:
 * 
 *             if model.reverse is not IDENTITY:             # <<<<<<<<<<<<<<
 *                 clip_polygon = clip_polygon.multiply_matrix(model.forward)
 * 
 */
    }

    /* "renpy/gl2/gl2draw.pyx":1172
 *                 clip_polygon = clip_polygon.multiply_matrix(model.forward)
 * 
 *             mesh = mesh.crop(clip_polygon)             # <<<<<<<<<<<<<<
 * 
 *         if model.shaders:
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_mesh), __pyx_n_s_crop); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, ((PyObject *)__pyx_v_clip_polygon)) : __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_clip_polygon));
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1172, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5renpy_3gl2_7gl2mesh_Mesh))))) __PYX_ERR(0, 1172, __pyx_L1_error)
    __Pyx_DECREF_SET(__pyx_v_mesh, ((struct __pyx_obj_5renpy_3gl2_7gl2mesh_Mesh *)__pyx_t_1));
    __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":1167
 * 
 *         # If a clip polygon is in place, clip the mesh with it.
 *         if clip_polygon is not None:             # <<<<<<<<<<<<<<
 * 
 *             if model.reverse is not IDENTITY:
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1174
 *             mesh = mesh.crop(clip_polygon)
 * 
 *         if model.shaders:             # <<<<<<<<<<<<<<
 *             shaders = shaders + model.shaders
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_model, __pyx_n_s_shaders); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1174, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1174, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {

    /* "renpy/gl2/gl2draw.pyx":1175
 * 
 *         if model.shaders:
 *             shaders = shaders + model.shaders             # <<<<<<<<<<<<<<
 * 
 *         if self.debug:
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_model, __pyx_n_s_shaders); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1175, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = PyNumber_Add(__pyx_v_shaders, __pyx_t_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1175, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(PyTuple_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 1175, __pyx_L1_error)
    __Pyx_DECREF_SET(__pyx_v_shaders, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "renpy/gl2/gl2draw.pyx":1174
 *             mesh = mesh.crop(clip_polygon)
 * 
 *         if model.shaders:             # <<<<<<<<<<<<<<
 *             shaders = shaders + model.shaders
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1177
 *             shaders = shaders + model.shaders
 * 
 *         if self.debug:             # <<<<<<<<<<<<<<
 *             import renpy.gl2.gl2debug as gl2debug
 *             gl2debug.geometry(mesh, transform, self.width, self.height)
 */
  __pyx_t_3 = (__pyx_v_self->debug != 0);
  if (__pyx_t_3) {

    /* "renpy/gl2/gl2draw.pyx":1178
 * 
 *         if self.debug:
 *             import renpy.gl2.gl2debug as gl2debug             # <<<<<<<<<<<<<<
 *             gl2debug.geometry(mesh, transform, self.width, self.height)
 * 
 */
    __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1178, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_n_s__13);
    __Pyx_GIVEREF(__pyx_n_s__13);
    PyList_SET_ITEM(__pyx_t_4, 0, __pyx_n_s__13);
    __pyx_t_1 = __Pyx_Import(__pyx_n_s_renpy_gl2_gl2debug, __pyx_t_4, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1178, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_v_gl2debug = __pyx_t_1;
    __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":1179
 *         if self.debug:
 *             import renpy.gl2.gl2debug as gl2debug
 *             gl2debug.geometry(mesh, transform, self.width, self.height)             # <<<<<<<<<<<<<<
 * 
 *         program = self.gl2draw.shader_cache.get(shaders)
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_gl2debug, __pyx_n_s_geometry); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1179, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_self->width); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1179, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_6 = PyFloat_FromDouble(__pyx_v_self->height); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1179, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    __pyx_t_7 = NULL;
    __pyx_t_8 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_8 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[5] = {__pyx_t_7, ((PyObject *)__pyx_v_mesh), ((PyObject *)__pyx_v_transform), __pyx_t_5, __pyx_t_6};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 4+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[5] = {__pyx_t_7, ((PyObject *)__pyx_v_mesh), ((PyObject *)__pyx_v_transform), __pyx_t_5, __pyx_t_6};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 4+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
    } else
    #endif
    {
      __pyx_t_9 = PyTuple_New(4+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1179, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__pyx_t_7) {
        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7); __pyx_t_7 = NULL;
      }
      __Pyx_INCREF(((PyObject *)__pyx_v_mesh));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_mesh));
      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, ((PyObject *)__pyx_v_mesh));
      __Pyx_INCREF(((PyObject *)__pyx_v_transform));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_transform));
      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, ((PyObject *)__pyx_v_transform));
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_8, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_6);
      PyTuple_SET_ITEM(__pyx_t_9, 3+__pyx_t_8, __pyx_t_6);
      __pyx_t_5 = 0;
      __pyx_t_6 = 0;
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1179, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":1177
 *             shaders = shaders + model.shaders
 * 
 *         if self.debug:             # <<<<<<<<<<<<<<
 *             import renpy.gl2.gl2debug as gl2debug
 *             gl2debug.geometry(mesh, transform, self.width, self.height)
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1181
 *             gl2debug.geometry(mesh, transform, self.width, self.height)
 * 
 *         program = self.gl2draw.shader_cache.get(shaders)             # <<<<<<<<<<<<<<
 * 
 *         program.start()
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_self->gl2draw->shader_cache, __pyx_n_s_get); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_9, __pyx_v_shaders) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_shaders);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1181, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_v_program = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1183
 *         program = self.gl2draw.shader_cache.get(shaders)
 * 
 *         program.start()             # <<<<<<<<<<<<<<
 * 
 *         program.set_uniform("u_model_size", (model.width, model.height))
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_program, __pyx_n_s_start); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1183, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_9 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
    }
  }
  __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_9) : __Pyx_PyObject_CallNoArg(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
  if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1183, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1185
 *         program.start()
 * 
 *         program.set_uniform("u_model_size", (model.width, model.height))             # <<<<<<<<<<<<<<
 *         program.set_uniform("u_lod_bias", -1.0)
 *         program.set_uniform("u_transform", transform)
 */
  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_program, __pyx_n_s_set_uniform); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_v_model, __pyx_n_s_width); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_model, __pyx_n_s_height); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1185, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_6);
  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
  __pyx_t_9 = 0;
  __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_4, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_n_s_u_model_size, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1185, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
    PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_n_s_u_model_size, __pyx_t_5};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1185, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1185, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_6) {
      __Pyx_GIVEREF(__pyx_t_6); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_6); __pyx_t_6 = NULL;
    }
    __Pyx_INCREF(__pyx_n_s_u_model_size);
    __Pyx_GIVEREF(__pyx_n_s_u_model_size);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_n_s_u_model_size);
    __Pyx_GIVEREF(__pyx_t_5);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_5);
    __pyx_t_5 = 0;
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_9, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1185, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1186
 * 
 *         program.set_uniform("u_model_size", (model.width, model.height))
 *         program.set_uniform("u_lod_bias", -1.0)             # <<<<<<<<<<<<<<
 *         program.set_uniform("u_transform", transform)
 *         program.set_uniform("u_time", (renpy.display.interface.frame_time - renpy.display.interface.init_time) % 86400)
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_program, __pyx_n_s_set_uniform); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":1187
 *         program.set_uniform("u_model_size", (model.width, model.height))
 *         program.set_uniform("u_lod_bias", -1.0)
 *         program.set_uniform("u_transform", transform)             # <<<<<<<<<<<<<<
 *         program.set_uniform("u_time", (renpy.display.interface.frame_time - renpy.display.interface.init_time) % 86400)
 *         program.set_uniform("u_random", (random.random(), random.random(), random.random(), random.random()))
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_program, __pyx_n_s_set_uniform); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1187, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_9 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_9)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_n_s_u_transform, ((PyObject *)__pyx_v_transform)};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1187, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_n_s_u_transform, ((PyObject *)__pyx_v_transform)};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1187, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  {
    __pyx_t_5 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    if (__pyx_t_9) {
      __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_9); __pyx_t_9 = NULL;
    }
    __Pyx_INCREF(__pyx_n_s_u_transform);
    __Pyx_GIVEREF(__pyx_n_s_u_transform);
    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_8, __pyx_n_s_u_transform);
    __Pyx_INCREF(((PyObject *)__pyx_v_transform));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_transform));
    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_8, ((PyObject *)__pyx_v_transform));
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1187, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":1188
 *         program.set_uniform("u_lod_bias", -1.0)
 *         program.set_uniform("u_transform", transform)
 *         program.set_uniform("u_time", (renpy.display.interface.frame_time - renpy.display.interface.init_time) % 86400)             # <<<<<<<<<<<<<<
 *         program.set_uniform("u_random", (random.random(), random.random(), random.random(), random.random()))
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_program, __pyx_n_s_set_uniform); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_renpy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_display); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_interface); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_frame_time); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_5, __pyx_n_s_renpy); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_display); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_interface); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_init_time); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = PyNumber_Subtract(__pyx_t_9, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = __Pyx_PyInt_RemainderObjC(__pyx_t_5, __pyx_int_86400, 0x15180, 0, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1188, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __pyx_t_5 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_5)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_n_s_u_time, __pyx_t_6};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1188, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_n_s_u_time, __pyx_t_6};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1188, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  } else
  #endif
  {
    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_9);
    if (__pyx_t_5) {
      __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5); __pyx_t_5 = NULL;
    }
    __Pyx_INCREF(__pyx_n_s_u_time);
    __Pyx_GIVEREF(__pyx_n_s_u_time);
    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_n_s_u_time);
    __Pyx_GIVEREF(__pyx_t_6);
    PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_8, __pyx_t_6);
    __pyx_t_6 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1188, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":1189
 *         program.set_uniform("u_transform", transform)
 *         program.set_uniform("u_time", (renpy.display.interface.frame_time - renpy.display.interface.init_time) % 86400)
 *         program.set_uniform("u_random", (random.random(), random.random(), random.random(), random.random()))             # <<<<<<<<<<<<<<
 * 
 *         model.program_uniforms(program)
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_program, __pyx_n_s_set_uniform); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_random); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_random); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_5, function);
    }
  }
  __pyx_t_9 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_9);
  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_random); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_random); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_7);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_7, function);
    }
  }
  __pyx_t_5 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_5);
  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_random); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_10 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_random); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_10))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_10);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_10);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_10, function);
    }
  }
  __pyx_t_7 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_10, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_7);
  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
  __Pyx_GetModuleGlobalName(__pyx_t_6, __pyx_n_s_random); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_6);
  __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_6, __pyx_n_s_random); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  __pyx_t_6 = NULL;
  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_11))) {
    __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_11);
    if (likely(__pyx_t_6)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
      __Pyx_INCREF(__pyx_t_6);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_11, function);
    }
  }
  __pyx_t_10 = (__pyx_t_6) ? __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_6) : __Pyx_PyObject_CallNoArg(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
  if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_10);
  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  __pyx_t_11 = PyTuple_New(4); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1189, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_11);
  __Pyx_GIVEREF(__pyx_t_9);
  PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_9);
  __Pyx_GIVEREF(__pyx_t_5);
  PyTuple_SET_ITEM(__pyx_t_11, 1, __pyx_t_5);
  __Pyx_GIVEREF(__pyx_t_7);
  PyTuple_SET_ITEM(__pyx_t_11, 2, __pyx_t_7);
  __Pyx_GIVEREF(__pyx_t_10);
  PyTuple_SET_ITEM(__pyx_t_11, 3, __pyx_t_10);
  __pyx_t_9 = 0;
  __pyx_t_5 = 0;
  __pyx_t_7 = 0;
  __pyx_t_10 = 0;
  __pyx_t_10 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_10)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_10);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_n_s_u_random, __pyx_t_11};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1189, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_10, __pyx_n_s_u_random, __pyx_t_11};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1189, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  } else
  #endif
  {
    __pyx_t_7 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    if (__pyx_t_10) {
      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_10); __pyx_t_10 = NULL;
    }
    __Pyx_INCREF(__pyx_n_s_u_random);
    __Pyx_GIVEREF(__pyx_n_s_u_random);
    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_8, __pyx_n_s_u_random);
    __Pyx_GIVEREF(__pyx_t_11);
    PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_8, __pyx_t_11);
    __pyx_t_11 = 0;
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1189, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":1191
 *         program.set_uniform("u_random", (random.random(), random.random(), random.random(), random.random()))
 * 
 *         model.program_uniforms(program)             # <<<<<<<<<<<<<<
 * 
 *         if uniforms:
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_model, __pyx_n_s_program_uniforms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_program) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_program);
  __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1191, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":1193
 *         model.program_uniforms(program)
 * 
 *         if uniforms:             # <<<<<<<<<<<<<<
 *             program.set_uniforms(uniforms)
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_uniforms); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1193, __pyx_L1_error)
  if (__pyx_t_3) {

    /* "renpy/gl2/gl2draw.pyx":1194
 * 
 *         if uniforms:
 *             program.set_uniforms(uniforms)             # <<<<<<<<<<<<<<
 * 
 *         program.draw(mesh, properties)
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_program, __pyx_n_s_set_uniforms); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1194, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_7 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
      }
    }
    __pyx_t_4 = (__pyx_t_7) ? __Pyx_PyObject_Call2Args(__pyx_t_1, __pyx_t_7, __pyx_v_uniforms) : __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_v_uniforms);
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1194, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "renpy/gl2/gl2draw.pyx":1193
 *         model.program_uniforms(program)
 * 
 *         if uniforms:             # <<<<<<<<<<<<<<
 *             program.set_uniforms(uniforms)
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1196
 *             program.set_uniforms(uniforms)
 * 
 *         program.draw(mesh, properties)             # <<<<<<<<<<<<<<
 *         program.finish()
 * 
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_program, __pyx_n_s_draw); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1196, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_7 = NULL;
  __pyx_t_8 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_7)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
      __pyx_t_8 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_7, ((PyObject *)__pyx_v_mesh), __pyx_v_properties};
    __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1196, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
    PyObject *__pyx_temp[3] = {__pyx_t_7, ((PyObject *)__pyx_v_mesh), __pyx_v_properties};
    __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1196, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
    __Pyx_GOTREF(__pyx_t_4);
  } else
  #endif
  {
    __pyx_t_11 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1196, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    if (__pyx_t_7) {
      __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_7); __pyx_t_7 = NULL;
    }
    __Pyx_INCREF(((PyObject *)__pyx_v_mesh));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_mesh));
    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_8, ((PyObject *)__pyx_v_mesh));
    __Pyx_INCREF(__pyx_v_properties);
    __Pyx_GIVEREF(__pyx_v_properties);
    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_8, __pyx_v_properties);
    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_11, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1196, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
  }
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":1197
 * 
 *         program.draw(mesh, properties)
 *         program.finish()             # <<<<<<<<<<<<<<
 * 
 *     def draw_one(self, what, Matrix transform, Polygon clip_polygon, tuple shaders, dict uniforms, dict properties):
 */
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_program, __pyx_n_s_finish); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_11 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
    __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_1);
    if (likely(__pyx_t_11)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
      __Pyx_INCREF(__pyx_t_11);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_1, function);
    }
  }
  __pyx_t_4 = (__pyx_t_11) ? __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_11) : __Pyx_PyObject_CallNoArg(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1197, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":1156
 *         return Matrix.coffset(xoff / halfwidth, yoff / halfheight, 0) * transform
 * 
 *     def draw_model(self, model, Matrix transform, Polygon clip_polygon, tuple shaders, dict uniforms, dict properties):             # <<<<<<<<<<<<<<
 * 
 *         cdef Mesh mesh = model.mesh
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2DrawingContext.draw_model", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_mesh);
  __Pyx_XDECREF(__pyx_v_gl2debug);
  __Pyx_XDECREF(__pyx_v_program);
  __Pyx_XDECREF((PyObject *)__pyx_v_transform);
  __Pyx_XDECREF((PyObject *)__pyx_v_clip_polygon);
  __Pyx_XDECREF(__pyx_v_shaders);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":1199
 *         program.finish()
 * 
 *     def draw_one(self, what, Matrix transform, Polygon clip_polygon, tuple shaders, dict uniforms, dict properties):             # <<<<<<<<<<<<<<
 *         """
 *         This is responsible for walking the surface tree, and drawing any
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_7draw_one(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static char __pyx_doc_5renpy_3gl2_7gl2draw_17GL2DrawingContext_6draw_one[] = "\n        This is responsible for walking the surface tree, and drawing any\n        Models, Renders, and Surfaces it encounters.\n\n        `transform`\n            The matrix that transforms texture space into drawable space.\n\n        `clip_polygon`\n            The polygon used to clip children, if known.\n\n        `shaders`\n            A tuple giving the shaders to use.\n\n        `uniforms`\n            A dictionary of uniforms.\n\n        `properties`\n            Various properties that control how things are drawn, that are updated\n            and passed to the shader.\n        ";
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_7draw_one(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_what = 0;
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_transform = 0;
  struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *__pyx_v_clip_polygon = 0;
  PyObject *__pyx_v_shaders = 0;
  PyObject *__pyx_v_uniforms = 0;
  PyObject *__pyx_v_properties = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("draw_one (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_what,&__pyx_n_s_transform,&__pyx_n_s_clip_polygon,&__pyx_n_s_shaders,&__pyx_n_s_uniforms,&__pyx_n_s_properties,0};
    PyObject* values[6] = {0,0,0,0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
        CYTHON_FALLTHROUGH;
        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
        CYTHON_FALLTHROUGH;
        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
        CYTHON_FALLTHROUGH;
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_what)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_transform)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("draw_one", 1, 6, 6, 1); __PYX_ERR(0, 1199, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_clip_polygon)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("draw_one", 1, 6, 6, 2); __PYX_ERR(0, 1199, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  3:
        if (likely((values[3] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_shaders)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("draw_one", 1, 6, 6, 3); __PYX_ERR(0, 1199, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  4:
        if (likely((values[4] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_uniforms)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("draw_one", 1, 6, 6, 4); __PYX_ERR(0, 1199, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  5:
        if (likely((values[5] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_properties)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("draw_one", 1, 6, 6, 5); __PYX_ERR(0, 1199, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "draw_one") < 0)) __PYX_ERR(0, 1199, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 6) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
      values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
    }
    __pyx_v_what = values[0];
    __pyx_v_transform = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)values[1]);
    __pyx_v_clip_polygon = ((struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *)values[2]);
    __pyx_v_shaders = ((PyObject*)values[3]);
    __pyx_v_uniforms = ((PyObject*)values[4]);
    __pyx_v_properties = ((PyObject*)values[5]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("draw_one", 1, 6, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1199, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2DrawingContext.draw_one", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_transform), __pyx_ptype_5renpy_7display_6matrix_Matrix, 1, "transform", 0))) __PYX_ERR(0, 1199, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_clip_polygon), __pyx_ptype_5renpy_3gl2_10gl2polygon_Polygon, 1, "clip_polygon", 0))) __PYX_ERR(0, 1199, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shaders), (&PyTuple_Type), 1, "shaders", 1))) __PYX_ERR(0, 1199, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_uniforms), (&PyDict_Type), 1, "uniforms", 1))) __PYX_ERR(0, 1199, __pyx_L1_error)
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_properties), (&PyDict_Type), 1, "properties", 1))) __PYX_ERR(0, 1199, __pyx_L1_error)
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_6draw_one(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *)__pyx_v_self), __pyx_v_what, __pyx_v_transform, __pyx_v_clip_polygon, __pyx_v_shaders, __pyx_v_uniforms, __pyx_v_properties);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_6draw_one(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self, PyObject *__pyx_v_what, struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_transform, struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *__pyx_v_clip_polygon, PyObject *__pyx_v_shaders, PyObject *__pyx_v_uniforms, PyObject *__pyx_v_properties) {
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_child_transform = 0;
  struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *__pyx_v_child_clip_polygon = 0;
  struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *__pyx_v_new_clip_polygon = 0;
  struct __pyx_obj_5renpy_7display_6render_Render *__pyx_v_r = 0;
  PyObject *__pyx_v_has_reverse = NULL;
  PyObject *__pyx_v_k = NULL;
  PyObject *__pyx_v_v = NULL;
  PyObject *__pyx_v_children = NULL;
  PyObject *__pyx_v_child = NULL;
  PyObject *__pyx_v_cx = NULL;
  PyObject *__pyx_v_cy = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_focus = NULL;
  CYTHON_UNUSED PyObject *__pyx_v_main = NULL;
  PyObject *__pyx_v_child_properties = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_t_10;
  Py_ssize_t __pyx_t_11;
  PyObject *(*__pyx_t_12)(PyObject *);
  PyObject *(*__pyx_t_13)(PyObject *);
  PyObject *__pyx_t_14 = NULL;
  PyObject *__pyx_t_15 = NULL;
  float __pyx_t_16;
  float __pyx_t_17;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("draw_one", 0);
  __Pyx_INCREF(__pyx_v_what);
  __Pyx_INCREF((PyObject *)__pyx_v_clip_polygon);
  __Pyx_INCREF(__pyx_v_shaders);
  __Pyx_INCREF(__pyx_v_uniforms);
  __Pyx_INCREF(__pyx_v_properties);

  /* "renpy/gl2/gl2draw.pyx":1225
 *         cdef Polygon new_clip_polygon
 * 
 *         if isinstance(what, Surface):             # <<<<<<<<<<<<<<
 *             what = self.gl2draw.load_texture(what)
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_Surface); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1225, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyObject_IsInstance(__pyx_v_what, __pyx_t_1); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 1225, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = (__pyx_t_2 != 0);
  if (__pyx_t_3) {

    /* "renpy/gl2/gl2draw.pyx":1226
 * 
 *         if isinstance(what, Surface):
 *             what = self.gl2draw.load_texture(what)             # <<<<<<<<<<<<<<
 * 
 *         if isinstance(what, Model):
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self->gl2draw), __pyx_n_s_load_texture); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
      }
    }
    __pyx_t_1 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_4, __pyx_t_5, __pyx_v_what) : __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_what);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1226, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_what, __pyx_t_1);
    __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":1225
 *         cdef Polygon new_clip_polygon
 * 
 *         if isinstance(what, Surface):             # <<<<<<<<<<<<<<
 *             what = self.gl2draw.load_texture(what)
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1228
 *             what = self.gl2draw.load_texture(what)
 * 
 *         if isinstance(what, Model):             # <<<<<<<<<<<<<<
 *             self.draw_model(what, transform, clip_polygon, shaders, uniforms, properties)
 *             return
 */
  __pyx_t_3 = __Pyx_TypeCheck(__pyx_v_what, __pyx_ptype_5renpy_3gl2_8gl2model_Model); 
  __pyx_t_2 = (__pyx_t_3 != 0);
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":1229
 * 
 *         if isinstance(what, Model):
 *             self.draw_model(what, transform, clip_polygon, shaders, uniforms, properties)             # <<<<<<<<<<<<<<
 *             return
 * 
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_draw_model); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1229, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[7] = {__pyx_t_5, __pyx_v_what, ((PyObject *)__pyx_v_transform), ((PyObject *)__pyx_v_clip_polygon), __pyx_v_shaders, __pyx_v_uniforms, __pyx_v_properties};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 6+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[7] = {__pyx_t_5, __pyx_v_what, ((PyObject *)__pyx_v_transform), ((PyObject *)__pyx_v_clip_polygon), __pyx_v_shaders, __pyx_v_uniforms, __pyx_v_properties};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 6+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(6+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1229, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_v_what);
      __Pyx_GIVEREF(__pyx_v_what);
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_what);
      __Pyx_INCREF(((PyObject *)__pyx_v_transform));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_transform));
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, ((PyObject *)__pyx_v_transform));
      __Pyx_INCREF(((PyObject *)__pyx_v_clip_polygon));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_clip_polygon));
      PyTuple_SET_ITEM(__pyx_t_7, 2+__pyx_t_6, ((PyObject *)__pyx_v_clip_polygon));
      __Pyx_INCREF(__pyx_v_shaders);
      __Pyx_GIVEREF(__pyx_v_shaders);
      PyTuple_SET_ITEM(__pyx_t_7, 3+__pyx_t_6, __pyx_v_shaders);
      __Pyx_INCREF(__pyx_v_uniforms);
      __Pyx_GIVEREF(__pyx_v_uniforms);
      PyTuple_SET_ITEM(__pyx_t_7, 4+__pyx_t_6, __pyx_v_uniforms);
      __Pyx_INCREF(__pyx_v_properties);
      __Pyx_GIVEREF(__pyx_v_properties);
      PyTuple_SET_ITEM(__pyx_t_7, 5+__pyx_t_6, __pyx_v_properties);
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_7, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1229, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":1230
 *         if isinstance(what, Model):
 *             self.draw_model(what, transform, clip_polygon, shaders, uniforms, properties)
 *             return             # <<<<<<<<<<<<<<
 * 
 *         cdef Render r
 */
    __Pyx_XDECREF(__pyx_r);
    __pyx_r = Py_None; __Pyx_INCREF(Py_None);
    goto __pyx_L0;

    /* "renpy/gl2/gl2draw.pyx":1228
 *             what = self.gl2draw.load_texture(what)
 * 
 *         if isinstance(what, Model):             # <<<<<<<<<<<<<<
 *             self.draw_model(what, transform, clip_polygon, shaders, uniforms, properties)
 *             return
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1233
 * 
 *         cdef Render r
 *         r = what             # <<<<<<<<<<<<<<
 * 
 *         if r.text_input:
 */
  if (!(likely(((__pyx_v_what) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_what, __pyx_ptype_5renpy_7display_6render_Render))))) __PYX_ERR(0, 1233, __pyx_L1_error)
  __pyx_t_1 = __pyx_v_what;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_r = ((struct __pyx_obj_5renpy_7display_6render_Render *)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1235
 *         r = what
 * 
 *         if r.text_input:             # <<<<<<<<<<<<<<
 *             renpy.display.interface.text_rect = r.screen_rect(0, 0, transform)
 * 
 */
  __pyx_t_2 = (__pyx_v_r->text_input != 0);
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":1236
 * 
 *         if r.text_input:
 *             renpy.display.interface.text_rect = r.screen_rect(0, 0, transform)             # <<<<<<<<<<<<<<
 * 
 *         # Handle clipping.
 */
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_r), __pyx_n_s_screen_rect); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1236, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_7 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
      __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
      if (likely(__pyx_t_7)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_4, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_int_0, __pyx_int_0, ((PyObject *)__pyx_v_transform)};
      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1236, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
      PyObject *__pyx_temp[4] = {__pyx_t_7, __pyx_int_0, __pyx_int_0, ((PyObject *)__pyx_v_transform)};
      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 3+__pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1236, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
      __Pyx_GOTREF(__pyx_t_1);
    } else
    #endif
    {
      __pyx_t_5 = PyTuple_New(3+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1236, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_5);
      if (__pyx_t_7) {
        __Pyx_GIVEREF(__pyx_t_7); PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_7); __pyx_t_7 = NULL;
      }
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_int_0);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_6, __pyx_int_0);
      __Pyx_INCREF(((PyObject *)__pyx_v_transform));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_transform));
      PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_6, ((PyObject *)__pyx_v_transform));
      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_t_5, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1236, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_renpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1236, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_display); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1236, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_interface); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1236, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
    if (__Pyx_PyObject_SetAttrStr(__pyx_t_4, __pyx_n_s_text_rect, __pyx_t_1) < 0) __PYX_ERR(0, 1236, __pyx_L1_error)
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

    /* "renpy/gl2/gl2draw.pyx":1235
 *         r = what
 * 
 *         if r.text_input:             # <<<<<<<<<<<<<<
 *             renpy.display.interface.text_rect = r.screen_rect(0, 0, transform)
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1239
 * 
 *         # Handle clipping.
 *         if (r.xclipping or r.yclipping):             # <<<<<<<<<<<<<<
 *             new_clip_polygon = Polygon.rectangle(0, 0, r.width, r.height)
 * 
 */
  __pyx_t_3 = (__pyx_v_r->xclipping != 0);
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L7_bool_binop_done;
  }
  __pyx_t_3 = (__pyx_v_r->yclipping != 0);
  __pyx_t_2 = __pyx_t_3;
  __pyx_L7_bool_binop_done:;
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":1240
 *         # Handle clipping.
 *         if (r.xclipping or r.yclipping):
 *             new_clip_polygon = Polygon.rectangle(0, 0, r.width, r.height)             # <<<<<<<<<<<<<<
 * 
 *             if clip_polygon is not None:
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_5renpy_3gl2_10gl2polygon_Polygon), __pyx_n_s_rectangle); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = PyFloat_FromDouble(__pyx_v_r->width); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_5);
    __pyx_t_7 = PyFloat_FromDouble(__pyx_v_r->height); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1240, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_8)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_8);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_int_0, __pyx_int_0, __pyx_t_5, __pyx_t_7};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1240, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_int_0, __pyx_int_0, __pyx_t_5, __pyx_t_7};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 4+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1240, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    } else
    #endif
    {
      __pyx_t_9 = PyTuple_New(4+__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1240, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__pyx_t_8) {
        __Pyx_GIVEREF(__pyx_t_8); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_8); __pyx_t_8 = NULL;
      }
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_6, __pyx_int_0);
      __Pyx_INCREF(__pyx_int_0);
      __Pyx_GIVEREF(__pyx_int_0);
      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_6, __pyx_int_0);
      __Pyx_GIVEREF(__pyx_t_5);
      PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_6, __pyx_t_5);
      __Pyx_GIVEREF(__pyx_t_7);
      PyTuple_SET_ITEM(__pyx_t_9, 3+__pyx_t_6, __pyx_t_7);
      __pyx_t_5 = 0;
      __pyx_t_7 = 0;
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1240, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_5renpy_3gl2_10gl2polygon_Polygon))))) __PYX_ERR(0, 1240, __pyx_L1_error)
    __pyx_v_new_clip_polygon = ((struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *)__pyx_t_4);
    __pyx_t_4 = 0;

    /* "renpy/gl2/gl2draw.pyx":1242
 *             new_clip_polygon = Polygon.rectangle(0, 0, r.width, r.height)
 * 
 *             if clip_polygon is not None:             # <<<<<<<<<<<<<<
 *                 clip_polygon = new_clip_polygon.intersect(clip_polygon)
 *                 if clip_polygon is None:
 */
    __pyx_t_2 = (((PyObject *)__pyx_v_clip_polygon) != Py_None);
    __pyx_t_3 = (__pyx_t_2 != 0);
    if (__pyx_t_3) {

      /* "renpy/gl2/gl2draw.pyx":1243
 * 
 *             if clip_polygon is not None:
 *                 clip_polygon = new_clip_polygon.intersect(clip_polygon)             # <<<<<<<<<<<<<<
 *                 if clip_polygon is None:
 *                     return
 */
      __pyx_t_4 = ((PyObject *)((struct __pyx_vtabstruct_5renpy_3gl2_10gl2polygon_Polygon *)__pyx_v_new_clip_polygon->__pyx_vtab)->intersect(__pyx_v_new_clip_polygon, __pyx_v_clip_polygon, 0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1243, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF_SET(__pyx_v_clip_polygon, ((struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *)__pyx_t_4));
      __pyx_t_4 = 0;

      /* "renpy/gl2/gl2draw.pyx":1244
 *             if clip_polygon is not None:
 *                 clip_polygon = new_clip_polygon.intersect(clip_polygon)
 *                 if clip_polygon is None:             # <<<<<<<<<<<<<<
 *                     return
 *             else:
 */
      __pyx_t_3 = (((PyObject *)__pyx_v_clip_polygon) == Py_None);
      __pyx_t_2 = (__pyx_t_3 != 0);
      if (__pyx_t_2) {

        /* "renpy/gl2/gl2draw.pyx":1245
 *                 clip_polygon = new_clip_polygon.intersect(clip_polygon)
 *                 if clip_polygon is None:
 *                     return             # <<<<<<<<<<<<<<
 *             else:
 *                 clip_polygon = new_clip_polygon
 */
        __Pyx_XDECREF(__pyx_r);
        __pyx_r = Py_None; __Pyx_INCREF(Py_None);
        goto __pyx_L0;

        /* "renpy/gl2/gl2draw.pyx":1244
 *             if clip_polygon is not None:
 *                 clip_polygon = new_clip_polygon.intersect(clip_polygon)
 *                 if clip_polygon is None:             # <<<<<<<<<<<<<<
 *                     return
 *             else:
 */
      }

      /* "renpy/gl2/gl2draw.pyx":1242
 *             new_clip_polygon = Polygon.rectangle(0, 0, r.width, r.height)
 * 
 *             if clip_polygon is not None:             # <<<<<<<<<<<<<<
 *                 clip_polygon = new_clip_polygon.intersect(clip_polygon)
 *                 if clip_polygon is None:
 */
      goto __pyx_L9;
    }

    /* "renpy/gl2/gl2draw.pyx":1247
 *                     return
 *             else:
 *                 clip_polygon = new_clip_polygon             # <<<<<<<<<<<<<<
 * 
 *         has_reverse = (r.reverse is not None) and (r.reverse is not IDENTITY)
 */
    /*else*/ {
      __Pyx_INCREF(((PyObject *)__pyx_v_new_clip_polygon));
      __Pyx_DECREF_SET(__pyx_v_clip_polygon, __pyx_v_new_clip_polygon);
    }
    __pyx_L9:;

    /* "renpy/gl2/gl2draw.pyx":1239
 * 
 *         # Handle clipping.
 *         if (r.xclipping or r.yclipping):             # <<<<<<<<<<<<<<
 *             new_clip_polygon = Polygon.rectangle(0, 0, r.width, r.height)
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1249
 *                 clip_polygon = new_clip_polygon
 * 
 *         has_reverse = (r.reverse is not None) and (r.reverse is not IDENTITY)             # <<<<<<<<<<<<<<
 * 
 *         if has_reverse or r.properties:
 */
  __pyx_t_2 = (((PyObject *)__pyx_v_r->reverse) != Py_None);
  if (__pyx_t_2) {
  } else {
    __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1249, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_4 = __pyx_t_1;
    __pyx_t_1 = 0;
    goto __pyx_L11_bool_binop_done;
  }
  __pyx_t_2 = (((PyObject *)__pyx_v_r->reverse) != __pyx_v_5renpy_3gl2_7gl2draw_IDENTITY);
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1249, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __pyx_t_1;
  __pyx_t_1 = 0;
  __pyx_L11_bool_binop_done:;
  __pyx_v_has_reverse = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":1251
 *         has_reverse = (r.reverse is not None) and (r.reverse is not IDENTITY)
 * 
 *         if has_reverse or r.properties:             # <<<<<<<<<<<<<<
 *             properties = self.merge_properties(properties, r.properties)
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_has_reverse); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1251, __pyx_L1_error)
  if (!__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L14_bool_binop_done;
  }
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_r->properties); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1251, __pyx_L1_error)
  __pyx_t_2 = __pyx_t_3;
  __pyx_L14_bool_binop_done:;
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":1252
 * 
 *         if has_reverse or r.properties:
 *             properties = self.merge_properties(properties, r.properties)             # <<<<<<<<<<<<<<
 * 
 *         if has_reverse and (properties["pixel_perfect"] is None):
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_merge_properties); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1252, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_9 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_properties, __pyx_v_r->properties};
      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1252, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_4);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[3] = {__pyx_t_9, __pyx_v_properties, __pyx_v_r->properties};
      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1252, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
      __Pyx_GOTREF(__pyx_t_4);
    } else
    #endif
    {
      __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1252, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_7);
      if (__pyx_t_9) {
        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_9); __pyx_t_9 = NULL;
      }
      __Pyx_INCREF(__pyx_v_properties);
      __Pyx_GIVEREF(__pyx_v_properties);
      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_properties);
      __Pyx_INCREF(__pyx_v_r->properties);
      __Pyx_GIVEREF(__pyx_v_r->properties);
      PyTuple_SET_ITEM(__pyx_t_7, 1+__pyx_t_6, __pyx_v_r->properties);
      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_7, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1252, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    if (!(likely(PyDict_CheckExact(__pyx_t_4))||((__pyx_t_4) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_4)->tp_name), 0))) __PYX_ERR(0, 1252, __pyx_L1_error)
    __Pyx_DECREF_SET(__pyx_v_properties, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "renpy/gl2/gl2draw.pyx":1251
 *         has_reverse = (r.reverse is not None) and (r.reverse is not IDENTITY)
 * 
 *         if has_reverse or r.properties:             # <<<<<<<<<<<<<<
 *             properties = self.merge_properties(properties, r.properties)
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1254
 *             properties = self.merge_properties(properties, r.properties)
 * 
 *         if has_reverse and (properties["pixel_perfect"] is None):             # <<<<<<<<<<<<<<
 *             properties["pixel_perfect"] = False
 * 
 */
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_has_reverse); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1254, __pyx_L1_error)
  if (__pyx_t_3) {
  } else {
    __pyx_t_2 = __pyx_t_3;
    goto __pyx_L17_bool_binop_done;
  }
  if (unlikely(__pyx_v_properties == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(0, 1254, __pyx_L1_error)
  }
  __pyx_t_4 = __Pyx_PyDict_GetItem(__pyx_v_properties, __pyx_n_s_pixel_perfect); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1254, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_t_3 = (__pyx_t_4 == Py_None);
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
  __pyx_t_10 = (__pyx_t_3 != 0);
  __pyx_t_2 = __pyx_t_10;
  __pyx_L17_bool_binop_done:;
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":1255
 * 
 *         if has_reverse and (properties["pixel_perfect"] is None):
 *             properties["pixel_perfect"] = False             # <<<<<<<<<<<<<<
 * 
 *         if r.shaders is not None:
 */
    if (unlikely(__pyx_v_properties == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(0, 1255, __pyx_L1_error)
    }
    if (unlikely(PyDict_SetItem(__pyx_v_properties, __pyx_n_s_pixel_perfect, Py_False) < 0)) __PYX_ERR(0, 1255, __pyx_L1_error)

    /* "renpy/gl2/gl2draw.pyx":1254
 *             properties = self.merge_properties(properties, r.properties)
 * 
 *         if has_reverse and (properties["pixel_perfect"] is None):             # <<<<<<<<<<<<<<
 *             properties["pixel_perfect"] = False
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1257
 *             properties["pixel_perfect"] = False
 * 
 *         if r.shaders is not None:             # <<<<<<<<<<<<<<
 *             shaders = shaders + r.shaders
 * 
 */
  __pyx_t_2 = (__pyx_v_r->shaders != ((PyObject*)Py_None));
  __pyx_t_10 = (__pyx_t_2 != 0);
  if (__pyx_t_10) {

    /* "renpy/gl2/gl2draw.pyx":1258
 * 
 *         if r.shaders is not None:
 *             shaders = shaders + r.shaders             # <<<<<<<<<<<<<<
 * 
 *         if r.uniforms is not None:
 */
    __pyx_t_4 = PyNumber_Add(__pyx_v_shaders, __pyx_v_r->shaders); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1258, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF_SET(__pyx_v_shaders, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "renpy/gl2/gl2draw.pyx":1257
 *             properties["pixel_perfect"] = False
 * 
 *         if r.shaders is not None:             # <<<<<<<<<<<<<<
 *             shaders = shaders + r.shaders
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1260
 *             shaders = shaders + r.shaders
 * 
 *         if r.uniforms is not None:             # <<<<<<<<<<<<<<
 *             uniforms = dict(uniforms)
 * 
 */
  __pyx_t_10 = (__pyx_v_r->uniforms != ((PyObject*)Py_None));
  __pyx_t_2 = (__pyx_t_10 != 0);
  if (__pyx_t_2) {

    /* "renpy/gl2/gl2draw.pyx":1261
 * 
 *         if r.uniforms is not None:
 *             uniforms = dict(uniforms)             # <<<<<<<<<<<<<<
 * 
 *             for k, v in r.uniforms.items():
 */
    if (unlikely(__pyx_v_uniforms == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
      __PYX_ERR(0, 1261, __pyx_L1_error)
    }
    __pyx_t_4 = PyDict_Copy(__pyx_v_uniforms); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1261, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF_SET(__pyx_v_uniforms, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "renpy/gl2/gl2draw.pyx":1263
 *             uniforms = dict(uniforms)
 * 
 *             for k, v in r.uniforms.items():             # <<<<<<<<<<<<<<
 *                 if (k in uniforms) and (k in renpy.config.merge_uniforms):
 *                     uniforms[k] = renpy.config.merge_uniforms[k](uniforms[k], v)
 */
    if (unlikely(__pyx_v_r->uniforms == Py_None)) {
      PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "items");
      __PYX_ERR(0, 1263, __pyx_L1_error)
    }
    __pyx_t_4 = __Pyx_PyDict_Items(__pyx_v_r->uniforms); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1263, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    if (likely(PyList_CheckExact(__pyx_t_4)) || PyTuple_CheckExact(__pyx_t_4)) {
      __pyx_t_1 = __pyx_t_4; __Pyx_INCREF(__pyx_t_1); __pyx_t_11 = 0;
      __pyx_t_12 = NULL;
    } else {
      __pyx_t_11 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1263, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_12 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1263, __pyx_L1_error)
    }
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    for (;;) {
      if (likely(!__pyx_t_12)) {
        if (likely(PyList_CheckExact(__pyx_t_1))) {
          if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyList_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_4); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1263, __pyx_L1_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1263, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        } else {
          if (__pyx_t_11 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
          __pyx_t_4 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_11); __Pyx_INCREF(__pyx_t_4); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1263, __pyx_L1_error)
          #else
          __pyx_t_4 = PySequence_ITEM(__pyx_t_1, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1263, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          #endif
        }
      } else {
        __pyx_t_4 = __pyx_t_12(__pyx_t_1);
        if (unlikely(!__pyx_t_4)) {
          PyObject* exc_type = PyErr_Occurred();
          if (exc_type) {
            if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
            else __PYX_ERR(0, 1263, __pyx_L1_error)
          }
          break;
        }
        __Pyx_GOTREF(__pyx_t_4);
      }
      if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
        PyObject* sequence = __pyx_t_4;
        Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
        if (unlikely(size != 2)) {
          if (size > 2) __Pyx_RaiseTooManyValuesError(2);
          else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
          __PYX_ERR(0, 1263, __pyx_L1_error)
        }
        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
        if (likely(PyTuple_CheckExact(sequence))) {
          __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
          __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
        } else {
          __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
          __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
        }
        __Pyx_INCREF(__pyx_t_7);
        __Pyx_INCREF(__pyx_t_9);
        #else
        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1263, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1263, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        #endif
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      } else {
        Py_ssize_t index = -1;
        __pyx_t_5 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1263, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_5);
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
        __pyx_t_13 = Py_TYPE(__pyx_t_5)->tp_iternext;
        index = 0; __pyx_t_7 = __pyx_t_13(__pyx_t_5); if (unlikely(!__pyx_t_7)) goto __pyx_L23_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_7);
        index = 1; __pyx_t_9 = __pyx_t_13(__pyx_t_5); if (unlikely(!__pyx_t_9)) goto __pyx_L23_unpacking_failed;
        __Pyx_GOTREF(__pyx_t_9);
        if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_5), 2) < 0) __PYX_ERR(0, 1263, __pyx_L1_error)
        __pyx_t_13 = NULL;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        goto __pyx_L24_unpacking_done;
        __pyx_L23_unpacking_failed:;
        __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
        __pyx_t_13 = NULL;
        if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
        __PYX_ERR(0, 1263, __pyx_L1_error)
        __pyx_L24_unpacking_done:;
      }
      __Pyx_XDECREF_SET(__pyx_v_k, __pyx_t_7);
      __pyx_t_7 = 0;
      __Pyx_XDECREF_SET(__pyx_v_v, __pyx_t_9);
      __pyx_t_9 = 0;

      /* "renpy/gl2/gl2draw.pyx":1264
 * 
 *             for k, v in r.uniforms.items():
 *                 if (k in uniforms) and (k in renpy.config.merge_uniforms):             # <<<<<<<<<<<<<<
 *                     uniforms[k] = renpy.config.merge_uniforms[k](uniforms[k], v)
 *                 else:
 */
      __pyx_t_10 = (__Pyx_PyDict_ContainsTF(__pyx_v_k, __pyx_v_uniforms, Py_EQ)); if (unlikely(__pyx_t_10 < 0)) __PYX_ERR(0, 1264, __pyx_L1_error)
      __pyx_t_3 = (__pyx_t_10 != 0);
      if (__pyx_t_3) {
      } else {
        __pyx_t_2 = __pyx_t_3;
        goto __pyx_L26_bool_binop_done;
      }
      __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_renpy); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1264, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_config); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1264, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_merge_uniforms); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1264, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_4);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
      __pyx_t_3 = (__Pyx_PySequence_ContainsTF(__pyx_v_k, __pyx_t_4, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1264, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
      __pyx_t_10 = (__pyx_t_3 != 0);
      __pyx_t_2 = __pyx_t_10;
      __pyx_L26_bool_binop_done:;
      if (__pyx_t_2) {

        /* "renpy/gl2/gl2draw.pyx":1265
 *             for k, v in r.uniforms.items():
 *                 if (k in uniforms) and (k in renpy.config.merge_uniforms):
 *                     uniforms[k] = renpy.config.merge_uniforms[k](uniforms[k], v)             # <<<<<<<<<<<<<<
 *                 else:
 *                     uniforms[k] = v
 */
        __Pyx_GetModuleGlobalName(__pyx_t_9, __pyx_n_s_renpy); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1265, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_config); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1265, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_merge_uniforms); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1265, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        __pyx_t_7 = __Pyx_PyObject_GetItem(__pyx_t_9, __pyx_v_k); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1265, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_7);
        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        __pyx_t_9 = __Pyx_PyDict_GetItem(__pyx_v_uniforms, __pyx_v_k); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1265, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_9);
        __pyx_t_5 = NULL;
        __pyx_t_6 = 0;
        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_7))) {
          __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_7);
          if (likely(__pyx_t_5)) {
            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
            __Pyx_INCREF(__pyx_t_5);
            __Pyx_INCREF(function);
            __Pyx_DECREF_SET(__pyx_t_7, function);
            __pyx_t_6 = 1;
          }
        }
        #if CYTHON_FAST_PYCALL
        if (PyFunction_Check(__pyx_t_7)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_9, __pyx_v_v};
          __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1265, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        } else
        #endif
        #if CYTHON_FAST_PYCCALL
        if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
          PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_9, __pyx_v_v};
          __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1265, __pyx_L1_error)
          __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
        } else
        #endif
        {
          __pyx_t_8 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1265, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_8);
          if (__pyx_t_5) {
            __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_5); __pyx_t_5 = NULL;
          }
          __Pyx_GIVEREF(__pyx_t_9);
          PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_6, __pyx_t_9);
          __Pyx_INCREF(__pyx_v_v);
          __Pyx_GIVEREF(__pyx_v_v);
          PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_6, __pyx_v_v);
          __pyx_t_9 = 0;
          __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_8, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1265, __pyx_L1_error)
          __Pyx_GOTREF(__pyx_t_4);
          __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
        }
        __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
        if (unlikely(PyDict_SetItem(__pyx_v_uniforms, __pyx_v_k, __pyx_t_4) < 0)) __PYX_ERR(0, 1265, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

        /* "renpy/gl2/gl2draw.pyx":1264
 * 
 *             for k, v in r.uniforms.items():
 *                 if (k in uniforms) and (k in renpy.config.merge_uniforms):             # <<<<<<<<<<<<<<
 *                     uniforms[k] = renpy.config.merge_uniforms[k](uniforms[k], v)
 *                 else:
 */
        goto __pyx_L25;
      }

      /* "renpy/gl2/gl2draw.pyx":1267
 *                     uniforms[k] = renpy.config.merge_uniforms[k](uniforms[k], v)
 *                 else:
 *                     uniforms[k] = v             # <<<<<<<<<<<<<<
 * 
 *         children = r.visible_children
 */
      /*else*/ {
        if (unlikely(PyDict_SetItem(__pyx_v_uniforms, __pyx_v_k, __pyx_v_v) < 0)) __PYX_ERR(0, 1267, __pyx_L1_error)
      }
      __pyx_L25:;

      /* "renpy/gl2/gl2draw.pyx":1263
 *             uniforms = dict(uniforms)
 * 
 *             for k, v in r.uniforms.items():             # <<<<<<<<<<<<<<
 *                 if (k in uniforms) and (k in renpy.config.merge_uniforms):
 *                     uniforms[k] = renpy.config.merge_uniforms[k](uniforms[k], v)
 */
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "renpy/gl2/gl2draw.pyx":1260
 *             shaders = shaders + r.shaders
 * 
 *         if r.uniforms is not None:             # <<<<<<<<<<<<<<
 *             uniforms = dict(uniforms)
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1269
 *                     uniforms[k] = v
 * 
 *         children = r.visible_children             # <<<<<<<<<<<<<<
 * 
 *         if r.cached_model is not None:
 */
  __pyx_t_1 = __pyx_v_r->visible_children;
  __Pyx_INCREF(__pyx_t_1);
  __pyx_v_children = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1271
 *         children = r.visible_children
 * 
 *         if r.cached_model is not None:             # <<<<<<<<<<<<<<
 *             children = [ (r.cached_model, 0, 0, False, False) ]
 * 
 */
  __pyx_t_2 = (__pyx_v_r->cached_model != Py_None);
  __pyx_t_10 = (__pyx_t_2 != 0);
  if (__pyx_t_10) {

    /* "renpy/gl2/gl2draw.pyx":1272
 * 
 *         if r.cached_model is not None:
 *             children = [ (r.cached_model, 0, 0, False, False) ]             # <<<<<<<<<<<<<<
 * 
 *         for child, cx, cy, focus, main in children:
 */
    __pyx_t_1 = PyTuple_New(5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_INCREF(__pyx_v_r->cached_model);
    __Pyx_GIVEREF(__pyx_v_r->cached_model);
    PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_r->cached_model);
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_GIVEREF(__pyx_int_0);
    PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_0);
    __Pyx_INCREF(__pyx_int_0);
    __Pyx_GIVEREF(__pyx_int_0);
    PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_int_0);
    __Pyx_INCREF(Py_False);
    __Pyx_GIVEREF(Py_False);
    PyTuple_SET_ITEM(__pyx_t_1, 3, Py_False);
    __Pyx_INCREF(Py_False);
    __Pyx_GIVEREF(Py_False);
    PyTuple_SET_ITEM(__pyx_t_1, 4, Py_False);
    __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1272, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_GIVEREF(__pyx_t_1);
    PyList_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
    __pyx_t_1 = 0;
    __Pyx_DECREF_SET(__pyx_v_children, ((PyObject*)__pyx_t_4));
    __pyx_t_4 = 0;

    /* "renpy/gl2/gl2draw.pyx":1271
 *         children = r.visible_children
 * 
 *         if r.cached_model is not None:             # <<<<<<<<<<<<<<
 *             children = [ (r.cached_model, 0, 0, False, False) ]
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1274
 *             children = [ (r.cached_model, 0, 0, False, False) ]
 * 
 *         for child, cx, cy, focus, main in children:             # <<<<<<<<<<<<<<
 * 
 *             child_transform = transform
 */
  if (unlikely(__pyx_v_children == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
    __PYX_ERR(0, 1274, __pyx_L1_error)
  }
  __pyx_t_4 = __pyx_v_children; __Pyx_INCREF(__pyx_t_4); __pyx_t_11 = 0;
  for (;;) {
    if (__pyx_t_11 >= PyList_GET_SIZE(__pyx_t_4)) break;
    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    __pyx_t_1 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_11); __Pyx_INCREF(__pyx_t_1); __pyx_t_11++; if (unlikely(0 < 0)) __PYX_ERR(0, 1274, __pyx_L1_error)
    #else
    __pyx_t_1 = PySequence_ITEM(__pyx_t_4, __pyx_t_11); __pyx_t_11++; if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1274, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    #endif
    if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
      PyObject* sequence = __pyx_t_1;
      Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
      if (unlikely(size != 5)) {
        if (size > 5) __Pyx_RaiseTooManyValuesError(5);
        else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
        __PYX_ERR(0, 1274, __pyx_L1_error)
      }
      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
      if (likely(PyTuple_CheckExact(sequence))) {
        __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
        __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
        __pyx_t_9 = PyTuple_GET_ITEM(sequence, 2); 
        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 3); 
        __pyx_t_14 = PyTuple_GET_ITEM(sequence, 4); 
      } else {
        __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
        __pyx_t_8 = PyList_GET_ITEM(sequence, 1); 
        __pyx_t_9 = PyList_GET_ITEM(sequence, 2); 
        __pyx_t_5 = PyList_GET_ITEM(sequence, 3); 
        __pyx_t_14 = PyList_GET_ITEM(sequence, 4); 
      }
      __Pyx_INCREF(__pyx_t_7);
      __Pyx_INCREF(__pyx_t_8);
      __Pyx_INCREF(__pyx_t_9);
      __Pyx_INCREF(__pyx_t_5);
      __Pyx_INCREF(__pyx_t_14);
      #else
      {
        Py_ssize_t i;
        PyObject** temps[5] = {&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_5,&__pyx_t_14};
        for (i=0; i < 5; i++) {
          PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(0, 1274, __pyx_L1_error)
          __Pyx_GOTREF(item);
          *(temps[i]) = item;
        }
      }
      #endif
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    } else {
      Py_ssize_t index = -1;
      PyObject** temps[5] = {&__pyx_t_7,&__pyx_t_8,&__pyx_t_9,&__pyx_t_5,&__pyx_t_14};
      __pyx_t_15 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_15)) __PYX_ERR(0, 1274, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_15);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_13 = Py_TYPE(__pyx_t_15)->tp_iternext;
      for (index=0; index < 5; index++) {
        PyObject* item = __pyx_t_13(__pyx_t_15); if (unlikely(!item)) goto __pyx_L31_unpacking_failed;
        __Pyx_GOTREF(item);
        *(temps[index]) = item;
      }
      if (__Pyx_IternextUnpackEndCheck(__pyx_t_13(__pyx_t_15), 5) < 0) __PYX_ERR(0, 1274, __pyx_L1_error)
      __pyx_t_13 = NULL;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      goto __pyx_L32_unpacking_done;
      __pyx_L31_unpacking_failed:;
      __Pyx_DECREF(__pyx_t_15); __pyx_t_15 = 0;
      __pyx_t_13 = NULL;
      if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
      __PYX_ERR(0, 1274, __pyx_L1_error)
      __pyx_L32_unpacking_done:;
    }
    __Pyx_XDECREF_SET(__pyx_v_child, __pyx_t_7);
    __pyx_t_7 = 0;
    __Pyx_XDECREF_SET(__pyx_v_cx, __pyx_t_8);
    __pyx_t_8 = 0;
    __Pyx_XDECREF_SET(__pyx_v_cy, __pyx_t_9);
    __pyx_t_9 = 0;
    __Pyx_XDECREF_SET(__pyx_v_focus, __pyx_t_5);
    __pyx_t_5 = 0;
    __Pyx_XDECREF_SET(__pyx_v_main, __pyx_t_14);
    __pyx_t_14 = 0;

    /* "renpy/gl2/gl2draw.pyx":1276
 *         for child, cx, cy, focus, main in children:
 * 
 *             child_transform = transform             # <<<<<<<<<<<<<<
 *             child_clip_polygon = clip_polygon
 *             child_properties = properties
 */
    __Pyx_INCREF(((PyObject *)__pyx_v_transform));
    __Pyx_XDECREF_SET(__pyx_v_child_transform, __pyx_v_transform);

    /* "renpy/gl2/gl2draw.pyx":1277
 * 
 *             child_transform = transform
 *             child_clip_polygon = clip_polygon             # <<<<<<<<<<<<<<
 *             child_properties = properties
 * 
 */
    __Pyx_INCREF(((PyObject *)__pyx_v_clip_polygon));
    __Pyx_XDECREF_SET(__pyx_v_child_clip_polygon, __pyx_v_clip_polygon);

    /* "renpy/gl2/gl2draw.pyx":1278
 *             child_transform = transform
 *             child_clip_polygon = clip_polygon
 *             child_properties = properties             # <<<<<<<<<<<<<<
 * 
 *             if (cx or cy):
 */
    __Pyx_INCREF(__pyx_v_properties);
    __Pyx_XDECREF_SET(__pyx_v_child_properties, __pyx_v_properties);

    /* "renpy/gl2/gl2draw.pyx":1280
 *             child_properties = properties
 * 
 *             if (cx or cy):             # <<<<<<<<<<<<<<
 *                 if isinstance(cx, float) and not properties["pixel_perfect"]:
 *                     child_properties = dict(properties)
 */
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_cx); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1280, __pyx_L1_error)
    if (!__pyx_t_2) {
    } else {
      __pyx_t_10 = __pyx_t_2;
      goto __pyx_L34_bool_binop_done;
    }
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_cy); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1280, __pyx_L1_error)
    __pyx_t_10 = __pyx_t_2;
    __pyx_L34_bool_binop_done:;
    if (__pyx_t_10) {

      /* "renpy/gl2/gl2draw.pyx":1281
 * 
 *             if (cx or cy):
 *                 if isinstance(cx, float) and not properties["pixel_perfect"]:             # <<<<<<<<<<<<<<
 *                     child_properties = dict(properties)
 *                     child_properties["pixel_perfect"] = False
 */
      __pyx_t_2 = PyFloat_Check(__pyx_v_cx); 
      __pyx_t_3 = (__pyx_t_2 != 0);
      if (__pyx_t_3) {
      } else {
        __pyx_t_10 = __pyx_t_3;
        goto __pyx_L37_bool_binop_done;
      }
      if (unlikely(__pyx_v_properties == Py_None)) {
        PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
        __PYX_ERR(0, 1281, __pyx_L1_error)
      }
      __pyx_t_1 = __Pyx_PyDict_GetItem(__pyx_v_properties, __pyx_n_s_pixel_perfect); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1281, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1281, __pyx_L1_error)
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      __pyx_t_2 = ((!__pyx_t_3) != 0);
      __pyx_t_10 = __pyx_t_2;
      __pyx_L37_bool_binop_done:;
      if (__pyx_t_10) {

        /* "renpy/gl2/gl2draw.pyx":1282
 *             if (cx or cy):
 *                 if isinstance(cx, float) and not properties["pixel_perfect"]:
 *                     child_properties = dict(properties)             # <<<<<<<<<<<<<<
 *                     child_properties["pixel_perfect"] = False
 * 
 */
        if (unlikely(__pyx_v_properties == Py_None)) {
          PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
          __PYX_ERR(0, 1282, __pyx_L1_error)
        }
        __pyx_t_1 = PyDict_Copy(__pyx_v_properties); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1282, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF_SET(__pyx_v_child_properties, ((PyObject*)__pyx_t_1));
        __pyx_t_1 = 0;

        /* "renpy/gl2/gl2draw.pyx":1283
 *                 if isinstance(cx, float) and not properties["pixel_perfect"]:
 *                     child_properties = dict(properties)
 *                     child_properties["pixel_perfect"] = False             # <<<<<<<<<<<<<<
 * 
 *                 child_transform = child_transform * Matrix.coffset(cx, cy, 0)
 */
        if (unlikely(PyDict_SetItem(__pyx_v_child_properties, __pyx_n_s_pixel_perfect, Py_False) < 0)) __PYX_ERR(0, 1283, __pyx_L1_error)

        /* "renpy/gl2/gl2draw.pyx":1281
 * 
 *             if (cx or cy):
 *                 if isinstance(cx, float) and not properties["pixel_perfect"]:             # <<<<<<<<<<<<<<
 *                     child_properties = dict(properties)
 *                     child_properties["pixel_perfect"] = False
 */
      }

      /* "renpy/gl2/gl2draw.pyx":1285
 *                     child_properties["pixel_perfect"] = False
 * 
 *                 child_transform = child_transform * Matrix.coffset(cx, cy, 0)             # <<<<<<<<<<<<<<
 * 
 *                 if child_clip_polygon is not None:
 */
      __pyx_t_16 = __pyx_PyFloat_AsFloat(__pyx_v_cx); if (unlikely((__pyx_t_16 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1285, __pyx_L1_error)
      __pyx_t_17 = __pyx_PyFloat_AsFloat(__pyx_v_cy); if (unlikely((__pyx_t_17 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1285, __pyx_L1_error)
      __pyx_t_1 = ((PyObject *)__pyx_vtabptr_5renpy_7display_6matrix_Matrix->coffset(__pyx_t_16, __pyx_t_17, 0.0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1285, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      __pyx_t_14 = PyNumber_Multiply(((PyObject *)__pyx_v_child_transform), __pyx_t_1); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1285, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
      if (!(likely(((__pyx_t_14) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_14, __pyx_ptype_5renpy_7display_6matrix_Matrix))))) __PYX_ERR(0, 1285, __pyx_L1_error)
      __Pyx_DECREF_SET(__pyx_v_child_transform, ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_14));
      __pyx_t_14 = 0;

      /* "renpy/gl2/gl2draw.pyx":1287
 *                 child_transform = child_transform * Matrix.coffset(cx, cy, 0)
 * 
 *                 if child_clip_polygon is not None:             # <<<<<<<<<<<<<<
 *                     child_clip_polygon = child_clip_polygon.multiply_matrix(Matrix.coffset(-cx, -cy, 0))
 * 
 */
      __pyx_t_10 = (((PyObject *)__pyx_v_child_clip_polygon) != Py_None);
      __pyx_t_2 = (__pyx_t_10 != 0);
      if (__pyx_t_2) {

        /* "renpy/gl2/gl2draw.pyx":1288
 * 
 *                 if child_clip_polygon is not None:
 *                     child_clip_polygon = child_clip_polygon.multiply_matrix(Matrix.coffset(-cx, -cy, 0))             # <<<<<<<<<<<<<<
 * 
 *             if has_reverse:
 */
        __pyx_t_14 = PyNumber_Negative(__pyx_v_cx); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1288, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_17 = __pyx_PyFloat_AsFloat(__pyx_t_14); if (unlikely((__pyx_t_17 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1288, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = PyNumber_Negative(__pyx_v_cy); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1288, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_16 = __pyx_PyFloat_AsFloat(__pyx_t_14); if (unlikely((__pyx_t_16 == (float)-1) && PyErr_Occurred())) __PYX_ERR(0, 1288, __pyx_L1_error)
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __pyx_t_14 = ((PyObject *)__pyx_vtabptr_5renpy_7display_6matrix_Matrix->coffset(__pyx_t_17, __pyx_t_16, 0.0)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1288, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __pyx_t_1 = ((PyObject *)((struct __pyx_vtabstruct_5renpy_3gl2_10gl2polygon_Polygon *)__pyx_v_child_clip_polygon->__pyx_vtab)->multiply_matrix(__pyx_v_child_clip_polygon, ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_14), 0)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1288, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_1);
        __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
        __Pyx_DECREF_SET(__pyx_v_child_clip_polygon, ((struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *)__pyx_t_1));
        __pyx_t_1 = 0;

        /* "renpy/gl2/gl2draw.pyx":1287
 *                 child_transform = child_transform * Matrix.coffset(cx, cy, 0)
 * 
 *                 if child_clip_polygon is not None:             # <<<<<<<<<<<<<<
 *                     child_clip_polygon = child_clip_polygon.multiply_matrix(Matrix.coffset(-cx, -cy, 0))
 * 
 */
      }

      /* "renpy/gl2/gl2draw.pyx":1280
 *             child_properties = properties
 * 
 *             if (cx or cy):             # <<<<<<<<<<<<<<
 *                 if isinstance(cx, float) and not properties["pixel_perfect"]:
 *                     child_properties = dict(properties)
 */
    }

    /* "renpy/gl2/gl2draw.pyx":1290
 *                     child_clip_polygon = child_clip_polygon.multiply_matrix(Matrix.coffset(-cx, -cy, 0))
 * 
 *             if has_reverse:             # <<<<<<<<<<<<<<
 *                 child_transform = child_transform * r.reverse
 * 
 */
    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_has_reverse); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 1290, __pyx_L1_error)
    if (__pyx_t_2) {

      /* "renpy/gl2/gl2draw.pyx":1291
 * 
 *             if has_reverse:
 *                 child_transform = child_transform * r.reverse             # <<<<<<<<<<<<<<
 * 
 *                 if child_clip_polygon is not None:
 */
      __pyx_t_1 = PyNumber_Multiply(((PyObject *)__pyx_v_child_transform), ((PyObject *)__pyx_v_r->reverse)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1291, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_1);
      if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5renpy_7display_6matrix_Matrix))))) __PYX_ERR(0, 1291, __pyx_L1_error)
      __Pyx_DECREF_SET(__pyx_v_child_transform, ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_1));
      __pyx_t_1 = 0;

      /* "renpy/gl2/gl2draw.pyx":1293
 *                 child_transform = child_transform * r.reverse
 * 
 *                 if child_clip_polygon is not None:             # <<<<<<<<<<<<<<
 *                     child_clip_polygon = child_clip_polygon.multiply_matrix(r.forward)
 * 
 */
      __pyx_t_2 = (((PyObject *)__pyx_v_child_clip_polygon) != Py_None);
      __pyx_t_10 = (__pyx_t_2 != 0);
      if (__pyx_t_10) {

        /* "renpy/gl2/gl2draw.pyx":1294
 * 
 *                 if child_clip_polygon is not None:
 *                     child_clip_polygon = child_clip_polygon.multiply_matrix(r.forward)             # <<<<<<<<<<<<<<
 * 
 *             self.draw_one(child, child_transform, child_clip_polygon, shaders, uniforms, child_properties)
 */
        __pyx_t_1 = ((PyObject *)__pyx_v_r->forward);
        __Pyx_INCREF(__pyx_t_1);
        __pyx_t_14 = ((PyObject *)((struct __pyx_vtabstruct_5renpy_3gl2_10gl2polygon_Polygon *)__pyx_v_child_clip_polygon->__pyx_vtab)->multiply_matrix(__pyx_v_child_clip_polygon, ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_1), 0)); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1294, __pyx_L1_error)
        __Pyx_GOTREF(__pyx_t_14);
        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
        __Pyx_DECREF_SET(__pyx_v_child_clip_polygon, ((struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon *)__pyx_t_14));
        __pyx_t_14 = 0;

        /* "renpy/gl2/gl2draw.pyx":1293
 *                 child_transform = child_transform * r.reverse
 * 
 *                 if child_clip_polygon is not None:             # <<<<<<<<<<<<<<
 *                     child_clip_polygon = child_clip_polygon.multiply_matrix(r.forward)
 * 
 */
      }

      /* "renpy/gl2/gl2draw.pyx":1290
 *                     child_clip_polygon = child_clip_polygon.multiply_matrix(Matrix.coffset(-cx, -cy, 0))
 * 
 *             if has_reverse:             # <<<<<<<<<<<<<<
 *                 child_transform = child_transform * r.reverse
 * 
 */
    }

    /* "renpy/gl2/gl2draw.pyx":1296
 *                     child_clip_polygon = child_clip_polygon.multiply_matrix(r.forward)
 * 
 *             self.draw_one(child, child_transform, child_clip_polygon, shaders, uniforms, child_properties)             # <<<<<<<<<<<<<<
 * 
 * 
 */
    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_draw_one); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1296, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __pyx_t_5 = NULL;
    __pyx_t_6 = 0;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_1);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_1, function);
        __pyx_t_6 = 1;
      }
    }
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[7] = {__pyx_t_5, __pyx_v_child, ((PyObject *)__pyx_v_child_transform), ((PyObject *)__pyx_v_child_clip_polygon), __pyx_v_shaders, __pyx_v_uniforms, __pyx_v_child_properties};
      __pyx_t_14 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 6+__pyx_t_6); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1296, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_14);
    } else
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
      PyObject *__pyx_temp[7] = {__pyx_t_5, __pyx_v_child, ((PyObject *)__pyx_v_child_transform), ((PyObject *)__pyx_v_child_clip_polygon), __pyx_v_shaders, __pyx_v_uniforms, __pyx_v_child_properties};
      __pyx_t_14 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_6, 6+__pyx_t_6); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1296, __pyx_L1_error)
      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
      __Pyx_GOTREF(__pyx_t_14);
    } else
    #endif
    {
      __pyx_t_9 = PyTuple_New(6+__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1296, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_9);
      if (__pyx_t_5) {
        __Pyx_GIVEREF(__pyx_t_5); PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_5); __pyx_t_5 = NULL;
      }
      __Pyx_INCREF(__pyx_v_child);
      __Pyx_GIVEREF(__pyx_v_child);
      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_6, __pyx_v_child);
      __Pyx_INCREF(((PyObject *)__pyx_v_child_transform));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_child_transform));
      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_6, ((PyObject *)__pyx_v_child_transform));
      __Pyx_INCREF(((PyObject *)__pyx_v_child_clip_polygon));
      __Pyx_GIVEREF(((PyObject *)__pyx_v_child_clip_polygon));
      PyTuple_SET_ITEM(__pyx_t_9, 2+__pyx_t_6, ((PyObject *)__pyx_v_child_clip_polygon));
      __Pyx_INCREF(__pyx_v_shaders);
      __Pyx_GIVEREF(__pyx_v_shaders);
      PyTuple_SET_ITEM(__pyx_t_9, 3+__pyx_t_6, __pyx_v_shaders);
      __Pyx_INCREF(__pyx_v_uniforms);
      __Pyx_GIVEREF(__pyx_v_uniforms);
      PyTuple_SET_ITEM(__pyx_t_9, 4+__pyx_t_6, __pyx_v_uniforms);
      __Pyx_INCREF(__pyx_v_child_properties);
      __Pyx_GIVEREF(__pyx_v_child_properties);
      PyTuple_SET_ITEM(__pyx_t_9, 5+__pyx_t_6, __pyx_v_child_properties);
      __pyx_t_14 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_9, NULL); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 1296, __pyx_L1_error)
      __Pyx_GOTREF(__pyx_t_14);
      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
    }
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
    __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;

    /* "renpy/gl2/gl2draw.pyx":1274
 *             children = [ (r.cached_model, 0, 0, False, False) ]
 * 
 *         for child, cx, cy, focus, main in children:             # <<<<<<<<<<<<<<
 * 
 *             child_transform = transform
 */
  }
  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;

  /* "renpy/gl2/gl2draw.pyx":1299
 * 
 * 
 *         return 0             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_int_0);
  __pyx_r = __pyx_int_0;
  goto __pyx_L0;

  /* "renpy/gl2/gl2draw.pyx":1199
 *         program.finish()
 * 
 *     def draw_one(self, what, Matrix transform, Polygon clip_polygon, tuple shaders, dict uniforms, dict properties):             # <<<<<<<<<<<<<<
 *         """
 *         This is responsible for walking the surface tree, and drawing any
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_XDECREF(__pyx_t_14);
  __Pyx_XDECREF(__pyx_t_15);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2DrawingContext.draw_one", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF((PyObject *)__pyx_v_child_transform);
  __Pyx_XDECREF((PyObject *)__pyx_v_child_clip_polygon);
  __Pyx_XDECREF((PyObject *)__pyx_v_new_clip_polygon);
  __Pyx_XDECREF((PyObject *)__pyx_v_r);
  __Pyx_XDECREF(__pyx_v_has_reverse);
  __Pyx_XDECREF(__pyx_v_k);
  __Pyx_XDECREF(__pyx_v_v);
  __Pyx_XDECREF(__pyx_v_children);
  __Pyx_XDECREF(__pyx_v_child);
  __Pyx_XDECREF(__pyx_v_cx);
  __Pyx_XDECREF(__pyx_v_cy);
  __Pyx_XDECREF(__pyx_v_focus);
  __Pyx_XDECREF(__pyx_v_main);
  __Pyx_XDECREF(__pyx_v_child_properties);
  __Pyx_XDECREF(__pyx_v_what);
  __Pyx_XDECREF((PyObject *)__pyx_v_clip_polygon);
  __Pyx_XDECREF(__pyx_v_shaders);
  __Pyx_XDECREF(__pyx_v_uniforms);
  __Pyx_XDECREF(__pyx_v_properties);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/gl2/gl2draw.pyx":1302
 * 
 * 
 *     def draw(self, what, Matrix transform):             # <<<<<<<<<<<<<<
 * 
 *         clip_polygon = None
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_9draw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_9draw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v_what = 0;
  struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_transform = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("draw (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_what,&__pyx_n_s_transform,0};
    PyObject* values[2] = {0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_what)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_transform)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("draw", 1, 2, 2, 1); __PYX_ERR(0, 1302, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "draw") < 0)) __PYX_ERR(0, 1302, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
    }
    __pyx_v_what = values[0];
    __pyx_v_transform = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)values[1]);
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("draw", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(0, 1302, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2DrawingContext.draw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_transform), __pyx_ptype_5renpy_7display_6matrix_Matrix, 1, "transform", 0))) __PYX_ERR(0, 1302, __pyx_L1_error)
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_8draw(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *)__pyx_v_self), __pyx_v_what, __pyx_v_transform);

  /* function exit code */
  goto __pyx_L0;
  __pyx_L1_error:;
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_8draw(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self, PyObject *__pyx_v_what, struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_transform) {
  PyObject *__pyx_v_clip_polygon = NULL;
  PyObject *__pyx_v_shaders = NULL;
  PyObject *__pyx_v_uniforms = NULL;
  PyObject *__pyx_v_properties = NULL;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  PyObject *__pyx_t_6 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("draw", 0);

  /* "renpy/gl2/gl2draw.pyx":1304
 *     def draw(self, what, Matrix transform):
 * 
 *         clip_polygon = None             # <<<<<<<<<<<<<<
 *         shaders = ()
 *         uniforms = {}
 */
  __Pyx_INCREF(Py_None);
  __pyx_v_clip_polygon = Py_None;

  /* "renpy/gl2/gl2draw.pyx":1305
 * 
 *         clip_polygon = None
 *         shaders = ()             # <<<<<<<<<<<<<<
 *         uniforms = {}
 *         properties = { "pixel_perfect" : None }
 */
  __Pyx_INCREF(__pyx_empty_tuple);
  __pyx_v_shaders = __pyx_empty_tuple;

  /* "renpy/gl2/gl2draw.pyx":1306
 *         clip_polygon = None
 *         shaders = ()
 *         uniforms = {}             # <<<<<<<<<<<<<<
 *         properties = { "pixel_perfect" : None }
 * 
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1306, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_v_uniforms = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1307
 *         shaders = ()
 *         uniforms = {}
 *         properties = { "pixel_perfect" : None }             # <<<<<<<<<<<<<<
 * 
 *         if renpy.config.nearest_neighbor:
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1307, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_t_1, __pyx_n_s_pixel_perfect, Py_None) < 0) __PYX_ERR(0, 1307, __pyx_L1_error)
  __pyx_v_properties = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1309
 *         properties = { "pixel_perfect" : None }
 * 
 *         if renpy.config.nearest_neighbor:             # <<<<<<<<<<<<<<
 *             properties["texture_scaling"] = "nearest"
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_config); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_nearest_neighbor); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1309, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 1309, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  if (__pyx_t_3) {

    /* "renpy/gl2/gl2draw.pyx":1310
 * 
 *         if renpy.config.nearest_neighbor:
 *             properties["texture_scaling"] = "nearest"             # <<<<<<<<<<<<<<
 * 
 *         self.draw_one(what, transform, clip_polygon, shaders, uniforms, properties)
 */
    if (unlikely(PyDict_SetItem(__pyx_v_properties, __pyx_n_s_texture_scaling, __pyx_n_s_nearest) < 0)) __PYX_ERR(0, 1310, __pyx_L1_error)

    /* "renpy/gl2/gl2draw.pyx":1309
 *         properties = { "pixel_perfect" : None }
 * 
 *         if renpy.config.nearest_neighbor:             # <<<<<<<<<<<<<<
 *             properties["texture_scaling"] = "nearest"
 * 
 */
  }

  /* "renpy/gl2/gl2draw.pyx":1312
 *             properties["texture_scaling"] = "nearest"
 * 
 *         self.draw_one(what, transform, clip_polygon, shaders, uniforms, properties)             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_draw_one); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1312, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  __pyx_t_5 = 0;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
      __pyx_t_5 = 1;
    }
  }
  #if CYTHON_FAST_PYCALL
  if (PyFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[7] = {__pyx_t_4, __pyx_v_what, ((PyObject *)__pyx_v_transform), __pyx_v_clip_polygon, __pyx_v_shaders, __pyx_v_uniforms, __pyx_v_properties};
    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 6+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1312, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  #if CYTHON_FAST_PYCCALL
  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
    PyObject *__pyx_temp[7] = {__pyx_t_4, __pyx_v_what, ((PyObject *)__pyx_v_transform), __pyx_v_clip_polygon, __pyx_v_shaders, __pyx_v_uniforms, __pyx_v_properties};
    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 6+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1312, __pyx_L1_error)
    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_GOTREF(__pyx_t_1);
  } else
  #endif
  {
    __pyx_t_6 = PyTuple_New(6+__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1312, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_6);
    if (__pyx_t_4) {
      __Pyx_GIVEREF(__pyx_t_4); PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4); __pyx_t_4 = NULL;
    }
    __Pyx_INCREF(__pyx_v_what);
    __Pyx_GIVEREF(__pyx_v_what);
    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_what);
    __Pyx_INCREF(((PyObject *)__pyx_v_transform));
    __Pyx_GIVEREF(((PyObject *)__pyx_v_transform));
    PyTuple_SET_ITEM(__pyx_t_6, 1+__pyx_t_5, ((PyObject *)__pyx_v_transform));
    __Pyx_INCREF(__pyx_v_clip_polygon);
    __Pyx_GIVEREF(__pyx_v_clip_polygon);
    PyTuple_SET_ITEM(__pyx_t_6, 2+__pyx_t_5, __pyx_v_clip_polygon);
    __Pyx_INCREF(__pyx_v_shaders);
    __Pyx_GIVEREF(__pyx_v_shaders);
    PyTuple_SET_ITEM(__pyx_t_6, 3+__pyx_t_5, __pyx_v_shaders);
    __Pyx_INCREF(__pyx_v_uniforms);
    __Pyx_GIVEREF(__pyx_v_uniforms);
    PyTuple_SET_ITEM(__pyx_t_6, 4+__pyx_t_5, __pyx_v_uniforms);
    __Pyx_INCREF(__pyx_v_properties);
    __Pyx_GIVEREF(__pyx_v_properties);
    PyTuple_SET_ITEM(__pyx_t_6, 5+__pyx_t_5, __pyx_v_properties);
    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1312, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
  }
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1302
 * 
 * 
 *     def draw(self, what, Matrix transform):             # <<<<<<<<<<<<<<
 * 
 *         clip_polygon = None
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_6);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2DrawingContext.draw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_clip_polygon);
  __Pyx_XDECREF(__pyx_v_shaders);
  __Pyx_XDECREF(__pyx_v_uniforms);
  __Pyx_XDECREF(__pyx_v_properties);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_11__reduce_cython__(PyObject *__pyx_v_self, CYTHON_UNUSED PyObject *unused) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_10__reduce_cython__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *)__pyx_v_self));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_10__reduce_cython__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self) {
  PyObject *__pyx_v_state = 0;
  PyObject *__pyx_v__dict = 0;
  int __pyx_v_use_setstate;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  int __pyx_t_5;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__reduce_cython__", 0);

  /* "(tree fragment)":5
 *     cdef object _dict
 *     cdef bint use_setstate
 *     state = (self.debug, self.gl2draw, self.height, self.width)             # <<<<<<<<<<<<<<
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 */
  __pyx_t_1 = __Pyx_PyBool_FromLong(__pyx_v_self->debug); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_self->height); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_self->width); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 5, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __Pyx_GIVEREF(__pyx_t_1);
  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
  __Pyx_INCREF(((PyObject *)__pyx_v_self->gl2draw));
  __Pyx_GIVEREF(((PyObject *)__pyx_v_self->gl2draw));
  PyTuple_SET_ITEM(__pyx_t_4, 1, ((PyObject *)__pyx_v_self->gl2draw));
  __Pyx_GIVEREF(__pyx_t_2);
  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
  __Pyx_GIVEREF(__pyx_t_3);
  PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_t_3);
  __pyx_t_1 = 0;
  __pyx_t_2 = 0;
  __pyx_t_3 = 0;
  __pyx_v_state = ((PyObject*)__pyx_t_4);
  __pyx_t_4 = 0;

  /* "(tree fragment)":6
 *     cdef bint use_setstate
 *     state = (self.debug, self.gl2draw, self.height, self.width)
 *     _dict = getattr(self, '__dict__', None)             # <<<<<<<<<<<<<<
 *     if _dict is not None:
 *         state += (_dict,)
 */
  __pyx_t_4 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_4);
  __pyx_v__dict = __pyx_t_4;
  __pyx_t_4 = 0;

  /* "(tree fragment)":7
 *     state = (self.debug, self.gl2draw, self.height, self.width)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
  __pyx_t_5 = (__pyx_v__dict != Py_None);
  __pyx_t_6 = (__pyx_t_5 != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":8
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:
 *         state += (_dict,)             # <<<<<<<<<<<<<<
 *         use_setstate = True
 *     else:
 */
    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(__pyx_v__dict);
    __Pyx_GIVEREF(__pyx_v__dict);
    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v__dict);
    __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 8, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_3));
    __pyx_t_3 = 0;

    /* "(tree fragment)":9
 *     if _dict is not None:
 *         state += (_dict,)
 *         use_setstate = True             # <<<<<<<<<<<<<<
 *     else:
 *         use_setstate = self.gl2draw is not None
 */
    __pyx_v_use_setstate = 1;

    /* "(tree fragment)":7
 *     state = (self.debug, self.gl2draw, self.height, self.width)
 *     _dict = getattr(self, '__dict__', None)
 *     if _dict is not None:             # <<<<<<<<<<<<<<
 *         state += (_dict,)
 *         use_setstate = True
 */
    goto __pyx_L3;
  }

  /* "(tree fragment)":11
 *         use_setstate = True
 *     else:
 *         use_setstate = self.gl2draw is not None             # <<<<<<<<<<<<<<
 *     if use_setstate:
 *         return __pyx_unpickle_GL2DrawingContext, (type(self), 0x11e38ca, None), state
 */
  /*else*/ {
    __pyx_t_6 = (((PyObject *)__pyx_v_self->gl2draw) != Py_None);
    __pyx_v_use_setstate = __pyx_t_6;
  }
  __pyx_L3:;

  /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.gl2draw is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_GL2DrawingContext, (type(self), 0x11e38ca, None), state
 *     else:
 */
  __pyx_t_6 = (__pyx_v_use_setstate != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":13
 *         use_setstate = self.gl2draw is not None
 *     if use_setstate:
 *         return __pyx_unpickle_GL2DrawingContext, (type(self), 0x11e38ca, None), state             # <<<<<<<<<<<<<<
 *     else:
 *         return __pyx_unpickle_GL2DrawingContext, (type(self), 0x11e38ca, state)
 */
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle_GL2DrawingContext); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_18757834);
    __Pyx_GIVEREF(__pyx_int_18757834);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_18757834);
    __Pyx_INCREF(Py_None);
    __Pyx_GIVEREF(Py_None);
    PyTuple_SET_ITEM(__pyx_t_4, 2, Py_None);
    __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 13, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_3);
    PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_2, 1, __pyx_t_4);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_2, 2, __pyx_v_state);
    __pyx_t_3 = 0;
    __pyx_t_4 = 0;
    __pyx_r = __pyx_t_2;
    __pyx_t_2 = 0;
    goto __pyx_L0;

    /* "(tree fragment)":12
 *     else:
 *         use_setstate = self.gl2draw is not None
 *     if use_setstate:             # <<<<<<<<<<<<<<
 *         return __pyx_unpickle_GL2DrawingContext, (type(self), 0x11e38ca, None), state
 *     else:
 */
  }

  /* "(tree fragment)":15
 *         return __pyx_unpickle_GL2DrawingContext, (type(self), 0x11e38ca, None), state
 *     else:
 *         return __pyx_unpickle_GL2DrawingContext, (type(self), 0x11e38ca, state)             # <<<<<<<<<<<<<<
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_GL2DrawingContext__set_state(self, __pyx_state)
 */
  /*else*/ {
    __Pyx_XDECREF(__pyx_r);
    __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_pyx_unpickle_GL2DrawingContext); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
    __Pyx_INCREF(__pyx_int_18757834);
    __Pyx_GIVEREF(__pyx_int_18757834);
    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_int_18757834);
    __Pyx_INCREF(__pyx_v_state);
    __Pyx_GIVEREF(__pyx_v_state);
    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state);
    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 15, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_GIVEREF(__pyx_t_2);
    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
    __Pyx_GIVEREF(__pyx_t_4);
    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_4);
    __pyx_t_2 = 0;
    __pyx_t_4 = 0;
    __pyx_r = __pyx_t_3;
    __pyx_t_3 = 0;
    goto __pyx_L0;
  }

  /* "(tree fragment)":1
 * def __reduce_cython__(self):             # <<<<<<<<<<<<<<
 *     cdef tuple state
 *     cdef object _dict
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2DrawingContext.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v_state);
  __Pyx_XDECREF(__pyx_v__dict);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_GL2DrawingContext, (type(self), 0x11e38ca, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_GL2DrawingContext__set_state(self, __pyx_state)
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state); /*proto*/
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_13__setstate_cython__(PyObject *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_12__setstate_cython__(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *)__pyx_v_self), ((PyObject *)__pyx_v___pyx_state));

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_17GL2DrawingContext_12__setstate_cython__(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__setstate_cython__", 0);

  /* "(tree fragment)":17
 *         return __pyx_unpickle_GL2DrawingContext, (type(self), 0x11e38ca, state)
 * def __setstate_cython__(self, __pyx_state):
 *     __pyx_unpickle_GL2DrawingContext__set_state(self, __pyx_state)             # <<<<<<<<<<<<<<
 */
  if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 17, __pyx_L1_error)
  __pyx_t_1 = __pyx_f_5renpy_3gl2_7gl2draw___pyx_unpickle_GL2DrawingContext__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 17, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":16
 *     else:
 *         return __pyx_unpickle_GL2DrawingContext, (type(self), 0x11e38ca, state)
 * def __setstate_cython__(self, __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_unpickle_GL2DrawingContext__set_state(self, __pyx_state)
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.GL2DrawingContext.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __pyx_unpickle_GL2Draw(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_1__pyx_unpickle_GL2Draw(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5renpy_3gl2_7gl2draw_1__pyx_unpickle_GL2Draw = {"__pyx_unpickle_GL2Draw", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_1__pyx_unpickle_GL2Draw, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_1__pyx_unpickle_GL2Draw(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_GL2Draw (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_GL2Draw", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_GL2Draw", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_GL2Draw") < 0)) __PYX_ERR(2, 1, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
    __pyx_v___pyx_state = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_GL2Draw", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.__pyx_unpickle_GL2Draw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw___pyx_unpickle_GL2Draw(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw___pyx_unpickle_GL2Draw(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_PickleError = 0;
  PyObject *__pyx_v___pyx_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_GL2Draw", 0);

  /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xc664da8:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xc664da8 = (angle, clip_cache, clip_rtt_box, color_texture, current_fbo, default_clip, default_fbo, depth_renderbuffer, did_init, display_info, dpi_scale, draw_per_phys, draw_per_virt, draw_to_virt, draw_transform, drawable_size, drawable_viewport, fast_redraw_frames, fbo, fullscreen_surface, gles, info, last_redraw_time, old_fullscreen, physical_box, physical_size, redraw_period, shader_cache, texture_loader, virt_to_draw, virtual_box, virtual_size, window))" % __pyx_checksum)
 */
  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0xc664da8) != 0);
  if (__pyx_t_1) {

    /* "(tree fragment)":5
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xc664da8:
 *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xc664da8 = (angle, clip_cache, clip_rtt_box, color_texture, current_fbo, default_clip, default_fbo, depth_renderbuffer, did_init, display_info, dpi_scale, draw_per_phys, draw_per_virt, draw_to_virt, draw_transform, drawable_size, drawable_viewport, fast_redraw_frames, fbo, fullscreen_surface, gles, info, last_redraw_time, old_fullscreen, physical_box, physical_size, redraw_period, shader_cache, texture_loader, virt_to_draw, virtual_box, virtual_size, window))" % __pyx_checksum)
 *     __pyx_result = GL2Draw.__new__(__pyx_type)
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_PickleError);
    __Pyx_GIVEREF(__pyx_n_s_PickleError);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v___pyx_PickleError = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":6
 *     if __pyx_checksum != 0xc664da8:
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xc664da8 = (angle, clip_cache, clip_rtt_box, color_texture, current_fbo, default_clip, default_fbo, depth_renderbuffer, did_init, display_info, dpi_scale, draw_per_phys, draw_per_virt, draw_to_virt, draw_transform, drawable_size, drawable_viewport, fast_redraw_frames, fbo, fullscreen_surface, gles, info, last_redraw_time, old_fullscreen, physical_box, physical_size, redraw_period, shader_cache, texture_loader, virt_to_draw, virtual_box, virtual_size, window))" % __pyx_checksum)             # <<<<<<<<<<<<<<
 *     __pyx_result = GL2Draw.__new__(__pyx_type)
 *     if __pyx_state is not None:
 */
    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0xc6, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_v___pyx_PickleError);
    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 6, __pyx_L1_error)

    /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0xc664da8:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xc664da8 = (angle, clip_cache, clip_rtt_box, color_texture, current_fbo, default_clip, default_fbo, depth_renderbuffer, did_init, display_info, dpi_scale, draw_per_phys, draw_per_virt, draw_to_virt, draw_transform, drawable_size, drawable_viewport, fast_redraw_frames, fbo, fullscreen_surface, gles, info, last_redraw_time, old_fullscreen, physical_box, physical_size, redraw_period, shader_cache, texture_loader, virt_to_draw, virtual_box, virtual_size, window))" % __pyx_checksum)
 */
  }

  /* "(tree fragment)":7
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xc664da8 = (angle, clip_cache, clip_rtt_box, color_texture, current_fbo, default_clip, default_fbo, depth_renderbuffer, did_init, display_info, dpi_scale, draw_per_phys, draw_per_virt, draw_to_virt, draw_transform, drawable_size, drawable_viewport, fast_redraw_frames, fbo, fullscreen_surface, gles, info, last_redraw_time, old_fullscreen, physical_box, physical_size, redraw_period, shader_cache, texture_loader, virt_to_draw, virtual_box, virtual_size, window))" % __pyx_checksum)
 *     __pyx_result = GL2Draw.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_GL2Draw__set_state(<GL2Draw> __pyx_result, __pyx_state)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_5renpy_3gl2_7gl2draw_GL2Draw), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v___pyx_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xc664da8 = (angle, clip_cache, clip_rtt_box, color_texture, current_fbo, default_clip, default_fbo, depth_renderbuffer, did_init, display_info, dpi_scale, draw_per_phys, draw_per_virt, draw_to_virt, draw_transform, drawable_size, drawable_viewport, fast_redraw_frames, fbo, fullscreen_surface, gles, info, last_redraw_time, old_fullscreen, physical_box, physical_size, redraw_period, shader_cache, texture_loader, virt_to_draw, virtual_box, virtual_size, window))" % __pyx_checksum)
 *     __pyx_result = GL2Draw.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_GL2Draw__set_state(<GL2Draw> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":9
 *     __pyx_result = GL2Draw.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_GL2Draw__set_state(<GL2Draw> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_GL2Draw__set_state(GL2Draw __pyx_result, tuple __pyx_state):
 */
    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_5renpy_3gl2_7gl2draw___pyx_unpickle_GL2Draw__set_state(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0xc664da8 = (angle, clip_cache, clip_rtt_box, color_texture, current_fbo, default_clip, default_fbo, depth_renderbuffer, did_init, display_info, dpi_scale, draw_per_phys, draw_per_virt, draw_to_virt, draw_transform, drawable_size, drawable_viewport, fast_redraw_frames, fbo, fullscreen_surface, gles, info, last_redraw_time, old_fullscreen, physical_box, physical_size, redraw_period, shader_cache, texture_loader, virt_to_draw, virtual_box, virtual_size, window))" % __pyx_checksum)
 *     __pyx_result = GL2Draw.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_GL2Draw__set_state(<GL2Draw> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_GL2Draw__set_state(<GL2Draw> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_GL2Draw__set_state(GL2Draw __pyx_result, tuple __pyx_state):
 *     __pyx_result.angle = __pyx_state[0]; __pyx_result.clip_cache = __pyx_state[1]; __pyx_result.clip_rtt_box = __pyx_state[2]; __pyx_result.color_texture = __pyx_state[3]; __pyx_result.current_fbo = __pyx_state[4]; __pyx_result.default_clip = __pyx_state[5]; __pyx_result.default_fbo = __pyx_state[6]; __pyx_result.depth_renderbuffer = __pyx_state[7]; __pyx_result.did_init = __pyx_state[8]; __pyx_result.display_info = __pyx_state[9]; __pyx_result.dpi_scale = __pyx_state[10]; __pyx_result.draw_per_phys = __pyx_state[11]; __pyx_result.draw_per_virt = __pyx_state[12]; __pyx_result.draw_to_virt = __pyx_state[13]; __pyx_result.draw_transform = __pyx_state[14]; __pyx_result.drawable_size = __pyx_state[15]; __pyx_result.drawable_viewport = __pyx_state[16]; __pyx_result.fast_redraw_frames = __pyx_state[17]; __pyx_result.fbo = __pyx_state[18]; __pyx_result.fullscreen_surface = __pyx_state[19]; __pyx_result.gles = __pyx_state[20]; __pyx_result.info = __pyx_state[21]; __pyx_result.last_redraw_time = __pyx_state[22]; __pyx_result.old_fullscreen = __pyx_state[23]; __pyx_result.physical_box = __pyx_state[24]; __pyx_result.physical_size = __pyx_state[25]; __pyx_result.redraw_period = __pyx_state[26]; __pyx_result.shader_cache = __pyx_state[27]; __pyx_result.texture_loader = __pyx_state[28]; __pyx_result.virt_to_draw = __pyx_state[29]; __pyx_result.virtual_box = __pyx_state[30]; __pyx_result.virtual_size = __pyx_state[31]; __pyx_result.window = __pyx_state[32]
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_GL2Draw(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.__pyx_unpickle_GL2Draw", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_GL2Draw__set_state(<GL2Draw> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_GL2Draw__set_state(GL2Draw __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.angle = __pyx_state[0]; __pyx_result.clip_cache = __pyx_state[1]; __pyx_result.clip_rtt_box = __pyx_state[2]; __pyx_result.color_texture = __pyx_state[3]; __pyx_result.current_fbo = __pyx_state[4]; __pyx_result.default_clip = __pyx_state[5]; __pyx_result.default_fbo = __pyx_state[6]; __pyx_result.depth_renderbuffer = __pyx_state[7]; __pyx_result.did_init = __pyx_state[8]; __pyx_result.display_info = __pyx_state[9]; __pyx_result.dpi_scale = __pyx_state[10]; __pyx_result.draw_per_phys = __pyx_state[11]; __pyx_result.draw_per_virt = __pyx_state[12]; __pyx_result.draw_to_virt = __pyx_state[13]; __pyx_result.draw_transform = __pyx_state[14]; __pyx_result.drawable_size = __pyx_state[15]; __pyx_result.drawable_viewport = __pyx_state[16]; __pyx_result.fast_redraw_frames = __pyx_state[17]; __pyx_result.fbo = __pyx_state[18]; __pyx_result.fullscreen_surface = __pyx_state[19]; __pyx_result.gles = __pyx_state[20]; __pyx_result.info = __pyx_state[21]; __pyx_result.last_redraw_time = __pyx_state[22]; __pyx_result.old_fullscreen = __pyx_state[23]; __pyx_result.physical_box = __pyx_state[24]; __pyx_result.physical_size = __pyx_state[25]; __pyx_result.redraw_period = __pyx_state[26]; __pyx_result.shader_cache = __pyx_state[27]; __pyx_result.texture_loader = __pyx_state[28]; __pyx_result.virt_to_draw = __pyx_state[29]; __pyx_result.virtual_box = __pyx_state[30]; __pyx_result.virtual_size = __pyx_state[31]; __pyx_result.window = __pyx_state[32]
 *     if len(__pyx_state) > 33 and hasattr(__pyx_result, '__dict__'):
 */

static PyObject *__pyx_f_5renpy_3gl2_7gl2draw___pyx_unpickle_GL2Draw__set_state(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  GLuint __pyx_t_3;
  float __pyx_t_4;
  int __pyx_t_5;
  double __pyx_t_6;
  Py_ssize_t __pyx_t_7;
  int __pyx_t_8;
  int __pyx_t_9;
  PyObject *__pyx_t_10 = NULL;
  PyObject *__pyx_t_11 = NULL;
  PyObject *__pyx_t_12 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_GL2Draw__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_GL2Draw__set_state(GL2Draw __pyx_result, tuple __pyx_state):
 *     __pyx_result.angle = __pyx_state[0]; __pyx_result.clip_cache = __pyx_state[1]; __pyx_result.clip_rtt_box = __pyx_state[2]; __pyx_result.color_texture = __pyx_state[3]; __pyx_result.current_fbo = __pyx_state[4]; __pyx_result.default_clip = __pyx_state[5]; __pyx_result.default_fbo = __pyx_state[6]; __pyx_result.depth_renderbuffer = __pyx_state[7]; __pyx_result.did_init = __pyx_state[8]; __pyx_result.display_info = __pyx_state[9]; __pyx_result.dpi_scale = __pyx_state[10]; __pyx_result.draw_per_phys = __pyx_state[11]; __pyx_result.draw_per_virt = __pyx_state[12]; __pyx_result.draw_to_virt = __pyx_state[13]; __pyx_result.draw_transform = __pyx_state[14]; __pyx_result.drawable_size = __pyx_state[15]; __pyx_result.drawable_viewport = __pyx_state[16]; __pyx_result.fast_redraw_frames = __pyx_state[17]; __pyx_result.fbo = __pyx_state[18]; __pyx_result.fullscreen_surface = __pyx_state[19]; __pyx_result.gles = __pyx_state[20]; __pyx_result.info = __pyx_state[21]; __pyx_result.last_redraw_time = __pyx_state[22]; __pyx_result.old_fullscreen = __pyx_state[23]; __pyx_result.physical_box = __pyx_state[24]; __pyx_result.physical_size = __pyx_state[25]; __pyx_result.redraw_period = __pyx_state[26]; __pyx_result.shader_cache = __pyx_state[27]; __pyx_result.texture_loader = __pyx_state[28]; __pyx_result.virt_to_draw = __pyx_state[29]; __pyx_result.virtual_box = __pyx_state[30]; __pyx_result.virtual_size = __pyx_state[31]; __pyx_result.window = __pyx_state[32]             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 33 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[33])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->angle = __pyx_t_2;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->clip_cache);
  __Pyx_DECREF(__pyx_v___pyx_result->clip_cache);
  __pyx_v___pyx_result->clip_cache = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->clip_rtt_box);
  __Pyx_DECREF(__pyx_v___pyx_result->clip_rtt_box);
  __pyx_v___pyx_result->clip_rtt_box = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_As_GLuint(__pyx_t_1); if (unlikely((__pyx_t_3 == ((GLuint)-1)) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->color_texture = __pyx_t_3;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_As_GLuint(__pyx_t_1); if (unlikely((__pyx_t_3 == ((GLuint)-1)) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->current_fbo = __pyx_t_3;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 5, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->default_clip);
  __Pyx_DECREF(__pyx_v___pyx_result->default_clip);
  __pyx_v___pyx_result->default_clip = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 6, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_As_GLuint(__pyx_t_1); if (unlikely((__pyx_t_3 == ((GLuint)-1)) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->default_fbo = __pyx_t_3;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 7, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_As_GLuint(__pyx_t_1); if (unlikely((__pyx_t_3 == ((GLuint)-1)) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->depth_renderbuffer = __pyx_t_3;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 8, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->did_init = __pyx_t_2;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 9, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->display_info);
  __Pyx_DECREF(__pyx_v___pyx_result->display_info);
  __pyx_v___pyx_result->display_info = __pyx_t_1;
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 10, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->dpi_scale = __pyx_t_4;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 11, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_4 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_4 == (float)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->draw_per_phys = __pyx_t_4;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 12, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->draw_per_virt);
  __Pyx_DECREF(__pyx_v___pyx_result->draw_per_virt);
  __pyx_v___pyx_result->draw_per_virt = __pyx_t_1;
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 13, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5renpy_7display_6matrix_Matrix))))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->draw_to_virt);
  __Pyx_DECREF(((PyObject *)__pyx_v___pyx_result->draw_to_virt));
  __pyx_v___pyx_result->draw_to_virt = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 14, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5renpy_7display_6matrix_Matrix))))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->draw_transform);
  __Pyx_DECREF(((PyObject *)__pyx_v___pyx_result->draw_transform));
  __pyx_v___pyx_result->draw_transform = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 15, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->drawable_size);
  __Pyx_DECREF(__pyx_v___pyx_result->drawable_size);
  __pyx_v___pyx_result->drawable_size = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 16, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->drawable_viewport);
  __Pyx_DECREF(__pyx_v___pyx_result->drawable_viewport);
  __pyx_v___pyx_result->drawable_viewport = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 17, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_5 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_5 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->fast_redraw_frames = __pyx_t_5;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 18, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __Pyx_PyInt_As_GLuint(__pyx_t_1); if (unlikely((__pyx_t_3 == ((GLuint)-1)) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->fbo = __pyx_t_3;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 19, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->fullscreen_surface);
  __Pyx_DECREF(__pyx_v___pyx_result->fullscreen_surface);
  __pyx_v___pyx_result->fullscreen_surface = __pyx_t_1;
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 20, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->gles = __pyx_t_2;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 21, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyDict_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "dict", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->info);
  __Pyx_DECREF(__pyx_v___pyx_result->info);
  __pyx_v___pyx_result->info = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 22, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->last_redraw_time = __pyx_t_6;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 23, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->old_fullscreen);
  __Pyx_DECREF(__pyx_v___pyx_result->old_fullscreen);
  __pyx_v___pyx_result->old_fullscreen = __pyx_t_1;
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 24, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->physical_box);
  __Pyx_DECREF(__pyx_v___pyx_result->physical_box);
  __pyx_v___pyx_result->physical_box = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 25, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->physical_size);
  __Pyx_DECREF(__pyx_v___pyx_result->physical_size);
  __pyx_v___pyx_result->physical_size = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 26, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_6 = __pyx_PyFloat_AsDouble(__pyx_t_1); if (unlikely((__pyx_t_6 == (double)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->redraw_period = __pyx_t_6;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 27, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->shader_cache);
  __Pyx_DECREF(__pyx_v___pyx_result->shader_cache);
  __pyx_v___pyx_result->shader_cache = __pyx_t_1;
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 28, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5renpy_3gl2_10gl2texture_TextureLoader))))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->texture_loader);
  __Pyx_DECREF(((PyObject *)__pyx_v___pyx_result->texture_loader));
  __pyx_v___pyx_result->texture_loader = ((struct __pyx_obj_5renpy_3gl2_10gl2texture_TextureLoader *)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 29, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5renpy_7display_6matrix_Matrix))))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->virt_to_draw);
  __Pyx_DECREF(((PyObject *)__pyx_v___pyx_result->virt_to_draw));
  __pyx_v___pyx_result->virt_to_draw = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 30, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->virtual_box);
  __Pyx_DECREF(__pyx_v___pyx_result->virtual_box);
  __pyx_v___pyx_result->virtual_box = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 31, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(PyTuple_CheckExact(__pyx_t_1))||((__pyx_t_1) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_t_1)->tp_name), 0))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->virtual_size);
  __Pyx_DECREF(__pyx_v___pyx_result->virtual_size);
  __pyx_v___pyx_result->virtual_size = ((PyObject*)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 32, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->window);
  __Pyx_DECREF(__pyx_v___pyx_result->window);
  __pyx_v___pyx_result->window = __pyx_t_1;
  __pyx_t_1 = 0;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_GL2Draw__set_state(GL2Draw __pyx_result, tuple __pyx_state):
 *     __pyx_result.angle = __pyx_state[0]; __pyx_result.clip_cache = __pyx_state[1]; __pyx_result.clip_rtt_box = __pyx_state[2]; __pyx_result.color_texture = __pyx_state[3]; __pyx_result.current_fbo = __pyx_state[4]; __pyx_result.default_clip = __pyx_state[5]; __pyx_result.default_fbo = __pyx_state[6]; __pyx_result.depth_renderbuffer = __pyx_state[7]; __pyx_result.did_init = __pyx_state[8]; __pyx_result.display_info = __pyx_state[9]; __pyx_result.dpi_scale = __pyx_state[10]; __pyx_result.draw_per_phys = __pyx_state[11]; __pyx_result.draw_per_virt = __pyx_state[12]; __pyx_result.draw_to_virt = __pyx_state[13]; __pyx_result.draw_transform = __pyx_state[14]; __pyx_result.drawable_size = __pyx_state[15]; __pyx_result.drawable_viewport = __pyx_state[16]; __pyx_result.fast_redraw_frames = __pyx_state[17]; __pyx_result.fbo = __pyx_state[18]; __pyx_result.fullscreen_surface = __pyx_state[19]; __pyx_result.gles = __pyx_state[20]; __pyx_result.info = __pyx_state[21]; __pyx_result.last_redraw_time = __pyx_state[22]; __pyx_result.old_fullscreen = __pyx_state[23]; __pyx_result.physical_box = __pyx_state[24]; __pyx_result.physical_size = __pyx_state[25]; __pyx_result.redraw_period = __pyx_state[26]; __pyx_result.shader_cache = __pyx_state[27]; __pyx_result.texture_loader = __pyx_state[28]; __pyx_result.virt_to_draw = __pyx_state[29]; __pyx_result.virtual_box = __pyx_state[30]; __pyx_result.virtual_size = __pyx_state[31]; __pyx_result.window = __pyx_state[32]
 *     if len(__pyx_state) > 33 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[33])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 13, __pyx_L1_error)
  }
  __pyx_t_7 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_8 = ((__pyx_t_7 > 33) != 0);
  if (__pyx_t_8) {
  } else {
    __pyx_t_2 = __pyx_t_8;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_8 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_9 = (__pyx_t_8 != 0);
  __pyx_t_2 = __pyx_t_9;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "(tree fragment)":14
 *     __pyx_result.angle = __pyx_state[0]; __pyx_result.clip_cache = __pyx_state[1]; __pyx_result.clip_rtt_box = __pyx_state[2]; __pyx_result.color_texture = __pyx_state[3]; __pyx_result.current_fbo = __pyx_state[4]; __pyx_result.default_clip = __pyx_state[5]; __pyx_result.default_fbo = __pyx_state[6]; __pyx_result.depth_renderbuffer = __pyx_state[7]; __pyx_result.did_init = __pyx_state[8]; __pyx_result.display_info = __pyx_state[9]; __pyx_result.dpi_scale = __pyx_state[10]; __pyx_result.draw_per_phys = __pyx_state[11]; __pyx_result.draw_per_virt = __pyx_state[12]; __pyx_result.draw_to_virt = __pyx_state[13]; __pyx_result.draw_transform = __pyx_state[14]; __pyx_result.drawable_size = __pyx_state[15]; __pyx_result.drawable_viewport = __pyx_state[16]; __pyx_result.fast_redraw_frames = __pyx_state[17]; __pyx_result.fbo = __pyx_state[18]; __pyx_result.fullscreen_surface = __pyx_state[19]; __pyx_result.gles = __pyx_state[20]; __pyx_result.info = __pyx_state[21]; __pyx_result.last_redraw_time = __pyx_state[22]; __pyx_result.old_fullscreen = __pyx_state[23]; __pyx_result.physical_box = __pyx_state[24]; __pyx_result.physical_size = __pyx_state[25]; __pyx_result.redraw_period = __pyx_state[26]; __pyx_result.shader_cache = __pyx_state[27]; __pyx_result.texture_loader = __pyx_state[28]; __pyx_result.virt_to_draw = __pyx_state[29]; __pyx_result.virtual_box = __pyx_state[30]; __pyx_result.virtual_size = __pyx_state[31]; __pyx_result.window = __pyx_state[32]
 *     if len(__pyx_state) > 33 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[33])             # <<<<<<<<<<<<<<
 */
    __pyx_t_10 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_11 = __Pyx_PyObject_GetAttrStr(__pyx_t_10, __pyx_n_s_update); if (unlikely(!__pyx_t_11)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_11);
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 14, __pyx_L1_error)
    }
    __pyx_t_10 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 33, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_10)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_10);
    __pyx_t_12 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_11))) {
      __pyx_t_12 = PyMethod_GET_SELF(__pyx_t_11);
      if (likely(__pyx_t_12)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_11);
        __Pyx_INCREF(__pyx_t_12);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_11, function);
      }
    }
    __pyx_t_1 = (__pyx_t_12) ? __Pyx_PyObject_Call2Args(__pyx_t_11, __pyx_t_12, __pyx_t_10) : __Pyx_PyObject_CallOneArg(__pyx_t_11, __pyx_t_10);
    __Pyx_XDECREF(__pyx_t_12); __pyx_t_12 = 0;
    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "(tree fragment)":13
 * cdef __pyx_unpickle_GL2Draw__set_state(GL2Draw __pyx_result, tuple __pyx_state):
 *     __pyx_result.angle = __pyx_state[0]; __pyx_result.clip_cache = __pyx_state[1]; __pyx_result.clip_rtt_box = __pyx_state[2]; __pyx_result.color_texture = __pyx_state[3]; __pyx_result.current_fbo = __pyx_state[4]; __pyx_result.default_clip = __pyx_state[5]; __pyx_result.default_fbo = __pyx_state[6]; __pyx_result.depth_renderbuffer = __pyx_state[7]; __pyx_result.did_init = __pyx_state[8]; __pyx_result.display_info = __pyx_state[9]; __pyx_result.dpi_scale = __pyx_state[10]; __pyx_result.draw_per_phys = __pyx_state[11]; __pyx_result.draw_per_virt = __pyx_state[12]; __pyx_result.draw_to_virt = __pyx_state[13]; __pyx_result.draw_transform = __pyx_state[14]; __pyx_result.drawable_size = __pyx_state[15]; __pyx_result.drawable_viewport = __pyx_state[16]; __pyx_result.fast_redraw_frames = __pyx_state[17]; __pyx_result.fbo = __pyx_state[18]; __pyx_result.fullscreen_surface = __pyx_state[19]; __pyx_result.gles = __pyx_state[20]; __pyx_result.info = __pyx_state[21]; __pyx_result.last_redraw_time = __pyx_state[22]; __pyx_result.old_fullscreen = __pyx_state[23]; __pyx_result.physical_box = __pyx_state[24]; __pyx_result.physical_size = __pyx_state[25]; __pyx_result.redraw_period = __pyx_state[26]; __pyx_result.shader_cache = __pyx_state[27]; __pyx_result.texture_loader = __pyx_state[28]; __pyx_result.virt_to_draw = __pyx_state[29]; __pyx_result.virtual_box = __pyx_state[30]; __pyx_result.virtual_size = __pyx_state[31]; __pyx_result.window = __pyx_state[32]
 *     if len(__pyx_state) > 33 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[33])
 */
  }

  /* "(tree fragment)":11
 *         __pyx_unpickle_GL2Draw__set_state(<GL2Draw> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_GL2Draw__set_state(GL2Draw __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.angle = __pyx_state[0]; __pyx_result.clip_cache = __pyx_state[1]; __pyx_result.clip_rtt_box = __pyx_state[2]; __pyx_result.color_texture = __pyx_state[3]; __pyx_result.current_fbo = __pyx_state[4]; __pyx_result.default_clip = __pyx_state[5]; __pyx_result.default_fbo = __pyx_state[6]; __pyx_result.depth_renderbuffer = __pyx_state[7]; __pyx_result.did_init = __pyx_state[8]; __pyx_result.display_info = __pyx_state[9]; __pyx_result.dpi_scale = __pyx_state[10]; __pyx_result.draw_per_phys = __pyx_state[11]; __pyx_result.draw_per_virt = __pyx_state[12]; __pyx_result.draw_to_virt = __pyx_state[13]; __pyx_result.draw_transform = __pyx_state[14]; __pyx_result.drawable_size = __pyx_state[15]; __pyx_result.drawable_viewport = __pyx_state[16]; __pyx_result.fast_redraw_frames = __pyx_state[17]; __pyx_result.fbo = __pyx_state[18]; __pyx_result.fullscreen_surface = __pyx_state[19]; __pyx_result.gles = __pyx_state[20]; __pyx_result.info = __pyx_state[21]; __pyx_result.last_redraw_time = __pyx_state[22]; __pyx_result.old_fullscreen = __pyx_state[23]; __pyx_result.physical_box = __pyx_state[24]; __pyx_result.physical_size = __pyx_state[25]; __pyx_result.redraw_period = __pyx_state[26]; __pyx_result.shader_cache = __pyx_state[27]; __pyx_result.texture_loader = __pyx_state[28]; __pyx_result.virt_to_draw = __pyx_state[29]; __pyx_result.virtual_box = __pyx_state[30]; __pyx_result.virtual_size = __pyx_state[31]; __pyx_result.window = __pyx_state[32]
 *     if len(__pyx_state) > 33 and hasattr(__pyx_result, '__dict__'):
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_10);
  __Pyx_XDECREF(__pyx_t_11);
  __Pyx_XDECREF(__pyx_t_12);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.__pyx_unpickle_GL2Draw__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":1
 * def __pyx_unpickle_GL2DrawingContext(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

/* Python wrapper */
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_3__pyx_unpickle_GL2DrawingContext(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
static PyMethodDef __pyx_mdef_5renpy_3gl2_7gl2draw_3__pyx_unpickle_GL2DrawingContext = {"__pyx_unpickle_GL2DrawingContext", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_3__pyx_unpickle_GL2DrawingContext, METH_VARARGS|METH_KEYWORDS, 0};
static PyObject *__pyx_pw_5renpy_3gl2_7gl2draw_3__pyx_unpickle_GL2DrawingContext(PyObject *__pyx_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
  PyObject *__pyx_v___pyx_type = 0;
  long __pyx_v___pyx_checksum;
  PyObject *__pyx_v___pyx_state = 0;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  PyObject *__pyx_r = 0;
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__pyx_unpickle_GL2DrawingContext (wrapper)", 0);
  {
    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
    PyObject* values[3] = {0,0,0};
    if (unlikely(__pyx_kwds)) {
      Py_ssize_t kw_args;
      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
      switch (pos_args) {
        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
        CYTHON_FALLTHROUGH;
        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
        CYTHON_FALLTHROUGH;
        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
        CYTHON_FALLTHROUGH;
        case  0: break;
        default: goto __pyx_L5_argtuple_error;
      }
      kw_args = PyDict_Size(__pyx_kwds);
      switch (pos_args) {
        case  0:
        if (likely((values[0] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_type)) != 0)) kw_args--;
        else goto __pyx_L5_argtuple_error;
        CYTHON_FALLTHROUGH;
        case  1:
        if (likely((values[1] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_checksum)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_GL2DrawingContext", 1, 3, 3, 1); __PYX_ERR(2, 1, __pyx_L3_error)
        }
        CYTHON_FALLTHROUGH;
        case  2:
        if (likely((values[2] = __Pyx_PyDict_GetItemStr(__pyx_kwds, __pyx_n_s_pyx_state)) != 0)) kw_args--;
        else {
          __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_GL2DrawingContext", 1, 3, 3, 2); __PYX_ERR(2, 1, __pyx_L3_error)
        }
      }
      if (unlikely(kw_args > 0)) {
        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__pyx_unpickle_GL2DrawingContext") < 0)) __PYX_ERR(2, 1, __pyx_L3_error)
      }
    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
      goto __pyx_L5_argtuple_error;
    } else {
      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
    }
    __pyx_v___pyx_type = values[0];
    __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(2, 1, __pyx_L3_error)
    __pyx_v___pyx_state = values[2];
  }
  goto __pyx_L4_argument_unpacking_done;
  __pyx_L5_argtuple_error:;
  __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_GL2DrawingContext", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(2, 1, __pyx_L3_error)
  __pyx_L3_error:;
  __Pyx_AddTraceback("renpy.gl2.gl2draw.__pyx_unpickle_GL2DrawingContext", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __Pyx_RefNannyFinishContext();
  return NULL;
  __pyx_L4_argument_unpacking_done:;
  __pyx_r = __pyx_pf_5renpy_3gl2_7gl2draw_2__pyx_unpickle_GL2DrawingContext(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);

  /* function exit code */
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

static PyObject *__pyx_pf_5renpy_3gl2_7gl2draw_2__pyx_unpickle_GL2DrawingContext(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_v___pyx_PickleError = 0;
  PyObject *__pyx_v___pyx_result = 0;
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  int __pyx_t_1;
  PyObject *__pyx_t_2 = NULL;
  PyObject *__pyx_t_3 = NULL;
  PyObject *__pyx_t_4 = NULL;
  PyObject *__pyx_t_5 = NULL;
  int __pyx_t_6;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_GL2DrawingContext", 0);

  /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x11e38ca:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x11e38ca = (debug, gl2draw, height, width))" % __pyx_checksum)
 */
  __pyx_t_1 = ((__pyx_v___pyx_checksum != 0x11e38ca) != 0);
  if (__pyx_t_1) {

    /* "(tree fragment)":5
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x11e38ca:
 *         from pickle import PickleError as __pyx_PickleError             # <<<<<<<<<<<<<<
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x11e38ca = (debug, gl2draw, height, width))" % __pyx_checksum)
 *     __pyx_result = GL2DrawingContext.__new__(__pyx_type)
 */
    __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_n_s_PickleError);
    __Pyx_GIVEREF(__pyx_n_s_PickleError);
    PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_PickleError);
    __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_2, -1); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 5, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __Pyx_INCREF(__pyx_t_2);
    __pyx_v___pyx_PickleError = __pyx_t_2;
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":6
 *     if __pyx_checksum != 0x11e38ca:
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x11e38ca = (debug, gl2draw, height, width))" % __pyx_checksum)             # <<<<<<<<<<<<<<
 *     __pyx_result = GL2DrawingContext.__new__(__pyx_type)
 *     if __pyx_state is not None:
 */
    __pyx_t_2 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_2);
    __pyx_t_4 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_s_vs_0x11, __pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_4);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_INCREF(__pyx_v___pyx_PickleError);
    __pyx_t_2 = __pyx_v___pyx_PickleError; __pyx_t_5 = NULL;
    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
      __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_2);
      if (likely(__pyx_t_5)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
        __Pyx_INCREF(__pyx_t_5);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_2, function);
      }
    }
    __pyx_t_3 = (__pyx_t_5) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_5, __pyx_t_4) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4);
    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
    if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 6, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
    __Pyx_Raise(__pyx_t_3, 0, 0, 0);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
    __PYX_ERR(2, 6, __pyx_L1_error)

    /* "(tree fragment)":4
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 *     if __pyx_checksum != 0x11e38ca:             # <<<<<<<<<<<<<<
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x11e38ca = (debug, gl2draw, height, width))" % __pyx_checksum)
 */
  }

  /* "(tree fragment)":7
 *         from pickle import PickleError as __pyx_PickleError
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x11e38ca = (debug, gl2draw, height, width))" % __pyx_checksum)
 *     __pyx_result = GL2DrawingContext.__new__(__pyx_type)             # <<<<<<<<<<<<<<
 *     if __pyx_state is not None:
 *         __pyx_unpickle_GL2DrawingContext__set_state(<GL2DrawingContext> __pyx_result, __pyx_state)
 */
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_ptype_5renpy_3gl2_7gl2draw_GL2DrawingContext), __pyx_n_s_new); if (unlikely(!__pyx_t_2)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_4 = NULL;
  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
    if (likely(__pyx_t_4)) {
      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
      __Pyx_INCREF(__pyx_t_4);
      __Pyx_INCREF(function);
      __Pyx_DECREF_SET(__pyx_t_2, function);
    }
  }
  __pyx_t_3 = (__pyx_t_4) ? __Pyx_PyObject_Call2Args(__pyx_t_2, __pyx_t_4, __pyx_v___pyx_type) : __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v___pyx_type);
  __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
  if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 7, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_3);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v___pyx_result = __pyx_t_3;
  __pyx_t_3 = 0;

  /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x11e38ca = (debug, gl2draw, height, width))" % __pyx_checksum)
 *     __pyx_result = GL2DrawingContext.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_GL2DrawingContext__set_state(<GL2DrawingContext> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  __pyx_t_1 = (__pyx_v___pyx_state != Py_None);
  __pyx_t_6 = (__pyx_t_1 != 0);
  if (__pyx_t_6) {

    /* "(tree fragment)":9
 *     __pyx_result = GL2DrawingContext.__new__(__pyx_type)
 *     if __pyx_state is not None:
 *         __pyx_unpickle_GL2DrawingContext__set_state(<GL2DrawingContext> __pyx_result, __pyx_state)             # <<<<<<<<<<<<<<
 *     return __pyx_result
 * cdef __pyx_unpickle_GL2DrawingContext__set_state(GL2DrawingContext __pyx_result, tuple __pyx_state):
 */
    if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None)||(PyErr_Format(PyExc_TypeError, "Expected %.16s, got %.200s", "tuple", Py_TYPE(__pyx_v___pyx_state)->tp_name), 0))) __PYX_ERR(2, 9, __pyx_L1_error)
    __pyx_t_3 = __pyx_f_5renpy_3gl2_7gl2draw___pyx_unpickle_GL2DrawingContext__set_state(((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_3)) __PYX_ERR(2, 9, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_3);
    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;

    /* "(tree fragment)":8
 *         raise __pyx_PickleError("Incompatible checksums (%s vs 0x11e38ca = (debug, gl2draw, height, width))" % __pyx_checksum)
 *     __pyx_result = GL2DrawingContext.__new__(__pyx_type)
 *     if __pyx_state is not None:             # <<<<<<<<<<<<<<
 *         __pyx_unpickle_GL2DrawingContext__set_state(<GL2DrawingContext> __pyx_result, __pyx_state)
 *     return __pyx_result
 */
  }

  /* "(tree fragment)":10
 *     if __pyx_state is not None:
 *         __pyx_unpickle_GL2DrawingContext__set_state(<GL2DrawingContext> __pyx_result, __pyx_state)
 *     return __pyx_result             # <<<<<<<<<<<<<<
 * cdef __pyx_unpickle_GL2DrawingContext__set_state(GL2DrawingContext __pyx_result, tuple __pyx_state):
 *     __pyx_result.debug = __pyx_state[0]; __pyx_result.gl2draw = __pyx_state[1]; __pyx_result.height = __pyx_state[2]; __pyx_result.width = __pyx_state[3]
 */
  __Pyx_XDECREF(__pyx_r);
  __Pyx_INCREF(__pyx_v___pyx_result);
  __pyx_r = __pyx_v___pyx_result;
  goto __pyx_L0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_GL2DrawingContext(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */

  /* function exit code */
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_2);
  __Pyx_XDECREF(__pyx_t_3);
  __Pyx_XDECREF(__pyx_t_4);
  __Pyx_XDECREF(__pyx_t_5);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.__pyx_unpickle_GL2DrawingContext", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = NULL;
  __pyx_L0:;
  __Pyx_XDECREF(__pyx_v___pyx_PickleError);
  __Pyx_XDECREF(__pyx_v___pyx_result);
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "(tree fragment)":11
 *         __pyx_unpickle_GL2DrawingContext__set_state(<GL2DrawingContext> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_GL2DrawingContext__set_state(GL2DrawingContext __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.debug = __pyx_state[0]; __pyx_result.gl2draw = __pyx_state[1]; __pyx_result.height = __pyx_state[2]; __pyx_result.width = __pyx_state[3]
 *     if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'):
 */

static PyObject *__pyx_f_5renpy_3gl2_7gl2draw___pyx_unpickle_GL2DrawingContext__set_state(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
  PyObject *__pyx_r = NULL;
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_t_2;
  float __pyx_t_3;
  Py_ssize_t __pyx_t_4;
  int __pyx_t_5;
  int __pyx_t_6;
  PyObject *__pyx_t_7 = NULL;
  PyObject *__pyx_t_8 = NULL;
  PyObject *__pyx_t_9 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__pyx_unpickle_GL2DrawingContext__set_state", 0);

  /* "(tree fragment)":12
 *     return __pyx_result
 * cdef __pyx_unpickle_GL2DrawingContext__set_state(GL2DrawingContext __pyx_result, tuple __pyx_state):
 *     __pyx_result.debug = __pyx_state[0]; __pyx_result.gl2draw = __pyx_state[1]; __pyx_result.height = __pyx_state[2]; __pyx_result.width = __pyx_state[3]             # <<<<<<<<<<<<<<
 *     if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[4])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->debug = __pyx_t_2;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_5renpy_3gl2_7gl2draw_GL2Draw))))) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GIVEREF(__pyx_t_1);
  __Pyx_GOTREF(__pyx_v___pyx_result->gl2draw);
  __Pyx_DECREF(((PyObject *)__pyx_v___pyx_result->gl2draw));
  __pyx_v___pyx_result->gl2draw = ((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)__pyx_t_1);
  __pyx_t_1 = 0;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->height = __pyx_t_3;
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
    __PYX_ERR(2, 12, __pyx_L1_error)
  }
  __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 3, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_3 = __pyx_PyFloat_AsFloat(__pyx_t_1); if (unlikely((__pyx_t_3 == (float)-1) && PyErr_Occurred())) __PYX_ERR(2, 12, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v___pyx_result->width = __pyx_t_3;

  /* "(tree fragment)":13
 * cdef __pyx_unpickle_GL2DrawingContext__set_state(GL2DrawingContext __pyx_result, tuple __pyx_state):
 *     __pyx_result.debug = __pyx_state[0]; __pyx_result.gl2draw = __pyx_state[1]; __pyx_result.height = __pyx_state[2]; __pyx_result.width = __pyx_state[3]
 *     if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[4])
 */
  if (unlikely(__pyx_v___pyx_state == Py_None)) {
    PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
    __PYX_ERR(2, 13, __pyx_L1_error)
  }
  __pyx_t_4 = PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_5 = ((__pyx_t_4 > 4) != 0);
  if (__pyx_t_5) {
  } else {
    __pyx_t_2 = __pyx_t_5;
    goto __pyx_L4_bool_binop_done;
  }
  __pyx_t_5 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(2, 13, __pyx_L1_error)
  __pyx_t_6 = (__pyx_t_5 != 0);
  __pyx_t_2 = __pyx_t_6;
  __pyx_L4_bool_binop_done:;
  if (__pyx_t_2) {

    /* "(tree fragment)":14
 *     __pyx_result.debug = __pyx_state[0]; __pyx_result.gl2draw = __pyx_state[1]; __pyx_result.height = __pyx_state[2]; __pyx_result.width = __pyx_state[3]
 *     if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'):
 *         __pyx_result.__dict__.update(__pyx_state[4])             # <<<<<<<<<<<<<<
 */
    __pyx_t_7 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_7, __pyx_n_s_update); if (unlikely(!__pyx_t_8)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_8);
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(__pyx_v___pyx_state == Py_None)) {
      PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
      __PYX_ERR(2, 14, __pyx_L1_error)
    }
    __pyx_t_7 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 4, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_7);
    __pyx_t_9 = NULL;
    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_8))) {
      __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_8);
      if (likely(__pyx_t_9)) {
        PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_8);
        __Pyx_INCREF(__pyx_t_9);
        __Pyx_INCREF(function);
        __Pyx_DECREF_SET(__pyx_t_8, function);
      }
    }
    __pyx_t_1 = (__pyx_t_9) ? __Pyx_PyObject_Call2Args(__pyx_t_8, __pyx_t_9, __pyx_t_7) : __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_7);
    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
    if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 14, __pyx_L1_error)
    __Pyx_GOTREF(__pyx_t_1);
    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

    /* "(tree fragment)":13
 * cdef __pyx_unpickle_GL2DrawingContext__set_state(GL2DrawingContext __pyx_result, tuple __pyx_state):
 *     __pyx_result.debug = __pyx_state[0]; __pyx_result.gl2draw = __pyx_state[1]; __pyx_result.height = __pyx_state[2]; __pyx_result.width = __pyx_state[3]
 *     if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'):             # <<<<<<<<<<<<<<
 *         __pyx_result.__dict__.update(__pyx_state[4])
 */
  }

  /* "(tree fragment)":11
 *         __pyx_unpickle_GL2DrawingContext__set_state(<GL2DrawingContext> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_GL2DrawingContext__set_state(GL2DrawingContext __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.debug = __pyx_state[0]; __pyx_result.gl2draw = __pyx_state[1]; __pyx_result.height = __pyx_state[2]; __pyx_result.width = __pyx_state[3]
 *     if len(__pyx_state) > 4 and hasattr(__pyx_result, '__dict__'):
 */

  /* function exit code */
  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_7);
  __Pyx_XDECREF(__pyx_t_8);
  __Pyx_XDECREF(__pyx_t_9);
  __Pyx_AddTraceback("renpy.gl2.gl2draw.__pyx_unpickle_GL2DrawingContext__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
  __pyx_r = 0;
  __pyx_L0:;
  __Pyx_XGIVEREF(__pyx_r);
  __Pyx_RefNannyFinishContext();
  return __pyx_r;
}

/* "renpy/display/matrix.pxd":28
 *     cdef public object origin
 * 
 *     cdef inline void transform4(Matrix self, float *ox, float *oy, float *oz, float *ow, float x, float y, float z, float w):             # <<<<<<<<<<<<<<
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw
 */

static CYTHON_INLINE void __pyx_f_5renpy_7display_6matrix_6Matrix_transform4(struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_self, float *__pyx_v_ox, float *__pyx_v_oy, float *__pyx_v_oz, float *__pyx_v_ow, float __pyx_v_x, float __pyx_v_y, float __pyx_v_z, float __pyx_v_w) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transform4", 0);

  /* "renpy/display/matrix.pxd":29
 * 
 *     cdef inline void transform4(Matrix self, float *ox, float *oy, float *oz, float *ow, float x, float y, float z, float w):
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw             # <<<<<<<<<<<<<<
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw
 *         oz[0] = x * self.zdx + y * self.zdy + z * self.zdz + w * self.zdw
 */
  (__pyx_v_ox[0]) = ((((__pyx_v_x * __pyx_v_self->xdx) + (__pyx_v_y * __pyx_v_self->xdy)) + (__pyx_v_z * __pyx_v_self->xdz)) + (__pyx_v_w * __pyx_v_self->xdw));

  /* "renpy/display/matrix.pxd":30
 *     cdef inline void transform4(Matrix self, float *ox, float *oy, float *oz, float *ow, float x, float y, float z, float w):
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw             # <<<<<<<<<<<<<<
 *         oz[0] = x * self.zdx + y * self.zdy + z * self.zdz + w * self.zdw
 *         ow[0] = x * self.wdx + y * self.wdy + z * self.wdz + w * self.wdw
 */
  (__pyx_v_oy[0]) = ((((__pyx_v_x * __pyx_v_self->ydx) + (__pyx_v_y * __pyx_v_self->ydy)) + (__pyx_v_z * __pyx_v_self->ydz)) + (__pyx_v_w * __pyx_v_self->ydw));

  /* "renpy/display/matrix.pxd":31
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw
 *         oz[0] = x * self.zdx + y * self.zdy + z * self.zdz + w * self.zdw             # <<<<<<<<<<<<<<
 *         ow[0] = x * self.wdx + y * self.wdy + z * self.wdz + w * self.wdw
 * 
 */
  (__pyx_v_oz[0]) = ((((__pyx_v_x * __pyx_v_self->zdx) + (__pyx_v_y * __pyx_v_self->zdy)) + (__pyx_v_z * __pyx_v_self->zdz)) + (__pyx_v_w * __pyx_v_self->zdw));

  /* "renpy/display/matrix.pxd":32
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw
 *         oz[0] = x * self.zdx + y * self.zdy + z * self.zdz + w * self.zdw
 *         ow[0] = x * self.wdx + y * self.wdy + z * self.wdz + w * self.wdw             # <<<<<<<<<<<<<<
 * 
 *     cdef inline void transform3(Matrix self, float *ox, float *oy, float *oz, float x, float y, float z, float w):
 */
  (__pyx_v_ow[0]) = ((((__pyx_v_x * __pyx_v_self->wdx) + (__pyx_v_y * __pyx_v_self->wdy)) + (__pyx_v_z * __pyx_v_self->wdz)) + (__pyx_v_w * __pyx_v_self->wdw));

  /* "renpy/display/matrix.pxd":28
 *     cdef public object origin
 * 
 *     cdef inline void transform4(Matrix self, float *ox, float *oy, float *oz, float *ow, float x, float y, float z, float w):             # <<<<<<<<<<<<<<
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw
 */

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

/* "renpy/display/matrix.pxd":34
 *         ow[0] = x * self.wdx + y * self.wdy + z * self.wdz + w * self.wdw
 * 
 *     cdef inline void transform3(Matrix self, float *ox, float *oy, float *oz, float x, float y, float z, float w):             # <<<<<<<<<<<<<<
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw
 */

static CYTHON_INLINE void __pyx_f_5renpy_7display_6matrix_6Matrix_transform3(struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_self, float *__pyx_v_ox, float *__pyx_v_oy, float *__pyx_v_oz, float __pyx_v_x, float __pyx_v_y, float __pyx_v_z, float __pyx_v_w) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transform3", 0);

  /* "renpy/display/matrix.pxd":35
 * 
 *     cdef inline void transform3(Matrix self, float *ox, float *oy, float *oz, float x, float y, float z, float w):
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw             # <<<<<<<<<<<<<<
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw
 *         oz[0] = x * self.zdx + y * self.zdy + z * self.zdz + w * self.zdw
 */
  (__pyx_v_ox[0]) = ((((__pyx_v_x * __pyx_v_self->xdx) + (__pyx_v_y * __pyx_v_self->xdy)) + (__pyx_v_z * __pyx_v_self->xdz)) + (__pyx_v_w * __pyx_v_self->xdw));

  /* "renpy/display/matrix.pxd":36
 *     cdef inline void transform3(Matrix self, float *ox, float *oy, float *oz, float x, float y, float z, float w):
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw             # <<<<<<<<<<<<<<
 *         oz[0] = x * self.zdx + y * self.zdy + z * self.zdz + w * self.zdw
 * 
 */
  (__pyx_v_oy[0]) = ((((__pyx_v_x * __pyx_v_self->ydx) + (__pyx_v_y * __pyx_v_self->ydy)) + (__pyx_v_z * __pyx_v_self->ydz)) + (__pyx_v_w * __pyx_v_self->ydw));

  /* "renpy/display/matrix.pxd":37
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw
 *         oz[0] = x * self.zdx + y * self.zdy + z * self.zdz + w * self.zdw             # <<<<<<<<<<<<<<
 * 
 *     cdef inline void transform2(Matrix self, float *ox, float *oy, float x, float y, float z, float w):
 */
  (__pyx_v_oz[0]) = ((((__pyx_v_x * __pyx_v_self->zdx) + (__pyx_v_y * __pyx_v_self->zdy)) + (__pyx_v_z * __pyx_v_self->zdz)) + (__pyx_v_w * __pyx_v_self->zdw));

  /* "renpy/display/matrix.pxd":34
 *         ow[0] = x * self.wdx + y * self.wdy + z * self.wdz + w * self.wdw
 * 
 *     cdef inline void transform3(Matrix self, float *ox, float *oy, float *oz, float x, float y, float z, float w):             # <<<<<<<<<<<<<<
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw
 */

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}

/* "renpy/display/matrix.pxd":39
 *         oz[0] = x * self.zdx + y * self.zdy + z * self.zdz + w * self.zdw
 * 
 *     cdef inline void transform2(Matrix self, float *ox, float *oy, float x, float y, float z, float w):             # <<<<<<<<<<<<<<
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw
 */

static CYTHON_INLINE void __pyx_f_5renpy_7display_6matrix_6Matrix_transform2(struct __pyx_obj_5renpy_7display_6matrix_Matrix *__pyx_v_self, float *__pyx_v_ox, float *__pyx_v_oy, float __pyx_v_x, float __pyx_v_y, float __pyx_v_z, float __pyx_v_w) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("transform2", 0);

  /* "renpy/display/matrix.pxd":40
 * 
 *     cdef inline void transform2(Matrix self, float *ox, float *oy, float x, float y, float z, float w):
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw             # <<<<<<<<<<<<<<
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw
 * 
 */
  (__pyx_v_ox[0]) = ((((__pyx_v_x * __pyx_v_self->xdx) + (__pyx_v_y * __pyx_v_self->xdy)) + (__pyx_v_z * __pyx_v_self->xdz)) + (__pyx_v_w * __pyx_v_self->xdw));

  /* "renpy/display/matrix.pxd":41
 *     cdef inline void transform2(Matrix self, float *ox, float *oy, float x, float y, float z, float w):
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw             # <<<<<<<<<<<<<<
 * 
 *     cpdef bint is_unit_aligned(Matrix self)
 */
  (__pyx_v_oy[0]) = ((((__pyx_v_x * __pyx_v_self->ydx) + (__pyx_v_y * __pyx_v_self->ydy)) + (__pyx_v_z * __pyx_v_self->ydz)) + (__pyx_v_w * __pyx_v_self->ydw));

  /* "renpy/display/matrix.pxd":39
 *         oz[0] = x * self.zdx + y * self.zdy + z * self.zdz + w * self.zdw
 * 
 *     cdef inline void transform2(Matrix self, float *ox, float *oy, float x, float y, float z, float w):             # <<<<<<<<<<<<<<
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw
 */

  /* function exit code */
  __Pyx_RefNannyFinishContext();
}
static struct __pyx_vtabstruct_5renpy_3gl2_7gl2draw_GL2Draw __pyx_vtable_5renpy_3gl2_7gl2draw_GL2Draw;

static PyObject *__pyx_tp_new_5renpy_3gl2_7gl2draw_GL2Draw(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)o);
  p->__pyx_vtab = __pyx_vtabptr_5renpy_3gl2_7gl2draw_GL2Draw;
  p->window = Py_None; Py_INCREF(Py_None);
  p->virtual_size = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->physical_size = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->drawable_size = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->virtual_box = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->physical_box = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->info = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->old_fullscreen = Py_None; Py_INCREF(Py_None);
  p->fullscreen_surface = Py_None; Py_INCREF(Py_None);
  p->display_info = Py_None; Py_INCREF(Py_None);
  p->clip_cache = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->default_clip = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->shader_cache = Py_None; Py_INCREF(Py_None);
  p->clip_rtt_box = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->drawable_viewport = ((PyObject*)Py_None); Py_INCREF(Py_None);
  p->draw_per_virt = Py_None; Py_INCREF(Py_None);
  p->virt_to_draw = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)Py_None); Py_INCREF(Py_None);
  p->draw_to_virt = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)Py_None); Py_INCREF(Py_None);
  p->draw_transform = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)Py_None); Py_INCREF(Py_None);
  p->texture_loader = ((struct __pyx_obj_5renpy_3gl2_10gl2texture_TextureLoader *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_5renpy_3gl2_7gl2draw_GL2Draw(PyObject *o) {
  struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *p = (struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->window);
  Py_CLEAR(p->virtual_size);
  Py_CLEAR(p->physical_size);
  Py_CLEAR(p->drawable_size);
  Py_CLEAR(p->virtual_box);
  Py_CLEAR(p->physical_box);
  Py_CLEAR(p->info);
  Py_CLEAR(p->old_fullscreen);
  Py_CLEAR(p->fullscreen_surface);
  Py_CLEAR(p->display_info);
  Py_CLEAR(p->clip_cache);
  Py_CLEAR(p->default_clip);
  Py_CLEAR(p->shader_cache);
  Py_CLEAR(p->clip_rtt_box);
  Py_CLEAR(p->drawable_viewport);
  Py_CLEAR(p->draw_per_virt);
  Py_CLEAR(p->virt_to_draw);
  Py_CLEAR(p->draw_to_virt);
  Py_CLEAR(p->draw_transform);
  Py_CLEAR(p->texture_loader);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_5renpy_3gl2_7gl2draw_GL2Draw(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *p = (struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)o;
  if (p->window) {
    e = (*v)(p->window, a); if (e) return e;
  }
  if (p->virtual_size) {
    e = (*v)(p->virtual_size, a); if (e) return e;
  }
  if (p->physical_size) {
    e = (*v)(p->physical_size, a); if (e) return e;
  }
  if (p->drawable_size) {
    e = (*v)(p->drawable_size, a); if (e) return e;
  }
  if (p->virtual_box) {
    e = (*v)(p->virtual_box, a); if (e) return e;
  }
  if (p->physical_box) {
    e = (*v)(p->physical_box, a); if (e) return e;
  }
  if (p->info) {
    e = (*v)(p->info, a); if (e) return e;
  }
  if (p->old_fullscreen) {
    e = (*v)(p->old_fullscreen, a); if (e) return e;
  }
  if (p->fullscreen_surface) {
    e = (*v)(p->fullscreen_surface, a); if (e) return e;
  }
  if (p->display_info) {
    e = (*v)(p->display_info, a); if (e) return e;
  }
  if (p->clip_cache) {
    e = (*v)(p->clip_cache, a); if (e) return e;
  }
  if (p->default_clip) {
    e = (*v)(p->default_clip, a); if (e) return e;
  }
  if (p->shader_cache) {
    e = (*v)(p->shader_cache, a); if (e) return e;
  }
  if (p->clip_rtt_box) {
    e = (*v)(p->clip_rtt_box, a); if (e) return e;
  }
  if (p->drawable_viewport) {
    e = (*v)(p->drawable_viewport, a); if (e) return e;
  }
  if (p->draw_per_virt) {
    e = (*v)(p->draw_per_virt, a); if (e) return e;
  }
  if (p->virt_to_draw) {
    e = (*v)(((PyObject *)p->virt_to_draw), a); if (e) return e;
  }
  if (p->draw_to_virt) {
    e = (*v)(((PyObject *)p->draw_to_virt), a); if (e) return e;
  }
  if (p->draw_transform) {
    e = (*v)(((PyObject *)p->draw_transform), a); if (e) return e;
  }
  if (p->texture_loader) {
    e = (*v)(((PyObject *)p->texture_loader), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_5renpy_3gl2_7gl2draw_GL2Draw(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *p = (struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)o;
  tmp = ((PyObject*)p->window);
  p->window = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->virtual_size);
  p->virtual_size = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->physical_size);
  p->physical_size = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->drawable_size);
  p->drawable_size = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->virtual_box);
  p->virtual_box = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->physical_box);
  p->physical_box = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->info);
  p->info = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->old_fullscreen);
  p->old_fullscreen = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->fullscreen_surface);
  p->fullscreen_surface = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->display_info);
  p->display_info = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->clip_cache);
  p->clip_cache = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->default_clip);
  p->default_clip = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->shader_cache);
  p->shader_cache = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->clip_rtt_box);
  p->clip_rtt_box = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->drawable_viewport);
  p->drawable_viewport = ((PyObject*)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->draw_per_virt);
  p->draw_per_virt = Py_None; Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->virt_to_draw);
  p->virt_to_draw = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->draw_to_virt);
  p->draw_to_virt = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->draw_transform);
  p->draw_transform = ((struct __pyx_obj_5renpy_7display_6matrix_Matrix *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  tmp = ((PyObject*)p->texture_loader);
  p->texture_loader = ((struct __pyx_obj_5renpy_3gl2_10gl2texture_TextureLoader *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_gles(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4gles_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_gles(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4gles_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_angle(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_5angle_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_angle(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_5angle_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_physical_size(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_physical_size(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_3__set__(o, v);
  }
  else {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13physical_size_5__del__(o);
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_drawable_size(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_drawable_size(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_3__set__(o, v);
  }
  else {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13drawable_size_5__del__(o);
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_virtual_box(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_virtual_box(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_3__set__(o, v);
  }
  else {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11virtual_box_5__del__(o);
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_physical_box(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_physical_box(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_3__set__(o, v);
  }
  else {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12physical_box_5__del__(o);
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_info(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4info_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_info(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4info_3__set__(o, v);
  }
  else {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_4info_5__del__(o);
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_fullscreen_surface(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_fullscreen_surface(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_3__set__(o, v);
  }
  else {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fullscreen_surface_5__del__(o);
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_clip_rtt_box(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_clip_rtt_box(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_3__set__(o, v);
  }
  else {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12clip_rtt_box_5__del__(o);
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_per_phys(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_phys_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_per_phys(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_phys_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_drawable_viewport(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_drawable_viewport(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_3__set__(o, v);
  }
  else {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_17drawable_viewport_5__del__(o);
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_per_virt(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_per_virt(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_3__set__(o, v);
  }
  else {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13draw_per_virt_5__del__(o);
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_virt_to_draw(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_virt_to_draw(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_3__set__(o, v);
  }
  else {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12virt_to_draw_5__del__(o);
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_to_virt(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_to_virt(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_3__set__(o, v);
  }
  else {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_12draw_to_virt_5__del__(o);
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_transform(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_transform(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_3__set__(o, v);
  }
  else {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14draw_transform_5__del__(o);
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_fast_redraw_frames(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fast_redraw_frames_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_fast_redraw_frames(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_18fast_redraw_frames_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_texture_loader(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_texture_loader(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_3__set__(o, v);
  }
  else {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_14texture_loader_5__del__(o);
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_default_fbo(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11default_fbo_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_default_fbo(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11default_fbo_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyObject *__pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_current_fbo(PyObject *o, CYTHON_UNUSED void *x) {
  return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11current_fbo_1__get__(o);
}

static int __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_current_fbo(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
  if (v) {
    return __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11current_fbo_3__set__(o, v);
  }
  else {
    PyErr_SetString(PyExc_NotImplementedError, "__del__");
    return -1;
  }
}

static PyMethodDef __pyx_methods_5renpy_3gl2_7gl2draw_GL2Draw[] = {
  {"get_texture_size", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_3get_texture_size, METH_NOARGS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_2get_texture_size},
  {"select_physical_size", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_5select_physical_size, METH_O, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_4select_physical_size},
  {"select_framerate", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_7select_framerate, METH_NOARGS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_6select_framerate},
  {"select_gl_attributes", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_9select_gl_attributes, METH_O, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_8select_gl_attributes},
  {"init", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_11init, METH_O, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_10init},
  {"on_resize", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_13on_resize, METH_VARARGS|METH_KEYWORDS, 0},
  {"resize", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_15resize, METH_NOARGS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_14resize},
  {"update", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_17update, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_16update},
  {"quit", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_19quit, METH_NOARGS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_18quit},
  {"init_fbo", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_21init_fbo, METH_NOARGS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_20init_fbo},
  {"quit_fbo", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_23quit_fbo, METH_NOARGS, 0},
  {"can_block", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_25can_block, METH_NOARGS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_24can_block},
  {"should_redraw", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_27should_redraw, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_26should_redraw},
  {"mutated_surface", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_29mutated_surface, METH_O, 0},
  {"load_texture", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_31load_texture, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_30load_texture},
  {"ready_one_texture", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_33ready_one_texture, METH_NOARGS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_32ready_one_texture},
  {"solid_texture", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_35solid_texture, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_34solid_texture},
  {"flip", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_37flip, METH_NOARGS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_36flip},
  {"draw_screen", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_39draw_screen, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_38draw_screen},
  {"load_all_textures", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_41load_all_textures, METH_O, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_40load_all_textures},
  {"render_to_texture", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_43render_to_texture, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_42render_to_texture},
  {"is_pixel_opaque", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_45is_pixel_opaque, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_44is_pixel_opaque},
  {"translate_point", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_47translate_point, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_46translate_point},
  {"untranslate_point", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_49untranslate_point, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5renpy_3gl2_7gl2draw_7GL2Draw_48untranslate_point},
  {"mouse_event", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_51mouse_event, METH_O, 0},
  {"get_mouse_pos", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_53get_mouse_pos, METH_NOARGS, 0},
  {"set_mouse_pos", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_55set_mouse_pos, METH_VARARGS|METH_KEYWORDS, 0},
  {"screenshot", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_57screenshot, METH_O, 0},
  {"kill_textures", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_59kill_textures, METH_NOARGS, 0},
  {"event_peek_sleep", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_61event_peek_sleep, METH_NOARGS, 0},
  {"get_physical_size", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_63get_physical_size, METH_NOARGS, 0},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_65__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_67__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static struct PyGetSetDef __pyx_getsets_5renpy_3gl2_7gl2draw_GL2Draw[] = {
  {(char *)"gles", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_gles, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_gles, (char *)0, 0},
  {(char *)"angle", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_angle, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_angle, (char *)0, 0},
  {(char *)"physical_size", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_physical_size, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_physical_size, (char *)0, 0},
  {(char *)"drawable_size", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_drawable_size, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_drawable_size, (char *)0, 0},
  {(char *)"virtual_box", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_virtual_box, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_virtual_box, (char *)0, 0},
  {(char *)"physical_box", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_physical_box, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_physical_box, (char *)0, 0},
  {(char *)"info", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_info, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_info, (char *)0, 0},
  {(char *)"fullscreen_surface", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_fullscreen_surface, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_fullscreen_surface, (char *)0, 0},
  {(char *)"clip_rtt_box", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_clip_rtt_box, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_clip_rtt_box, (char *)0, 0},
  {(char *)"draw_per_phys", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_per_phys, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_per_phys, (char *)0, 0},
  {(char *)"drawable_viewport", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_drawable_viewport, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_drawable_viewport, (char *)0, 0},
  {(char *)"draw_per_virt", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_per_virt, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_per_virt, (char *)0, 0},
  {(char *)"virt_to_draw", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_virt_to_draw, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_virt_to_draw, (char *)0, 0},
  {(char *)"draw_to_virt", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_to_virt, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_to_virt, (char *)0, 0},
  {(char *)"draw_transform", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_transform, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_draw_transform, (char *)0, 0},
  {(char *)"fast_redraw_frames", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_fast_redraw_frames, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_fast_redraw_frames, (char *)0, 0},
  {(char *)"texture_loader", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_texture_loader, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_texture_loader, (char *)0, 0},
  {(char *)"default_fbo", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_default_fbo, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_default_fbo, (char *)0, 0},
  {(char *)"current_fbo", __pyx_getprop_5renpy_3gl2_7gl2draw_7GL2Draw_current_fbo, __pyx_setprop_5renpy_3gl2_7gl2draw_7GL2Draw_current_fbo, (char *)0, 0},
  {0, 0, 0, 0, 0}
};

static PyTypeObject __pyx_type_5renpy_3gl2_7gl2draw_GL2Draw = {
  PyVarObject_HEAD_INIT(0, 0)
  "renpy.gl2.gl2draw.GL2Draw", /*tp_name*/
  sizeof(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_5renpy_3gl2_7gl2draw_GL2Draw, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_5renpy_3gl2_7gl2draw_GL2Draw, /*tp_traverse*/
  __pyx_tp_clear_5renpy_3gl2_7gl2draw_GL2Draw, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_5renpy_3gl2_7gl2draw_GL2Draw, /*tp_methods*/
  0, /*tp_members*/
  __pyx_getsets_5renpy_3gl2_7gl2draw_GL2Draw, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_5renpy_3gl2_7gl2draw_7GL2Draw_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_5renpy_3gl2_7gl2draw_GL2Draw, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};
static struct __pyx_vtabstruct_5renpy_3gl2_7gl2draw_GL2DrawingContext __pyx_vtable_5renpy_3gl2_7gl2draw_GL2DrawingContext;

static PyObject *__pyx_tp_new_5renpy_3gl2_7gl2draw_GL2DrawingContext(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *p;
  PyObject *o;
  if (likely((t->tp_flags & Py_TPFLAGS_IS_ABSTRACT) == 0)) {
    o = (*t->tp_alloc)(t, 0);
  } else {
    o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
  }
  if (unlikely(!o)) return 0;
  p = ((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *)o);
  p->__pyx_vtab = __pyx_vtabptr_5renpy_3gl2_7gl2draw_GL2DrawingContext;
  p->gl2draw = ((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)Py_None); Py_INCREF(Py_None);
  return o;
}

static void __pyx_tp_dealloc_5renpy_3gl2_7gl2draw_GL2DrawingContext(PyObject *o) {
  struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *p = (struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *)o;
  #if CYTHON_USE_TP_FINALIZE
  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
    if (PyObject_CallFinalizerFromDealloc(o)) return;
  }
  #endif
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->gl2draw);
  (*Py_TYPE(o)->tp_free)(o);
}

static int __pyx_tp_traverse_5renpy_3gl2_7gl2draw_GL2DrawingContext(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *p = (struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *)o;
  if (p->gl2draw) {
    e = (*v)(((PyObject *)p->gl2draw), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_5renpy_3gl2_7gl2draw_GL2DrawingContext(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *p = (struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *)o;
  tmp = ((PyObject*)p->gl2draw);
  p->gl2draw = ((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyMethodDef __pyx_methods_5renpy_3gl2_7gl2draw_GL2DrawingContext[] = {
  {"merge_properties", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_3merge_properties, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5renpy_3gl2_7gl2draw_17GL2DrawingContext_2merge_properties},
  {"draw_model", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_5draw_model, METH_VARARGS|METH_KEYWORDS, 0},
  {"draw_one", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_7draw_one, METH_VARARGS|METH_KEYWORDS, __pyx_doc_5renpy_3gl2_7gl2draw_17GL2DrawingContext_6draw_one},
  {"draw", (PyCFunction)(void*)(PyCFunctionWithKeywords)__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_9draw, METH_VARARGS|METH_KEYWORDS, 0},
  {"__reduce_cython__", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_11__reduce_cython__, METH_NOARGS, 0},
  {"__setstate_cython__", (PyCFunction)__pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_13__setstate_cython__, METH_O, 0},
  {0, 0, 0, 0}
};

static PyTypeObject __pyx_type_5renpy_3gl2_7gl2draw_GL2DrawingContext = {
  PyVarObject_HEAD_INIT(0, 0)
  "renpy.gl2.gl2draw.GL2DrawingContext", /*tp_name*/
  sizeof(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_5renpy_3gl2_7gl2draw_GL2DrawingContext, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_BASETYPE|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  "\n    This is an object that represents the state of the GL rendering\n    system. It's responsible for walking the tree of Renders and\n    TextureMeshes, updating its state as appropriate. When it hits\n    a node where drawing is involved, it's responsible for issuing\n    the appropriate draw calls to OpenGL, using the saved state.\n    ", /*tp_doc*/
  __pyx_tp_traverse_5renpy_3gl2_7gl2draw_GL2DrawingContext, /*tp_traverse*/
  __pyx_tp_clear_5renpy_3gl2_7gl2draw_GL2DrawingContext, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  __pyx_methods_5renpy_3gl2_7gl2draw_GL2DrawingContext, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  __pyx_pw_5renpy_3gl2_7gl2draw_17GL2DrawingContext_1__init__, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_5renpy_3gl2_7gl2draw_GL2DrawingContext, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize *__pyx_freelist_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize[8];
static int __pyx_freecount_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize = 0;

static PyObject *__pyx_tp_new_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize)))) {
    o = (PyObject*)__pyx_freelist_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize[--__pyx_freecount_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize];
    memset(o, 0, sizeof(struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize(PyObject *o) {
  struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize *p = (struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_v_self);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize)))) {
    __pyx_freelist_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize[__pyx_freecount_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize++] = ((struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize *p = (struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize *)o;
  if (p->__pyx_v_self) {
    e = (*v)(((PyObject *)p->__pyx_v_self), a); if (e) return e;
  }
  return 0;
}

static int __pyx_tp_clear_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize(PyObject *o) {
  PyObject* tmp;
  struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize *p = (struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize *)o;
  tmp = ((PyObject*)p->__pyx_v_self);
  p->__pyx_v_self = ((struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *)Py_None); Py_INCREF(Py_None);
  Py_XDECREF(tmp);
  return 0;
}

static PyTypeObject __pyx_type_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize = {
  PyVarObject_HEAD_INIT(0, 0)
  "renpy.gl2.gl2draw.__pyx_scope_struct__on_resize", /*tp_name*/
  sizeof(struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize, /*tp_traverse*/
  __pyx_tp_clear_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr *__pyx_freelist_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr[8];
static int __pyx_freecount_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr = 0;

static PyObject *__pyx_tp_new_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr(PyTypeObject *t, CYTHON_UNUSED PyObject *a, CYTHON_UNUSED PyObject *k) {
  PyObject *o;
  if (CYTHON_COMPILING_IN_CPYTHON && likely((__pyx_freecount_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr > 0) & (t->tp_basicsize == sizeof(struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr)))) {
    o = (PyObject*)__pyx_freelist_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr[--__pyx_freecount_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr];
    memset(o, 0, sizeof(struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr));
    (void) PyObject_INIT(o, t);
    PyObject_GC_Track(o);
  } else {
    o = (*t->tp_alloc)(t, 0);
    if (unlikely(!o)) return 0;
  }
  return o;
}

static void __pyx_tp_dealloc_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr(PyObject *o) {
  struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr *p = (struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr *)o;
  PyObject_GC_UnTrack(o);
  Py_CLEAR(p->__pyx_outer_scope);
  Py_CLEAR(p->__pyx_v_i);
  Py_CLEAR(p->__pyx_t_0);
  if (CYTHON_COMPILING_IN_CPYTHON && ((__pyx_freecount_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr < 8) & (Py_TYPE(o)->tp_basicsize == sizeof(struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr)))) {
    __pyx_freelist_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr[__pyx_freecount_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr++] = ((struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr *)o);
  } else {
    (*Py_TYPE(o)->tp_free)(o);
  }
}

static int __pyx_tp_traverse_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr(PyObject *o, visitproc v, void *a) {
  int e;
  struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr *p = (struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr *)o;
  if (p->__pyx_outer_scope) {
    e = (*v)(((PyObject *)p->__pyx_outer_scope), a); if (e) return e;
  }
  if (p->__pyx_v_i) {
    e = (*v)(p->__pyx_v_i, a); if (e) return e;
  }
  if (p->__pyx_t_0) {
    e = (*v)(p->__pyx_t_0, a); if (e) return e;
  }
  return 0;
}

static PyTypeObject __pyx_type_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr = {
  PyVarObject_HEAD_INIT(0, 0)
  "renpy.gl2.gl2draw.__pyx_scope_struct_1_genexpr", /*tp_name*/
  sizeof(struct __pyx_obj_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr), /*tp_basicsize*/
  0, /*tp_itemsize*/
  __pyx_tp_dealloc_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr, /*tp_dealloc*/
  #if PY_VERSION_HEX < 0x030800b4
  0, /*tp_print*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4
  0, /*tp_vectorcall_offset*/
  #endif
  0, /*tp_getattr*/
  0, /*tp_setattr*/
  #if PY_MAJOR_VERSION < 3
  0, /*tp_compare*/
  #endif
  #if PY_MAJOR_VERSION >= 3
  0, /*tp_as_async*/
  #endif
  0, /*tp_repr*/
  0, /*tp_as_number*/
  0, /*tp_as_sequence*/
  0, /*tp_as_mapping*/
  0, /*tp_hash*/
  0, /*tp_call*/
  0, /*tp_str*/
  0, /*tp_getattro*/
  0, /*tp_setattro*/
  0, /*tp_as_buffer*/
  Py_TPFLAGS_DEFAULT|Py_TPFLAGS_HAVE_VERSION_TAG|Py_TPFLAGS_CHECKTYPES|Py_TPFLAGS_HAVE_NEWBUFFER|Py_TPFLAGS_HAVE_GC, /*tp_flags*/
  0, /*tp_doc*/
  __pyx_tp_traverse_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr, /*tp_traverse*/
  0, /*tp_clear*/
  0, /*tp_richcompare*/
  0, /*tp_weaklistoffset*/
  0, /*tp_iter*/
  0, /*tp_iternext*/
  0, /*tp_methods*/
  0, /*tp_members*/
  0, /*tp_getset*/
  0, /*tp_base*/
  0, /*tp_dict*/
  0, /*tp_descr_get*/
  0, /*tp_descr_set*/
  0, /*tp_dictoffset*/
  0, /*tp_init*/
  0, /*tp_alloc*/
  __pyx_tp_new_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr, /*tp_new*/
  0, /*tp_free*/
  0, /*tp_is_gc*/
  0, /*tp_bases*/
  0, /*tp_mro*/
  0, /*tp_cache*/
  0, /*tp_subclasses*/
  0, /*tp_weaklist*/
  0, /*tp_del*/
  0, /*tp_version_tag*/
  #if PY_VERSION_HEX >= 0x030400a1
  0, /*tp_finalize*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b1
  0, /*tp_vectorcall*/
  #endif
  #if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
  0, /*tp_print*/
  #endif
};

static PyMethodDef __pyx_methods[] = {
  {0, 0, 0, 0}
};

#if PY_MAJOR_VERSION >= 3
#if CYTHON_PEP489_MULTI_PHASE_INIT
static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/
static int __pyx_pymod_exec_gl2draw(PyObject* module); /*proto*/
static PyModuleDef_Slot __pyx_moduledef_slots[] = {
  {Py_mod_create, (void*)__pyx_pymod_create},
  {Py_mod_exec, (void*)__pyx_pymod_exec_gl2draw},
  {0, NULL}
};
#endif

static struct PyModuleDef __pyx_moduledef = {
    PyModuleDef_HEAD_INIT,
    "gl2draw",
    0, /* m_doc */
  #if CYTHON_PEP489_MULTI_PHASE_INIT
    0, /* m_size */
  #else
    -1, /* m_size */
  #endif
    __pyx_methods /* m_methods */,
  #if CYTHON_PEP489_MULTI_PHASE_INIT
    __pyx_moduledef_slots, /* m_slots */
  #else
    NULL, /* m_reload */
  #endif
    NULL, /* m_traverse */
    NULL, /* m_clear */
    NULL /* m_free */
};
#endif
#ifndef CYTHON_SMALL_CODE
#if defined(__clang__)
    #define CYTHON_SMALL_CODE
#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3))
    #define CYTHON_SMALL_CODE __attribute__((cold))
#else
    #define CYTHON_SMALL_CODE
#endif
#endif

static __Pyx_StringTabEntry __pyx_string_tab[] = {
  {&__pyx_kp_s_0, __pyx_k_0, sizeof(__pyx_k_0), 0, 0, 1, 0},
  {&__pyx_kp_s_1, __pyx_k_1, sizeof(__pyx_k_1), 0, 0, 1, 0},
  {&__pyx_n_s_Color, __pyx_k_Color, sizeof(__pyx_k_Color), 0, 0, 1, 1},
  {&__pyx_kp_s_Could_not_get_pygame_screen_r, __pyx_k_Could_not_get_pygame_screen_r, sizeof(__pyx_k_Could_not_get_pygame_screen_r), 0, 0, 1, 0},
  {&__pyx_n_s_DISSOLVE, __pyx_k_DISSOLVE, sizeof(__pyx_k_DISSOLVE), 0, 0, 1, 1},
  {&__pyx_n_s_DOUBLEBUF, __pyx_k_DOUBLEBUF, sizeof(__pyx_k_DOUBLEBUF), 0, 0, 1, 1},
  {&__pyx_kp_s_Display_Info_s, __pyx_k_Display_Info_s, sizeof(__pyx_k_Display_Info_s), 0, 0, 1, 0},
  {&__pyx_kp_s_Extensions, __pyx_k_Extensions, sizeof(__pyx_k_Extensions), 0, 0, 1, 0},
  {&__pyx_kp_s_Flip_failed_r, __pyx_k_Flip_failed_r, sizeof(__pyx_k_Flip_failed_r), 0, 0, 1, 0},
  {&__pyx_kp_s_Fullscreen_mode, __pyx_k_Fullscreen_mode, sizeof(__pyx_k_Fullscreen_mode), 0, 0, 1, 0},
  {&__pyx_n_s_GL2Draw, __pyx_k_GL2Draw, sizeof(__pyx_k_GL2Draw), 0, 0, 1, 1},
  {&__pyx_n_s_GL2DrawingContext, __pyx_k_GL2DrawingContext, sizeof(__pyx_k_GL2DrawingContext), 0, 0, 1, 1},
  {&__pyx_n_s_GL_ALPHA_SIZE, __pyx_k_GL_ALPHA_SIZE, sizeof(__pyx_k_GL_ALPHA_SIZE), 0, 0, 1, 1},
  {&__pyx_n_s_GL_BLUE_SIZE, __pyx_k_GL_BLUE_SIZE, sizeof(__pyx_k_GL_BLUE_SIZE), 0, 0, 1, 1},
  {&__pyx_n_s_GL_CONTEXT_MAJOR_VERSION, __pyx_k_GL_CONTEXT_MAJOR_VERSION, sizeof(__pyx_k_GL_CONTEXT_MAJOR_VERSION), 0, 0, 1, 1},
  {&__pyx_n_s_GL_CONTEXT_MINOR_VERSION, __pyx_k_GL_CONTEXT_MINOR_VERSION, sizeof(__pyx_k_GL_CONTEXT_MINOR_VERSION), 0, 0, 1, 1},
  {&__pyx_n_s_GL_CONTEXT_PROFILE_COMPATIBILITY, __pyx_k_GL_CONTEXT_PROFILE_COMPATIBILITY, sizeof(__pyx_k_GL_CONTEXT_PROFILE_COMPATIBILITY), 0, 0, 1, 1},
  {&__pyx_n_s_GL_CONTEXT_PROFILE_ES, __pyx_k_GL_CONTEXT_PROFILE_ES, sizeof(__pyx_k_GL_CONTEXT_PROFILE_ES), 0, 0, 1, 1},
  {&__pyx_n_s_GL_CONTEXT_PROFILE_MASK, __pyx_k_GL_CONTEXT_PROFILE_MASK, sizeof(__pyx_k_GL_CONTEXT_PROFILE_MASK), 0, 0, 1, 1},
  {&__pyx_n_s_GL_DEPTH_SIZE, __pyx_k_GL_DEPTH_SIZE, sizeof(__pyx_k_GL_DEPTH_SIZE), 0, 0, 1, 1},
  {&__pyx_kp_s_GL_Disabled, __pyx_k_GL_Disabled, sizeof(__pyx_k_GL_Disabled), 0, 0, 1, 0},
  {&__pyx_n_s_GL_GREEN_SIZE, __pyx_k_GL_GREEN_SIZE, sizeof(__pyx_k_GL_GREEN_SIZE), 0, 0, 1, 1},
  {&__pyx_n_s_GL_RED_SIZE, __pyx_k_GL_RED_SIZE, sizeof(__pyx_k_GL_RED_SIZE), 0, 0, 1, 1},
  {&__pyx_n_s_GL_SWAP_CONTROL, __pyx_k_GL_SWAP_CONTROL, sizeof(__pyx_k_GL_SWAP_CONTROL), 0, 0, 1, 1},
  {&__pyx_n_s_IDENTITY, __pyx_k_IDENTITY, sizeof(__pyx_k_IDENTITY), 0, 0, 1, 1},
  {&__pyx_n_s_IMAGEDISSOLVE, __pyx_k_IMAGEDISSOLVE, sizeof(__pyx_k_IMAGEDISSOLVE), 0, 0, 1, 1},
  {&__pyx_kp_s_Incompatible_checksums_s_vs_0x11, __pyx_k_Incompatible_checksums_s_vs_0x11, sizeof(__pyx_k_Incompatible_checksums_s_vs_0x11), 0, 0, 1, 0},
  {&__pyx_kp_s_Incompatible_checksums_s_vs_0xc6, __pyx_k_Incompatible_checksums_s_vs_0xc6, sizeof(__pyx_k_Incompatible_checksums_s_vs_0xc6), 0, 0, 1, 0},
  {&__pyx_kp_s_Maximum_texture_size_dx_d, __pyx_k_Maximum_texture_size_dx_d, sizeof(__pyx_k_Maximum_texture_size_dx_d), 0, 0, 1, 0},
  {&__pyx_n_s_OPENGL, __pyx_k_OPENGL, sizeof(__pyx_k_OPENGL), 0, 0, 1, 1},
  {&__pyx_kp_s_Opening_in_fullscreen_failed_r, __pyx_k_Opening_in_fullscreen_failed_r, sizeof(__pyx_k_Opening_in_fullscreen_failed_r), 0, 0, 1, 0},
  {&__pyx_n_s_PIXELLATE, __pyx_k_PIXELLATE, sizeof(__pyx_k_PIXELLATE), 0, 0, 1, 1},
  {&__pyx_n_s_PickleError, __pyx_k_PickleError, sizeof(__pyx_k_PickleError), 0, 0, 1, 1},
  {&__pyx_n_s_RENPY_FAIL, __pyx_k_RENPY_FAIL, sizeof(__pyx_k_RENPY_FAIL), 0, 0, 1, 1},
  {&__pyx_n_s_RENPY_GL_VSYNC, __pyx_k_RENPY_GL_VSYNC, sizeof(__pyx_k_RENPY_GL_VSYNC), 0, 0, 1, 1},
  {&__pyx_n_s_RESIZABLE, __pyx_k_RESIZABLE, sizeof(__pyx_k_RESIZABLE), 0, 0, 1, 1},
  {&__pyx_kp_s_Renderer_r, __pyx_k_Renderer_r, sizeof(__pyx_k_Renderer_r), 0, 0, 1, 0},
  {&__pyx_n_s_SDL_OPENGL_ES_DRIVER, __pyx_k_SDL_OPENGL_ES_DRIVER, sizeof(__pyx_k_SDL_OPENGL_ES_DRIVER), 0, 0, 1, 1},
  {&__pyx_kp_s_Screen_sizes_virtual_r_physical, __pyx_k_Screen_sizes_virtual_r_physical, sizeof(__pyx_k_Screen_sizes_virtual_r_physical), 0, 0, 1, 0},
  {&__pyx_n_s_ShaderCache, __pyx_k_ShaderCache, sizeof(__pyx_k_ShaderCache), 0, 0, 1, 1},
  {&__pyx_n_s_Surface, __pyx_k_Surface, sizeof(__pyx_k_Surface), 0, 0, 1, 1},
  {&__pyx_n_s_Texture, __pyx_k_Texture, sizeof(__pyx_k_Texture), 0, 0, 1, 1},
  {&__pyx_n_s_TextureLoader, __pyx_k_TextureLoader, sizeof(__pyx_k_TextureLoader), 0, 0, 1, 1},
  {&__pyx_kp_s_Vendor_r, __pyx_k_Vendor_r, sizeof(__pyx_k_Vendor_r), 0, 0, 1, 0},
  {&__pyx_kp_s_Version_r, __pyx_k_Version_r, sizeof(__pyx_k_Version_r), 0, 0, 1, 0},
  {&__pyx_n_s_WINDOW_ALLOW_HIGHDPI, __pyx_k_WINDOW_ALLOW_HIGHDPI, sizeof(__pyx_k_WINDOW_ALLOW_HIGHDPI), 0, 0, 1, 1},
  {&__pyx_n_s_WINDOW_FULLSCREEN, __pyx_k_WINDOW_FULLSCREEN, sizeof(__pyx_k_WINDOW_FULLSCREEN), 0, 0, 1, 1},
  {&__pyx_n_s_WINDOW_FULLSCREEN_DESKTOP, __pyx_k_WINDOW_FULLSCREEN_DESKTOP, sizeof(__pyx_k_WINDOW_FULLSCREEN_DESKTOP), 0, 0, 1, 1},
  {&__pyx_n_s_WINDOW_MAXIMIZED, __pyx_k_WINDOW_MAXIMIZED, sizeof(__pyx_k_WINDOW_MAXIMIZED), 0, 0, 1, 1},
  {&__pyx_kp_s_Windowed_mode, __pyx_k_Windowed_mode, sizeof(__pyx_k_Windowed_mode), 0, 0, 1, 0},
  {&__pyx_n_s__13, __pyx_k__13, sizeof(__pyx_k__13), 0, 0, 1, 1},
  {&__pyx_kp_s__6, __pyx_k__6, sizeof(__pyx_k__6), 0, 0, 1, 0},
  {&__pyx_n_s_additive, __pyx_k_additive, sizeof(__pyx_k_additive), 0, 0, 1, 1},
  {&__pyx_n_s_adjust_view_size, __pyx_k_adjust_view_size, sizeof(__pyx_k_adjust_view_size), 0, 0, 1, 1},
  {&__pyx_kp_s_after_broken_vsync_sleep, __pyx_k_after_broken_vsync_sleep, sizeof(__pyx_k_after_broken_vsync_sleep), 0, 0, 1, 0},
  {&__pyx_n_s_alpha, __pyx_k_alpha, sizeof(__pyx_k_alpha), 0, 0, 1, 1},
  {&__pyx_n_s_android, __pyx_k_android, sizeof(__pyx_k_android), 0, 0, 1, 1},
  {&__pyx_n_s_angle2, __pyx_k_angle2, sizeof(__pyx_k_angle2), 0, 0, 1, 1},
  {&__pyx_n_s_append, __pyx_k_append, sizeof(__pyx_k_append), 0, 0, 1, 1},
  {&__pyx_n_s_args, __pyx_k_args, sizeof(__pyx_k_args), 0, 0, 1, 1},
  {&__pyx_n_s_array, __pyx_k_array, sizeof(__pyx_k_array), 0, 0, 1, 1},
  {&__pyx_n_s_before_resize, __pyx_k_before_resize, sizeof(__pyx_k_before_resize), 0, 0, 1, 1},
  {&__pyx_kp_s_cache_shaders_txt, __pyx_k_cache_shaders_txt, sizeof(__pyx_k_cache_shaders_txt), 0, 0, 1, 0},
  {&__pyx_n_s_cached_texture, __pyx_k_cached_texture, sizeof(__pyx_k_cached_texture), 0, 0, 1, 1},
  {&__pyx_n_s_can_block, __pyx_k_can_block, sizeof(__pyx_k_can_block), 0, 0, 1, 1},
  {&__pyx_n_s_check_missing_functions, __pyx_k_check_missing_functions, sizeof(__pyx_k_check_missing_functions), 0, 0, 1, 1},
  {&__pyx_n_s_child, __pyx_k_child, sizeof(__pyx_k_child), 0, 0, 1, 1},
  {&__pyx_n_s_cleanup, __pyx_k_cleanup, sizeof(__pyx_k_cleanup), 0, 0, 1, 1},
  {&__pyx_n_s_clear, __pyx_k_clear, sizeof(__pyx_k_clear), 0, 0, 1, 1},
  {&__pyx_n_s_clear_missing_functions, __pyx_k_clear_missing_functions, sizeof(__pyx_k_clear_missing_functions), 0, 0, 1, 1},
  {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1},
  {&__pyx_n_s_clip_polygon, __pyx_k_clip_polygon, sizeof(__pyx_k_clip_polygon), 0, 0, 1, 1},
  {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1},
  {&__pyx_n_s_color, __pyx_k_color, sizeof(__pyx_k_color), 0, 0, 1, 1},
  {&__pyx_n_s_config, __pyx_k_config, sizeof(__pyx_k_config), 0, 0, 1, 1},
  {&__pyx_n_s_core, __pyx_k_core, sizeof(__pyx_k_core), 0, 0, 1, 1},
  {&__pyx_n_s_crop, __pyx_k_crop, sizeof(__pyx_k_crop), 0, 0, 1, 1},
  {&__pyx_n_s_current_h, __pyx_k_current_h, sizeof(__pyx_k_current_h), 0, 0, 1, 1},
  {&__pyx_n_s_current_w, __pyx_k_current_w, sizeof(__pyx_k_current_w), 0, 0, 1, 1},
  {&__pyx_n_s_debug, __pyx_k_debug, sizeof(__pyx_k_debug), 0, 0, 1, 1},
  {&__pyx_n_s_depth_size, __pyx_k_depth_size, sizeof(__pyx_k_depth_size), 0, 0, 1, 1},
  {&__pyx_n_s_dict, __pyx_k_dict, sizeof(__pyx_k_dict), 0, 0, 1, 1},
  {&__pyx_n_s_display, __pyx_k_display, sizeof(__pyx_k_display), 0, 0, 1, 1},
  {&__pyx_n_s_display_reset, __pyx_k_display_reset, sizeof(__pyx_k_display_reset), 0, 0, 1, 1},
  {&__pyx_n_s_dpi_scale, __pyx_k_dpi_scale, sizeof(__pyx_k_dpi_scale), 0, 0, 1, 1},
  {&__pyx_n_s_draw, __pyx_k_draw, sizeof(__pyx_k_draw), 0, 0, 1, 1},
  {&__pyx_n_s_draw_model, __pyx_k_draw_model, sizeof(__pyx_k_draw_model), 0, 0, 1, 1},
  {&__pyx_n_s_draw_one, __pyx_k_draw_one, sizeof(__pyx_k_draw_one), 0, 0, 1, 1},
  {&__pyx_n_s_draw_screen, __pyx_k_draw_screen, sizeof(__pyx_k_draw_screen), 0, 0, 1, 1},
  {&__pyx_n_s_emscripten, __pyx_k_emscripten, sizeof(__pyx_k_emscripten), 0, 0, 1, 1},
  {&__pyx_n_s_enumerate, __pyx_k_enumerate, sizeof(__pyx_k_enumerate), 0, 0, 1, 1},
  {&__pyx_n_s_environ, __pyx_k_environ, sizeof(__pyx_k_environ), 0, 0, 1, 1},
  {&__pyx_n_s_error, __pyx_k_error, sizeof(__pyx_k_error), 0, 0, 1, 1},
  {&__pyx_n_s_fast_redraw_frames, __pyx_k_fast_redraw_frames, sizeof(__pyx_k_fast_redraw_frames), 0, 0, 1, 1},
  {&__pyx_n_s_fbo_size, __pyx_k_fbo_size, sizeof(__pyx_k_fbo_size), 0, 0, 1, 1},
  {&__pyx_n_s_finish, __pyx_k_finish, sizeof(__pyx_k_finish), 0, 0, 1, 1},
  {&__pyx_n_s_first, __pyx_k_first, sizeof(__pyx_k_first), 0, 0, 1, 1},
  {&__pyx_n_s_first_pass, __pyx_k_first_pass, sizeof(__pyx_k_first_pass), 0, 0, 1, 1},
  {&__pyx_n_s_flip, __pyx_k_flip, sizeof(__pyx_k_flip), 0, 0, 1, 1},
  {&__pyx_n_s_flip_unscaled, __pyx_k_flip_unscaled, sizeof(__pyx_k_flip_unscaled), 0, 0, 1, 1},
  {&__pyx_n_s_force, __pyx_k_force, sizeof(__pyx_k_force), 0, 0, 1, 1},
  {&__pyx_n_s_forward, __pyx_k_forward, sizeof(__pyx_k_forward), 0, 0, 1, 1},
  {&__pyx_n_s_frame_duration, __pyx_k_frame_duration, sizeof(__pyx_k_frame_duration), 0, 0, 1, 1},
  {&__pyx_n_s_frame_time, __pyx_k_frame_time, sizeof(__pyx_k_frame_time), 0, 0, 1, 1},
  {&__pyx_n_s_frame_times, __pyx_k_frame_times, sizeof(__pyx_k_frame_times), 0, 0, 1, 1},
  {&__pyx_n_s_fullscreen, __pyx_k_fullscreen, sizeof(__pyx_k_fullscreen), 0, 0, 1, 1},
  {&__pyx_n_s_game, __pyx_k_game, sizeof(__pyx_k_game), 0, 0, 1, 1},
  {&__pyx_n_s_genexpr, __pyx_k_genexpr, sizeof(__pyx_k_genexpr), 0, 0, 1, 1},
  {&__pyx_n_s_geometry, __pyx_k_geometry, sizeof(__pyx_k_geometry), 0, 0, 1, 1},
  {&__pyx_n_s_get, __pyx_k_get, sizeof(__pyx_k_get), 0, 0, 1, 1},
  {&__pyx_n_s_get_display_bounds, __pyx_k_get_display_bounds, sizeof(__pyx_k_get_display_bounds), 0, 0, 1, 1},
  {&__pyx_n_s_get_drawable_size, __pyx_k_get_drawable_size, sizeof(__pyx_k_get_drawable_size), 0, 0, 1, 1},
  {&__pyx_n_s_get_flags, __pyx_k_get_flags, sizeof(__pyx_k_get_flags), 0, 0, 1, 1},
  {&__pyx_n_s_get_info, __pyx_k_get_info, sizeof(__pyx_k_get_info), 0, 0, 1, 1},
  {&__pyx_n_s_get_physical_size, __pyx_k_get_physical_size, sizeof(__pyx_k_get_physical_size), 0, 0, 1, 1},
  {&__pyx_n_s_get_pos, __pyx_k_get_pos, sizeof(__pyx_k_get_pos), 0, 0, 1, 1},
  {&__pyx_n_s_get_size, __pyx_k_get_size, sizeof(__pyx_k_get_size), 0, 0, 1, 1},
  {&__pyx_n_s_get_surface, __pyx_k_get_surface, sizeof(__pyx_k_get_surface), 0, 0, 1, 1},
  {&__pyx_n_s_get_texture_size, __pyx_k_get_texture_size, sizeof(__pyx_k_get_texture_size), 0, 0, 1, 1},
  {&__pyx_n_s_get_window, __pyx_k_get_window, sizeof(__pyx_k_get_window), 0, 0, 1, 1},
  {&__pyx_n_s_get_window_flags, __pyx_k_get_window_flags, sizeof(__pyx_k_get_window_flags), 0, 0, 1, 1},
  {&__pyx_n_s_getstate, __pyx_k_getstate, sizeof(__pyx_k_getstate), 0, 0, 1, 1},
  {&__pyx_n_s_gl, __pyx_k_gl, sizeof(__pyx_k_gl), 0, 0, 1, 1},
  {&__pyx_n_s_gl2, __pyx_k_gl2, sizeof(__pyx_k_gl2), 0, 0, 1, 1},
  {&__pyx_n_s_gl2functions, __pyx_k_gl2functions, sizeof(__pyx_k_gl2functions), 0, 0, 1, 1},
  {&__pyx_n_s_gl_clear_color, __pyx_k_gl_clear_color, sizeof(__pyx_k_gl_clear_color), 0, 0, 1, 1},
  {&__pyx_n_s_gl_enable, __pyx_k_gl_enable, sizeof(__pyx_k_gl_enable), 0, 0, 1, 1},
  {&__pyx_n_s_gl_framerate, __pyx_k_gl_framerate, sizeof(__pyx_k_gl_framerate), 0, 0, 1, 1},
  {&__pyx_n_s_gl_powersave, __pyx_k_gl_powersave, sizeof(__pyx_k_gl_powersave), 0, 0, 1, 1},
  {&__pyx_n_s_gl_reset_attributes, __pyx_k_gl_reset_attributes, sizeof(__pyx_k_gl_reset_attributes), 0, 0, 1, 1},
  {&__pyx_n_s_gl_resize, __pyx_k_gl_resize, sizeof(__pyx_k_gl_resize), 0, 0, 1, 1},
  {&__pyx_n_s_gl_set_attribute, __pyx_k_gl_set_attribute, sizeof(__pyx_k_gl_set_attribute), 0, 0, 1, 1},
  {&__pyx_n_s_gl_set_attributes, __pyx_k_gl_set_attributes, sizeof(__pyx_k_gl_set_attributes), 0, 0, 1, 1},
  {&__pyx_n_s_gl_tearing, __pyx_k_gl_tearing, sizeof(__pyx_k_gl_tearing), 0, 0, 1, 1},
  {&__pyx_n_s_gles2, __pyx_k_gles2, sizeof(__pyx_k_gles2), 0, 0, 1, 1},
  {&__pyx_n_s_h, __pyx_k_h, sizeof(__pyx_k_h), 0, 0, 1, 1},
  {&__pyx_n_s_height, __pyx_k_height, sizeof(__pyx_k_height), 0, 0, 1, 1},
  {&__pyx_n_s_hint, __pyx_k_hint, sizeof(__pyx_k_hint), 0, 0, 1, 1},
  {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
  {&__pyx_n_s_init, __pyx_k_init, sizeof(__pyx_k_init), 0, 0, 1, 1},
  {&__pyx_n_s_init_fbo, __pyx_k_init_fbo, sizeof(__pyx_k_init_fbo), 0, 0, 1, 1},
  {&__pyx_n_s_init_time, __pyx_k_init_time, sizeof(__pyx_k_init_time), 0, 0, 1, 1},
  {&__pyx_n_s_interface, __pyx_k_interface, sizeof(__pyx_k_interface), 0, 0, 1, 1},
  {&__pyx_n_s_ios, __pyx_k_ios, sizeof(__pyx_k_ios), 0, 0, 1, 1},
  {&__pyx_n_s_is_opaque, __pyx_k_is_opaque, sizeof(__pyx_k_is_opaque), 0, 0, 1, 1},
  {&__pyx_n_s_items, __pyx_k_items, sizeof(__pyx_k_items), 0, 0, 1, 1},
  {&__pyx_n_s_kill_textures, __pyx_k_kill_textures, sizeof(__pyx_k_kill_textures), 0, 0, 1, 1},
  {&__pyx_n_s_load, __pyx_k_load, sizeof(__pyx_k_load), 0, 0, 1, 1},
  {&__pyx_n_s_load_all_textures, __pyx_k_load_all_textures, sizeof(__pyx_k_load_all_textures), 0, 0, 1, 1},
  {&__pyx_n_s_load_surface, __pyx_k_load_surface, sizeof(__pyx_k_load_surface), 0, 0, 1, 1},
  {&__pyx_n_s_load_texture, __pyx_k_load_texture, sizeof(__pyx_k_load_texture), 0, 0, 1, 1},
  {&__pyx_n_s_log, __pyx_k_log, sizeof(__pyx_k_log), 0, 0, 1, 1},
  {&__pyx_n_s_log_gl_extensions, __pyx_k_log_gl_extensions, sizeof(__pyx_k_log_gl_extensions), 0, 0, 1, 1},
  {&__pyx_n_s_main, __pyx_k_main, sizeof(__pyx_k_main), 0, 0, 1, 1},
  {&__pyx_n_s_math, __pyx_k_math, sizeof(__pyx_k_math), 0, 0, 1, 1},
  {&__pyx_n_s_max_window_size, __pyx_k_max_window_size, sizeof(__pyx_k_max_window_size), 0, 0, 1, 1},
  {&__pyx_n_s_merge_properties, __pyx_k_merge_properties, sizeof(__pyx_k_merge_properties), 0, 0, 1, 1},
  {&__pyx_n_s_merge_uniforms, __pyx_k_merge_uniforms, sizeof(__pyx_k_merge_uniforms), 0, 0, 1, 1},
  {&__pyx_n_s_mesh, __pyx_k_mesh, sizeof(__pyx_k_mesh), 0, 0, 1, 1},
  {&__pyx_n_s_mobile, __pyx_k_mobile, sizeof(__pyx_k_mobile), 0, 0, 1, 1},
  {&__pyx_n_s_model, __pyx_k_model, sizeof(__pyx_k_model), 0, 0, 1, 1},
  {&__pyx_n_s_models, __pyx_k_models, sizeof(__pyx_k_models), 0, 0, 1, 1},
  {&__pyx_n_s_mouse, __pyx_k_mouse, sizeof(__pyx_k_mouse), 0, 0, 1, 1},
  {&__pyx_n_s_movie, __pyx_k_movie, sizeof(__pyx_k_movie), 0, 0, 1, 1},
  {&__pyx_n_s_name, __pyx_k_name, sizeof(__pyx_k_name), 0, 0, 1, 1},
  {&__pyx_n_s_name_2, __pyx_k_name_2, sizeof(__pyx_k_name_2), 0, 0, 1, 1},
  {&__pyx_n_s_nearest, __pyx_k_nearest, sizeof(__pyx_k_nearest), 0, 0, 1, 1},
  {&__pyx_n_s_nearest_neighbor, __pyx_k_nearest_neighbor, sizeof(__pyx_k_nearest_neighbor), 0, 0, 1, 1},
  {&__pyx_n_s_needs_redraw, __pyx_k_needs_redraw, sizeof(__pyx_k_needs_redraw), 0, 0, 1, 1},
  {&__pyx_n_s_new, __pyx_k_new, sizeof(__pyx_k_new), 0, 0, 1, 1},
  {&__pyx_n_s_old, __pyx_k_old, sizeof(__pyx_k_old), 0, 0, 1, 1},
  {&__pyx_n_s_on_resize, __pyx_k_on_resize, sizeof(__pyx_k_on_resize), 0, 0, 1, 1},
  {&__pyx_n_s_on_resize_locals_genexpr, __pyx_k_on_resize_locals_genexpr, sizeof(__pyx_k_on_resize_locals_genexpr), 0, 0, 1, 1},
  {&__pyx_n_s_opengl, __pyx_k_opengl, sizeof(__pyx_k_opengl), 0, 0, 1, 1},
  {&__pyx_n_s_os, __pyx_k_os, sizeof(__pyx_k_os), 0, 0, 1, 1},
  {&__pyx_n_s_os_path, __pyx_k_os_path, sizeof(__pyx_k_os_path), 0, 0, 1, 1},
  {&__pyx_n_s_pgrender, __pyx_k_pgrender, sizeof(__pyx_k_pgrender), 0, 0, 1, 1},
  {&__pyx_n_s_physical_size, __pyx_k_physical_size, sizeof(__pyx_k_physical_size), 0, 0, 1, 1},
  {&__pyx_n_s_pickle, __pyx_k_pickle, sizeof(__pyx_k_pickle), 0, 0, 1, 1},
  {&__pyx_n_s_pixel_perfect, __pyx_k_pixel_perfect, sizeof(__pyx_k_pixel_perfect), 0, 0, 1, 1},
  {&__pyx_n_s_plog, __pyx_k_plog, sizeof(__pyx_k_plog), 0, 0, 1, 1},
  {&__pyx_n_s_pop, __pyx_k_pop, sizeof(__pyx_k_pop), 0, 0, 1, 1},
  {&__pyx_n_s_pos, __pyx_k_pos, sizeof(__pyx_k_pos), 0, 0, 1, 1},
  {&__pyx_n_s_preferences, __pyx_k_preferences, sizeof(__pyx_k_preferences), 0, 0, 1, 1},
  {&__pyx_kp_s_primary_display_bounds_r, __pyx_k_primary_display_bounds_r, sizeof(__pyx_k_primary_display_bounds_r), 0, 0, 1, 0},
  {&__pyx_n_s_program_uniforms, __pyx_k_program_uniforms, sizeof(__pyx_k_program_uniforms), 0, 0, 1, 1},
  {&__pyx_n_s_properties, __pyx_k_properties, sizeof(__pyx_k_properties), 0, 0, 1, 1},
  {&__pyx_n_s_pygame, __pyx_k_pygame, sizeof(__pyx_k_pygame), 0, 0, 1, 1},
  {&__pyx_n_s_pygame_sdl2, __pyx_k_pygame_sdl2, sizeof(__pyx_k_pygame_sdl2), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_PickleError, __pyx_k_pyx_PickleError, sizeof(__pyx_k_pyx_PickleError), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_checksum, __pyx_k_pyx_checksum, sizeof(__pyx_k_pyx_checksum), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_result, __pyx_k_pyx_result, sizeof(__pyx_k_pyx_result), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_state, __pyx_k_pyx_state, sizeof(__pyx_k_pyx_state), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_type, __pyx_k_pyx_type, sizeof(__pyx_k_pyx_type), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_unpickle_GL2Draw, __pyx_k_pyx_unpickle_GL2Draw, sizeof(__pyx_k_pyx_unpickle_GL2Draw), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_unpickle_GL2DrawingContext, __pyx_k_pyx_unpickle_GL2DrawingContext, sizeof(__pyx_k_pyx_unpickle_GL2DrawingContext), 0, 0, 1, 1},
  {&__pyx_n_s_pyx_vtable, __pyx_k_pyx_vtable, sizeof(__pyx_k_pyx_vtable), 0, 0, 1, 1},
  {&__pyx_n_s_quit, __pyx_k_quit, sizeof(__pyx_k_quit), 0, 0, 1, 1},
  {&__pyx_n_s_quit_fbo, __pyx_k_quit_fbo, sizeof(__pyx_k_quit_fbo), 0, 0, 1, 1},
  {&__pyx_n_s_random, __pyx_k_random, sizeof(__pyx_k_random), 0, 0, 1, 1},
  {&__pyx_n_s_ready_one_texture, __pyx_k_ready_one_texture, sizeof(__pyx_k_ready_one_texture), 0, 0, 1, 1},
  {&__pyx_n_s_recreate_gl_context, __pyx_k_recreate_gl_context, sizeof(__pyx_k_recreate_gl_context), 0, 0, 1, 1},
  {&__pyx_n_s_rectangle, __pyx_k_rectangle, sizeof(__pyx_k_rectangle), 0, 0, 1, 1},
  {&__pyx_n_s_reduce, __pyx_k_reduce, sizeof(__pyx_k_reduce), 0, 0, 1, 1},
  {&__pyx_n_s_reduce_cython, __pyx_k_reduce_cython, sizeof(__pyx_k_reduce_cython), 0, 0, 1, 1},
  {&__pyx_n_s_reduce_ex, __pyx_k_reduce_ex, sizeof(__pyx_k_reduce_ex), 0, 0, 1, 1},
  {&__pyx_n_s_refresh_rate, __pyx_k_refresh_rate, sizeof(__pyx_k_refresh_rate), 0, 0, 1, 1},
  {&__pyx_n_s_render, __pyx_k_render, sizeof(__pyx_k_render), 0, 0, 1, 1},
  {&__pyx_n_s_render_movie, __pyx_k_render_movie, sizeof(__pyx_k_render_movie), 0, 0, 1, 1},
  {&__pyx_n_s_render_to_texture, __pyx_k_render_to_texture, sizeof(__pyx_k_render_to_texture), 0, 0, 1, 1},
  {&__pyx_n_s_render_tree, __pyx_k_render_tree, sizeof(__pyx_k_render_tree), 0, 0, 1, 1},
  {&__pyx_n_s_renderer, __pyx_k_renderer, sizeof(__pyx_k_renderer), 0, 0, 1, 1},
  {&__pyx_n_s_renpy, __pyx_k_renpy, sizeof(__pyx_k_renpy), 0, 0, 1, 1},
  {&__pyx_n_s_renpy_gl2_gl2debug, __pyx_k_renpy_gl2_gl2debug, sizeof(__pyx_k_renpy_gl2_gl2debug), 0, 0, 1, 1},
  {&__pyx_n_s_renpy_gl2_gl2draw, __pyx_k_renpy_gl2_gl2draw, sizeof(__pyx_k_renpy_gl2_gl2draw), 0, 0, 1, 1},
  {&__pyx_n_s_renpy_gl2_gl2functions, __pyx_k_renpy_gl2_gl2functions, sizeof(__pyx_k_renpy_gl2_gl2functions), 0, 0, 1, 1},
  {&__pyx_n_s_renpy_gl2_gl2shadercache, __pyx_k_renpy_gl2_gl2shadercache, sizeof(__pyx_k_renpy_gl2_gl2shadercache), 0, 0, 1, 1},
  {&__pyx_n_s_renpy_gl2_gl2texture, __pyx_k_renpy_gl2_gl2texture, sizeof(__pyx_k_renpy_gl2_gl2texture), 0, 0, 1, 1},
  {&__pyx_kp_s_renpy_solid, __pyx_k_renpy_solid, sizeof(__pyx_k_renpy_solid), 0, 0, 1, 0},
  {&__pyx_n_s_renpy_uguu_gl, __pyx_k_renpy_uguu_gl, sizeof(__pyx_k_renpy_uguu_gl), 0, 0, 1, 1},
  {&__pyx_n_s_required_functions, __pyx_k_required_functions, sizeof(__pyx_k_required_functions), 0, 0, 1, 1},
  {&__pyx_n_s_resizable, __pyx_k_resizable, sizeof(__pyx_k_resizable), 0, 0, 1, 1},
  {&__pyx_n_s_resize, __pyx_k_resize, sizeof(__pyx_k_resize), 0, 0, 1, 1},
  {&__pyx_n_s_restore, __pyx_k_restore, sizeof(__pyx_k_restore), 0, 0, 1, 1},
  {&__pyx_n_s_reverse, __pyx_k_reverse, sizeof(__pyx_k_reverse), 0, 0, 1, 1},
  {&__pyx_n_s_rgb, __pyx_k_rgb, sizeof(__pyx_k_rgb), 0, 0, 1, 1},
  {&__pyx_n_s_round, __pyx_k_round, sizeof(__pyx_k_round), 0, 0, 1, 1},
  {&__pyx_kp_s_s, __pyx_k_s, sizeof(__pyx_k_s), 0, 0, 1, 0},
  {&__pyx_n_s_save, __pyx_k_save, sizeof(__pyx_k_save), 0, 0, 1, 1},
  {&__pyx_n_s_screen_rect, __pyx_k_screen_rect, sizeof(__pyx_k_screen_rect), 0, 0, 1, 1},
  {&__pyx_n_s_select_gl_attributes, __pyx_k_select_gl_attributes, sizeof(__pyx_k_select_gl_attributes), 0, 0, 1, 1},
  {&__pyx_n_s_select_physical_size, __pyx_k_select_physical_size, sizeof(__pyx_k_select_physical_size), 0, 0, 1, 1},
  {&__pyx_n_s_send, __pyx_k_send, sizeof(__pyx_k_send), 0, 0, 1, 1},
  {&__pyx_n_s_set_mode, __pyx_k_set_mode, sizeof(__pyx_k_set_mode), 0, 0, 1, 1},
  {&__pyx_n_s_set_pos, __pyx_k_set_pos, sizeof(__pyx_k_set_pos), 0, 0, 1, 1},
  {&__pyx_n_s_set_rgba_masks, __pyx_k_set_rgba_masks, sizeof(__pyx_k_set_rgba_masks), 0, 0, 1, 1},
  {&__pyx_n_s_set_uniform, __pyx_k_set_uniform, sizeof(__pyx_k_set_uniform), 0, 0, 1, 1},
  {&__pyx_n_s_set_uniforms, __pyx_k_set_uniforms, sizeof(__pyx_k_set_uniforms), 0, 0, 1, 1},
  {&__pyx_n_s_setstate, __pyx_k_setstate, sizeof(__pyx_k_setstate), 0, 0, 1, 1},
  {&__pyx_n_s_setstate_cython, __pyx_k_setstate_cython, sizeof(__pyx_k_setstate_cython), 0, 0, 1, 1},
  {&__pyx_n_s_shaders, __pyx_k_shaders, sizeof(__pyx_k_shaders), 0, 0, 1, 1},
  {&__pyx_n_s_sleep, __pyx_k_sleep, sizeof(__pyx_k_sleep), 0, 0, 1, 1},
  {&__pyx_n_s_split, __pyx_k_split, sizeof(__pyx_k_split), 0, 0, 1, 1},
  {&__pyx_n_s_standard_uniforms, __pyx_k_standard_uniforms, sizeof(__pyx_k_standard_uniforms), 0, 0, 1, 1},
  {&__pyx_n_s_start, __pyx_k_start, sizeof(__pyx_k_start), 0, 0, 1, 1},
  {&__pyx_kp_s_start_draw_screen, __pyx_k_start_draw_screen, sizeof(__pyx_k_start_draw_screen), 0, 0, 1, 0},
  {&__pyx_kp_s_stringsource, __pyx_k_stringsource, sizeof(__pyx_k_stringsource), 0, 0, 1, 0},
  {&__pyx_n_s_subsurface, __pyx_k_subsurface, sizeof(__pyx_k_subsurface), 0, 0, 1, 1},
  {&__pyx_n_s_surf, __pyx_k_surf, sizeof(__pyx_k_surf), 0, 0, 1, 1},
  {&__pyx_n_s_surface_unscaled, __pyx_k_surface_unscaled, sizeof(__pyx_k_surface_unscaled), 0, 0, 1, 1},
  {&__pyx_kp_s_swap_interval_r_frames, __pyx_k_swap_interval_r_frames, sizeof(__pyx_k_swap_interval_r_frames), 0, 0, 1, 0},
  {&__pyx_n_s_test, __pyx_k_test, sizeof(__pyx_k_test), 0, 0, 1, 1},
  {&__pyx_n_s_tex, __pyx_k_tex, sizeof(__pyx_k_tex), 0, 0, 1, 1},
  {&__pyx_n_s_tex0, __pyx_k_tex0, sizeof(__pyx_k_tex0), 0, 0, 1, 1},
  {&__pyx_n_s_text_rect, __pyx_k_text_rect, sizeof(__pyx_k_text_rect), 0, 0, 1, 1},
  {&__pyx_n_s_texture_scaling, __pyx_k_texture_scaling, sizeof(__pyx_k_texture_scaling), 0, 0, 1, 1},
  {&__pyx_n_s_throw, __pyx_k_throw, sizeof(__pyx_k_throw), 0, 0, 1, 1},
  {&__pyx_n_s_time, __pyx_k_time, sizeof(__pyx_k_time), 0, 0, 1, 1},
  {&__pyx_n_s_transform, __pyx_k_transform, sizeof(__pyx_k_transform), 0, 0, 1, 1},
  {&__pyx_n_s_transient, __pyx_k_transient, sizeof(__pyx_k_transient), 0, 0, 1, 1},
  {&__pyx_n_s_translate_point, __pyx_k_translate_point, sizeof(__pyx_k_translate_point), 0, 0, 1, 1},
  {&__pyx_n_s_u_lod_bias, __pyx_k_u_lod_bias, sizeof(__pyx_k_u_lod_bias), 0, 0, 1, 1},
  {&__pyx_n_s_u_model_size, __pyx_k_u_model_size, sizeof(__pyx_k_u_model_size), 0, 0, 1, 1},
  {&__pyx_n_s_u_random, __pyx_k_u_random, sizeof(__pyx_k_u_random), 0, 0, 1, 1},
  {&__pyx_n_s_u_renpy_solid_color, __pyx_k_u_renpy_solid_color, sizeof(__pyx_k_u_renpy_solid_color), 0, 0, 1, 1},
  {&__pyx_n_s_u_time, __pyx_k_u_time, sizeof(__pyx_k_u_time), 0, 0, 1, 1},
  {&__pyx_n_s_u_transform, __pyx_k_u_transform, sizeof(__pyx_k_u_transform), 0, 0, 1, 1},
  {&__pyx_n_s_uguu, __pyx_k_uguu, sizeof(__pyx_k_uguu), 0, 0, 1, 1},
  {&__pyx_n_s_uguugl, __pyx_k_uguugl, sizeof(__pyx_k_uguugl), 0, 0, 1, 1},
  {&__pyx_n_s_uniforms, __pyx_k_uniforms, sizeof(__pyx_k_uniforms), 0, 0, 1, 1},
  {&__pyx_n_s_untranslate_point, __pyx_k_untranslate_point, sizeof(__pyx_k_untranslate_point), 0, 0, 1, 1},
  {&__pyx_n_s_update, __pyx_k_update, sizeof(__pyx_k_update), 0, 0, 1, 1},
  {&__pyx_n_s_upper, __pyx_k_upper, sizeof(__pyx_k_upper), 0, 0, 1, 1},
  {&__pyx_n_s_video, __pyx_k_video, sizeof(__pyx_k_video), 0, 0, 1, 1},
  {&__pyx_n_s_vsync, __pyx_k_vsync, sizeof(__pyx_k_vsync), 0, 0, 1, 1},
  {&__pyx_n_s_w, __pyx_k_w, sizeof(__pyx_k_w), 0, 0, 1, 1},
  {&__pyx_n_s_weakref, __pyx_k_weakref, sizeof(__pyx_k_weakref), 0, 0, 1, 1},
  {&__pyx_n_s_what, __pyx_k_what, sizeof(__pyx_k_what), 0, 0, 1, 1},
  {&__pyx_n_s_width, __pyx_k_width, sizeof(__pyx_k_width), 0, 0, 1, 1},
  {&__pyx_n_s_windows, __pyx_k_windows, sizeof(__pyx_k_windows), 0, 0, 1, 1},
  {&__pyx_n_s_write, __pyx_k_write, sizeof(__pyx_k_write), 0, 0, 1, 1},
  {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1},
  {&__pyx_n_s_y, __pyx_k_y, sizeof(__pyx_k_y), 0, 0, 1, 1},
  {0, 0, 0, 0, 0, 0, 0}
};
static CYTHON_SMALL_CODE int __Pyx_InitCachedBuiltins(void) {
  __pyx_builtin_round = __Pyx_GetBuiltinName(__pyx_n_s_round); if (!__pyx_builtin_round) __PYX_ERR(0, 184, __pyx_L1_error)
  __pyx_builtin_enumerate = __Pyx_GetBuiltinName(__pyx_n_s_enumerate); if (!__pyx_builtin_enumerate) __PYX_ERR(0, 858, __pyx_L1_error)
  return 0;
  __pyx_L1_error:;
  return -1;
}

static CYTHON_SMALL_CODE int __Pyx_InitCachedConstants(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);

  /* "renpy/gl2/gl2draw.pyx":130
 * 
 *         if self.texture_loader is None:
 *             return 0, 0             # <<<<<<<<<<<<<<
 * 
 *         return self.texture_loader.get_texture_size()
 */
  __pyx_tuple_ = PyTuple_Pack(2, __pyx_int_0, __pyx_int_0); if (unlikely(!__pyx_tuple_)) __PYX_ERR(0, 130, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple_);
  __Pyx_GIVEREF(__pyx_tuple_);

  /* "renpy/gl2/gl2draw.pyx":168
 *         visible_h = info.current_h
 * 
 *         if renpy.windows and renpy.windows <= (6, 1):             # <<<<<<<<<<<<<<
 *             visible_h -= 102
 * 
 */
  __pyx_tuple__2 = PyTuple_Pack(2, __pyx_int_6, __pyx_int_1); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 168, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__2);
  __Pyx_GIVEREF(__pyx_tuple__2);

  /* "renpy/gl2/gl2draw.pyx":262
 * 
 *         if gles:
 *             pygame.display.hint("SDL_OPENGL_ES_DRIVER", "1")             # <<<<<<<<<<<<<<
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MAJOR_VERSION, 3);
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MINOR_VERSION, 0);
 */
  __pyx_tuple__3 = PyTuple_Pack(2, __pyx_n_s_SDL_OPENGL_ES_DRIVER, __pyx_kp_s_1); if (unlikely(!__pyx_tuple__3)) __PYX_ERR(0, 262, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__3);
  __Pyx_GIVEREF(__pyx_tuple__3);

  /* "renpy/gl2/gl2draw.pyx":267
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_PROFILE_MASK, pygame.GL_CONTEXT_PROFILE_ES)
 *         else:
 *             pygame.display.hint("SDL_OPENGL_ES_DRIVER", "0")             # <<<<<<<<<<<<<<
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MAJOR_VERSION, 2);
 *             pygame.display.gl_set_attribute(pygame.GL_CONTEXT_MINOR_VERSION, 1);
 */
  __pyx_tuple__4 = PyTuple_Pack(2, __pyx_n_s_SDL_OPENGL_ES_DRIVER, __pyx_kp_s_0); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 267, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__4);
  __Pyx_GIVEREF(__pyx_tuple__4);

  /* "renpy/gl2/gl2draw.pyx":292
 * 
 *         if renpy.mobile or renpy.game.preferences.physical_size is None: # @UndefinedVariable
 *             physical_size = (None, None)             # <<<<<<<<<<<<<<
 *         else:
 *             physical_size = renpy.game.preferences.physical_size
 */
  __pyx_tuple__5 = PyTuple_Pack(2, Py_None, Py_None); if (unlikely(!__pyx_tuple__5)) __PYX_ERR(0, 292, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__5);
  __Pyx_GIVEREF(__pyx_tuple__5);

  /* "renpy/gl2/gl2draw.pyx":732
 *         color = (r, g, b, a)
 * 
 *         return Model((w, h), mesh, ("renpy.solid", ), { "u_renpy_solid_color" : color })             # <<<<<<<<<<<<<<
 * 
 *     def flip(self):
 */
  __pyx_tuple__8 = PyTuple_Pack(1, __pyx_kp_s_renpy_solid); if (unlikely(!__pyx_tuple__8)) __PYX_ERR(0, 732, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__8);
  __Pyx_GIVEREF(__pyx_tuple__8);

  /* "renpy/gl2/gl2draw.pyx":741
 *         start = time.time()
 * 
 *         renpy.plog(1, "flip")             # <<<<<<<<<<<<<<
 * 
 *         try:
 */
  __pyx_tuple__9 = PyTuple_Pack(2, __pyx_int_1, __pyx_n_s_flip); if (unlikely(!__pyx_tuple__9)) __PYX_ERR(0, 741, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__9);
  __Pyx_GIVEREF(__pyx_tuple__9);

  /* "renpy/gl2/gl2draw.pyx":765
 *                 if (frame_times[-1] - frame_times[0] < .001 * 10):
 *                     time.sleep(1.0 / 120.0)
 *                     renpy.plog(1, "after broken vsync sleep")             # <<<<<<<<<<<<<<
 * 
 * 
 */
  __pyx_tuple__10 = PyTuple_Pack(2, __pyx_int_1, __pyx_kp_s_after_broken_vsync_sleep); if (unlikely(!__pyx_tuple__10)) __PYX_ERR(0, 765, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__10);
  __Pyx_GIVEREF(__pyx_tuple__10);

  /* "renpy/gl2/gl2draw.pyx":775
 *         # NOTE: This needs to set interface.text_rect as a side effect.
 * 
 *         renpy.plog(1, "start draw_screen")             # <<<<<<<<<<<<<<
 * 
 *         if renpy.display.video.fullscreen:
 */
  __pyx_tuple__11 = PyTuple_Pack(2, __pyx_int_1, __pyx_kp_s_start_draw_screen); if (unlikely(!__pyx_tuple__11)) __PYX_ERR(0, 775, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__11);
  __Pyx_GIVEREF(__pyx_tuple__11);

  /* "renpy/gl2/gl2draw.pyx":1186
 * 
 *         program.set_uniform("u_model_size", (model.width, model.height))
 *         program.set_uniform("u_lod_bias", -1.0)             # <<<<<<<<<<<<<<
 *         program.set_uniform("u_transform", transform)
 *         program.set_uniform("u_time", (renpy.display.interface.frame_time - renpy.display.interface.init_time) % 86400)
 */
  __pyx_tuple__14 = PyTuple_Pack(2, __pyx_n_s_u_lod_bias, __pyx_float_neg_1_0); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(0, 1186, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__14);
  __Pyx_GIVEREF(__pyx_tuple__14);

  /* "(tree fragment)":1
 * def __pyx_unpickle_GL2Draw(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */
  __pyx_tuple__15 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__15)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__15);
  __Pyx_GIVEREF(__pyx_tuple__15);
  __pyx_codeobj__16 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__15, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_GL2Draw, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__16)) __PYX_ERR(2, 1, __pyx_L1_error)
  __pyx_tuple__17 = PyTuple_Pack(5, __pyx_n_s_pyx_type, __pyx_n_s_pyx_checksum, __pyx_n_s_pyx_state, __pyx_n_s_pyx_PickleError, __pyx_n_s_pyx_result); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_tuple__17);
  __Pyx_GIVEREF(__pyx_tuple__17);
  __pyx_codeobj__18 = (PyObject*)__Pyx_PyCode_New(3, 0, 5, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__17, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_stringsource, __pyx_n_s_pyx_unpickle_GL2DrawingContext, 1, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__18)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static CYTHON_SMALL_CODE int __Pyx_InitGlobals(void) {
  __pyx_umethod_PyDict_Type_items.type = (PyObject*)&PyDict_Type;
  __pyx_umethod_PyDict_Type_update.type = (PyObject*)&PyDict_Type;
  if (__Pyx_InitStrings(__pyx_string_tab) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  __pyx_float_1_0 = PyFloat_FromDouble(1.0); if (unlikely(!__pyx_float_1_0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_float_2_0 = PyFloat_FromDouble(2.0); if (unlikely(!__pyx_float_2_0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_float_255_0 = PyFloat_FromDouble(255.0); if (unlikely(!__pyx_float_255_0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_float_neg_1_0 = PyFloat_FromDouble(-1.0); if (unlikely(!__pyx_float_neg_1_0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_0 = PyInt_FromLong(0); if (unlikely(!__pyx_int_0)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_1 = PyInt_FromLong(1); if (unlikely(!__pyx_int_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_2 = PyInt_FromLong(2); if (unlikely(!__pyx_int_2)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_3 = PyInt_FromLong(3); if (unlikely(!__pyx_int_3)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_6 = PyInt_FromLong(6); if (unlikely(!__pyx_int_6)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_8 = PyInt_FromLong(8); if (unlikely(!__pyx_int_8)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_60 = PyInt_FromLong(60); if (unlikely(!__pyx_int_60)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_64 = PyInt_FromLong(64); if (unlikely(!__pyx_int_64)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_102 = PyInt_FromLong(102); if (unlikely(!__pyx_int_102)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_86400 = PyInt_FromLong(86400L); if (unlikely(!__pyx_int_86400)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_18757834 = PyInt_FromLong(18757834L); if (unlikely(!__pyx_int_18757834)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_int_208031144 = PyInt_FromLong(208031144L); if (unlikely(!__pyx_int_208031144)) __PYX_ERR(0, 1, __pyx_L1_error)
  return 0;
  __pyx_L1_error:;
  return -1;
}

static CYTHON_SMALL_CODE int __Pyx_modinit_global_init_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_variable_export_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_function_export_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_type_init_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_type_import_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_variable_import_code(void); /*proto*/
static CYTHON_SMALL_CODE int __Pyx_modinit_function_import_code(void); /*proto*/

static int __Pyx_modinit_global_init_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_global_init_code", 0);
  /*--- Global init code ---*/
  __pyx_v_5renpy_3gl2_7gl2draw_IDENTITY = Py_None; Py_INCREF(Py_None);
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_variable_export_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_export_code", 0);
  /*--- Variable export code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_function_export_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_export_code", 0);
  /*--- Function export code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}

static int __Pyx_modinit_type_init_code(void) {
  __Pyx_RefNannyDeclarations
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_type_init_code", 0);
  /*--- Type init code ---*/
  __pyx_vtabptr_5renpy_3gl2_7gl2draw_GL2Draw = &__pyx_vtable_5renpy_3gl2_7gl2draw_GL2Draw;
  __pyx_vtable_5renpy_3gl2_7gl2draw_GL2Draw.change_fbo = (void (*)(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2Draw *, GLuint))__pyx_f_5renpy_3gl2_7gl2draw_7GL2Draw_change_fbo;
  if (PyType_Ready(&__pyx_type_5renpy_3gl2_7gl2draw_GL2Draw) < 0) __PYX_ERR(0, 79, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_5renpy_3gl2_7gl2draw_GL2Draw.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_5renpy_3gl2_7gl2draw_GL2Draw.tp_dictoffset && __pyx_type_5renpy_3gl2_7gl2draw_GL2Draw.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_5renpy_3gl2_7gl2draw_GL2Draw.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_5renpy_3gl2_7gl2draw_GL2Draw.tp_dict, __pyx_vtabptr_5renpy_3gl2_7gl2draw_GL2Draw) < 0) __PYX_ERR(0, 79, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_GL2Draw, (PyObject *)&__pyx_type_5renpy_3gl2_7gl2draw_GL2Draw) < 0) __PYX_ERR(0, 79, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_5renpy_3gl2_7gl2draw_GL2Draw) < 0) __PYX_ERR(0, 79, __pyx_L1_error)
  __pyx_ptype_5renpy_3gl2_7gl2draw_GL2Draw = &__pyx_type_5renpy_3gl2_7gl2draw_GL2Draw;
  __pyx_vtabptr_5renpy_3gl2_7gl2draw_GL2DrawingContext = &__pyx_vtable_5renpy_3gl2_7gl2draw_GL2DrawingContext;
  __pyx_vtable_5renpy_3gl2_7gl2draw_GL2DrawingContext.correct_pixel_perfect = (struct __pyx_obj_5renpy_7display_6matrix_Matrix *(*)(struct __pyx_obj_5renpy_3gl2_7gl2draw_GL2DrawingContext *, struct __pyx_obj_5renpy_7display_6matrix_Matrix *))__pyx_f_5renpy_3gl2_7gl2draw_17GL2DrawingContext_correct_pixel_perfect;
  if (PyType_Ready(&__pyx_type_5renpy_3gl2_7gl2draw_GL2DrawingContext) < 0) __PYX_ERR(0, 1084, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_5renpy_3gl2_7gl2draw_GL2DrawingContext.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_5renpy_3gl2_7gl2draw_GL2DrawingContext.tp_dictoffset && __pyx_type_5renpy_3gl2_7gl2draw_GL2DrawingContext.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_5renpy_3gl2_7gl2draw_GL2DrawingContext.tp_getattro = __Pyx_PyObject_GenericGetAttr;
  }
  if (__Pyx_SetVtable(__pyx_type_5renpy_3gl2_7gl2draw_GL2DrawingContext.tp_dict, __pyx_vtabptr_5renpy_3gl2_7gl2draw_GL2DrawingContext) < 0) __PYX_ERR(0, 1084, __pyx_L1_error)
  if (PyObject_SetAttr(__pyx_m, __pyx_n_s_GL2DrawingContext, (PyObject *)&__pyx_type_5renpy_3gl2_7gl2draw_GL2DrawingContext) < 0) __PYX_ERR(0, 1084, __pyx_L1_error)
  if (__Pyx_setup_reduce((PyObject*)&__pyx_type_5renpy_3gl2_7gl2draw_GL2DrawingContext) < 0) __PYX_ERR(0, 1084, __pyx_L1_error)
  __pyx_ptype_5renpy_3gl2_7gl2draw_GL2DrawingContext = &__pyx_type_5renpy_3gl2_7gl2draw_GL2DrawingContext;
  if (PyType_Ready(&__pyx_type_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize) < 0) __PYX_ERR(0, 426, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize.tp_dictoffset && __pyx_type_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize = &__pyx_type_5renpy_3gl2_7gl2draw___pyx_scope_struct__on_resize;
  if (PyType_Ready(&__pyx_type_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr) < 0) __PYX_ERR(0, 496, __pyx_L1_error)
  #if PY_VERSION_HEX < 0x030800B1
  __pyx_type_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr.tp_print = 0;
  #endif
  if ((CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP) && likely(!__pyx_type_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr.tp_dictoffset && __pyx_type_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr.tp_getattro == PyObject_GenericGetAttr)) {
    __pyx_type_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
  }
  __pyx_ptype_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr = &__pyx_type_5renpy_3gl2_7gl2draw___pyx_scope_struct_1_genexpr;
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_type_import_code(void) {
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_type_import_code", 0);
  /*--- Type import code ---*/
  __pyx_t_1 = PyImport_ImportModule("renpy.display.matrix"); if (unlikely(!__pyx_t_1)) __PYX_ERR(3, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_5renpy_7display_6matrix_Matrix = __Pyx_ImportType(__pyx_t_1, "renpy.display.matrix", "Matrix", sizeof(struct __pyx_obj_5renpy_7display_6matrix_Matrix), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5renpy_7display_6matrix_Matrix) __PYX_ERR(3, 1, __pyx_L1_error)
  __pyx_vtabptr_5renpy_7display_6matrix_Matrix = (struct __pyx_vtabstruct_5renpy_7display_6matrix_Matrix*)__Pyx_GetVtable(__pyx_ptype_5renpy_7display_6matrix_Matrix->tp_dict); if (unlikely(!__pyx_vtabptr_5renpy_7display_6matrix_Matrix)) __PYX_ERR(3, 1, __pyx_L1_error)
  __pyx_ptype_5renpy_7display_6matrix_Matrix2D = __Pyx_ImportType(__pyx_t_1, "renpy.display.matrix", "Matrix2D", sizeof(struct __pyx_obj_5renpy_7display_6matrix_Matrix2D), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5renpy_7display_6matrix_Matrix2D) __PYX_ERR(3, 71, __pyx_L1_error)
  __pyx_vtabptr_5renpy_7display_6matrix_Matrix2D = (struct __pyx_vtabstruct_5renpy_7display_6matrix_Matrix2D*)__Pyx_GetVtable(__pyx_ptype_5renpy_7display_6matrix_Matrix2D->tp_dict); if (unlikely(!__pyx_vtabptr_5renpy_7display_6matrix_Matrix2D)) __PYX_ERR(3, 71, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("renpy.display.render"); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 25, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_5renpy_7display_6render_Render = __Pyx_ImportType(__pyx_t_1, "renpy.display.render", "Render", sizeof(struct __pyx_obj_5renpy_7display_6render_Render), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5renpy_7display_6render_Render) __PYX_ERR(4, 25, __pyx_L1_error)
  __pyx_vtabptr_5renpy_7display_6render_Render = (struct __pyx_vtabstruct_5renpy_7display_6render_Render*)__Pyx_GetVtable(__pyx_ptype_5renpy_7display_6render_Render->tp_dict); if (unlikely(!__pyx_vtabptr_5renpy_7display_6render_Render)) __PYX_ERR(4, 25, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("renpy.gl2.gl2shader"); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 3, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_5renpy_3gl2_9gl2shader_Program = __Pyx_ImportType(__pyx_t_1, "renpy.gl2.gl2shader", "Program", sizeof(struct __pyx_obj_5renpy_3gl2_9gl2shader_Program), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5renpy_3gl2_9gl2shader_Program) __PYX_ERR(5, 3, __pyx_L1_error)
  __pyx_vtabptr_5renpy_3gl2_9gl2shader_Program = (struct __pyx_vtabstruct_5renpy_3gl2_9gl2shader_Program*)__Pyx_GetVtable(__pyx_ptype_5renpy_3gl2_9gl2shader_Program->tp_dict); if (unlikely(!__pyx_vtabptr_5renpy_3gl2_9gl2shader_Program)) __PYX_ERR(5, 3, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("renpy.gl2.gl2polygon"); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 8, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_5renpy_3gl2_10gl2polygon_Polygon = __Pyx_ImportType(__pyx_t_1, "renpy.gl2.gl2polygon", "Polygon", sizeof(struct __pyx_obj_5renpy_3gl2_10gl2polygon_Polygon), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5renpy_3gl2_10gl2polygon_Polygon) __PYX_ERR(6, 8, __pyx_L1_error)
  __pyx_vtabptr_5renpy_3gl2_10gl2polygon_Polygon = (struct __pyx_vtabstruct_5renpy_3gl2_10gl2polygon_Polygon*)__Pyx_GetVtable(__pyx_ptype_5renpy_3gl2_10gl2polygon_Polygon->tp_dict); if (unlikely(!__pyx_vtabptr_5renpy_3gl2_10gl2polygon_Polygon)) __PYX_ERR(6, 8, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("renpy.gl2.gl2mesh"); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_5renpy_3gl2_7gl2mesh_AttributeLayout = __Pyx_ImportType(__pyx_t_1, "renpy.gl2.gl2mesh", "AttributeLayout", sizeof(struct __pyx_obj_5renpy_3gl2_7gl2mesh_AttributeLayout), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5renpy_3gl2_7gl2mesh_AttributeLayout) __PYX_ERR(7, 4, __pyx_L1_error)
  __pyx_ptype_5renpy_3gl2_7gl2mesh_Mesh = __Pyx_ImportType(__pyx_t_1, "renpy.gl2.gl2mesh", "Mesh", sizeof(struct __pyx_obj_5renpy_3gl2_7gl2mesh_Mesh), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5renpy_3gl2_7gl2mesh_Mesh) __PYX_ERR(7, 17, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("renpy.gl2.gl2model"); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 4, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_5renpy_3gl2_8gl2model_Model = __Pyx_ImportType(__pyx_t_1, "renpy.gl2.gl2model", "Model", sizeof(struct __pyx_obj_5renpy_3gl2_8gl2model_Model), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5renpy_3gl2_8gl2model_Model) __PYX_ERR(8, 4, __pyx_L1_error)
  __pyx_vtabptr_5renpy_3gl2_8gl2model_Model = (struct __pyx_vtabstruct_5renpy_3gl2_8gl2model_Model*)__Pyx_GetVtable(__pyx_ptype_5renpy_3gl2_8gl2model_Model->tp_dict); if (unlikely(!__pyx_vtabptr_5renpy_3gl2_8gl2model_Model)) __PYX_ERR(8, 4, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("renpy.gl2.gl2texture"); if (unlikely(!__pyx_t_1)) __PYX_ERR(9, 27, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_5renpy_3gl2_10gl2texture_TextureLoader = __Pyx_ImportType(__pyx_t_1, "renpy.gl2.gl2texture", "TextureLoader", sizeof(struct __pyx_obj_5renpy_3gl2_10gl2texture_TextureLoader), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5renpy_3gl2_10gl2texture_TextureLoader) __PYX_ERR(9, 27, __pyx_L1_error)
  __pyx_ptype_5renpy_3gl2_10gl2texture_GLTexture = __Pyx_ImportType(__pyx_t_1, "renpy.gl2.gl2texture", "GLTexture", sizeof(struct __pyx_obj_5renpy_3gl2_10gl2texture_GLTexture), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5renpy_3gl2_10gl2texture_GLTexture) __PYX_ERR(9, 55, __pyx_L1_error)
  __pyx_vtabptr_5renpy_3gl2_10gl2texture_GLTexture = (struct __pyx_vtabstruct_5renpy_3gl2_10gl2texture_GLTexture*)__Pyx_GetVtable(__pyx_ptype_5renpy_3gl2_10gl2texture_GLTexture->tp_dict); if (unlikely(!__pyx_vtabptr_5renpy_3gl2_10gl2texture_GLTexture)) __PYX_ERR(9, 55, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = PyImport_ImportModule("renpy.gl2.gl2mesh3"); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 10, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_ptype_5renpy_3gl2_8gl2mesh3_Mesh3 = __Pyx_ImportType(__pyx_t_1, "renpy.gl2.gl2mesh3", "Mesh3", sizeof(struct __pyx_obj_5renpy_3gl2_8gl2mesh3_Mesh3), __Pyx_ImportType_CheckSize_Warn);
   if (!__pyx_ptype_5renpy_3gl2_8gl2mesh3_Mesh3) __PYX_ERR(10, 10, __pyx_L1_error)
  __pyx_vtabptr_5renpy_3gl2_8gl2mesh3_Mesh3 = (struct __pyx_vtabstruct_5renpy_3gl2_8gl2mesh3_Mesh3*)__Pyx_GetVtable(__pyx_ptype_5renpy_3gl2_8gl2mesh3_Mesh3->tp_dict); if (unlikely(!__pyx_vtabptr_5renpy_3gl2_8gl2mesh3_Mesh3)) __PYX_ERR(10, 10, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_variable_import_code(void) {
  __Pyx_RefNannyDeclarations
  PyObject *__pyx_t_1 = NULL;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannySetupContext("__Pyx_modinit_variable_import_code", 0);
  /*--- Variable import code ---*/
  __pyx_t_1 = PyImport_ImportModule("renpy.uguu.gl"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glActiveTexture", (void **)&__pyx_vp_5renpy_4uguu_2gl_glActiveTexture, "__pyx_t_5renpy_4uguu_2gl_glActiveTexture_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glAttachShader", (void **)&__pyx_vp_5renpy_4uguu_2gl_glAttachShader, "__pyx_t_5renpy_4uguu_2gl_glAttachShader_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBeginQuery", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBeginQuery, "__pyx_t_5renpy_4uguu_2gl_glBeginQuery_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBeginTransformFeedback", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBeginTransformFeedback, "__pyx_t_5renpy_4uguu_2gl_glBeginTransformFeedback_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBindAttribLocation", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBindAttribLocation, "__pyx_t_5renpy_4uguu_2gl_glBindAttribLocation_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBindBuffer", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBindBuffer, "__pyx_t_5renpy_4uguu_2gl_glBindBuffer_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBindBufferBase", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBindBufferBase, "__pyx_t_5renpy_4uguu_2gl_glBindBufferBase_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBindBufferRange", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBindBufferRange, "__pyx_t_5renpy_4uguu_2gl_glBindBufferRange_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBindFramebuffer", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBindFramebuffer, "__pyx_t_5renpy_4uguu_2gl_glBindFramebuffer_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBindRenderbuffer", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBindRenderbuffer, "__pyx_t_5renpy_4uguu_2gl_glBindRenderbuffer_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBindTexture", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBindTexture, "__pyx_t_5renpy_4uguu_2gl_glBindTexture_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBindVertexArray", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBindVertexArray, "__pyx_t_5renpy_4uguu_2gl_glBindVertexArray_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBlendColor", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBlendColor, "__pyx_t_5renpy_4uguu_2gl_glBlendColor_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBlendEquation", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBlendEquation, "__pyx_t_5renpy_4uguu_2gl_glBlendEquation_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBlendEquationSeparate", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBlendEquationSeparate, "__pyx_t_5renpy_4uguu_2gl_glBlendEquationSeparate_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBlendFunc", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBlendFunc, "__pyx_t_5renpy_4uguu_2gl_glBlendFunc_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBlendFuncSeparate", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBlendFuncSeparate, "__pyx_t_5renpy_4uguu_2gl_glBlendFuncSeparate_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBlitFramebuffer", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBlitFramebuffer, "__pyx_t_5renpy_4uguu_2gl_glBlitFramebuffer_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBufferData", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBufferData, "__pyx_t_5renpy_4uguu_2gl_glBufferData_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glBufferSubData", (void **)&__pyx_vp_5renpy_4uguu_2gl_glBufferSubData, "__pyx_t_5renpy_4uguu_2gl_glBufferSubData_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glCheckFramebufferStatus", (void **)&__pyx_vp_5renpy_4uguu_2gl_glCheckFramebufferStatus, "__pyx_t_5renpy_4uguu_2gl_glCheckFramebufferStatus_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glClear", (void **)&__pyx_vp_5renpy_4uguu_2gl_glClear, "__pyx_t_5renpy_4uguu_2gl_glClear_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glClearBufferfi", (void **)&__pyx_vp_5renpy_4uguu_2gl_glClearBufferfi, "__pyx_t_5renpy_4uguu_2gl_glClearBufferfi_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glClearBufferfv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glClearBufferfv, "__pyx_t_5renpy_4uguu_2gl_glClearBufferfv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glClearBufferiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glClearBufferiv, "__pyx_t_5renpy_4uguu_2gl_glClearBufferiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glClearBufferuiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glClearBufferuiv, "__pyx_t_5renpy_4uguu_2gl_glClearBufferuiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glClearColor", (void **)&__pyx_vp_5renpy_4uguu_2gl_glClearColor, "__pyx_t_5renpy_4uguu_2gl_glClearColor_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glClearStencil", (void **)&__pyx_vp_5renpy_4uguu_2gl_glClearStencil, "__pyx_t_5renpy_4uguu_2gl_glClearStencil_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glColorMask", (void **)&__pyx_vp_5renpy_4uguu_2gl_glColorMask, "__pyx_t_5renpy_4uguu_2gl_glColorMask_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glCompileShader", (void **)&__pyx_vp_5renpy_4uguu_2gl_glCompileShader, "__pyx_t_5renpy_4uguu_2gl_glCompileShader_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glCompressedTexImage2D", (void **)&__pyx_vp_5renpy_4uguu_2gl_glCompressedTexImage2D, "__pyx_t_5renpy_4uguu_2gl_glCompressedTexImage2D_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glCompressedTexImage3D", (void **)&__pyx_vp_5renpy_4uguu_2gl_glCompressedTexImage3D, "__pyx_t_5renpy_4uguu_2gl_glCompressedTexImage3D_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glCompressedTexSubImage2D", (void **)&__pyx_vp_5renpy_4uguu_2gl_glCompressedTexSubImage2D, "__pyx_t_5renpy_4uguu_2gl_glCompressedTexSubImage2D_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glCompressedTexSubImage3D", (void **)&__pyx_vp_5renpy_4uguu_2gl_glCompressedTexSubImage3D, "__pyx_t_5renpy_4uguu_2gl_glCompressedTexSubImage3D_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glCopyTexImage2D", (void **)&__pyx_vp_5renpy_4uguu_2gl_glCopyTexImage2D, "__pyx_t_5renpy_4uguu_2gl_glCopyTexImage2D_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glCopyTexSubImage2D", (void **)&__pyx_vp_5renpy_4uguu_2gl_glCopyTexSubImage2D, "__pyx_t_5renpy_4uguu_2gl_glCopyTexSubImage2D_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glCopyTexSubImage3D", (void **)&__pyx_vp_5renpy_4uguu_2gl_glCopyTexSubImage3D, "__pyx_t_5renpy_4uguu_2gl_glCopyTexSubImage3D_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glCreateProgram", (void **)&__pyx_vp_5renpy_4uguu_2gl_glCreateProgram, "__pyx_t_5renpy_4uguu_2gl_glCreateProgram_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glCreateShader", (void **)&__pyx_vp_5renpy_4uguu_2gl_glCreateShader, "__pyx_t_5renpy_4uguu_2gl_glCreateShader_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glCullFace", (void **)&__pyx_vp_5renpy_4uguu_2gl_glCullFace, "__pyx_t_5renpy_4uguu_2gl_glCullFace_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDeleteBuffers", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDeleteBuffers, "__pyx_t_5renpy_4uguu_2gl_glDeleteBuffers_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDeleteFramebuffers", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDeleteFramebuffers, "__pyx_t_5renpy_4uguu_2gl_glDeleteFramebuffers_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDeleteProgram", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDeleteProgram, "__pyx_t_5renpy_4uguu_2gl_glDeleteProgram_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDeleteQueries", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDeleteQueries, "__pyx_t_5renpy_4uguu_2gl_glDeleteQueries_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDeleteRenderbuffers", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDeleteRenderbuffers, "__pyx_t_5renpy_4uguu_2gl_glDeleteRenderbuffers_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDeleteShader", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDeleteShader, "__pyx_t_5renpy_4uguu_2gl_glDeleteShader_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDeleteTextures", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDeleteTextures, "__pyx_t_5renpy_4uguu_2gl_glDeleteTextures_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDeleteVertexArrays", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDeleteVertexArrays, "__pyx_t_5renpy_4uguu_2gl_glDeleteVertexArrays_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDepthFunc", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDepthFunc, "__pyx_t_5renpy_4uguu_2gl_glDepthFunc_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDepthMask", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDepthMask, "__pyx_t_5renpy_4uguu_2gl_glDepthMask_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDetachShader", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDetachShader, "__pyx_t_5renpy_4uguu_2gl_glDetachShader_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDisable", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDisable, "__pyx_t_5renpy_4uguu_2gl_glDisable_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDisableVertexAttribArray", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDisableVertexAttribArray, "__pyx_t_5renpy_4uguu_2gl_glDisableVertexAttribArray_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDrawArrays", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDrawArrays, "__pyx_t_5renpy_4uguu_2gl_glDrawArrays_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDrawBuffers", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDrawBuffers, "__pyx_t_5renpy_4uguu_2gl_glDrawBuffers_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDrawElements", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDrawElements, "__pyx_t_5renpy_4uguu_2gl_glDrawElements_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glDrawRangeElements", (void **)&__pyx_vp_5renpy_4uguu_2gl_glDrawRangeElements, "__pyx_t_5renpy_4uguu_2gl_glDrawRangeElements_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glEnable", (void **)&__pyx_vp_5renpy_4uguu_2gl_glEnable, "__pyx_t_5renpy_4uguu_2gl_glEnable_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glEnableVertexAttribArray", (void **)&__pyx_vp_5renpy_4uguu_2gl_glEnableVertexAttribArray, "__pyx_t_5renpy_4uguu_2gl_glEnableVertexAttribArray_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glEndQuery", (void **)&__pyx_vp_5renpy_4uguu_2gl_glEndQuery, "__pyx_t_5renpy_4uguu_2gl_glEndQuery_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glEndTransformFeedback", (void **)&__pyx_vp_5renpy_4uguu_2gl_glEndTransformFeedback, "__pyx_t_5renpy_4uguu_2gl_glEndTransformFeedback_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glFinish", (void **)&__pyx_vp_5renpy_4uguu_2gl_glFinish, "__pyx_t_5renpy_4uguu_2gl_glFinish_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glFlush", (void **)&__pyx_vp_5renpy_4uguu_2gl_glFlush, "__pyx_t_5renpy_4uguu_2gl_glFlush_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glFlushMappedBufferRange", (void **)&__pyx_vp_5renpy_4uguu_2gl_glFlushMappedBufferRange, "__pyx_t_5renpy_4uguu_2gl_glFlushMappedBufferRange_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glFramebufferRenderbuffer", (void **)&__pyx_vp_5renpy_4uguu_2gl_glFramebufferRenderbuffer, "__pyx_t_5renpy_4uguu_2gl_glFramebufferRenderbuffer_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glFramebufferTexture2D", (void **)&__pyx_vp_5renpy_4uguu_2gl_glFramebufferTexture2D, "__pyx_t_5renpy_4uguu_2gl_glFramebufferTexture2D_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glFramebufferTextureLayer", (void **)&__pyx_vp_5renpy_4uguu_2gl_glFramebufferTextureLayer, "__pyx_t_5renpy_4uguu_2gl_glFramebufferTextureLayer_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glFrontFace", (void **)&__pyx_vp_5renpy_4uguu_2gl_glFrontFace, "__pyx_t_5renpy_4uguu_2gl_glFrontFace_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGenBuffers", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGenBuffers, "__pyx_t_5renpy_4uguu_2gl_glGenBuffers_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGenFramebuffers", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGenFramebuffers, "__pyx_t_5renpy_4uguu_2gl_glGenFramebuffers_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGenQueries", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGenQueries, "__pyx_t_5renpy_4uguu_2gl_glGenQueries_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGenRenderbuffers", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGenRenderbuffers, "__pyx_t_5renpy_4uguu_2gl_glGenRenderbuffers_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGenTextures", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGenTextures, "__pyx_t_5renpy_4uguu_2gl_glGenTextures_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGenVertexArrays", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGenVertexArrays, "__pyx_t_5renpy_4uguu_2gl_glGenVertexArrays_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGenerateMipmap", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGenerateMipmap, "__pyx_t_5renpy_4uguu_2gl_glGenerateMipmap_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetActiveAttrib", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetActiveAttrib, "__pyx_t_5renpy_4uguu_2gl_glGetActiveAttrib_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetActiveUniform", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetActiveUniform, "__pyx_t_5renpy_4uguu_2gl_glGetActiveUniform_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetAttachedShaders", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetAttachedShaders, "__pyx_t_5renpy_4uguu_2gl_glGetAttachedShaders_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetAttribLocation", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetAttribLocation, "__pyx_t_5renpy_4uguu_2gl_glGetAttribLocation_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetBooleanv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetBooleanv, "__pyx_t_5renpy_4uguu_2gl_glGetBooleanv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetBufferParameteriv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetBufferParameteriv, "__pyx_t_5renpy_4uguu_2gl_glGetBufferParameteriv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetBufferPointerv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetBufferPointerv, "__pyx_t_5renpy_4uguu_2gl_glGetBufferPointerv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetError", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetError, "__pyx_t_5renpy_4uguu_2gl_glGetError_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetFloatv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetFloatv, "__pyx_t_5renpy_4uguu_2gl_glGetFloatv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetFragDataLocation", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetFragDataLocation, "__pyx_t_5renpy_4uguu_2gl_glGetFragDataLocation_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetFramebufferAttachmentParameteriv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetFramebufferAttachmentParameteriv, "__pyx_t_5renpy_4uguu_2gl_glGetFramebufferAttachmentParameteriv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetIntegeri_v", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetIntegeri_v, "__pyx_t_5renpy_4uguu_2gl_glGetIntegeri_v_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetIntegerv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetIntegerv, "__pyx_t_5renpy_4uguu_2gl_glGetIntegerv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetProgramInfoLog", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetProgramInfoLog, "__pyx_t_5renpy_4uguu_2gl_glGetProgramInfoLog_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetProgramiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetProgramiv, "__pyx_t_5renpy_4uguu_2gl_glGetProgramiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetQueryObjectuiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetQueryObjectuiv, "__pyx_t_5renpy_4uguu_2gl_glGetQueryObjectuiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetQueryiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetQueryiv, "__pyx_t_5renpy_4uguu_2gl_glGetQueryiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetRenderbufferParameteriv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetRenderbufferParameteriv, "__pyx_t_5renpy_4uguu_2gl_glGetRenderbufferParameteriv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetShaderInfoLog", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetShaderInfoLog, "__pyx_t_5renpy_4uguu_2gl_glGetShaderInfoLog_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetShaderSource", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetShaderSource, "__pyx_t_5renpy_4uguu_2gl_glGetShaderSource_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetShaderiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetShaderiv, "__pyx_t_5renpy_4uguu_2gl_glGetShaderiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetString", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetString, "__pyx_t_5renpy_4uguu_2gl_glGetString_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetStringi", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetStringi, "__pyx_t_5renpy_4uguu_2gl_glGetStringi_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetTexParameterfv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetTexParameterfv, "__pyx_t_5renpy_4uguu_2gl_glGetTexParameterfv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetTexParameteriv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetTexParameteriv, "__pyx_t_5renpy_4uguu_2gl_glGetTexParameteriv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetTransformFeedbackVarying", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetTransformFeedbackVarying, "__pyx_t_5renpy_4uguu_2gl_glGetTransformFeedbackVarying_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetUniformLocation", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetUniformLocation, "__pyx_t_5renpy_4uguu_2gl_glGetUniformLocation_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetUniformfv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetUniformfv, "__pyx_t_5renpy_4uguu_2gl_glGetUniformfv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetUniformiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetUniformiv, "__pyx_t_5renpy_4uguu_2gl_glGetUniformiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetUniformuiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetUniformuiv, "__pyx_t_5renpy_4uguu_2gl_glGetUniformuiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetVertexAttribIiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribIiv, "__pyx_t_5renpy_4uguu_2gl_glGetVertexAttribIiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetVertexAttribIuiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribIuiv, "__pyx_t_5renpy_4uguu_2gl_glGetVertexAttribIuiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetVertexAttribPointerv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribPointerv, "__pyx_t_5renpy_4uguu_2gl_glGetVertexAttribPointerv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetVertexAttribfv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribfv, "__pyx_t_5renpy_4uguu_2gl_glGetVertexAttribfv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glGetVertexAttribiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glGetVertexAttribiv, "__pyx_t_5renpy_4uguu_2gl_glGetVertexAttribiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glHint", (void **)&__pyx_vp_5renpy_4uguu_2gl_glHint, "__pyx_t_5renpy_4uguu_2gl_glHint_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glIsBuffer", (void **)&__pyx_vp_5renpy_4uguu_2gl_glIsBuffer, "__pyx_t_5renpy_4uguu_2gl_glIsBuffer_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glIsEnabled", (void **)&__pyx_vp_5renpy_4uguu_2gl_glIsEnabled, "__pyx_t_5renpy_4uguu_2gl_glIsEnabled_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glIsFramebuffer", (void **)&__pyx_vp_5renpy_4uguu_2gl_glIsFramebuffer, "__pyx_t_5renpy_4uguu_2gl_glIsFramebuffer_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glIsProgram", (void **)&__pyx_vp_5renpy_4uguu_2gl_glIsProgram, "__pyx_t_5renpy_4uguu_2gl_glIsProgram_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glIsQuery", (void **)&__pyx_vp_5renpy_4uguu_2gl_glIsQuery, "__pyx_t_5renpy_4uguu_2gl_glIsQuery_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glIsRenderbuffer", (void **)&__pyx_vp_5renpy_4uguu_2gl_glIsRenderbuffer, "__pyx_t_5renpy_4uguu_2gl_glIsRenderbuffer_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glIsShader", (void **)&__pyx_vp_5renpy_4uguu_2gl_glIsShader, "__pyx_t_5renpy_4uguu_2gl_glIsShader_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glIsTexture", (void **)&__pyx_vp_5renpy_4uguu_2gl_glIsTexture, "__pyx_t_5renpy_4uguu_2gl_glIsTexture_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glIsVertexArray", (void **)&__pyx_vp_5renpy_4uguu_2gl_glIsVertexArray, "__pyx_t_5renpy_4uguu_2gl_glIsVertexArray_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glLineWidth", (void **)&__pyx_vp_5renpy_4uguu_2gl_glLineWidth, "__pyx_t_5renpy_4uguu_2gl_glLineWidth_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glLinkProgram", (void **)&__pyx_vp_5renpy_4uguu_2gl_glLinkProgram, "__pyx_t_5renpy_4uguu_2gl_glLinkProgram_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glMapBufferRange", (void **)&__pyx_vp_5renpy_4uguu_2gl_glMapBufferRange, "__pyx_t_5renpy_4uguu_2gl_glMapBufferRange_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glPixelStorei", (void **)&__pyx_vp_5renpy_4uguu_2gl_glPixelStorei, "__pyx_t_5renpy_4uguu_2gl_glPixelStorei_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glPolygonOffset", (void **)&__pyx_vp_5renpy_4uguu_2gl_glPolygonOffset, "__pyx_t_5renpy_4uguu_2gl_glPolygonOffset_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glReadBuffer", (void **)&__pyx_vp_5renpy_4uguu_2gl_glReadBuffer, "__pyx_t_5renpy_4uguu_2gl_glReadBuffer_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glReadPixels", (void **)&__pyx_vp_5renpy_4uguu_2gl_glReadPixels, "__pyx_t_5renpy_4uguu_2gl_glReadPixels_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glRenderbufferStorage", (void **)&__pyx_vp_5renpy_4uguu_2gl_glRenderbufferStorage, "__pyx_t_5renpy_4uguu_2gl_glRenderbufferStorage_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glRenderbufferStorageMultisample", (void **)&__pyx_vp_5renpy_4uguu_2gl_glRenderbufferStorageMultisample, "__pyx_t_5renpy_4uguu_2gl_glRenderbufferStorageMultisample_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glSampleCoverage", (void **)&__pyx_vp_5renpy_4uguu_2gl_glSampleCoverage, "__pyx_t_5renpy_4uguu_2gl_glSampleCoverage_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glScissor", (void **)&__pyx_vp_5renpy_4uguu_2gl_glScissor, "__pyx_t_5renpy_4uguu_2gl_glScissor_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glShaderSource", (void **)&__pyx_vp_5renpy_4uguu_2gl_glShaderSource, "__pyx_t_5renpy_4uguu_2gl_glShaderSource_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glStencilFunc", (void **)&__pyx_vp_5renpy_4uguu_2gl_glStencilFunc, "__pyx_t_5renpy_4uguu_2gl_glStencilFunc_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glStencilFuncSeparate", (void **)&__pyx_vp_5renpy_4uguu_2gl_glStencilFuncSeparate, "__pyx_t_5renpy_4uguu_2gl_glStencilFuncSeparate_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glStencilMask", (void **)&__pyx_vp_5renpy_4uguu_2gl_glStencilMask, "__pyx_t_5renpy_4uguu_2gl_glStencilMask_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glStencilMaskSeparate", (void **)&__pyx_vp_5renpy_4uguu_2gl_glStencilMaskSeparate, "__pyx_t_5renpy_4uguu_2gl_glStencilMaskSeparate_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glStencilOp", (void **)&__pyx_vp_5renpy_4uguu_2gl_glStencilOp, "__pyx_t_5renpy_4uguu_2gl_glStencilOp_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glStencilOpSeparate", (void **)&__pyx_vp_5renpy_4uguu_2gl_glStencilOpSeparate, "__pyx_t_5renpy_4uguu_2gl_glStencilOpSeparate_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glTexImage2D", (void **)&__pyx_vp_5renpy_4uguu_2gl_glTexImage2D, "__pyx_t_5renpy_4uguu_2gl_glTexImage2D_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glTexImage3D", (void **)&__pyx_vp_5renpy_4uguu_2gl_glTexImage3D, "__pyx_t_5renpy_4uguu_2gl_glTexImage3D_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glTexParameterf", (void **)&__pyx_vp_5renpy_4uguu_2gl_glTexParameterf, "__pyx_t_5renpy_4uguu_2gl_glTexParameterf_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glTexParameterfv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glTexParameterfv, "__pyx_t_5renpy_4uguu_2gl_glTexParameterfv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glTexParameteri", (void **)&__pyx_vp_5renpy_4uguu_2gl_glTexParameteri, "__pyx_t_5renpy_4uguu_2gl_glTexParameteri_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glTexParameteriv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glTexParameteriv, "__pyx_t_5renpy_4uguu_2gl_glTexParameteriv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glTexSubImage2D", (void **)&__pyx_vp_5renpy_4uguu_2gl_glTexSubImage2D, "__pyx_t_5renpy_4uguu_2gl_glTexSubImage2D_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glTexSubImage3D", (void **)&__pyx_vp_5renpy_4uguu_2gl_glTexSubImage3D, "__pyx_t_5renpy_4uguu_2gl_glTexSubImage3D_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glTransformFeedbackVaryings", (void **)&__pyx_vp_5renpy_4uguu_2gl_glTransformFeedbackVaryings, "__pyx_t_5renpy_4uguu_2gl_glTransformFeedbackVaryings_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform1f", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform1f, "__pyx_t_5renpy_4uguu_2gl_glUniform1f_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform1fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform1fv, "__pyx_t_5renpy_4uguu_2gl_glUniform1fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform1i", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform1i, "__pyx_t_5renpy_4uguu_2gl_glUniform1i_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform1iv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform1iv, "__pyx_t_5renpy_4uguu_2gl_glUniform1iv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform1ui", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform1ui, "__pyx_t_5renpy_4uguu_2gl_glUniform1ui_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform1uiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform1uiv, "__pyx_t_5renpy_4uguu_2gl_glUniform1uiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform2f", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform2f, "__pyx_t_5renpy_4uguu_2gl_glUniform2f_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform2fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform2fv, "__pyx_t_5renpy_4uguu_2gl_glUniform2fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform2i", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform2i, "__pyx_t_5renpy_4uguu_2gl_glUniform2i_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform2iv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform2iv, "__pyx_t_5renpy_4uguu_2gl_glUniform2iv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform2ui", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform2ui, "__pyx_t_5renpy_4uguu_2gl_glUniform2ui_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform2uiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform2uiv, "__pyx_t_5renpy_4uguu_2gl_glUniform2uiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform3f", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform3f, "__pyx_t_5renpy_4uguu_2gl_glUniform3f_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform3fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform3fv, "__pyx_t_5renpy_4uguu_2gl_glUniform3fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform3i", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform3i, "__pyx_t_5renpy_4uguu_2gl_glUniform3i_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform3iv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform3iv, "__pyx_t_5renpy_4uguu_2gl_glUniform3iv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform3ui", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform3ui, "__pyx_t_5renpy_4uguu_2gl_glUniform3ui_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform3uiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform3uiv, "__pyx_t_5renpy_4uguu_2gl_glUniform3uiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform4f", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform4f, "__pyx_t_5renpy_4uguu_2gl_glUniform4f_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform4fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform4fv, "__pyx_t_5renpy_4uguu_2gl_glUniform4fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform4i", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform4i, "__pyx_t_5renpy_4uguu_2gl_glUniform4i_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform4iv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform4iv, "__pyx_t_5renpy_4uguu_2gl_glUniform4iv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform4ui", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform4ui, "__pyx_t_5renpy_4uguu_2gl_glUniform4ui_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniform4uiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniform4uiv, "__pyx_t_5renpy_4uguu_2gl_glUniform4uiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniformMatrix2fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix2fv, "__pyx_t_5renpy_4uguu_2gl_glUniformMatrix2fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniformMatrix2x3fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix2x3fv, "__pyx_t_5renpy_4uguu_2gl_glUniformMatrix2x3fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniformMatrix2x4fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix2x4fv, "__pyx_t_5renpy_4uguu_2gl_glUniformMatrix2x4fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniformMatrix3fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix3fv, "__pyx_t_5renpy_4uguu_2gl_glUniformMatrix3fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniformMatrix3x2fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix3x2fv, "__pyx_t_5renpy_4uguu_2gl_glUniformMatrix3x2fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniformMatrix3x4fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix3x4fv, "__pyx_t_5renpy_4uguu_2gl_glUniformMatrix3x4fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniformMatrix4fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix4fv, "__pyx_t_5renpy_4uguu_2gl_glUniformMatrix4fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniformMatrix4x2fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix4x2fv, "__pyx_t_5renpy_4uguu_2gl_glUniformMatrix4x2fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUniformMatrix4x3fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUniformMatrix4x3fv, "__pyx_t_5renpy_4uguu_2gl_glUniformMatrix4x3fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUnmapBuffer", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUnmapBuffer, "__pyx_t_5renpy_4uguu_2gl_glUnmapBuffer_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glUseProgram", (void **)&__pyx_vp_5renpy_4uguu_2gl_glUseProgram, "__pyx_t_5renpy_4uguu_2gl_glUseProgram_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glValidateProgram", (void **)&__pyx_vp_5renpy_4uguu_2gl_glValidateProgram, "__pyx_t_5renpy_4uguu_2gl_glValidateProgram_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glVertexAttrib1f", (void **)&__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib1f, "__pyx_t_5renpy_4uguu_2gl_glVertexAttrib1f_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glVertexAttrib1fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib1fv, "__pyx_t_5renpy_4uguu_2gl_glVertexAttrib1fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glVertexAttrib2f", (void **)&__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib2f, "__pyx_t_5renpy_4uguu_2gl_glVertexAttrib2f_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glVertexAttrib2fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib2fv, "__pyx_t_5renpy_4uguu_2gl_glVertexAttrib2fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glVertexAttrib3f", (void **)&__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib3f, "__pyx_t_5renpy_4uguu_2gl_glVertexAttrib3f_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glVertexAttrib3fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib3fv, "__pyx_t_5renpy_4uguu_2gl_glVertexAttrib3fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glVertexAttrib4f", (void **)&__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib4f, "__pyx_t_5renpy_4uguu_2gl_glVertexAttrib4f_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glVertexAttrib4fv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glVertexAttrib4fv, "__pyx_t_5renpy_4uguu_2gl_glVertexAttrib4fv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glVertexAttribI4i", (void **)&__pyx_vp_5renpy_4uguu_2gl_glVertexAttribI4i, "__pyx_t_5renpy_4uguu_2gl_glVertexAttribI4i_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glVertexAttribI4iv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glVertexAttribI4iv, "__pyx_t_5renpy_4uguu_2gl_glVertexAttribI4iv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glVertexAttribI4ui", (void **)&__pyx_vp_5renpy_4uguu_2gl_glVertexAttribI4ui, "__pyx_t_5renpy_4uguu_2gl_glVertexAttribI4ui_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glVertexAttribI4uiv", (void **)&__pyx_vp_5renpy_4uguu_2gl_glVertexAttribI4uiv, "__pyx_t_5renpy_4uguu_2gl_glVertexAttribI4uiv_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glVertexAttribIPointer", (void **)&__pyx_vp_5renpy_4uguu_2gl_glVertexAttribIPointer, "__pyx_t_5renpy_4uguu_2gl_glVertexAttribIPointer_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glVertexAttribPointer", (void **)&__pyx_vp_5renpy_4uguu_2gl_glVertexAttribPointer, "__pyx_t_5renpy_4uguu_2gl_glVertexAttribPointer_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  if (__Pyx_ImportVoidPtr(__pyx_t_1, "glViewport", (void **)&__pyx_vp_5renpy_4uguu_2gl_glViewport, "__pyx_t_5renpy_4uguu_2gl_glViewport_type") < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_RefNannyFinishContext();
  return 0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_RefNannyFinishContext();
  return -1;
}

static int __Pyx_modinit_function_import_code(void) {
  __Pyx_RefNannyDeclarations
  __Pyx_RefNannySetupContext("__Pyx_modinit_function_import_code", 0);
  /*--- Function import code ---*/
  __Pyx_RefNannyFinishContext();
  return 0;
}


#ifndef CYTHON_NO_PYINIT_EXPORT
#define __Pyx_PyMODINIT_FUNC PyMODINIT_FUNC
#elif PY_MAJOR_VERSION < 3
#ifdef __cplusplus
#define __Pyx_PyMODINIT_FUNC extern "C" void
#else
#define __Pyx_PyMODINIT_FUNC void
#endif
#else
#ifdef __cplusplus
#define __Pyx_PyMODINIT_FUNC extern "C" PyObject *
#else
#define __Pyx_PyMODINIT_FUNC PyObject *
#endif
#endif


#if PY_MAJOR_VERSION < 3
__Pyx_PyMODINIT_FUNC initgl2draw(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC initgl2draw(void)
#else
__Pyx_PyMODINIT_FUNC PyInit_gl2draw(void) CYTHON_SMALL_CODE; /*proto*/
__Pyx_PyMODINIT_FUNC PyInit_gl2draw(void)
#if CYTHON_PEP489_MULTI_PHASE_INIT
{
  return PyModuleDef_Init(&__pyx_moduledef);
}
static CYTHON_SMALL_CODE int __Pyx_check_single_interpreter(void) {
    #if PY_VERSION_HEX >= 0x030700A1
    static PY_INT64_T main_interpreter_id = -1;
    PY_INT64_T current_id = PyInterpreterState_GetID(PyThreadState_Get()->interp);
    if (main_interpreter_id == -1) {
        main_interpreter_id = current_id;
        return (unlikely(current_id == -1)) ? -1 : 0;
    } else if (unlikely(main_interpreter_id != current_id))
    #else
    static PyInterpreterState *main_interpreter = NULL;
    PyInterpreterState *current_interpreter = PyThreadState_Get()->interp;
    if (!main_interpreter) {
        main_interpreter = current_interpreter;
    } else if (unlikely(main_interpreter != current_interpreter))
    #endif
    {
        PyErr_SetString(
            PyExc_ImportError,
            "Interpreter change detected - this module can only be loaded into one interpreter per process.");
        return -1;
    }
    return 0;
}
static CYTHON_SMALL_CODE int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name, int allow_none) {
    PyObject *value = PyObject_GetAttrString(spec, from_name);
    int result = 0;
    if (likely(value)) {
        if (allow_none || value != Py_None) {
            result = PyDict_SetItemString(moddict, to_name, value);
        }
        Py_DECREF(value);
    } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
        PyErr_Clear();
    } else {
        result = -1;
    }
    return result;
}
static CYTHON_SMALL_CODE PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) {
    PyObject *module = NULL, *moddict, *modname;
    if (__Pyx_check_single_interpreter())
        return NULL;
    if (__pyx_m)
        return __Pyx_NewRef(__pyx_m);
    modname = PyObject_GetAttrString(spec, "name");
    if (unlikely(!modname)) goto bad;
    module = PyModule_NewObject(modname);
    Py_DECREF(modname);
    if (unlikely(!module)) goto bad;
    moddict = PyModule_GetDict(module);
    if (unlikely(!moddict)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__", 1) < 0)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__", 1) < 0)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__", 1) < 0)) goto bad;
    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__", 0) < 0)) goto bad;
    return module;
bad:
    Py_XDECREF(module);
    return NULL;
}


static CYTHON_SMALL_CODE int __pyx_pymod_exec_gl2draw(PyObject *__pyx_pyinit_module)
#endif
#endif
{
  PyObject *__pyx_t_1 = NULL;
  PyObject *__pyx_t_2 = NULL;
  int __pyx_t_3;
  int __pyx_lineno = 0;
  const char *__pyx_filename = NULL;
  int __pyx_clineno = 0;
  __Pyx_RefNannyDeclarations
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  if (__pyx_m) {
    if (__pyx_m == __pyx_pyinit_module) return 0;
    PyErr_SetString(PyExc_RuntimeError, "Module 'gl2draw' has already been imported. Re-initialisation is not supported.");
    return -1;
  }
  #elif PY_MAJOR_VERSION >= 3
  if (__pyx_m) return __Pyx_NewRef(__pyx_m);
  #endif
  #if CYTHON_REFNANNY
__Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
if (!__Pyx_RefNanny) {
  PyErr_Clear();
  __Pyx_RefNanny = __Pyx_RefNannyImportAPI("Cython.Runtime.refnanny");
  if (!__Pyx_RefNanny)
      Py_FatalError("failed to import 'refnanny' module");
}
#endif
  __Pyx_RefNannySetupContext("__Pyx_PyMODINIT_FUNC PyInit_gl2draw(void)", 0);
  if (__Pyx_check_binary_version() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #ifdef __Pxy_PyFrame_Initialize_Offsets
  __Pxy_PyFrame_Initialize_Offsets();
  #endif
  __pyx_empty_tuple = PyTuple_New(0); if (unlikely(!__pyx_empty_tuple)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_empty_bytes = PyBytes_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_bytes)) __PYX_ERR(0, 1, __pyx_L1_error)
  __pyx_empty_unicode = PyUnicode_FromStringAndSize("", 0); if (unlikely(!__pyx_empty_unicode)) __PYX_ERR(0, 1, __pyx_L1_error)
  #ifdef __Pyx_CyFunction_USED
  if (__pyx_CyFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_FusedFunction_USED
  if (__pyx_FusedFunction_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_Coroutine_USED
  if (__pyx_Coroutine_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_Generator_USED
  if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_AsyncGen_USED
  if (__pyx_AsyncGen_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  #ifdef __Pyx_StopAsyncIteration_USED
  if (__pyx_StopAsyncIteration_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  /*--- Library function declarations ---*/
  /*--- Threads initialization code ---*/
  #if defined(__PYX_FORCE_INIT_THREADS) && __PYX_FORCE_INIT_THREADS
  #ifdef WITH_THREAD /* Python build with threading support? */
  PyEval_InitThreads();
  #endif
  #endif
  /*--- Module creation code ---*/
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  __pyx_m = __pyx_pyinit_module;
  Py_INCREF(__pyx_m);
  #else
  #if PY_MAJOR_VERSION < 3
  __pyx_m = Py_InitModule4("gl2draw", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
  #else
  __pyx_m = PyModule_Create(&__pyx_moduledef);
  #endif
  if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  __pyx_d = PyModule_GetDict(__pyx_m); if (unlikely(!__pyx_d)) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_INCREF(__pyx_d);
  __pyx_b = PyImport_AddModule(__Pyx_BUILTIN_MODULE_NAME); if (unlikely(!__pyx_b)) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_INCREF(__pyx_b);
  __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
  Py_INCREF(__pyx_cython_runtime);
  if (PyObject_SetAttrString(__pyx_m, "__builtins__", __pyx_b) < 0) __PYX_ERR(0, 1, __pyx_L1_error);
  /*--- Initialize various global constants etc. ---*/
  if (__Pyx_InitGlobals() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #if PY_MAJOR_VERSION < 3 && (__PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT)
  if (__Pyx_init_sys_getdefaultencoding_params() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif
  if (__pyx_module_is_main_renpy__gl2__gl2draw) {
    if (PyObject_SetAttr(__pyx_m, __pyx_n_s_name_2, __pyx_n_s_main) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  }
  #if PY_MAJOR_VERSION >= 3
  {
    PyObject *modules = PyImport_GetModuleDict(); if (unlikely(!modules)) __PYX_ERR(0, 1, __pyx_L1_error)
    if (!PyDict_GetItemString(modules, "renpy.gl2.gl2draw")) {
      if (unlikely(PyDict_SetItemString(modules, "renpy.gl2.gl2draw", __pyx_m) < 0)) __PYX_ERR(0, 1, __pyx_L1_error)
    }
  }
  #endif
  /*--- Builtin init code ---*/
  if (__Pyx_InitCachedBuiltins() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  /*--- Constants init code ---*/
  if (__Pyx_InitCachedConstants() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  /*--- Global type/function init code ---*/
  (void)__Pyx_modinit_global_init_code();
  (void)__Pyx_modinit_variable_export_code();
  (void)__Pyx_modinit_function_export_code();
  if (unlikely(__Pyx_modinit_type_init_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (unlikely(__Pyx_modinit_type_import_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error)
  if (unlikely(__Pyx_modinit_variable_import_code() < 0)) __PYX_ERR(0, 1, __pyx_L1_error)
  (void)__Pyx_modinit_function_import_code();
  /*--- Execution code ---*/
  #if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
  if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  #endif

  /* "renpy/gl2/gl2draw.pyx":31
 * from sdl2 cimport *
 * from renpy.uguu.gl cimport *
 * import renpy.gl2.gl2functions             # <<<<<<<<<<<<<<
 * 
 * from pygame_sdl2 cimport *
 */
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_renpy_gl2_gl2functions, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_renpy, __pyx_t_1) < 0) __PYX_ERR(0, 31, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":34
 * 
 * from pygame_sdl2 cimport *
 * import_pygame_sdl2()             # <<<<<<<<<<<<<<
 * 
 * import renpy
 */
  (void)(import_pygame_sdl2());

  /* "renpy/gl2/gl2draw.pyx":36
 * import_pygame_sdl2()
 * 
 * import renpy             # <<<<<<<<<<<<<<
 * import pygame_sdl2 as pygame
 * from pygame_sdl2 import Surface
 */
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_renpy, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_renpy, __pyx_t_1) < 0) __PYX_ERR(0, 36, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":37
 * 
 * import renpy
 * import pygame_sdl2 as pygame             # <<<<<<<<<<<<<<
 * from pygame_sdl2 import Surface
 * 
 */
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_pygame_sdl2, 0, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pygame, __pyx_t_1) < 0) __PYX_ERR(0, 37, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":38
 * import renpy
 * import pygame_sdl2 as pygame
 * from pygame_sdl2 import Surface             # <<<<<<<<<<<<<<
 * 
 * import os
 */
  __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_Surface);
  __Pyx_GIVEREF(__pyx_n_s_Surface);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Surface);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_pygame_sdl2, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Surface); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Surface, __pyx_t_1) < 0) __PYX_ERR(0, 38, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":40
 * from pygame_sdl2 import Surface
 * 
 * import os             # <<<<<<<<<<<<<<
 * import os.path
 * import weakref
 */
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_os, 0, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 40, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_os, __pyx_t_2) < 0) __PYX_ERR(0, 40, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":41
 * 
 * import os
 * import os.path             # <<<<<<<<<<<<<<
 * import weakref
 * import array
 */
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_os_path, 0, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_os, __pyx_t_2) < 0) __PYX_ERR(0, 41, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":42
 * import os
 * import os.path
 * import weakref             # <<<<<<<<<<<<<<
 * import array
 * import time
 */
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_weakref, 0, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 42, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_weakref, __pyx_t_2) < 0) __PYX_ERR(0, 42, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":43
 * import os.path
 * import weakref
 * import array             # <<<<<<<<<<<<<<
 * import time
 * import math
 */
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_array, 0, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_array, __pyx_t_2) < 0) __PYX_ERR(0, 43, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":44
 * import weakref
 * import array
 * import time             # <<<<<<<<<<<<<<
 * import math
 * import random
 */
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_time, 0, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_time, __pyx_t_2) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":45
 * import array
 * import time
 * import math             # <<<<<<<<<<<<<<
 * import random
 * 
 */
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_math, 0, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 45, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_math, __pyx_t_2) < 0) __PYX_ERR(0, 45, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":46
 * import time
 * import math
 * import random             # <<<<<<<<<<<<<<
 * 
 * import renpy.uguu.gl as uguugl
 */
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_random, 0, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_random, __pyx_t_2) < 0) __PYX_ERR(0, 46, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":48
 * import random
 * 
 * import renpy.uguu.gl as uguugl             # <<<<<<<<<<<<<<
 * 
 * cimport renpy.display.render as render
 */
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s__13);
  __Pyx_GIVEREF(__pyx_n_s__13);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s__13);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_renpy_uguu_gl, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_uguugl, __pyx_t_1) < 0) __PYX_ERR(0, 48, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":61
 * from renpy.gl2.gl2model cimport Model
 * 
 * from renpy.gl2.gl2texture import Texture, TextureLoader             # <<<<<<<<<<<<<<
 * from renpy.gl2.gl2shadercache import ShaderCache
 * 
 */
  __pyx_t_1 = PyList_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_INCREF(__pyx_n_s_Texture);
  __Pyx_GIVEREF(__pyx_n_s_Texture);
  PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_Texture);
  __Pyx_INCREF(__pyx_n_s_TextureLoader);
  __Pyx_GIVEREF(__pyx_n_s_TextureLoader);
  PyList_SET_ITEM(__pyx_t_1, 1, __pyx_n_s_TextureLoader);
  __pyx_t_2 = __Pyx_Import(__pyx_n_s_renpy_gl2_gl2texture, __pyx_t_1, -1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_2, __pyx_n_s_Texture); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Texture, __pyx_t_1) < 0) __PYX_ERR(0, 61, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;

  /* "renpy/gl2/gl2draw.pyx":62
 * 
 * from renpy.gl2.gl2texture import Texture, TextureLoader
 * from renpy.gl2.gl2shadercache import ShaderCache             # <<<<<<<<<<<<<<
 * 
 * # Cache various externals, so we can use them more efficiently.
 */
  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_INCREF(__pyx_n_s_ShaderCache);
  __Pyx_GIVEREF(__pyx_n_s_ShaderCache);
  PyList_SET_ITEM(__pyx_t_2, 0, __pyx_n_s_ShaderCache);
  __pyx_t_1 = __Pyx_Import(__pyx_n_s_renpy_gl2_gl2shadercache, __pyx_t_2, -1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_1, __pyx_n_s_ShaderCache); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ShaderCache, __pyx_t_2) < 0) __PYX_ERR(0, 62, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":66
 * # Cache various externals, so we can use them more efficiently.
 * cdef int DISSOLVE, IMAGEDISSOLVE, PIXELLATE
 * DISSOLVE = renpy.display.render.DISSOLVE             # <<<<<<<<<<<<<<
 * IMAGEDISSOLVE = renpy.display.render.IMAGEDISSOLVE
 * PIXELLATE = renpy.display.render.PIXELLATE
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_render); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_DISSOLVE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 66, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 66, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_5renpy_3gl2_7gl2draw_DISSOLVE = __pyx_t_3;

  /* "renpy/gl2/gl2draw.pyx":67
 * cdef int DISSOLVE, IMAGEDISSOLVE, PIXELLATE
 * DISSOLVE = renpy.display.render.DISSOLVE
 * IMAGEDISSOLVE = renpy.display.render.IMAGEDISSOLVE             # <<<<<<<<<<<<<<
 * PIXELLATE = renpy.display.render.PIXELLATE
 * 
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_render); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_IMAGEDISSOLVE); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_1); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 67, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_v_5renpy_3gl2_7gl2draw_IMAGEDISSOLVE = __pyx_t_3;

  /* "renpy/gl2/gl2draw.pyx":68
 * DISSOLVE = renpy.display.render.DISSOLVE
 * IMAGEDISSOLVE = renpy.display.render.IMAGEDISSOLVE
 * PIXELLATE = renpy.display.render.PIXELLATE             # <<<<<<<<<<<<<<
 * 
 * cdef object IDENTITY
 */
  __Pyx_GetModuleGlobalName(__pyx_t_1, __pyx_n_s_renpy); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_display); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_render); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_PIXELLATE); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 68, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_v_5renpy_3gl2_7gl2draw_PIXELLATE = __pyx_t_3;

  /* "renpy/gl2/gl2draw.pyx":71
 * 
 * cdef object IDENTITY
 * IDENTITY = renpy.display.render.IDENTITY             # <<<<<<<<<<<<<<
 * 
 * # Should we try to vsync?
 */
  __Pyx_GetModuleGlobalName(__pyx_t_2, __pyx_n_s_renpy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_display); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_render); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_2);
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_IDENTITY); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 71, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
  __Pyx_XGOTREF(__pyx_v_5renpy_3gl2_7gl2draw_IDENTITY);
  __Pyx_DECREF_SET(__pyx_v_5renpy_3gl2_7gl2draw_IDENTITY, __pyx_t_1);
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":74
 * 
 * # Should we try to vsync?
 * vsync = True             # <<<<<<<<<<<<<<
 * 
 * # A list of frame end times, used for the same purpose.
 */
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_vsync, Py_True) < 0) __PYX_ERR(0, 74, __pyx_L1_error)

  /* "renpy/gl2/gl2draw.pyx":77
 * 
 * # A list of frame end times, used for the same purpose.
 * frame_times = [ ]             # <<<<<<<<<<<<<<
 * 
 * cdef class GL2Draw:
 */
  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 77, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_frame_times, __pyx_t_1) < 0) __PYX_ERR(0, 77, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":701
 *         return
 * 
 *     def load_texture(self, surf, transient=False, properties={}):             # <<<<<<<<<<<<<<
 *         """
 *         Loads a texture into memory.
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 701, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__7 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":873
 * 
 * 
 *     def render_to_texture(self, what, alpha=True, properties={}):             # <<<<<<<<<<<<<<
 *         """
 *         Renders `what` to a texture. The texture will have the drawable
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 873, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  __pyx_k__12 = __pyx_t_1;
  __Pyx_GIVEREF(__pyx_t_1);
  __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1317
 * 
 * # A set of uniforms that are defined by Ren'Py, and shouldn't be set in ATL.
 * standard_uniforms = { "u_transform", "u_time", "u_random" }             # <<<<<<<<<<<<<<
 */
  __pyx_t_1 = PySet_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1317, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PySet_Add(__pyx_t_1, __pyx_n_s_u_transform) < 0) __PYX_ERR(0, 1317, __pyx_L1_error)
  if (PySet_Add(__pyx_t_1, __pyx_n_s_u_time) < 0) __PYX_ERR(0, 1317, __pyx_L1_error)
  if (PySet_Add(__pyx_t_1, __pyx_n_s_u_random) < 0) __PYX_ERR(0, 1317, __pyx_L1_error)
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_standard_uniforms, __pyx_t_1) < 0) __PYX_ERR(0, 1317, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":1
 * def __pyx_unpickle_GL2Draw(__pyx_type, long __pyx_checksum, __pyx_state):             # <<<<<<<<<<<<<<
 *     cdef object __pyx_PickleError
 *     cdef object __pyx_result
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5renpy_3gl2_7gl2draw_1__pyx_unpickle_GL2Draw, NULL, __pyx_n_s_renpy_gl2_gl2draw); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_GL2Draw, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "(tree fragment)":11
 *         __pyx_unpickle_GL2Draw__set_state(<GL2Draw> __pyx_result, __pyx_state)
 *     return __pyx_result
 * cdef __pyx_unpickle_GL2Draw__set_state(GL2Draw __pyx_result, tuple __pyx_state):             # <<<<<<<<<<<<<<
 *     __pyx_result.angle = __pyx_state[0]; __pyx_result.clip_cache = __pyx_state[1]; __pyx_result.clip_rtt_box = __pyx_state[2]; __pyx_result.color_texture = __pyx_state[3]; __pyx_result.current_fbo = __pyx_state[4]; __pyx_result.default_clip = __pyx_state[5]; __pyx_result.default_fbo = __pyx_state[6]; __pyx_result.depth_renderbuffer = __pyx_state[7]; __pyx_result.did_init = __pyx_state[8]; __pyx_result.display_info = __pyx_state[9]; __pyx_result.dpi_scale = __pyx_state[10]; __pyx_result.draw_per_phys = __pyx_state[11]; __pyx_result.draw_per_virt = __pyx_state[12]; __pyx_result.draw_to_virt = __pyx_state[13]; __pyx_result.draw_transform = __pyx_state[14]; __pyx_result.drawable_size = __pyx_state[15]; __pyx_result.drawable_viewport = __pyx_state[16]; __pyx_result.fast_redraw_frames = __pyx_state[17]; __pyx_result.fbo = __pyx_state[18]; __pyx_result.fullscreen_surface = __pyx_state[19]; __pyx_result.gles = __pyx_state[20]; __pyx_result.info = __pyx_state[21]; __pyx_result.last_redraw_time = __pyx_state[22]; __pyx_result.old_fullscreen = __pyx_state[23]; __pyx_result.physical_box = __pyx_state[24]; __pyx_result.physical_size = __pyx_state[25]; __pyx_result.redraw_period = __pyx_state[26]; __pyx_result.shader_cache = __pyx_state[27]; __pyx_result.texture_loader = __pyx_state[28]; __pyx_result.virt_to_draw = __pyx_state[29]; __pyx_result.virtual_box = __pyx_state[30]; __pyx_result.virtual_size = __pyx_state[31]; __pyx_result.window = __pyx_state[32]
 *     if len(__pyx_state) > 33 and hasattr(__pyx_result, '__dict__'):
 */
  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_5renpy_3gl2_7gl2draw_3__pyx_unpickle_GL2DrawingContext, NULL, __pyx_n_s_renpy_gl2_gl2draw); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_pyx_unpickle_GL2DrawingContext, __pyx_t_1) < 0) __PYX_ERR(2, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/gl2/gl2draw.pyx":1
 * #cython: profile=False             # <<<<<<<<<<<<<<
 * #@PydevCodeAnalysisIgnore
 * # Copyright 2004-2021 Tom Rothamel <pytom@bishoujo.us>
 */
  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_GOTREF(__pyx_t_1);
  if (PyDict_SetItem(__pyx_d, __pyx_n_s_test, __pyx_t_1) < 0) __PYX_ERR(0, 1, __pyx_L1_error)
  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;

  /* "renpy/display/matrix.pxd":39
 *         oz[0] = x * self.zdx + y * self.zdy + z * self.zdz + w * self.zdw
 * 
 *     cdef inline void transform2(Matrix self, float *ox, float *oy, float x, float y, float z, float w):             # <<<<<<<<<<<<<<
 *         ox[0] = x * self.xdx + y * self.xdy + z * self.xdz + w * self.xdw
 *         oy[0] = x * self.ydx + y * self.ydy + z * self.ydz + w * self.ydw
 */

  /*--- Wrapped vars code ---*/

  goto __pyx_L0;
  __pyx_L1_error:;
  __Pyx_XDECREF(__pyx_t_1);
  __Pyx_XDECREF(__pyx_t_2);
  if (__pyx_m) {
    if (__pyx_d) {
      __Pyx_AddTraceback("init renpy.gl2.gl2draw", __pyx_clineno, __pyx_lineno, __pyx_filename);
    }
    Py_CLEAR(__pyx_m);
  } else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_ImportError, "init renpy.gl2.gl2draw");
  }
  __pyx_L0:;
  __Pyx_RefNannyFinishContext();
  #if CYTHON_PEP489_MULTI_PHASE_INIT
  return (__pyx_m != NULL) ? 0 : -1;
  #elif PY_MAJOR_VERSION >= 3
  return __pyx_m;
  #else
  return;
  #endif
}

/* --- Runtime support code --- */
/* Refnanny */
#if CYTHON_REFNANNY
static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname) {
    PyObject *m = NULL, *p = NULL;
    void *r = NULL;
    m = PyImport_ImportModule(modname);
    if (!m) goto end;
    p = PyObject_GetAttrString(m, "RefNannyAPI");
    if (!p) goto end;
    r = PyLong_AsVoidPtr(p);
end:
    Py_XDECREF(p);
    Py_XDECREF(m);
    return (__Pyx_RefNannyAPIStruct *)r;
}
#endif

/* PyObjectGetAttrStr */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_getattro))
        return tp->tp_getattro(obj, attr_name);
#if PY_MAJOR_VERSION < 3
    if (likely(tp->tp_getattr))
        return tp->tp_getattr(obj, PyString_AS_STRING(attr_name));
#endif
    return PyObject_GetAttr(obj, attr_name);
}
#endif

/* GetBuiltinName */
static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
    PyObject* result = __Pyx_PyObject_GetAttrStr(__pyx_b, name);
    if (unlikely(!result)) {
        PyErr_Format(PyExc_NameError,
#if PY_MAJOR_VERSION >= 3
            "name '%U' is not defined", name);
#else
            "name '%.200s' is not defined", PyString_AS_STRING(name));
#endif
    }
    return result;
}

/* RaiseDoubleKeywords */
static void __Pyx_RaiseDoubleKeywordsError(
    const char* func_name,
    PyObject* kw_name)
{
    PyErr_Format(PyExc_TypeError,
        #if PY_MAJOR_VERSION >= 3
        "%s() got multiple values for keyword argument '%U'", func_name, kw_name);
        #else
        "%s() got multiple values for keyword argument '%s'", func_name,
        PyString_AsString(kw_name));
        #endif
}

/* ParseKeywords */
static int __Pyx_ParseOptionalKeywords(
    PyObject *kwds,
    PyObject **argnames[],
    PyObject *kwds2,
    PyObject *values[],
    Py_ssize_t num_pos_args,
    const char* function_name)
{
    PyObject *key = 0, *value = 0;
    Py_ssize_t pos = 0;
    PyObject*** name;
    PyObject*** first_kw_arg = argnames + num_pos_args;
    while (PyDict_Next(kwds, &pos, &key, &value)) {
        name = first_kw_arg;
        while (*name && (**name != key)) name++;
        if (*name) {
            values[name-argnames] = value;
            continue;
        }
        name = first_kw_arg;
        #if PY_MAJOR_VERSION < 3
        if (likely(PyString_Check(key))) {
            while (*name) {
                if ((CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**name) == PyString_GET_SIZE(key))
                        && _PyString_Eq(**name, key)) {
                    values[name-argnames] = value;
                    break;
                }
                name++;
            }
            if (*name) continue;
            else {
                PyObject*** argname = argnames;
                while (argname != first_kw_arg) {
                    if ((**argname == key) || (
                            (CYTHON_COMPILING_IN_PYPY || PyString_GET_SIZE(**argname) == PyString_GET_SIZE(key))
                             && _PyString_Eq(**argname, key))) {
                        goto arg_passed_twice;
                    }
                    argname++;
                }
            }
        } else
        #endif
        if (likely(PyUnicode_Check(key))) {
            while (*name) {
                int cmp = (**name == key) ? 0 :
                #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
                    (__Pyx_PyUnicode_GET_LENGTH(**name) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 :
                #endif
                    PyUnicode_Compare(**name, key);
                if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
                if (cmp == 0) {
                    values[name-argnames] = value;
                    break;
                }
                name++;
            }
            if (*name) continue;
            else {
                PyObject*** argname = argnames;
                while (argname != first_kw_arg) {
                    int cmp = (**argname == key) ? 0 :
                    #if !CYTHON_COMPILING_IN_PYPY && PY_MAJOR_VERSION >= 3
                        (__Pyx_PyUnicode_GET_LENGTH(**argname) != __Pyx_PyUnicode_GET_LENGTH(key)) ? 1 :
                    #endif
                        PyUnicode_Compare(**argname, key);
                    if (cmp < 0 && unlikely(PyErr_Occurred())) goto bad;
                    if (cmp == 0) goto arg_passed_twice;
                    argname++;
                }
            }
        } else
            goto invalid_keyword_type;
        if (kwds2) {
            if (unlikely(PyDict_SetItem(kwds2, key, value))) goto bad;
        } else {
            goto invalid_keyword;
        }
    }
    return 0;
arg_passed_twice:
    __Pyx_RaiseDoubleKeywordsError(function_name, key);
    goto bad;
invalid_keyword_type:
    PyErr_Format(PyExc_TypeError,
        "%.200s() keywords must be strings", function_name);
    goto bad;
invalid_keyword:
    PyErr_Format(PyExc_TypeError,
    #if PY_MAJOR_VERSION < 3
        "%.200s() got an unexpected keyword argument '%.200s'",
        function_name, PyString_AsString(key));
    #else
        "%s() got an unexpected keyword argument '%U'",
        function_name, key);
    #endif
bad:
    return -1;
}

/* RaiseArgTupleInvalid */
static void __Pyx_RaiseArgtupleInvalid(
    const char* func_name,
    int exact,
    Py_ssize_t num_min,
    Py_ssize_t num_max,
    Py_ssize_t num_found)
{
    Py_ssize_t num_expected;
    const char *more_or_less;
    if (num_found < num_min) {
        num_expected = num_min;
        more_or_less = "at least";
    } else {
        num_expected = num_max;
        more_or_less = "at most";
    }
    if (exact) {
        more_or_less = "exactly";
    }
    PyErr_Format(PyExc_TypeError,
                 "%.200s() takes %.8s %" CYTHON_FORMAT_SSIZE_T "d positional argument%.1s (%" CYTHON_FORMAT_SSIZE_T "d given)",
                 func_name, more_or_less, num_expected,
                 (num_expected == 1) ? "" : "s", num_found);
}

/* BytesEquals */
static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
#if CYTHON_COMPILING_IN_PYPY
    return PyObject_RichCompareBool(s1, s2, equals);
#else
    if (s1 == s2) {
        return (equals == Py_EQ);
    } else if (PyBytes_CheckExact(s1) & PyBytes_CheckExact(s2)) {
        const char *ps1, *ps2;
        Py_ssize_t length = PyBytes_GET_SIZE(s1);
        if (length != PyBytes_GET_SIZE(s2))
            return (equals == Py_NE);
        ps1 = PyBytes_AS_STRING(s1);
        ps2 = PyBytes_AS_STRING(s2);
        if (ps1[0] != ps2[0]) {
            return (equals == Py_NE);
        } else if (length == 1) {
            return (equals == Py_EQ);
        } else {
            int result;
#if CYTHON_USE_UNICODE_INTERNALS
            Py_hash_t hash1, hash2;
            hash1 = ((PyBytesObject*)s1)->ob_shash;
            hash2 = ((PyBytesObject*)s2)->ob_shash;
            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
                return (equals == Py_NE);
            }
#endif
            result = memcmp(ps1, ps2, (size_t)length);
            return (equals == Py_EQ) ? (result == 0) : (result != 0);
        }
    } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
        return (equals == Py_NE);
    } else if ((s2 == Py_None) & PyBytes_CheckExact(s1)) {
        return (equals == Py_NE);
    } else {
        int result;
        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
        if (!py_result)
            return -1;
        result = __Pyx_PyObject_IsTrue(py_result);
        Py_DECREF(py_result);
        return result;
    }
#endif
}

/* UnicodeEquals */
static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
#if CYTHON_COMPILING_IN_PYPY
    return PyObject_RichCompareBool(s1, s2, equals);
#else
#if PY_MAJOR_VERSION < 3
    PyObject* owned_ref = NULL;
#endif
    int s1_is_unicode, s2_is_unicode;
    if (s1 == s2) {
        goto return_eq;
    }
    s1_is_unicode = PyUnicode_CheckExact(s1);
    s2_is_unicode = PyUnicode_CheckExact(s2);
#if PY_MAJOR_VERSION < 3
    if ((s1_is_unicode & (!s2_is_unicode)) && PyString_CheckExact(s2)) {
        owned_ref = PyUnicode_FromObject(s2);
        if (unlikely(!owned_ref))
            return -1;
        s2 = owned_ref;
        s2_is_unicode = 1;
    } else if ((s2_is_unicode & (!s1_is_unicode)) && PyString_CheckExact(s1)) {
        owned_ref = PyUnicode_FromObject(s1);
        if (unlikely(!owned_ref))
            return -1;
        s1 = owned_ref;
        s1_is_unicode = 1;
    } else if (((!s2_is_unicode) & (!s1_is_unicode))) {
        return __Pyx_PyBytes_Equals(s1, s2, equals);
    }
#endif
    if (s1_is_unicode & s2_is_unicode) {
        Py_ssize_t length;
        int kind;
        void *data1, *data2;
        if (unlikely(__Pyx_PyUnicode_READY(s1) < 0) || unlikely(__Pyx_PyUnicode_READY(s2) < 0))
            return -1;
        length = __Pyx_PyUnicode_GET_LENGTH(s1);
        if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) {
            goto return_ne;
        }
#if CYTHON_USE_UNICODE_INTERNALS
        {
            Py_hash_t hash1, hash2;
        #if CYTHON_PEP393_ENABLED
            hash1 = ((PyASCIIObject*)s1)->hash;
            hash2 = ((PyASCIIObject*)s2)->hash;
        #else
            hash1 = ((PyUnicodeObject*)s1)->hash;
            hash2 = ((PyUnicodeObject*)s2)->hash;
        #endif
            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
                goto return_ne;
            }
        }
#endif
        kind = __Pyx_PyUnicode_KIND(s1);
        if (kind != __Pyx_PyUnicode_KIND(s2)) {
            goto return_ne;
        }
        data1 = __Pyx_PyUnicode_DATA(s1);
        data2 = __Pyx_PyUnicode_DATA(s2);
        if (__Pyx_PyUnicode_READ(kind, data1, 0) != __Pyx_PyUnicode_READ(kind, data2, 0)) {
            goto return_ne;
        } else if (length == 1) {
            goto return_eq;
        } else {
            int result = memcmp(data1, data2, (size_t)(length * kind));
            #if PY_MAJOR_VERSION < 3
            Py_XDECREF(owned_ref);
            #endif
            return (equals == Py_EQ) ? (result == 0) : (result != 0);
        }
    } else if ((s1 == Py_None) & s2_is_unicode) {
        goto return_ne;
    } else if ((s2 == Py_None) & s1_is_unicode) {
        goto return_ne;
    } else {
        int result;
        PyObject* py_result = PyObject_RichCompare(s1, s2, equals);
        #if PY_MAJOR_VERSION < 3
        Py_XDECREF(owned_ref);
        #endif
        if (!py_result)
            return -1;
        result = __Pyx_PyObject_IsTrue(py_result);
        Py_DECREF(py_result);
        return result;
    }
return_eq:
    #if PY_MAJOR_VERSION < 3
    Py_XDECREF(owned_ref);
    #endif
    return (equals == Py_EQ);
return_ne:
    #if PY_MAJOR_VERSION < 3
    Py_XDECREF(owned_ref);
    #endif
    return (equals == Py_NE);
#endif
}

/* PyDictVersioning */
#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj) {
    PyObject *dict = Py_TYPE(obj)->tp_dict;
    return likely(dict) ? __PYX_GET_DICT_VERSION(dict) : 0;
}
static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj) {
    PyObject **dictptr = NULL;
    Py_ssize_t offset = Py_TYPE(obj)->tp_dictoffset;
    if (offset) {
#if CYTHON_COMPILING_IN_CPYTHON
        dictptr = (likely(offset > 0)) ? (PyObject **) ((char *)obj + offset) : _PyObject_GetDictPtr(obj);
#else
        dictptr = _PyObject_GetDictPtr(obj);
#endif
    }
    return (dictptr && *dictptr) ? __PYX_GET_DICT_VERSION(*dictptr) : 0;
}
static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version) {
    PyObject *dict = Py_TYPE(obj)->tp_dict;
    if (unlikely(!dict) || unlikely(tp_dict_version != __PYX_GET_DICT_VERSION(dict)))
        return 0;
    return obj_dict_version == __Pyx_get_object_dict_version(obj);
}
#endif

/* GetModuleGlobalName */
#if CYTHON_USE_DICT_VERSIONS
static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value)
#else
static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name)
#endif
{
    PyObject *result;
#if !CYTHON_AVOID_BORROWED_REFS
#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030500A1
    result = _PyDict_GetItem_KnownHash(__pyx_d, name, ((PyASCIIObject *) name)->hash);
    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
    if (likely(result)) {
        return __Pyx_NewRef(result);
    } else if (unlikely(PyErr_Occurred())) {
        return NULL;
    }
#else
    result = PyDict_GetItem(__pyx_d, name);
    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
    if (likely(result)) {
        return __Pyx_NewRef(result);
    }
#endif
#else
    result = PyObject_GetItem(__pyx_d, name);
    __PYX_UPDATE_DICT_CACHE(__pyx_d, result, *dict_cached_value, *dict_version)
    if (likely(result)) {
        return __Pyx_NewRef(result);
    }
    PyErr_Clear();
#endif
    return __Pyx_GetBuiltinName(name);
}

/* PyFunctionFastCall */
#if CYTHON_FAST_PYCALL
static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na,
                                               PyObject *globals) {
    PyFrameObject *f;
    PyThreadState *tstate = __Pyx_PyThreadState_Current;
    PyObject **fastlocals;
    Py_ssize_t i;
    PyObject *result;
    assert(globals != NULL);
    /* XXX Perhaps we should create a specialized
       PyFrame_New() that doesn't take locals, but does
       take builtins without sanity checking them.
       */
    assert(tstate != NULL);
    f = PyFrame_New(tstate, co, globals, NULL);
    if (f == NULL) {
        return NULL;
    }
    fastlocals = __Pyx_PyFrame_GetLocalsplus(f);
    for (i = 0; i < na; i++) {
        Py_INCREF(*args);
        fastlocals[i] = *args++;
    }
    result = PyEval_EvalFrameEx(f,0);
    ++tstate->recursion_depth;
    Py_DECREF(f);
    --tstate->recursion_depth;
    return result;
}
#if 1 || PY_VERSION_HEX < 0x030600B1
static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs) {
    PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
    PyObject *globals = PyFunction_GET_GLOBALS(func);
    PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
    PyObject *closure;
#if PY_MAJOR_VERSION >= 3
    PyObject *kwdefs;
#endif
    PyObject *kwtuple, **k;
    PyObject **d;
    Py_ssize_t nd;
    Py_ssize_t nk;
    PyObject *result;
    assert(kwargs == NULL || PyDict_Check(kwargs));
    nk = kwargs ? PyDict_Size(kwargs) : 0;
    if (Py_EnterRecursiveCall((char*)" while calling a Python object")) {
        return NULL;
    }
    if (
#if PY_MAJOR_VERSION >= 3
            co->co_kwonlyargcount == 0 &&
#endif
            likely(kwargs == NULL || nk == 0) &&
            co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
        if (argdefs == NULL && co->co_argcount == nargs) {
            result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals);
            goto done;
        }
        else if (nargs == 0 && argdefs != NULL
                 && co->co_argcount == Py_SIZE(argdefs)) {
            /* function called with no arguments, but all parameters have
               a default value: use default values as arguments .*/
            args = &PyTuple_GET_ITEM(argdefs, 0);
            result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals);
            goto done;
        }
    }
    if (kwargs != NULL) {
        Py_ssize_t pos, i;
        kwtuple = PyTuple_New(2 * nk);
        if (kwtuple == NULL) {
            result = NULL;
            goto done;
        }
        k = &PyTuple_GET_ITEM(kwtuple, 0);
        pos = i = 0;
        while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) {
            Py_INCREF(k[i]);
            Py_INCREF(k[i+1]);
            i += 2;
        }
        nk = i / 2;
    }
    else {
        kwtuple = NULL;
        k = NULL;
    }
    closure = PyFunction_GET_CLOSURE(func);
#if PY_MAJOR_VERSION >= 3
    kwdefs = PyFunction_GET_KW_DEFAULTS(func);
#endif
    if (argdefs != NULL) {
        d = &PyTuple_GET_ITEM(argdefs, 0);
        nd = Py_SIZE(argdefs);
    }
    else {
        d = NULL;
        nd = 0;
    }
#if PY_MAJOR_VERSION >= 3
    result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL,
                               args, (int)nargs,
                               k, (int)nk,
                               d, (int)nd, kwdefs, closure);
#else
    result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL,
                               args, (int)nargs,
                               k, (int)nk,
                               d, (int)nd, closure);
#endif
    Py_XDECREF(kwtuple);
done:
    Py_LeaveRecursiveCall();
    return result;
}
#endif
#endif

/* PyObjectCall */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
    PyObject *result;
    ternaryfunc call = func->ob_type->tp_call;
    if (unlikely(!call))
        return PyObject_Call(func, arg, kw);
    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
        return NULL;
    result = (*call)(func, arg, kw);
    Py_LeaveRecursiveCall();
    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
        PyErr_SetString(
            PyExc_SystemError,
            "NULL result without error in PyObject_Call");
    }
    return result;
}
#endif

/* PyObjectCallMethO */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
    PyObject *self, *result;
    PyCFunction cfunc;
    cfunc = PyCFunction_GET_FUNCTION(func);
    self = PyCFunction_GET_SELF(func);
    if (unlikely(Py_EnterRecursiveCall((char*)" while calling a Python object")))
        return NULL;
    result = cfunc(self, arg);
    Py_LeaveRecursiveCall();
    if (unlikely(!result) && unlikely(!PyErr_Occurred())) {
        PyErr_SetString(
            PyExc_SystemError,
            "NULL result without error in PyObject_Call");
    }
    return result;
}
#endif

/* PyObjectCallNoArg */
#if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
#if CYTHON_FAST_PYCALL
    if (PyFunction_Check(func)) {
        return __Pyx_PyFunction_FastCall(func, NULL, 0);
    }
#endif
#ifdef __Pyx_CyFunction_USED
    if (likely(PyCFunction_Check(func) || __Pyx_CyFunction_Check(func)))
#else
    if (likely(PyCFunction_Check(func)))
#endif
    {
        if (likely(PyCFunction_GET_FLAGS(func) & METH_NOARGS)) {
            return __Pyx_PyObject_CallMethO(func, NULL);
        }
    }
    return __Pyx_PyObject_Call(func, __pyx_empty_tuple, NULL);
}
#endif

/* PyCFunctionFastCall */
#if CYTHON_FAST_PYCCALL
static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) {
    PyCFunctionObject *func = (PyCFunctionObject*)func_obj;
    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
    PyObject *self = PyCFunction_GET_SELF(func);
    int flags = PyCFunction_GET_FLAGS(func);
    assert(PyCFunction_Check(func));
    assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS | METH_STACKLESS)));
    assert(nargs >= 0);
    assert(nargs == 0 || args != NULL);
    /* _PyCFunction_FastCallDict() must not be called with an exception set,
       because it may clear it (directly or indirectly) and so the
       caller loses its exception */
    assert(!PyErr_Occurred());
    if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) {
        return (*((__Pyx_PyCFunctionFastWithKeywords)(void*)meth)) (self, args, nargs, NULL);
    } else {
        return (*((__Pyx_PyCFunctionFast)(void*)meth)) (self, args, nargs);
    }
}
#endif

/* PyObjectCallOneArg */
#if CYTHON_COMPILING_IN_CPYTHON
static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
    PyObject *result;
    PyObject *args = PyTuple_New(1);
    if (unlikely(!args)) return NULL;
    Py_INCREF(arg);
    PyTuple_SET_ITEM(args, 0, arg);
    result = __Pyx_PyObject_Call(func, args, NULL);
    Py_DECREF(args);
    return result;
}
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
#if CYTHON_FAST_PYCALL
    if (PyFunction_Check(func)) {
        return __Pyx_PyFunction_FastCall(func, &arg, 1);
    }
#endif
    if (likely(PyCFunction_Check(func))) {
        if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
            return __Pyx_PyObject_CallMethO(func, arg);
#if CYTHON_FAST_PYCCALL
        } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) {
            return __Pyx_PyCFunction_FastCall(func, &arg, 1);
#endif
        }
    }
    return __Pyx__PyObject_CallOneArg(func, arg);
}
#else
static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg) {
    PyObject *result;
    PyObject *args = PyTuple_Pack(1, arg);
    if (unlikely(!args)) return NULL;
    result = __Pyx_PyObject_Call(func, args, NULL);
    Py_DECREF(args);
    return result;
}
#endif

/* RaiseTooManyValuesToUnpack */
static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
    PyErr_Format(PyExc_ValueError,
                 "too many values to unpack (expected %" CYTHON_FORMAT_SSIZE_T "d)", expected);
}

/* RaiseNeedMoreValuesToUnpack */
static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
    PyErr_Format(PyExc_ValueError,
                 "need more than %" CYTHON_FORMAT_SSIZE_T "d value%.1s to unpack",
                 index, (index == 1) ? "" : "s");
}

/* RaiseNoneIterError */
static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void) {
    PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
}

/* IterFinish */
static CYTHON_INLINE int __Pyx_IterFinish(void) {
#if CYTHON_FAST_THREAD_STATE
    PyThreadState *tstate = __Pyx_PyThreadState_Current;
    PyObject* exc_type = tstate->curexc_type;
    if (unlikely(exc_type)) {
        if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) {
            PyObject *exc_value, *exc_tb;
            exc_value = tstate->curexc_value;
            exc_tb = tstate->curexc_traceback;
            tstate->curexc_type = 0;
            tstate->curexc_value = 0;
            tstate->curexc_traceback = 0;
            Py_DECREF(exc_type);
            Py_XDECREF(exc_value);
            Py_XDECREF(exc_tb);
            return 0;
        } else {
            return -1;
        }
    }
    return 0;
#else
    if (unlikely(PyErr_Occurred())) {
        if (likely(PyErr_ExceptionMatches(PyExc_StopIteration))) {
            PyErr_Clear();
            return 0;
        } else {
            return -1;
        }
    }
    return 0;
#endif
}

/* UnpackItemEndCheck */
static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
    if (unlikely(retval)) {
        Py_DECREF(retval);
        __Pyx_RaiseTooManyValuesError(expected);
        return -1;
    } else {
        return __Pyx_IterFinish();
    }
    return 0;
}

/* PyIntBinop */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyInt_SubtractObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) {
    (void)inplace;
    (void)zerodivision_check;
    #if PY_MAJOR_VERSION < 3
    if (likely(PyInt_CheckExact(op1))) {
        const long b = intval;
        long x;
        long a = PyInt_AS_LONG(op1);
            x = (long)((unsigned long)a - b);
            if (likely((x^a) >= 0 || (x^~b) >= 0))
                return PyInt_FromLong(x);
            return PyLong_Type.tp_as_number->nb_subtract(op1, op2);
    }
    #endif
    #if CYTHON_USE_PYLONG_INTERNALS
    if (likely(PyLong_CheckExact(op1))) {
        const long b = intval;
        long a, x;
#ifdef HAVE_LONG_LONG
        const PY_LONG_LONG llb = intval;
        PY_LONG_LONG lla, llx;
#endif
        const digit* digits = ((PyLongObject*)op1)->ob_digit;
        const Py_ssize_t size = Py_SIZE(op1);
        if (likely(__Pyx_sst_abs(size) <= 1)) {
            a = likely(size) ? digits[0] : 0;
            if (size == -1) a = -a;
        } else {
            switch (size) {
                case -2:
                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                        a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case 2:
                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                        a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case -3:
                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                        a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case 3:
                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                        a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case -4:
                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                        a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case 4:
                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                        a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                default: return PyLong_Type.tp_as_number->nb_subtract(op1, op2);
            }
        }
                x = a - b;
            return PyLong_FromLong(x);
#ifdef HAVE_LONG_LONG
        long_long:
                llx = lla - llb;
            return PyLong_FromLongLong(llx);
#endif
        
        
    }
    #endif
    if (PyFloat_CheckExact(op1)) {
        const long b = intval;
        double a = PyFloat_AS_DOUBLE(op1);
            double result;
            PyFPE_START_PROTECT("subtract", return NULL)
            result = ((double)a) - (double)b;
            PyFPE_END_PROTECT(result)
            return PyFloat_FromDouble(result);
    }
    return (inplace ? PyNumber_InPlaceSubtract : PyNumber_Subtract)(op1, op2);
}
#endif

/* PyObjectCall2Args */
static CYTHON_UNUSED PyObject* __Pyx_PyObject_Call2Args(PyObject* function, PyObject* arg1, PyObject* arg2) {
    PyObject *args, *result = NULL;
    #if CYTHON_FAST_PYCALL
    if (PyFunction_Check(function)) {
        PyObject *args[2] = {arg1, arg2};
        return __Pyx_PyFunction_FastCall(function, args, 2);
    }
    #endif
    #if CYTHON_FAST_PYCCALL
    if (__Pyx_PyFastCFunction_Check(function)) {
        PyObject *args[2] = {arg1, arg2};
        return __Pyx_PyCFunction_FastCall(function, args, 2);
    }
    #endif
    args = PyTuple_New(2);
    if (unlikely(!args)) goto done;
    Py_INCREF(arg1);
    PyTuple_SET_ITEM(args, 0, arg1);
    Py_INCREF(arg2);
    PyTuple_SET_ITEM(args, 1, arg2);
    Py_INCREF(function);
    result = __Pyx_PyObject_Call(function, args, NULL);
    Py_DECREF(args);
    Py_DECREF(function);
done:
    return result;
}

/* GetItemInt */
static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
    PyObject *r;
    if (!j) return NULL;
    r = PyObject_GetItem(o, j);
    Py_DECREF(j);
    return r;
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
                                                              CYTHON_NCP_UNUSED int wraparound,
                                                              CYTHON_NCP_UNUSED int boundscheck) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    Py_ssize_t wrapped_i = i;
    if (wraparound & unlikely(i < 0)) {
        wrapped_i += PyList_GET_SIZE(o);
    }
    if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyList_GET_SIZE(o)))) {
        PyObject *r = PyList_GET_ITEM(o, wrapped_i);
        Py_INCREF(r);
        return r;
    }
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
#else
    return PySequence_GetItem(o, i);
#endif
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
                                                              CYTHON_NCP_UNUSED int wraparound,
                                                              CYTHON_NCP_UNUSED int boundscheck) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
    Py_ssize_t wrapped_i = i;
    if (wraparound & unlikely(i < 0)) {
        wrapped_i += PyTuple_GET_SIZE(o);
    }
    if ((!boundscheck) || likely(__Pyx_is_valid_index(wrapped_i, PyTuple_GET_SIZE(o)))) {
        PyObject *r = PyTuple_GET_ITEM(o, wrapped_i);
        Py_INCREF(r);
        return r;
    }
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
#else
    return PySequence_GetItem(o, i);
#endif
}
static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i, int is_list,
                                                     CYTHON_NCP_UNUSED int wraparound,
                                                     CYTHON_NCP_UNUSED int boundscheck) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
    if (is_list || PyList_CheckExact(o)) {
        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyList_GET_SIZE(o);
        if ((!boundscheck) || (likely(__Pyx_is_valid_index(n, PyList_GET_SIZE(o))))) {
            PyObject *r = PyList_GET_ITEM(o, n);
            Py_INCREF(r);
            return r;
        }
    }
    else if (PyTuple_CheckExact(o)) {
        Py_ssize_t n = ((!wraparound) | likely(i >= 0)) ? i : i + PyTuple_GET_SIZE(o);
        if ((!boundscheck) || likely(__Pyx_is_valid_index(n, PyTuple_GET_SIZE(o)))) {
            PyObject *r = PyTuple_GET_ITEM(o, n);
            Py_INCREF(r);
            return r;
        }
    } else {
        PySequenceMethods *m = Py_TYPE(o)->tp_as_sequence;
        if (likely(m && m->sq_item)) {
            if (wraparound && unlikely(i < 0) && likely(m->sq_length)) {
                Py_ssize_t l = m->sq_length(o);
                if (likely(l >= 0)) {
                    i += l;
                } else {
                    if (!PyErr_ExceptionMatches(PyExc_OverflowError))
                        return NULL;
                    PyErr_Clear();
                }
            }
            return m->sq_item(o, i);
        }
    }
#else
    if (is_list || PySequence_Check(o)) {
        return PySequence_GetItem(o, i);
    }
#endif
    return __Pyx_GetItemInt_Generic(o, PyInt_FromSsize_t(i));
}

/* py_abs */
#if CYTHON_USE_PYLONG_INTERNALS
static PyObject *__Pyx_PyLong_AbsNeg(PyObject *n) {
    if (likely(Py_SIZE(n) == -1)) {
        return PyLong_FromLong(((PyLongObject*)n)->ob_digit[0]);
    }
#if CYTHON_COMPILING_IN_CPYTHON
    {
        PyObject *copy = _PyLong_Copy((PyLongObject*)n);
        if (likely(copy)) {
            __Pyx_SET_SIZE(copy, -Py_SIZE(copy));
        }
        return copy;
    }
#else
    return PyNumber_Negative(n);
#endif
}
#endif

/* PyObjectSetAttrStr */
#if CYTHON_USE_TYPE_SLOTS
static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr_name, PyObject* value) {
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_setattro))
        return tp->tp_setattro(obj, attr_name, value);
#if PY_MAJOR_VERSION < 3
    if (likely(tp->tp_setattr))
        return tp->tp_setattr(obj, PyString_AS_STRING(attr_name), value);
#endif
    return PyObject_SetAttr(obj, attr_name, value);
}
#endif

/* GetTopmostException */
#if CYTHON_USE_EXC_INFO_STACK
static _PyErr_StackItem *
__Pyx_PyErr_GetTopmostException(PyThreadState *tstate)
{
    _PyErr_StackItem *exc_info = tstate->exc_info;
    while ((exc_info->exc_type == NULL || exc_info->exc_type == Py_None) &&
           exc_info->previous_item != NULL)
    {
        exc_info = exc_info->previous_item;
    }
    return exc_info;
}
#endif

/* SaveResetException */
#if CYTHON_FAST_THREAD_STATE
static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
    #if CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = __Pyx_PyErr_GetTopmostException(tstate);
    *type = exc_info->exc_type;
    *value = exc_info->exc_value;
    *tb = exc_info->exc_traceback;
    #else
    *type = tstate->exc_type;
    *value = tstate->exc_value;
    *tb = tstate->exc_traceback;
    #endif
    Py_XINCREF(*type);
    Py_XINCREF(*value);
    Py_XINCREF(*tb);
}
static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    #if CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = tstate->exc_info;
    tmp_type = exc_info->exc_type;
    tmp_value = exc_info->exc_value;
    tmp_tb = exc_info->exc_traceback;
    exc_info->exc_type = type;
    exc_info->exc_value = value;
    exc_info->exc_traceback = tb;
    #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = type;
    tstate->exc_value = value;
    tstate->exc_traceback = tb;
    #endif
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
}
#endif

/* PyErrFetchRestore */
#if CYTHON_FAST_THREAD_STATE
static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    tmp_type = tstate->curexc_type;
    tmp_value = tstate->curexc_value;
    tmp_tb = tstate->curexc_traceback;
    tstate->curexc_type = type;
    tstate->curexc_value = value;
    tstate->curexc_traceback = tb;
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
}
static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
    *type = tstate->curexc_type;
    *value = tstate->curexc_value;
    *tb = tstate->curexc_traceback;
    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
}
#endif

/* FastTypeChecks */
#if CYTHON_COMPILING_IN_CPYTHON
static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
    while (a) {
        a = a->tp_base;
        if (a == b)
            return 1;
    }
    return b == &PyBaseObject_Type;
}
static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) {
    PyObject *mro;
    if (a == b) return 1;
    mro = a->tp_mro;
    if (likely(mro)) {
        Py_ssize_t i, n;
        n = PyTuple_GET_SIZE(mro);
        for (i = 0; i < n; i++) {
            if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b)
                return 1;
        }
        return 0;
    }
    return __Pyx_InBases(a, b);
}
#if PY_MAJOR_VERSION == 2
static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) {
    PyObject *exception, *value, *tb;
    int res;
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&exception, &value, &tb);
    res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0;
    if (unlikely(res == -1)) {
        PyErr_WriteUnraisable(err);
        res = 0;
    }
    if (!res) {
        res = PyObject_IsSubclass(err, exc_type2);
        if (unlikely(res == -1)) {
            PyErr_WriteUnraisable(err);
            res = 0;
        }
    }
    __Pyx_ErrRestore(exception, value, tb);
    return res;
}
#else
static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) {
    int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0;
    if (!res) {
        res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);
    }
    return res;
}
#endif
static int __Pyx_PyErr_GivenExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
    Py_ssize_t i, n;
    assert(PyExceptionClass_Check(exc_type));
    n = PyTuple_GET_SIZE(tuple);
#if PY_MAJOR_VERSION >= 3
    for (i=0; i<n; i++) {
        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
    }
#endif
    for (i=0; i<n; i++) {
        PyObject *t = PyTuple_GET_ITEM(tuple, i);
        #if PY_MAJOR_VERSION < 3
        if (likely(exc_type == t)) return 1;
        #endif
        if (likely(PyExceptionClass_Check(t))) {
            if (__Pyx_inner_PyErr_GivenExceptionMatches2(exc_type, NULL, t)) return 1;
        } else {
        }
    }
    return 0;
}
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) {
    if (likely(err == exc_type)) return 1;
    if (likely(PyExceptionClass_Check(err))) {
        if (likely(PyExceptionClass_Check(exc_type))) {
            return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type);
        } else if (likely(PyTuple_Check(exc_type))) {
            return __Pyx_PyErr_GivenExceptionMatchesTuple(err, exc_type);
        } else {
        }
    }
    return PyErr_GivenExceptionMatches(err, exc_type);
}
static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) {
    assert(PyExceptionClass_Check(exc_type1));
    assert(PyExceptionClass_Check(exc_type2));
    if (likely(err == exc_type1 || err == exc_type2)) return 1;
    if (likely(PyExceptionClass_Check(err))) {
        return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2);
    }
    return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2));
}
#endif

/* GetException */
#if CYTHON_FAST_THREAD_STATE
static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb)
#else
static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
#endif
{
    PyObject *local_type, *local_value, *local_tb;
#if CYTHON_FAST_THREAD_STATE
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    local_type = tstate->curexc_type;
    local_value = tstate->curexc_value;
    local_tb = tstate->curexc_traceback;
    tstate->curexc_type = 0;
    tstate->curexc_value = 0;
    tstate->curexc_traceback = 0;
#else
    PyErr_Fetch(&local_type, &local_value, &local_tb);
#endif
    PyErr_NormalizeException(&local_type, &local_value, &local_tb);
#if CYTHON_FAST_THREAD_STATE
    if (unlikely(tstate->curexc_type))
#else
    if (unlikely(PyErr_Occurred()))
#endif
        goto bad;
    #if PY_MAJOR_VERSION >= 3
    if (local_tb) {
        if (unlikely(PyException_SetTraceback(local_value, local_tb) < 0))
            goto bad;
    }
    #endif
    Py_XINCREF(local_tb);
    Py_XINCREF(local_type);
    Py_XINCREF(local_value);
    *type = local_type;
    *value = local_value;
    *tb = local_tb;
#if CYTHON_FAST_THREAD_STATE
    #if CYTHON_USE_EXC_INFO_STACK
    {
        _PyErr_StackItem *exc_info = tstate->exc_info;
        tmp_type = exc_info->exc_type;
        tmp_value = exc_info->exc_value;
        tmp_tb = exc_info->exc_traceback;
        exc_info->exc_type = local_type;
        exc_info->exc_value = local_value;
        exc_info->exc_traceback = local_tb;
    }
    #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = local_type;
    tstate->exc_value = local_value;
    tstate->exc_traceback = local_tb;
    #endif
    Py_XDECREF(tmp_type);
    Py_XDECREF(tmp_value);
    Py_XDECREF(tmp_tb);
#else
    PyErr_SetExcInfo(local_type, local_value, local_tb);
#endif
    return 0;
bad:
    *type = 0;
    *value = 0;
    *tb = 0;
    Py_XDECREF(local_type);
    Py_XDECREF(local_value);
    Py_XDECREF(local_tb);
    return -1;
}

/* DictGetItem */
#if PY_MAJOR_VERSION >= 3 && !CYTHON_COMPILING_IN_PYPY
static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
    PyObject *value;
    value = PyDict_GetItemWithError(d, key);
    if (unlikely(!value)) {
        if (!PyErr_Occurred()) {
            if (unlikely(PyTuple_Check(key))) {
                PyObject* args = PyTuple_Pack(1, key);
                if (likely(args)) {
                    PyErr_SetObject(PyExc_KeyError, args);
                    Py_DECREF(args);
                }
            } else {
                PyErr_SetObject(PyExc_KeyError, key);
            }
        }
        return NULL;
    }
    Py_INCREF(value);
    return value;
}
#endif

/* None */
static CYTHON_INLINE void __Pyx_RaiseClosureNameError(const char *varname) {
    PyErr_Format(PyExc_NameError, "free variable '%s' referenced before assignment in enclosing scope", varname);
}

/* PyFloatBinop */
#if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyFloat_DivideObjC(PyObject *op1, PyObject *op2, double floatval, int inplace, int zerodivision_check) {
    const double b = floatval;
    double a, result;
    (void)inplace;
    (void)zerodivision_check;
    if (likely(PyFloat_CheckExact(op1))) {
        a = PyFloat_AS_DOUBLE(op1);
        
    } else
    #if PY_MAJOR_VERSION < 3
    if (likely(PyInt_CheckExact(op1))) {
        a = (double) PyInt_AS_LONG(op1);
        
    } else
    #endif
    if (likely(PyLong_CheckExact(op1))) {
        #if CYTHON_USE_PYLONG_INTERNALS
        const digit* digits = ((PyLongObject*)op1)->ob_digit;
        const Py_ssize_t size = Py_SIZE(op1);
        switch (size) {
            case  0: a = 0.0; break;
            case -1: a = -(double) digits[0]; break;
            case  1: a = (double) digits[0]; break;
            case -2:
            case 2:
                if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (1 * PyLong_SHIFT < 53))) {
                    a = (double) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                    if ((8 * sizeof(unsigned long) < 53) || (2 * PyLong_SHIFT < 53) || (a < (double) ((PY_LONG_LONG)1 << 53))) {
                        if (size == -2)
                            a = -a;
                        break;
                    }
                }
                CYTHON_FALLTHROUGH;
            case -3:
            case 3:
                if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (2 * PyLong_SHIFT < 53))) {
                    a = (double) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                    if ((8 * sizeof(unsigned long) < 53) || (3 * PyLong_SHIFT < 53) || (a < (double) ((PY_LONG_LONG)1 << 53))) {
                        if (size == -3)
                            a = -a;
                        break;
                    }
                }
                CYTHON_FALLTHROUGH;
            case -4:
            case 4:
                if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT && ((8 * sizeof(unsigned long) < 53) || (3 * PyLong_SHIFT < 53))) {
                    a = (double) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                    if ((8 * sizeof(unsigned long) < 53) || (4 * PyLong_SHIFT < 53) || (a < (double) ((PY_LONG_LONG)1 << 53))) {
                        if (size == -4)
                            a = -a;
                        break;
                    }
                }
                CYTHON_FALLTHROUGH;
            default:
        #else
        {
        #endif
            a = PyLong_AsDouble(op1);
            if (unlikely(a == -1.0 && PyErr_Occurred())) return NULL;
            
        }
    } else {
        return (inplace ? __Pyx_PyNumber_InPlaceDivide(op1, op2) : __Pyx_PyNumber_Divide(op1, op2));
    }
        
        PyFPE_START_PROTECT("divide", return NULL)
        result = a / b;
        PyFPE_END_PROTECT(result)
        return PyFloat_FromDouble(result);
}
#endif

/* PyObjectGetMethod */
  static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method) {
    PyObject *attr;
#if CYTHON_UNPACK_METHODS && CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_PYTYPE_LOOKUP
    PyTypeObject *tp = Py_TYPE(obj);
    PyObject *descr;
    descrgetfunc f = NULL;
    PyObject **dictptr, *dict;
    int meth_found = 0;
    assert (*method == NULL);
    if (unlikely(tp->tp_getattro != PyObject_GenericGetAttr)) {
        attr = __Pyx_PyObject_GetAttrStr(obj, name);
        goto try_unpack;
    }
    if (unlikely(tp->tp_dict == NULL) && unlikely(PyType_Ready(tp) < 0)) {
        return 0;
    }
    descr = _PyType_Lookup(tp, name);
    if (likely(descr != NULL)) {
        Py_INCREF(descr);
#if PY_MAJOR_VERSION >= 3
        #ifdef __Pyx_CyFunction_USED
        if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type) || __Pyx_CyFunction_Check(descr)))
        #else
        if (likely(PyFunction_Check(descr) || (Py_TYPE(descr) == &PyMethodDescr_Type)))
        #endif
#else
        #ifdef __Pyx_CyFunction_USED
        if (likely(PyFunction_Check(descr) || __Pyx_CyFunction_Check(descr)))
        #else
        if (likely(PyFunction_Check(descr)))
        #endif
#endif
        {
            meth_found = 1;
        } else {
            f = Py_TYPE(descr)->tp_descr_get;
            if (f != NULL && PyDescr_IsData(descr)) {
                attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
                Py_DECREF(descr);
                goto try_unpack;
            }
        }
    }
    dictptr = _PyObject_GetDictPtr(obj);
    if (dictptr != NULL && (dict = *dictptr) != NULL) {
        Py_INCREF(dict);
        attr = __Pyx_PyDict_GetItemStr(dict, name);
        if (attr != NULL) {
            Py_INCREF(attr);
            Py_DECREF(dict);
            Py_XDECREF(descr);
            goto try_unpack;
        }
        Py_DECREF(dict);
    }
    if (meth_found) {
        *method = descr;
        return 1;
    }
    if (f != NULL) {
        attr = f(descr, obj, (PyObject *)Py_TYPE(obj));
        Py_DECREF(descr);
        goto try_unpack;
    }
    if (descr != NULL) {
        *method = descr;
        return 0;
    }
    PyErr_Format(PyExc_AttributeError,
#if PY_MAJOR_VERSION >= 3
                 "'%.50s' object has no attribute '%U'",
                 tp->tp_name, name);
#else
                 "'%.50s' object has no attribute '%.400s'",
                 tp->tp_name, PyString_AS_STRING(name));
#endif
    return 0;
#else
    attr = __Pyx_PyObject_GetAttrStr(obj, name);
    goto try_unpack;
#endif
try_unpack:
#if CYTHON_UNPACK_METHODS
    if (likely(attr) && PyMethod_Check(attr) && likely(PyMethod_GET_SELF(attr) == obj)) {
        PyObject *function = PyMethod_GET_FUNCTION(attr);
        Py_INCREF(function);
        Py_DECREF(attr);
        *method = function;
        return 1;
    }
#endif
    *method = attr;
    return 0;
}

/* PyObjectCallMethod1 */
  static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) {
    PyObject *result = __Pyx_PyObject_CallOneArg(method, arg);
    Py_DECREF(method);
    return result;
}
static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg) {
    PyObject *method = NULL, *result;
    int is_method = __Pyx_PyObject_GetMethod(obj, method_name, &method);
    if (likely(is_method)) {
        result = __Pyx_PyObject_Call2Args(method, obj, arg);
        Py_DECREF(method);
        return result;
    }
    if (unlikely(!method)) return NULL;
    return __Pyx__PyObject_CallMethod1(method, arg);
}

/* append */
  static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
    if (likely(PyList_CheckExact(L))) {
        if (unlikely(__Pyx_PyList_Append(L, x) < 0)) return -1;
    } else {
        PyObject* retval = __Pyx_PyObject_CallMethod1(L, __pyx_n_s_append, x);
        if (unlikely(!retval))
            return -1;
        Py_DECREF(retval);
    }
    return 0;
}

/* pop_index */
  static PyObject* __Pyx__PyObject_PopNewIndex(PyObject* L, PyObject* py_ix) {
    PyObject *r;
    if (unlikely(!py_ix)) return NULL;
    r = __Pyx__PyObject_PopIndex(L, py_ix);
    Py_DECREF(py_ix);
    return r;
}
static PyObject* __Pyx__PyObject_PopIndex(PyObject* L, PyObject* py_ix) {
    return __Pyx_PyObject_CallMethod1(L, __pyx_n_s_pop, py_ix);
}
#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
static PyObject* __Pyx__PyList_PopIndex(PyObject* L, PyObject* py_ix, Py_ssize_t ix) {
    Py_ssize_t size = PyList_GET_SIZE(L);
    if (likely(size > (((PyListObject*)L)->allocated >> 1))) {
        Py_ssize_t cix = ix;
        if (cix < 0) {
            cix += size;
        }
        if (likely(__Pyx_is_valid_index(cix, size))) {
            PyObject* v = PyList_GET_ITEM(L, cix);
            __Pyx_SET_SIZE(L, Py_SIZE(L) - 1);
            size -= 1;
            memmove(&PyList_GET_ITEM(L, cix), &PyList_GET_ITEM(L, cix+1), (size_t)(size-cix)*sizeof(PyObject*));
            return v;
        }
    }
    if (py_ix == Py_None) {
        return __Pyx__PyObject_PopNewIndex(L, PyInt_FromSsize_t(ix));
    } else {
        return __Pyx__PyObject_PopIndex(L, py_ix);
    }
}
#endif

/* ExtTypeTest */
  static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    if (likely(__Pyx_TypeCheck(obj, type)))
        return 1;
    PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
                 Py_TYPE(obj)->tp_name, type->tp_name);
    return 0;
}

/* UnpackUnboundCMethod */
  static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) {
    PyObject *method;
    method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name);
    if (unlikely(!method))
        return -1;
    target->method = method;
#if CYTHON_COMPILING_IN_CPYTHON
    #if PY_MAJOR_VERSION >= 3
    if (likely(__Pyx_TypeCheck(method, &PyMethodDescr_Type)))
    #endif
    {
        PyMethodDescrObject *descr = (PyMethodDescrObject*) method;
        target->func = descr->d_method->ml_meth;
        target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_STACKLESS);
    }
#endif
    return 0;
}

/* CallUnboundCMethod1 */
  #if CYTHON_COMPILING_IN_CPYTHON
static CYTHON_INLINE PyObject* __Pyx_CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg) {
    if (likely(cfunc->func)) {
        int flag = cfunc->flag;
        if (flag == METH_O) {
            return (*(cfunc->func))(self, arg);
        } else if (PY_VERSION_HEX >= 0x030600B1 && flag == METH_FASTCALL) {
            if (PY_VERSION_HEX >= 0x030700A0) {
                return (*(__Pyx_PyCFunctionFast)(void*)(PyCFunction)cfunc->func)(self, &arg, 1);
            } else {
                return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
            }
        } else if (PY_VERSION_HEX >= 0x030700A0 && flag == (METH_FASTCALL | METH_KEYWORDS)) {
            return (*(__Pyx_PyCFunctionFastWithKeywords)(void*)(PyCFunction)cfunc->func)(self, &arg, 1, NULL);
        }
    }
    return __Pyx__CallUnboundCMethod1(cfunc, self, arg);
}
#endif
static PyObject* __Pyx__CallUnboundCMethod1(__Pyx_CachedCFunction* cfunc, PyObject* self, PyObject* arg){
    PyObject *args, *result = NULL;
    if (unlikely(!cfunc->func && !cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
#if CYTHON_COMPILING_IN_CPYTHON
    if (cfunc->func && (cfunc->flag & METH_VARARGS)) {
        args = PyTuple_New(1);
        if (unlikely(!args)) goto bad;
        Py_INCREF(arg);
        PyTuple_SET_ITEM(args, 0, arg);
        if (cfunc->flag & METH_KEYWORDS)
            result = (*(PyCFunctionWithKeywords)(void*)(PyCFunction)cfunc->func)(self, args, NULL);
        else
            result = (*cfunc->func)(self, args);
    } else {
        args = PyTuple_New(2);
        if (unlikely(!args)) goto bad;
        Py_INCREF(self);
        PyTuple_SET_ITEM(args, 0, self);
        Py_INCREF(arg);
        PyTuple_SET_ITEM(args, 1, arg);
        result = __Pyx_PyObject_Call(cfunc->method, args, NULL);
    }
#else
    args = PyTuple_Pack(2, self, arg);
    if (unlikely(!args)) goto bad;
    result = __Pyx_PyObject_Call(cfunc->method, args, NULL);
#endif
bad:
    Py_XDECREF(args);
    return result;
}

/* PyIntBinop */
  #if !CYTHON_COMPILING_IN_PYPY
static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) {
    (void)inplace;
    (void)zerodivision_check;
    #if PY_MAJOR_VERSION < 3
    if (likely(PyInt_CheckExact(op1))) {
        const long b = intval;
        long x;
        long a = PyInt_AS_LONG(op1);
            x = (long)((unsigned long)a + b);
            if (likely((x^a) >= 0 || (x^b) >= 0))
                return PyInt_FromLong(x);
            return PyLong_Type.tp_as_number->nb_add(op1, op2);
    }
    #endif
    #if CYTHON_USE_PYLONG_INTERNALS
    if (likely(PyLong_CheckExact(op1))) {
        const long b = intval;
        long a, x;
#ifdef HAVE_LONG_LONG
        const PY_LONG_LONG llb = intval;
        PY_LONG_LONG lla, llx;
#endif
        const digit* digits = ((PyLongObject*)op1)->ob_digit;
        const Py_ssize_t size = Py_SIZE(op1);
        if (likely(__Pyx_sst_abs(size) <= 1)) {
            a = likely(size) ? digits[0] : 0;
            if (size == -1) a = -a;
        } else {
            switch (size) {
                case -2:
                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                        a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case 2:
                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                        a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case -3:
                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                        a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case 3:
                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                        a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case -4:
                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                        a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case 4:
                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                        a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                default: return PyLong_Type.tp_as_number->nb_add(op1, op2);
            }
        }
                x = a + b;
            return PyLong_FromLong(x);
#ifdef HAVE_LONG_LONG
        long_long:
                llx = lla + llb;
            return PyLong_FromLongLong(llx);
#endif
        
        
    }
    #endif
    if (PyFloat_CheckExact(op1)) {
        const long b = intval;
        double a = PyFloat_AS_DOUBLE(op1);
            double result;
            PyFPE_START_PROTECT("add", return NULL)
            result = ((double)a) + (double)b;
            PyFPE_END_PROTECT(result)
            return PyFloat_FromDouble(result);
    }
    return (inplace ? PyNumber_InPlaceAdd : PyNumber_Add)(op1, op2);
}
#endif

/* PyErrExceptionMatches */
  #if CYTHON_FAST_THREAD_STATE
static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
    Py_ssize_t i, n;
    n = PyTuple_GET_SIZE(tuple);
#if PY_MAJOR_VERSION >= 3
    for (i=0; i<n; i++) {
        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
    }
#endif
    for (i=0; i<n; i++) {
        if (__Pyx_PyErr_GivenExceptionMatches(exc_type, PyTuple_GET_ITEM(tuple, i))) return 1;
    }
    return 0;
}
static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err) {
    PyObject *exc_type = tstate->curexc_type;
    if (exc_type == err) return 1;
    if (unlikely(!exc_type)) return 0;
    if (unlikely(PyTuple_Check(err)))
        return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err);
    return __Pyx_PyErr_GivenExceptionMatches(exc_type, err);
}
#endif

/* GetAttr */
  static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
#if CYTHON_USE_TYPE_SLOTS
#if PY_MAJOR_VERSION >= 3
    if (likely(PyUnicode_Check(n)))
#else
    if (likely(PyString_Check(n)))
#endif
        return __Pyx_PyObject_GetAttrStr(o, n);
#endif
    return PyObject_GetAttr(o, n);
}

/* GetAttr3 */
  static PyObject *__Pyx_GetAttr3Default(PyObject *d) {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
        return NULL;
    __Pyx_PyErr_Clear();
    Py_INCREF(d);
    return d;
}
static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) {
    PyObject *r = __Pyx_GetAttr(o, n);
    return (likely(r)) ? r : __Pyx_GetAttr3Default(d);
}

/* ArgTypeTest */
  static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact)
{
    if (unlikely(!type)) {
        PyErr_SetString(PyExc_SystemError, "Missing type object");
        return 0;
    }
    else if (exact) {
        #if PY_MAJOR_VERSION == 2
        if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
        #endif
    }
    else {
        if (likely(__Pyx_TypeCheck(obj, type))) return 1;
    }
    PyErr_Format(PyExc_TypeError,
        "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
        name, type->tp_name, Py_TYPE(obj)->tp_name);
    return 0;
}

/* CallUnboundCMethod0 */
  static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) {
    PyObject *args, *result = NULL;
    if (unlikely(!cfunc->method) && unlikely(__Pyx_TryUnpackUnboundCMethod(cfunc) < 0)) return NULL;
#if CYTHON_ASSUME_SAFE_MACROS
    args = PyTuple_New(1);
    if (unlikely(!args)) goto bad;
    Py_INCREF(self);
    PyTuple_SET_ITEM(args, 0, self);
#else
    args = PyTuple_Pack(1, self);
    if (unlikely(!args)) goto bad;
#endif
    result = __Pyx_PyObject_Call(cfunc->method, args, NULL);
    Py_DECREF(args);
bad:
    return result;
}

/* py_dict_items */
  static CYTHON_INLINE PyObject* __Pyx_PyDict_Items(PyObject* d) {
    if (PY_MAJOR_VERSION >= 3)
        return __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyDict_Type_items, d);
    else
        return PyDict_Items(d);
}

/* Import */
  static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
    PyObject *empty_list = 0;
    PyObject *module = 0;
    PyObject *global_dict = 0;
    PyObject *empty_dict = 0;
    PyObject *list;
    #if PY_MAJOR_VERSION < 3
    PyObject *py_import;
    py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
    if (!py_import)
        goto bad;
    #endif
    if (from_list)
        list = from_list;
    else {
        empty_list = PyList_New(0);
        if (!empty_list)
            goto bad;
        list = empty_list;
    }
    global_dict = PyModule_GetDict(__pyx_m);
    if (!global_dict)
        goto bad;
    empty_dict = PyDict_New();
    if (!empty_dict)
        goto bad;
    {
        #if PY_MAJOR_VERSION >= 3
        if (level == -1) {
            if ((1) && (strchr(__Pyx_MODULE_NAME, '.'))) {
                module = PyImport_ImportModuleLevelObject(
                    name, global_dict, empty_dict, list, 1);
                if (!module) {
                    if (!PyErr_ExceptionMatches(PyExc_ImportError))
                        goto bad;
                    PyErr_Clear();
                }
            }
            level = 0;
        }
        #endif
        if (!module) {
            #if PY_MAJOR_VERSION < 3
            PyObject *py_level = PyInt_FromLong(level);
            if (!py_level)
                goto bad;
            module = PyObject_CallFunctionObjArgs(py_import,
                name, global_dict, empty_dict, list, py_level, (PyObject *)NULL);
            Py_DECREF(py_level);
            #else
            module = PyImport_ImportModuleLevelObject(
                name, global_dict, empty_dict, list, level);
            #endif
        }
    }
bad:
    #if PY_MAJOR_VERSION < 3
    Py_XDECREF(py_import);
    #endif
    Py_XDECREF(empty_list);
    Py_XDECREF(empty_dict);
    return module;
}

/* PyIntBinop */
  #if !CYTHON_COMPILING_IN_PYPY
#if PY_MAJOR_VERSION < 3 || CYTHON_USE_PYLONG_INTERNALS
#define __Pyx_PyInt_RemainderObjC_ZeroDivisionError(operand)\
    if (unlikely(zerodivision_check && ((operand) == 0))) {\
        PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");\
        return NULL;\
    }
#endif
static PyObject* __Pyx_PyInt_RemainderObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, int inplace, int zerodivision_check) {
    (void)inplace;
    (void)zerodivision_check;
    #if PY_MAJOR_VERSION < 3
    if (likely(PyInt_CheckExact(op1))) {
        const long b = intval;
        long x;
        long a = PyInt_AS_LONG(op1);
            __Pyx_PyInt_RemainderObjC_ZeroDivisionError(b)
            x = a % b;
            x += ((x != 0) & ((x ^ b) < 0)) * b;
            return PyInt_FromLong(x);
    }
    #endif
    #if CYTHON_USE_PYLONG_INTERNALS
    if (likely(PyLong_CheckExact(op1))) {
        const long b = intval;
        long a, x;
#ifdef HAVE_LONG_LONG
        const PY_LONG_LONG llb = intval;
        PY_LONG_LONG lla, llx;
#endif
        const digit* digits = ((PyLongObject*)op1)->ob_digit;
        const Py_ssize_t size = Py_SIZE(op1);
        if (likely(__Pyx_sst_abs(size) <= 1)) {
            a = likely(size) ? digits[0] : 0;
            if (size == -1) a = -a;
        } else {
            switch (size) {
                case -2:
                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                        a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case 2:
                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                        a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 2 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case -3:
                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                        a = -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case 3:
                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                        a = (long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 3 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((((unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case -4:
                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                        a = -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                        lla = -(PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                case 4:
                    if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                        a = (long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                        break;
#ifdef HAVE_LONG_LONG
                    } else if (8 * sizeof(PY_LONG_LONG) - 1 > 4 * PyLong_SHIFT) {
                        lla = (PY_LONG_LONG) (((((((((unsigned PY_LONG_LONG)digits[3]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[2]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[1]) << PyLong_SHIFT) | (unsigned PY_LONG_LONG)digits[0]));
                        goto long_long;
#endif
                    }
                    CYTHON_FALLTHROUGH;
                default: return PyLong_Type.tp_as_number->nb_remainder(op1, op2);
            }
        }
                __Pyx_PyInt_RemainderObjC_ZeroDivisionError(b)
                x = a % b;
                x += ((x != 0) & ((x ^ b) < 0)) * b;
            return PyLong_FromLong(x);
#ifdef HAVE_LONG_LONG
        long_long:
                llx = lla % llb;
                llx += ((llx != 0) & ((llx ^ llb) < 0)) * llb;
            return PyLong_FromLongLong(llx);
#endif
        
        
    }
    #endif
    return (inplace ? PyNumber_InPlaceRemainder : PyNumber_Remainder)(op1, op2);
}
#endif

/* ObjectGetItem */
  #if CYTHON_USE_TYPE_SLOTS
static PyObject *__Pyx_PyObject_GetIndex(PyObject *obj, PyObject* index) {
    PyObject *runerr;
    Py_ssize_t key_value;
    PySequenceMethods *m = Py_TYPE(obj)->tp_as_sequence;
    if (unlikely(!(m && m->sq_item))) {
        PyErr_Format(PyExc_TypeError, "'%.200s' object is not subscriptable", Py_TYPE(obj)->tp_name);
        return NULL;
    }
    key_value = __Pyx_PyIndex_AsSsize_t(index);
    if (likely(key_value != -1 || !(runerr = PyErr_Occurred()))) {
        return __Pyx_GetItemInt_Fast(obj, key_value, 0, 1, 1);
    }
    if (PyErr_GivenExceptionMatches(runerr, PyExc_OverflowError)) {
        PyErr_Clear();
        PyErr_Format(PyExc_IndexError, "cannot fit '%.200s' into an index-sized integer", Py_TYPE(index)->tp_name);
    }
    return NULL;
}
static PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject* key) {
    PyMappingMethods *m = Py_TYPE(obj)->tp_as_mapping;
    if (likely(m && m->mp_subscript)) {
        return m->mp_subscript(obj, key);
    }
    return __Pyx_PyObject_GetIndex(obj, key);
}
#endif

/* ImportFrom */
  static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
    PyObject* value = __Pyx_PyObject_GetAttrStr(module, name);
    if (unlikely(!value) && PyErr_ExceptionMatches(PyExc_AttributeError)) {
        PyErr_Format(PyExc_ImportError,
        #if PY_MAJOR_VERSION < 3
            "cannot import name %.230s", PyString_AS_STRING(name));
        #else
            "cannot import name %S", name);
        #endif
    }
    return value;
}

/* RaiseException */
  #if PY_MAJOR_VERSION < 3
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
                        CYTHON_UNUSED PyObject *cause) {
    __Pyx_PyThreadState_declare
    Py_XINCREF(type);
    if (!value || value == Py_None)
        value = NULL;
    else
        Py_INCREF(value);
    if (!tb || tb == Py_None)
        tb = NULL;
    else {
        Py_INCREF(tb);
        if (!PyTraceBack_Check(tb)) {
            PyErr_SetString(PyExc_TypeError,
                "raise: arg 3 must be a traceback or None");
            goto raise_error;
        }
    }
    if (PyType_Check(type)) {
#if CYTHON_COMPILING_IN_PYPY
        if (!value) {
            Py_INCREF(Py_None);
            value = Py_None;
        }
#endif
        PyErr_NormalizeException(&type, &value, &tb);
    } else {
        if (value) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto raise_error;
        }
        value = type;
        type = (PyObject*) Py_TYPE(type);
        Py_INCREF(type);
        if (!PyType_IsSubtype((PyTypeObject *)type, (PyTypeObject *)PyExc_BaseException)) {
            PyErr_SetString(PyExc_TypeError,
                "raise: exception class must be a subclass of BaseException");
            goto raise_error;
        }
    }
    __Pyx_PyThreadState_assign
    __Pyx_ErrRestore(type, value, tb);
    return;
raise_error:
    Py_XDECREF(value);
    Py_XDECREF(type);
    Py_XDECREF(tb);
    return;
}
#else
static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause) {
    PyObject* owned_instance = NULL;
    if (tb == Py_None) {
        tb = 0;
    } else if (tb && !PyTraceBack_Check(tb)) {
        PyErr_SetString(PyExc_TypeError,
            "raise: arg 3 must be a traceback or None");
        goto bad;
    }
    if (value == Py_None)
        value = 0;
    if (PyExceptionInstance_Check(type)) {
        if (value) {
            PyErr_SetString(PyExc_TypeError,
                "instance exception may not have a separate value");
            goto bad;
        }
        value = type;
        type = (PyObject*) Py_TYPE(value);
    } else if (PyExceptionClass_Check(type)) {
        PyObject *instance_class = NULL;
        if (value && PyExceptionInstance_Check(value)) {
            instance_class = (PyObject*) Py_TYPE(value);
            if (instance_class != type) {
                int is_subclass = PyObject_IsSubclass(instance_class, type);
                if (!is_subclass) {
                    instance_class = NULL;
                } else if (unlikely(is_subclass == -1)) {
                    goto bad;
                } else {
                    type = instance_class;
                }
            }
        }
        if (!instance_class) {
            PyObject *args;
            if (!value)
                args = PyTuple_New(0);
            else if (PyTuple_Check(value)) {
                Py_INCREF(value);
                args = value;
            } else
                args = PyTuple_Pack(1, value);
            if (!args)
                goto bad;
            owned_instance = PyObject_Call(type, args, NULL);
            Py_DECREF(args);
            if (!owned_instance)
                goto bad;
            value = owned_instance;
            if (!PyExceptionInstance_Check(value)) {
                PyErr_Format(PyExc_TypeError,
                             "calling %R should have returned an instance of "
                             "BaseException, not %R",
                             type, Py_TYPE(value));
                goto bad;
            }
        }
    } else {
        PyErr_SetString(PyExc_TypeError,
            "raise: exception class must be a subclass of BaseException");
        goto bad;
    }
    if (cause) {
        PyObject *fixed_cause;
        if (cause == Py_None) {
            fixed_cause = NULL;
        } else if (PyExceptionClass_Check(cause)) {
            fixed_cause = PyObject_CallObject(cause, NULL);
            if (fixed_cause == NULL)
                goto bad;
        } else if (PyExceptionInstance_Check(cause)) {
            fixed_cause = cause;
            Py_INCREF(fixed_cause);
        } else {
            PyErr_SetString(PyExc_TypeError,
                            "exception causes must derive from "
                            "BaseException");
            goto bad;
        }
        PyException_SetCause(value, fixed_cause);
    }
    PyErr_SetObject(type, value);
    if (tb) {
#if CYTHON_COMPILING_IN_PYPY
        PyObject *tmp_type, *tmp_value, *tmp_tb;
        PyErr_Fetch(&tmp_type, &tmp_value, &tmp_tb);
        Py_INCREF(tb);
        PyErr_Restore(tmp_type, tmp_value, tb);
        Py_XDECREF(tmp_tb);
#else
        PyThreadState *tstate = __Pyx_PyThreadState_Current;
        PyObject* tmp_tb = tstate->curexc_traceback;
        if (tb != tmp_tb) {
            Py_INCREF(tb);
            tstate->curexc_traceback = tb;
            Py_XDECREF(tmp_tb);
        }
#endif
    }
bad:
    Py_XDECREF(owned_instance);
    return;
}
#endif

/* HasAttr */
  static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
    PyObject *r;
    if (unlikely(!__Pyx_PyBaseString_Check(n))) {
        PyErr_SetString(PyExc_TypeError,
                        "hasattr(): attribute name must be string");
        return -1;
    }
    r = __Pyx_GetAttr(o, n);
    if (unlikely(!r)) {
        PyErr_Clear();
        return 0;
    } else {
        Py_DECREF(r);
        return 1;
    }
}

/* PyObject_GenericGetAttrNoDict */
  #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static PyObject *__Pyx_RaiseGenericGetAttributeError(PyTypeObject *tp, PyObject *attr_name) {
    PyErr_Format(PyExc_AttributeError,
#if PY_MAJOR_VERSION >= 3
                 "'%.50s' object has no attribute '%U'",
                 tp->tp_name, attr_name);
#else
                 "'%.50s' object has no attribute '%.400s'",
                 tp->tp_name, PyString_AS_STRING(attr_name));
#endif
    return NULL;
}
static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name) {
    PyObject *descr;
    PyTypeObject *tp = Py_TYPE(obj);
    if (unlikely(!PyString_Check(attr_name))) {
        return PyObject_GenericGetAttr(obj, attr_name);
    }
    assert(!tp->tp_dictoffset);
    descr = _PyType_Lookup(tp, attr_name);
    if (unlikely(!descr)) {
        return __Pyx_RaiseGenericGetAttributeError(tp, attr_name);
    }
    Py_INCREF(descr);
    #if PY_MAJOR_VERSION < 3
    if (likely(PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_HAVE_CLASS)))
    #endif
    {
        descrgetfunc f = Py_TYPE(descr)->tp_descr_get;
        if (unlikely(f)) {
            PyObject *res = f(descr, obj, (PyObject *)tp);
            Py_DECREF(descr);
            return res;
        }
    }
    return descr;
}
#endif

/* PyObject_GenericGetAttr */
  #if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name) {
    if (unlikely(Py_TYPE(obj)->tp_dictoffset)) {
        return PyObject_GenericGetAttr(obj, attr_name);
    }
    return __Pyx_PyObject_GenericGetAttrNoDict(obj, attr_name);
}
#endif

/* SetVTable */
  static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
#if PY_VERSION_HEX >= 0x02070000
    PyObject *ob = PyCapsule_New(vtable, 0, 0);
#else
    PyObject *ob = PyCObject_FromVoidPtr(vtable, 0);
#endif
    if (!ob)
        goto bad;
    if (PyDict_SetItem(dict, __pyx_n_s_pyx_vtable, ob) < 0)
        goto bad;
    Py_DECREF(ob);
    return 0;
bad:
    Py_XDECREF(ob);
    return -1;
}

/* PyObjectGetAttrStrNoError */
  static void __Pyx_PyObject_GetAttrStr_ClearAttributeError(void) {
    __Pyx_PyThreadState_declare
    __Pyx_PyThreadState_assign
    if (likely(__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
        __Pyx_PyErr_Clear();
}
static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name) {
    PyObject *result;
#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_USE_TYPE_SLOTS && PY_VERSION_HEX >= 0x030700B1
    PyTypeObject* tp = Py_TYPE(obj);
    if (likely(tp->tp_getattro == PyObject_GenericGetAttr)) {
        return _PyObject_GenericGetAttrWithDict(obj, attr_name, NULL, 1);
    }
#endif
    result = __Pyx_PyObject_GetAttrStr(obj, attr_name);
    if (unlikely(!result)) {
        __Pyx_PyObject_GetAttrStr_ClearAttributeError();
    }
    return result;
}

/* SetupReduce */
  static int __Pyx_setup_reduce_is_named(PyObject* meth, PyObject* name) {
  int ret;
  PyObject *name_attr;
  name_attr = __Pyx_PyObject_GetAttrStr(meth, __pyx_n_s_name_2);
  if (likely(name_attr)) {
      ret = PyObject_RichCompareBool(name_attr, name, Py_EQ);
  } else {
      ret = -1;
  }
  if (unlikely(ret < 0)) {
      PyErr_Clear();
      ret = 0;
  }
  Py_XDECREF(name_attr);
  return ret;
}
static int __Pyx_setup_reduce(PyObject* type_obj) {
    int ret = 0;
    PyObject *object_reduce = NULL;
    PyObject *object_reduce_ex = NULL;
    PyObject *reduce = NULL;
    PyObject *reduce_ex = NULL;
    PyObject *reduce_cython = NULL;
    PyObject *setstate = NULL;
    PyObject *setstate_cython = NULL;
#if CYTHON_USE_PYTYPE_LOOKUP
    if (_PyType_Lookup((PyTypeObject*)type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD;
#else
    if (PyObject_HasAttr(type_obj, __pyx_n_s_getstate)) goto __PYX_GOOD;
#endif
#if CYTHON_USE_PYTYPE_LOOKUP
    object_reduce_ex = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
#else
    object_reduce_ex = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce_ex); if (!object_reduce_ex) goto __PYX_BAD;
#endif
    reduce_ex = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce_ex); if (unlikely(!reduce_ex)) goto __PYX_BAD;
    if (reduce_ex == object_reduce_ex) {
#if CYTHON_USE_PYTYPE_LOOKUP
        object_reduce = _PyType_Lookup(&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD;
#else
        object_reduce = __Pyx_PyObject_GetAttrStr((PyObject*)&PyBaseObject_Type, __pyx_n_s_reduce); if (!object_reduce) goto __PYX_BAD;
#endif
        reduce = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_reduce); if (unlikely(!reduce)) goto __PYX_BAD;
        if (reduce == object_reduce || __Pyx_setup_reduce_is_named(reduce, __pyx_n_s_reduce_cython)) {
            reduce_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_reduce_cython);
            if (likely(reduce_cython)) {
                ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce, reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
                ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_reduce_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
            } else if (reduce == object_reduce || PyErr_Occurred()) {
                goto __PYX_BAD;
            }
            setstate = __Pyx_PyObject_GetAttrStr(type_obj, __pyx_n_s_setstate);
            if (!setstate) PyErr_Clear();
            if (!setstate || __Pyx_setup_reduce_is_named(setstate, __pyx_n_s_setstate_cython)) {
                setstate_cython = __Pyx_PyObject_GetAttrStrNoError(type_obj, __pyx_n_s_setstate_cython);
                if (likely(setstate_cython)) {
                    ret = PyDict_SetItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate, setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
                    ret = PyDict_DelItem(((PyTypeObject*)type_obj)->tp_dict, __pyx_n_s_setstate_cython); if (unlikely(ret < 0)) goto __PYX_BAD;
                } else if (!setstate || PyErr_Occurred()) {
                    goto __PYX_BAD;
                }
            }
            PyType_Modified((PyTypeObject*)type_obj);
        }
    }
    goto __PYX_GOOD;
__PYX_BAD:
    if (!PyErr_Occurred())
        PyErr_Format(PyExc_RuntimeError, "Unable to initialize pickling for %s", ((PyTypeObject*)type_obj)->tp_name);
    ret = -1;
__PYX_GOOD:
#if !CYTHON_USE_PYTYPE_LOOKUP
    Py_XDECREF(object_reduce);
    Py_XDECREF(object_reduce_ex);
#endif
    Py_XDECREF(reduce);
    Py_XDECREF(reduce_ex);
    Py_XDECREF(reduce_cython);
    Py_XDECREF(setstate);
    Py_XDECREF(setstate_cython);
    return ret;
}

/* TypeImport */
  #ifndef __PYX_HAVE_RT_ImportType
#define __PYX_HAVE_RT_ImportType
static PyTypeObject *__Pyx_ImportType(PyObject *module, const char *module_name, const char *class_name,
    size_t size, enum __Pyx_ImportType_CheckSize check_size)
{
    PyObject *result = 0;
    char warning[200];
    Py_ssize_t basicsize;
#ifdef Py_LIMITED_API
    PyObject *py_basicsize;
#endif
    result = PyObject_GetAttrString(module, class_name);
    if (!result)
        goto bad;
    if (!PyType_Check(result)) {
        PyErr_Format(PyExc_TypeError,
            "%.200s.%.200s is not a type object",
            module_name, class_name);
        goto bad;
    }
#ifndef Py_LIMITED_API
    basicsize = ((PyTypeObject *)result)->tp_basicsize;
#else
    py_basicsize = PyObject_GetAttrString(result, "__basicsize__");
    if (!py_basicsize)
        goto bad;
    basicsize = PyLong_AsSsize_t(py_basicsize);
    Py_DECREF(py_basicsize);
    py_basicsize = 0;
    if (basicsize == (Py_ssize_t)-1 && PyErr_Occurred())
        goto bad;
#endif
    if ((size_t)basicsize < size) {
        PyErr_Format(PyExc_ValueError,
            "%.200s.%.200s size changed, may indicate binary incompatibility. "
            "Expected %zd from C header, got %zd from PyObject",
            module_name, class_name, size, basicsize);
        goto bad;
    }
    if (check_size == __Pyx_ImportType_CheckSize_Error && (size_t)basicsize != size) {
        PyErr_Format(PyExc_ValueError,
            "%.200s.%.200s size changed, may indicate binary incompatibility. "
            "Expected %zd from C header, got %zd from PyObject",
            module_name, class_name, size, basicsize);
        goto bad;
    }
    else if (check_size == __Pyx_ImportType_CheckSize_Warn && (size_t)basicsize > size) {
        PyOS_snprintf(warning, sizeof(warning),
            "%s.%s size changed, may indicate binary incompatibility. "
            "Expected %zd from C header, got %zd from PyObject",
            module_name, class_name, size, basicsize);
        if (PyErr_WarnEx(NULL, warning, 0) < 0) goto bad;
    }
    return (PyTypeObject *)result;
bad:
    Py_XDECREF(result);
    return NULL;
}
#endif

/* GetVTable */
  static void* __Pyx_GetVtable(PyObject *dict) {
    void* ptr;
    PyObject *ob = PyObject_GetItem(dict, __pyx_n_s_pyx_vtable);
    if (!ob)
        goto bad;
#if PY_VERSION_HEX >= 0x02070000
    ptr = PyCapsule_GetPointer(ob, 0);
#else
    ptr = PyCObject_AsVoidPtr(ob);
#endif
    if (!ptr && !PyErr_Occurred())
        PyErr_SetString(PyExc_RuntimeError, "invalid vtable found for imported type");
    Py_DECREF(ob);
    return ptr;
bad:
    Py_XDECREF(ob);
    return NULL;
}

/* CLineInTraceback */
  #ifndef CYTHON_CLINE_IN_TRACEBACK
static int __Pyx_CLineForTraceback(CYTHON_NCP_UNUSED PyThreadState *tstate, int c_line) {
    PyObject *use_cline;
    PyObject *ptype, *pvalue, *ptraceback;
#if CYTHON_COMPILING_IN_CPYTHON
    PyObject **cython_runtime_dict;
#endif
    if (unlikely(!__pyx_cython_runtime)) {
        return c_line;
    }
    __Pyx_ErrFetchInState(tstate, &ptype, &pvalue, &ptraceback);
#if CYTHON_COMPILING_IN_CPYTHON
    cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime);
    if (likely(cython_runtime_dict)) {
        __PYX_PY_DICT_LOOKUP_IF_MODIFIED(
            use_cline, *cython_runtime_dict,
            __Pyx_PyDict_GetItemStr(*cython_runtime_dict, __pyx_n_s_cline_in_traceback))
    } else
#endif
    {
      PyObject *use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback);
      if (use_cline_obj) {
        use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True;
        Py_DECREF(use_cline_obj);
      } else {
        PyErr_Clear();
        use_cline = NULL;
      }
    }
    if (!use_cline) {
        c_line = 0;
        PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
    }
    else if (use_cline == Py_False || (use_cline != Py_True && PyObject_Not(use_cline) != 0)) {
        c_line = 0;
    }
    __Pyx_ErrRestoreInState(tstate, ptype, pvalue, ptraceback);
    return c_line;
}
#endif

/* CodeObjectCache */
  static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
    int start = 0, mid = 0, end = count - 1;
    if (end >= 0 && code_line > entries[end].code_line) {
        return count;
    }
    while (start < end) {
        mid = start + (end - start) / 2;
        if (code_line < entries[mid].code_line) {
            end = mid;
        } else if (code_line > entries[mid].code_line) {
             start = mid + 1;
        } else {
            return mid;
        }
    }
    if (code_line <= entries[mid].code_line) {
        return mid;
    } else {
        return mid + 1;
    }
}
static PyCodeObject *__pyx_find_code_object(int code_line) {
    PyCodeObject* code_object;
    int pos;
    if (unlikely(!code_line) || unlikely(!__pyx_code_cache.entries)) {
        return NULL;
    }
    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
    if (unlikely(pos >= __pyx_code_cache.count) || unlikely(__pyx_code_cache.entries[pos].code_line != code_line)) {
        return NULL;
    }
    code_object = __pyx_code_cache.entries[pos].code_object;
    Py_INCREF(code_object);
    return code_object;
}
static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
    int pos, i;
    __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
    if (unlikely(!code_line)) {
        return;
    }
    if (unlikely(!entries)) {
        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Malloc(64*sizeof(__Pyx_CodeObjectCacheEntry));
        if (likely(entries)) {
            __pyx_code_cache.entries = entries;
            __pyx_code_cache.max_count = 64;
            __pyx_code_cache.count = 1;
            entries[0].code_line = code_line;
            entries[0].code_object = code_object;
            Py_INCREF(code_object);
        }
        return;
    }
    pos = __pyx_bisect_code_objects(__pyx_code_cache.entries, __pyx_code_cache.count, code_line);
    if ((pos < __pyx_code_cache.count) && unlikely(__pyx_code_cache.entries[pos].code_line == code_line)) {
        PyCodeObject* tmp = entries[pos].code_object;
        entries[pos].code_object = code_object;
        Py_DECREF(tmp);
        return;
    }
    if (__pyx_code_cache.count == __pyx_code_cache.max_count) {
        int new_max = __pyx_code_cache.max_count + 64;
        entries = (__Pyx_CodeObjectCacheEntry*)PyMem_Realloc(
            __pyx_code_cache.entries, ((size_t)new_max) * sizeof(__Pyx_CodeObjectCacheEntry));
        if (unlikely(!entries)) {
            return;
        }
        __pyx_code_cache.entries = entries;
        __pyx_code_cache.max_count = new_max;
    }
    for (i=__pyx_code_cache.count; i>pos; i--) {
        entries[i] = entries[i-1];
    }
    entries[pos].code_line = code_line;
    entries[pos].code_object = code_object;
    __pyx_code_cache.count++;
    Py_INCREF(code_object);
}

/* AddTraceback */
  #include "compile.h"
#include "frameobject.h"
#include "traceback.h"
static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
            const char *funcname, int c_line,
            int py_line, const char *filename) {
    PyCodeObject *py_code = 0;
    PyObject *py_srcfile = 0;
    PyObject *py_funcname = 0;
    #if PY_MAJOR_VERSION < 3
    py_srcfile = PyString_FromString(filename);
    #else
    py_srcfile = PyUnicode_FromString(filename);
    #endif
    if (!py_srcfile) goto bad;
    if (c_line) {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        #else
        py_funcname = PyUnicode_FromFormat( "%s (%s:%d)", funcname, __pyx_cfilenm, c_line);
        #endif
    }
    else {
        #if PY_MAJOR_VERSION < 3
        py_funcname = PyString_FromString(funcname);
        #else
        py_funcname = PyUnicode_FromString(funcname);
        #endif
    }
    if (!py_funcname) goto bad;
    py_code = __Pyx_PyCode_New(
        0,
        0,
        0,
        0,
        0,
        __pyx_empty_bytes, /*PyObject *code,*/
        __pyx_empty_tuple, /*PyObject *consts,*/
        __pyx_empty_tuple, /*PyObject *names,*/
        __pyx_empty_tuple, /*PyObject *varnames,*/
        __pyx_empty_tuple, /*PyObject *freevars,*/
        __pyx_empty_tuple, /*PyObject *cellvars,*/
        py_srcfile,   /*PyObject *filename,*/
        py_funcname,  /*PyObject *name,*/
        py_line,
        __pyx_empty_bytes  /*PyObject *lnotab*/
    );
    Py_DECREF(py_srcfile);
    Py_DECREF(py_funcname);
    return py_code;
bad:
    Py_XDECREF(py_srcfile);
    Py_XDECREF(py_funcname);
    return NULL;
}
static void __Pyx_AddTraceback(const char *funcname, int c_line,
                               int py_line, const char *filename) {
    PyCodeObject *py_code = 0;
    PyFrameObject *py_frame = 0;
    PyThreadState *tstate = __Pyx_PyThreadState_Current;
    if (c_line) {
        c_line = __Pyx_CLineForTraceback(tstate, c_line);
    }
    py_code = __pyx_find_code_object(c_line ? -c_line : py_line);
    if (!py_code) {
        py_code = __Pyx_CreateCodeObjectForTraceback(
            funcname, c_line, py_line, filename);
        if (!py_code) goto bad;
        __pyx_insert_code_object(c_line ? -c_line : py_line, py_code);
    }
    py_frame = PyFrame_New(
        tstate,            /*PyThreadState *tstate,*/
        py_code,           /*PyCodeObject *code,*/
        __pyx_d,    /*PyObject *globals,*/
        0                  /*PyObject *locals*/
    );
    if (!py_frame) goto bad;
    __Pyx_PyFrame_SetLineNumber(py_frame, py_line);
    PyTraceBack_Here(py_frame);
bad:
    Py_XDECREF(py_code);
    Py_XDECREF(py_frame);
}

/* CIntToPy */
  static CYTHON_INLINE PyObject* __Pyx_PyInt_From_GLuint(GLuint value) {
    const GLuint neg_one = (GLuint) ((GLuint) 0 - (GLuint) 1), const_zero = (GLuint) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(GLuint) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(GLuint) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(GLuint) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(GLuint) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(GLuint) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(GLuint),
                                     little, !is_unsigned);
    }
}

/* CIntFromPyVerify */
  #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 0)
#define __PYX_VERIFY_RETURN_INT_EXC(target_type, func_type, func_value)\
    __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, 1)
#define __PYX__VERIFY_RETURN_INT(target_type, func_type, func_value, exc)\
    {\
        func_type value = func_value;\
        if (sizeof(target_type) < sizeof(func_type)) {\
            if (unlikely(value != (func_type) (target_type) value)) {\
                func_type zero = 0;\
                if (exc && unlikely(value == (func_type)-1 && PyErr_Occurred()))\
                    return (target_type) -1;\
                if (is_unsigned && unlikely(value < zero))\
                    goto raise_neg_overflow;\
                else\
                    goto raise_overflow;\
            }\
        }\
        return (target_type) value;\
    }

/* CIntToPy */
  static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
    const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(int) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(int) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(int) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(int),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
  static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
    const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(long) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(long) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(long) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(long),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
  static CYTHON_INLINE PyObject* __Pyx_PyInt_From_GLint(GLint value) {
    const GLint neg_one = (GLint) ((GLint) 0 - (GLint) 1), const_zero = (GLint) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(GLint) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(GLint) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(GLint) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(GLint) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(GLint) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(GLint),
                                     little, !is_unsigned);
    }
}

/* CIntToPy */
  static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_char(unsigned char value) {
    const unsigned char neg_one = (unsigned char) ((unsigned char) 0 - (unsigned char) 1), const_zero = (unsigned char) 0;
    const int is_unsigned = neg_one > const_zero;
    if (is_unsigned) {
        if (sizeof(unsigned char) < sizeof(long)) {
            return PyInt_FromLong((long) value);
        } else if (sizeof(unsigned char) <= sizeof(unsigned long)) {
            return PyLong_FromUnsignedLong((unsigned long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(unsigned char) <= sizeof(unsigned PY_LONG_LONG)) {
            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
#endif
        }
    } else {
        if (sizeof(unsigned char) <= sizeof(long)) {
            return PyInt_FromLong((long) value);
#ifdef HAVE_LONG_LONG
        } else if (sizeof(unsigned char) <= sizeof(PY_LONG_LONG)) {
            return PyLong_FromLongLong((PY_LONG_LONG) value);
#endif
        }
    }
    {
        int one = 1; int little = (int)*(unsigned char *)&one;
        unsigned char *bytes = (unsigned char *)&value;
        return _PyLong_FromByteArray(bytes, sizeof(unsigned char),
                                     little, !is_unsigned);
    }
}

/* CIntFromPy */
  static CYTHON_INLINE GLuint __Pyx_PyInt_As_GLuint(PyObject *x) {
    const GLuint neg_one = (GLuint) ((GLuint) 0 - (GLuint) 1), const_zero = (GLuint) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(GLuint) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(GLuint, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (GLuint) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (GLuint) 0;
                case  1: __PYX_VERIFY_RETURN_INT(GLuint, digit, digits[0])
                case 2:
                    if (8 * sizeof(GLuint) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLuint, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLuint) >= 2 * PyLong_SHIFT) {
                            return (GLuint) (((((GLuint)digits[1]) << PyLong_SHIFT) | (GLuint)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(GLuint) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLuint, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLuint) >= 3 * PyLong_SHIFT) {
                            return (GLuint) (((((((GLuint)digits[2]) << PyLong_SHIFT) | (GLuint)digits[1]) << PyLong_SHIFT) | (GLuint)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(GLuint) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLuint, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLuint) >= 4 * PyLong_SHIFT) {
                            return (GLuint) (((((((((GLuint)digits[3]) << PyLong_SHIFT) | (GLuint)digits[2]) << PyLong_SHIFT) | (GLuint)digits[1]) << PyLong_SHIFT) | (GLuint)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (GLuint) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(GLuint) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(GLuint, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(GLuint) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(GLuint, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (GLuint) 0;
                case -1: __PYX_VERIFY_RETURN_INT(GLuint, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(GLuint,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(GLuint) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLuint, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLuint) - 1 > 2 * PyLong_SHIFT) {
                            return (GLuint) (((GLuint)-1)*(((((GLuint)digits[1]) << PyLong_SHIFT) | (GLuint)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(GLuint) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLuint, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLuint) - 1 > 2 * PyLong_SHIFT) {
                            return (GLuint) ((((((GLuint)digits[1]) << PyLong_SHIFT) | (GLuint)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(GLuint) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLuint, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLuint) - 1 > 3 * PyLong_SHIFT) {
                            return (GLuint) (((GLuint)-1)*(((((((GLuint)digits[2]) << PyLong_SHIFT) | (GLuint)digits[1]) << PyLong_SHIFT) | (GLuint)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(GLuint) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLuint, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLuint) - 1 > 3 * PyLong_SHIFT) {
                            return (GLuint) ((((((((GLuint)digits[2]) << PyLong_SHIFT) | (GLuint)digits[1]) << PyLong_SHIFT) | (GLuint)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(GLuint) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLuint, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLuint) - 1 > 4 * PyLong_SHIFT) {
                            return (GLuint) (((GLuint)-1)*(((((((((GLuint)digits[3]) << PyLong_SHIFT) | (GLuint)digits[2]) << PyLong_SHIFT) | (GLuint)digits[1]) << PyLong_SHIFT) | (GLuint)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(GLuint) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLuint, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLuint) - 1 > 4 * PyLong_SHIFT) {
                            return (GLuint) ((((((((((GLuint)digits[3]) << PyLong_SHIFT) | (GLuint)digits[2]) << PyLong_SHIFT) | (GLuint)digits[1]) << PyLong_SHIFT) | (GLuint)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(GLuint) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(GLuint, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(GLuint) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(GLuint, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            GLuint val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (GLuint) -1;
        }
    } else {
        GLuint val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (GLuint) -1;
        val = __Pyx_PyInt_As_GLuint(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to GLuint");
    return (GLuint) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to GLuint");
    return (GLuint) -1;
}

/* CIntFromPy */
  static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
    const int neg_one = (int) ((int) 0 - (int) 1), const_zero = (int) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(int) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(int, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (int) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (int) 0;
                case  1: __PYX_VERIFY_RETURN_INT(int, digit, digits[0])
                case 2:
                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) >= 2 * PyLong_SHIFT) {
                            return (int) (((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) >= 3 * PyLong_SHIFT) {
                            return (int) (((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) >= 4 * PyLong_SHIFT) {
                            return (int) (((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (int) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(int) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (int) 0;
                case -1: __PYX_VERIFY_RETURN_INT(int, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(int,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(int) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
                            return (int) (((int)-1)*(((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(int) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
                            return (int) ((((((int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(int) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
                            return (int) (((int)-1)*(((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(int) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
                            return (int) ((((((((int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(int) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
                            return (int) (((int)-1)*(((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(int) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(int, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(int) - 1 > 4 * PyLong_SHIFT) {
                            return (int) ((((((((((int)digits[3]) << PyLong_SHIFT) | (int)digits[2]) << PyLong_SHIFT) | (int)digits[1]) << PyLong_SHIFT) | (int)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(int) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            int val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (int) -1;
        }
    } else {
        int val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (int) -1;
        val = __Pyx_PyInt_As_int(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to int");
    return (int) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to int");
    return (int) -1;
}

/* CIntFromPy */
  static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
    const long neg_one = (long) ((long) 0 - (long) 1), const_zero = (long) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(long) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(long, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (long) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (long) 0;
                case  1: __PYX_VERIFY_RETURN_INT(long, digit, digits[0])
                case 2:
                    if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) >= 2 * PyLong_SHIFT) {
                            return (long) (((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) >= 3 * PyLong_SHIFT) {
                            return (long) (((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) >= 4 * PyLong_SHIFT) {
                            return (long) (((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (long) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(long) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (long) 0;
                case -1: __PYX_VERIFY_RETURN_INT(long, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(long,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(long) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                            return (long) (((long)-1)*(((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(long) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                            return (long) ((((((long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                            return (long) (((long)-1)*(((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(long) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                            return (long) ((((((((long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(long) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                            return (long) (((long)-1)*(((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(long) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(long, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(long) - 1 > 4 * PyLong_SHIFT) {
                            return (long) ((((((((((long)digits[3]) << PyLong_SHIFT) | (long)digits[2]) << PyLong_SHIFT) | (long)digits[1]) << PyLong_SHIFT) | (long)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(long) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            long val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (long) -1;
        }
    } else {
        long val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (long) -1;
        val = __Pyx_PyInt_As_long(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to long");
    return (long) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to long");
    return (long) -1;
}

/* CIntFromPy */
  static CYTHON_INLINE GLint __Pyx_PyInt_As_GLint(PyObject *x) {
    const GLint neg_one = (GLint) ((GLint) 0 - (GLint) 1), const_zero = (GLint) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(GLint) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(GLint, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (GLint) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (GLint) 0;
                case  1: __PYX_VERIFY_RETURN_INT(GLint, digit, digits[0])
                case 2:
                    if (8 * sizeof(GLint) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLint, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLint) >= 2 * PyLong_SHIFT) {
                            return (GLint) (((((GLint)digits[1]) << PyLong_SHIFT) | (GLint)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(GLint) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLint, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLint) >= 3 * PyLong_SHIFT) {
                            return (GLint) (((((((GLint)digits[2]) << PyLong_SHIFT) | (GLint)digits[1]) << PyLong_SHIFT) | (GLint)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(GLint) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLint, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLint) >= 4 * PyLong_SHIFT) {
                            return (GLint) (((((((((GLint)digits[3]) << PyLong_SHIFT) | (GLint)digits[2]) << PyLong_SHIFT) | (GLint)digits[1]) << PyLong_SHIFT) | (GLint)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (GLint) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(GLint) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(GLint, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(GLint) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(GLint, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (GLint) 0;
                case -1: __PYX_VERIFY_RETURN_INT(GLint, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(GLint,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(GLint) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLint, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLint) - 1 > 2 * PyLong_SHIFT) {
                            return (GLint) (((GLint)-1)*(((((GLint)digits[1]) << PyLong_SHIFT) | (GLint)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(GLint) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLint, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLint) - 1 > 2 * PyLong_SHIFT) {
                            return (GLint) ((((((GLint)digits[1]) << PyLong_SHIFT) | (GLint)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(GLint) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLint, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLint) - 1 > 3 * PyLong_SHIFT) {
                            return (GLint) (((GLint)-1)*(((((((GLint)digits[2]) << PyLong_SHIFT) | (GLint)digits[1]) << PyLong_SHIFT) | (GLint)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(GLint) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLint, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLint) - 1 > 3 * PyLong_SHIFT) {
                            return (GLint) ((((((((GLint)digits[2]) << PyLong_SHIFT) | (GLint)digits[1]) << PyLong_SHIFT) | (GLint)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(GLint) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLint, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLint) - 1 > 4 * PyLong_SHIFT) {
                            return (GLint) (((GLint)-1)*(((((((((GLint)digits[3]) << PyLong_SHIFT) | (GLint)digits[2]) << PyLong_SHIFT) | (GLint)digits[1]) << PyLong_SHIFT) | (GLint)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(GLint) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLint, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLint) - 1 > 4 * PyLong_SHIFT) {
                            return (GLint) ((((((((((GLint)digits[3]) << PyLong_SHIFT) | (GLint)digits[2]) << PyLong_SHIFT) | (GLint)digits[1]) << PyLong_SHIFT) | (GLint)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(GLint) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(GLint, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(GLint) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(GLint, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            GLint val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (GLint) -1;
        }
    } else {
        GLint val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (GLint) -1;
        val = __Pyx_PyInt_As_GLint(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to GLint");
    return (GLint) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to GLint");
    return (GLint) -1;
}

/* CIntFromPy */
  static CYTHON_INLINE GLsizei __Pyx_PyInt_As_GLsizei(PyObject *x) {
    const GLsizei neg_one = (GLsizei) ((GLsizei) 0 - (GLsizei) 1), const_zero = (GLsizei) 0;
    const int is_unsigned = neg_one > const_zero;
#if PY_MAJOR_VERSION < 3
    if (likely(PyInt_Check(x))) {
        if (sizeof(GLsizei) < sizeof(long)) {
            __PYX_VERIFY_RETURN_INT(GLsizei, long, PyInt_AS_LONG(x))
        } else {
            long val = PyInt_AS_LONG(x);
            if (is_unsigned && unlikely(val < 0)) {
                goto raise_neg_overflow;
            }
            return (GLsizei) val;
        }
    } else
#endif
    if (likely(PyLong_Check(x))) {
        if (is_unsigned) {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (GLsizei) 0;
                case  1: __PYX_VERIFY_RETURN_INT(GLsizei, digit, digits[0])
                case 2:
                    if (8 * sizeof(GLsizei) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLsizei, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLsizei) >= 2 * PyLong_SHIFT) {
                            return (GLsizei) (((((GLsizei)digits[1]) << PyLong_SHIFT) | (GLsizei)digits[0]));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(GLsizei) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLsizei, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLsizei) >= 3 * PyLong_SHIFT) {
                            return (GLsizei) (((((((GLsizei)digits[2]) << PyLong_SHIFT) | (GLsizei)digits[1]) << PyLong_SHIFT) | (GLsizei)digits[0]));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(GLsizei) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLsizei, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLsizei) >= 4 * PyLong_SHIFT) {
                            return (GLsizei) (((((((((GLsizei)digits[3]) << PyLong_SHIFT) | (GLsizei)digits[2]) << PyLong_SHIFT) | (GLsizei)digits[1]) << PyLong_SHIFT) | (GLsizei)digits[0]));
                        }
                    }
                    break;
            }
#endif
#if CYTHON_COMPILING_IN_CPYTHON
            if (unlikely(Py_SIZE(x) < 0)) {
                goto raise_neg_overflow;
            }
#else
            {
                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                if (unlikely(result < 0))
                    return (GLsizei) -1;
                if (unlikely(result == 1))
                    goto raise_neg_overflow;
            }
#endif
            if (sizeof(GLsizei) <= sizeof(unsigned long)) {
                __PYX_VERIFY_RETURN_INT_EXC(GLsizei, unsigned long, PyLong_AsUnsignedLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(GLsizei) <= sizeof(unsigned PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(GLsizei, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
#endif
            }
        } else {
#if CYTHON_USE_PYLONG_INTERNALS
            const digit* digits = ((PyLongObject*)x)->ob_digit;
            switch (Py_SIZE(x)) {
                case  0: return (GLsizei) 0;
                case -1: __PYX_VERIFY_RETURN_INT(GLsizei, sdigit, (sdigit) (-(sdigit)digits[0]))
                case  1: __PYX_VERIFY_RETURN_INT(GLsizei,  digit, +digits[0])
                case -2:
                    if (8 * sizeof(GLsizei) - 1 > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLsizei, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLsizei) - 1 > 2 * PyLong_SHIFT) {
                            return (GLsizei) (((GLsizei)-1)*(((((GLsizei)digits[1]) << PyLong_SHIFT) | (GLsizei)digits[0])));
                        }
                    }
                    break;
                case 2:
                    if (8 * sizeof(GLsizei) > 1 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLsizei, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLsizei) - 1 > 2 * PyLong_SHIFT) {
                            return (GLsizei) ((((((GLsizei)digits[1]) << PyLong_SHIFT) | (GLsizei)digits[0])));
                        }
                    }
                    break;
                case -3:
                    if (8 * sizeof(GLsizei) - 1 > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLsizei, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLsizei) - 1 > 3 * PyLong_SHIFT) {
                            return (GLsizei) (((GLsizei)-1)*(((((((GLsizei)digits[2]) << PyLong_SHIFT) | (GLsizei)digits[1]) << PyLong_SHIFT) | (GLsizei)digits[0])));
                        }
                    }
                    break;
                case 3:
                    if (8 * sizeof(GLsizei) > 2 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLsizei, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLsizei) - 1 > 3 * PyLong_SHIFT) {
                            return (GLsizei) ((((((((GLsizei)digits[2]) << PyLong_SHIFT) | (GLsizei)digits[1]) << PyLong_SHIFT) | (GLsizei)digits[0])));
                        }
                    }
                    break;
                case -4:
                    if (8 * sizeof(GLsizei) - 1 > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLsizei, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLsizei) - 1 > 4 * PyLong_SHIFT) {
                            return (GLsizei) (((GLsizei)-1)*(((((((((GLsizei)digits[3]) << PyLong_SHIFT) | (GLsizei)digits[2]) << PyLong_SHIFT) | (GLsizei)digits[1]) << PyLong_SHIFT) | (GLsizei)digits[0])));
                        }
                    }
                    break;
                case 4:
                    if (8 * sizeof(GLsizei) > 3 * PyLong_SHIFT) {
                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
                            __PYX_VERIFY_RETURN_INT(GLsizei, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
                        } else if (8 * sizeof(GLsizei) - 1 > 4 * PyLong_SHIFT) {
                            return (GLsizei) ((((((((((GLsizei)digits[3]) << PyLong_SHIFT) | (GLsizei)digits[2]) << PyLong_SHIFT) | (GLsizei)digits[1]) << PyLong_SHIFT) | (GLsizei)digits[0])));
                        }
                    }
                    break;
            }
#endif
            if (sizeof(GLsizei) <= sizeof(long)) {
                __PYX_VERIFY_RETURN_INT_EXC(GLsizei, long, PyLong_AsLong(x))
#ifdef HAVE_LONG_LONG
            } else if (sizeof(GLsizei) <= sizeof(PY_LONG_LONG)) {
                __PYX_VERIFY_RETURN_INT_EXC(GLsizei, PY_LONG_LONG, PyLong_AsLongLong(x))
#endif
            }
        }
        {
#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
            PyErr_SetString(PyExc_RuntimeError,
                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
#else
            GLsizei val;
            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
 #if PY_MAJOR_VERSION < 3
            if (likely(v) && !PyLong_Check(v)) {
                PyObject *tmp = v;
                v = PyNumber_Long(tmp);
                Py_DECREF(tmp);
            }
 #endif
            if (likely(v)) {
                int one = 1; int is_little = (int)*(unsigned char *)&one;
                unsigned char *bytes = (unsigned char *)&val;
                int ret = _PyLong_AsByteArray((PyLongObject *)v,
                                              bytes, sizeof(val),
                                              is_little, !is_unsigned);
                Py_DECREF(v);
                if (likely(!ret))
                    return val;
            }
#endif
            return (GLsizei) -1;
        }
    } else {
        GLsizei val;
        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
        if (!tmp) return (GLsizei) -1;
        val = __Pyx_PyInt_As_GLsizei(tmp);
        Py_DECREF(tmp);
        return val;
    }
raise_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "value too large to convert to GLsizei");
    return (GLsizei) -1;
raise_neg_overflow:
    PyErr_SetString(PyExc_OverflowError,
        "can't convert negative value to GLsizei");
    return (GLsizei) -1;
}

/* FetchCommonType */
  static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
    PyObject* fake_module;
    PyTypeObject* cached_type = NULL;
    fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI);
    if (!fake_module) return NULL;
    Py_INCREF(fake_module);
    cached_type = (PyTypeObject*) PyObject_GetAttrString(fake_module, type->tp_name);
    if (cached_type) {
        if (!PyType_Check((PyObject*)cached_type)) {
            PyErr_Format(PyExc_TypeError,
                "Shared Cython type %.200s is not a type object",
                type->tp_name);
            goto bad;
        }
        if (cached_type->tp_basicsize != type->tp_basicsize) {
            PyErr_Format(PyExc_TypeError,
                "Shared Cython type %.200s has the wrong size, try recompiling",
                type->tp_name);
            goto bad;
        }
    } else {
        if (!PyErr_ExceptionMatches(PyExc_AttributeError)) goto bad;
        PyErr_Clear();
        if (PyType_Ready(type) < 0) goto bad;
        if (PyObject_SetAttrString(fake_module, type->tp_name, (PyObject*) type) < 0)
            goto bad;
        Py_INCREF(type);
        cached_type = type;
    }
done:
    Py_DECREF(fake_module);
    return cached_type;
bad:
    Py_XDECREF(cached_type);
    cached_type = NULL;
    goto done;
}

/* SwapException */
  #if CYTHON_FAST_THREAD_STATE
static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    #if CYTHON_USE_EXC_INFO_STACK
    _PyErr_StackItem *exc_info = tstate->exc_info;
    tmp_type = exc_info->exc_type;
    tmp_value = exc_info->exc_value;
    tmp_tb = exc_info->exc_traceback;
    exc_info->exc_type = *type;
    exc_info->exc_value = *value;
    exc_info->exc_traceback = *tb;
    #else
    tmp_type = tstate->exc_type;
    tmp_value = tstate->exc_value;
    tmp_tb = tstate->exc_traceback;
    tstate->exc_type = *type;
    tstate->exc_value = *value;
    tstate->exc_traceback = *tb;
    #endif
    *type = tmp_type;
    *value = tmp_value;
    *tb = tmp_tb;
}
#else
static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb) {
    PyObject *tmp_type, *tmp_value, *tmp_tb;
    PyErr_GetExcInfo(&tmp_type, &tmp_value, &tmp_tb);
    PyErr_SetExcInfo(*type, *value, *tb);
    *type = tmp_type;
    *value = tmp_value;
    *tb = tmp_tb;
}
#endif

/* CoroutineBase */
  #include <structmember.h>
#include <frameobject.h>
#define __Pyx_Coroutine_Undelegate(gen) Py_CLEAR((gen)->yieldfrom)
static int __Pyx_PyGen__FetchStopIterationValue(CYTHON_UNUSED PyThreadState *__pyx_tstate, PyObject **pvalue) {
    PyObject *et, *ev, *tb;
    PyObject *value = NULL;
    __Pyx_ErrFetch(&et, &ev, &tb);
    if (!et) {
        Py_XDECREF(tb);
        Py_XDECREF(ev);
        Py_INCREF(Py_None);
        *pvalue = Py_None;
        return 0;
    }
    if (likely(et == PyExc_StopIteration)) {
        if (!ev) {
            Py_INCREF(Py_None);
            value = Py_None;
        }
#if PY_VERSION_HEX >= 0x030300A0
        else if (Py_TYPE(ev) == (PyTypeObject*)PyExc_StopIteration) {
            value = ((PyStopIterationObject *)ev)->value;
            Py_INCREF(value);
            Py_DECREF(ev);
        }
#endif
        else if (unlikely(PyTuple_Check(ev))) {
            if (PyTuple_GET_SIZE(ev) >= 1) {
#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
                value = PyTuple_GET_ITEM(ev, 0);
                Py_INCREF(value);
#else
                value = PySequence_ITEM(ev, 0);
#endif
            } else {
                Py_INCREF(Py_None);
                value = Py_None;
            }
            Py_DECREF(ev);
        }
        else if (!__Pyx_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration)) {
            value = ev;
        }
        if (likely(value)) {
            Py_XDECREF(tb);
            Py_DECREF(et);
            *pvalue = value;
            return 0;
        }
    } else if (!__Pyx_PyErr_GivenExceptionMatches(et, PyExc_StopIteration)) {
        __Pyx_ErrRestore(et, ev, tb);
        return -1;
    }
    PyErr_NormalizeException(&et, &ev, &tb);
    if (unlikely(!PyObject_TypeCheck(ev, (PyTypeObject*)PyExc_StopIteration))) {
        __Pyx_ErrRestore(et, ev, tb);
        return -1;
    }
    Py_XDECREF(tb);
    Py_DECREF(et);
#if PY_VERSION_HEX >= 0x030300A0
    value = ((PyStopIterationObject *)ev)->value;
    Py_INCREF(value);
    Py_DECREF(ev);
#else
    {
        PyObject* args = __Pyx_PyObject_GetAttrStr(ev, __pyx_n_s_args);
        Py_DECREF(ev);
        if (likely(args)) {
            value = PySequence_GetItem(args, 0);
            Py_DECREF(args);
        }
        if (unlikely(!value)) {
            __Pyx_ErrRestore(NULL, NULL, NULL);
            Py_INCREF(Py_None);
            value = Py_None;
        }
    }
#endif
    *pvalue = value;
    return 0;
}
static CYTHON_INLINE
void __Pyx_Coroutine_ExceptionClear(__Pyx_ExcInfoStruct *exc_state) {
    PyObject *t, *v, *tb;
    t = exc_state->exc_type;
    v = exc_state->exc_value;
    tb = exc_state->exc_traceback;
    exc_state->exc_type = NULL;
    exc_state->exc_value = NULL;
    exc_state->exc_traceback = NULL;
    Py_XDECREF(t);
    Py_XDECREF(v);
    Py_XDECREF(tb);
}
#define __Pyx_Coroutine_AlreadyRunningError(gen)  (__Pyx__Coroutine_AlreadyRunningError(gen), (PyObject*)NULL)
static void __Pyx__Coroutine_AlreadyRunningError(CYTHON_UNUSED __pyx_CoroutineObject *gen) {
    const char *msg;
    if ((0)) {
    #ifdef __Pyx_Coroutine_USED
    } else if (__Pyx_Coroutine_Check((PyObject*)gen)) {
        msg = "coroutine already executing";
    #endif
    #ifdef __Pyx_AsyncGen_USED
    } else if (__Pyx_AsyncGen_CheckExact((PyObject*)gen)) {
        msg = "async generator already executing";
    #endif
    } else {
        msg = "generator already executing";
    }
    PyErr_SetString(PyExc_ValueError, msg);
}
#define __Pyx_Coroutine_NotStartedError(gen)  (__Pyx__Coroutine_NotStartedError(gen), (PyObject*)NULL)
static void __Pyx__Coroutine_NotStartedError(CYTHON_UNUSED PyObject *gen) {
    const char *msg;
    if ((0)) {
    #ifdef __Pyx_Coroutine_USED
    } else if (__Pyx_Coroutine_Check(gen)) {
        msg = "can't send non-None value to a just-started coroutine";
    #endif
    #ifdef __Pyx_AsyncGen_USED
    } else if (__Pyx_AsyncGen_CheckExact(gen)) {
        msg = "can't send non-None value to a just-started async generator";
    #endif
    } else {
        msg = "can't send non-None value to a just-started generator";
    }
    PyErr_SetString(PyExc_TypeError, msg);
}
#define __Pyx_Coroutine_AlreadyTerminatedError(gen, value, closing)  (__Pyx__Coroutine_AlreadyTerminatedError(gen, value, closing), (PyObject*)NULL)
static void __Pyx__Coroutine_AlreadyTerminatedError(CYTHON_UNUSED PyObject *gen, PyObject *value, CYTHON_UNUSED int closing) {
    #ifdef __Pyx_Coroutine_USED
    if (!closing && __Pyx_Coroutine_Check(gen)) {
        PyErr_SetString(PyExc_RuntimeError, "cannot reuse already awaited coroutine");
    } else
    #endif
    if (value) {
        #ifdef __Pyx_AsyncGen_USED
        if (__Pyx_AsyncGen_CheckExact(gen))
            PyErr_SetNone(__Pyx_PyExc_StopAsyncIteration);
        else
        #endif
        PyErr_SetNone(PyExc_StopIteration);
    }
}
static
PyObject *__Pyx_Coroutine_SendEx(__pyx_CoroutineObject *self, PyObject *value, int closing) {
    __Pyx_PyThreadState_declare
    PyThreadState *tstate;
    __Pyx_ExcInfoStruct *exc_state;
    PyObject *retval;
    assert(!self->is_running);
    if (unlikely(self->resume_label == 0)) {
        if (unlikely(value && value != Py_None)) {
            return __Pyx_Coroutine_NotStartedError((PyObject*)self);
        }
    }
    if (unlikely(self->resume_label == -1)) {
        return __Pyx_Coroutine_AlreadyTerminatedError((PyObject*)self, value, closing);
    }
#if CYTHON_FAST_THREAD_STATE
    __Pyx_PyThreadState_assign
    tstate = __pyx_tstate;
#else
    tstate = __Pyx_PyThreadState_Current;
#endif
    exc_state = &self->gi_exc_state;
    if (exc_state->exc_type) {
        #if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_PYSTON
        #else
        if (exc_state->exc_traceback) {
            PyTracebackObject *tb = (PyTracebackObject *) exc_state->exc_traceback;
            PyFrameObject *f = tb->tb_frame;
            Py_XINCREF(tstate->frame);
            assert(f->f_back == NULL);
            f->f_back = tstate->frame;
        }
        #endif
    }
#if CYTHON_USE_EXC_INFO_STACK
    exc_state->previous_item = tstate->exc_info;
    tstate->exc_info = exc_state;
#else
    if (exc_state->exc_type) {
        __Pyx_ExceptionSwap(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback);
    } else {
        __Pyx_Coroutine_ExceptionClear(exc_state);
        __Pyx_ExceptionSave(&exc_state->exc_type, &exc_state->exc_value, &exc_state->exc_traceback);
    }
#endif
    self->is_running = 1;
    retval = self->body((PyObject *) self, tstate, value);
    self->is_running = 0;
#if CYTHON_USE_EXC_INFO_STACK
    exc_state = &self->gi_exc_state;
    tstate->exc_info = exc_state->previous_item;
    exc_state->previous_item = NULL;
    __Pyx_Coroutine_ResetFrameBackpointer(exc_state);
#endif
    return retval;
}
static CYTHON_INLINE void __Pyx_Coroutine_ResetFrameBackpointer(__Pyx_ExcInfoStruct *exc_state) {
    PyObject *exc_tb = exc_state->exc_traceback;
    if (likely(exc_tb)) {
#if CYTHON_COMPILING_IN_PYPY || CYTHON_COMPILING_IN_PYSTON
#else
        PyTracebackObject *tb = (PyTracebackObject *) exc_tb;
        PyFrameObject *f = tb->tb_frame;
        Py_CLEAR(f->f_back);
#endif
    }
}
static CYTHON_INLINE
PyObject *__Pyx_Coroutine_MethodReturn(CYTHON_UNUSED PyObject* gen, PyObject *retval) {
    if (unlikely(!retval)) {
        __Pyx_PyThreadState_declare
        __Pyx_PyThreadState_assign
        if (!__Pyx_PyErr_Occurred()) {
            PyObject *exc = PyExc_StopIteration;
            #ifdef __Pyx_AsyncGen_USED
            if (__Pyx_AsyncGen_CheckExact(gen))
                exc = __Pyx_PyExc_StopAsyncIteration;
            #endif
            __Pyx_PyErr_SetNone(exc);
        }
    }
    return retval;
}
static CYTHON_INLINE
PyObject *__Pyx_Coroutine_FinishDelegation(__pyx_CoroutineObject *gen) {
    PyObject *ret;
    PyObject *val = NULL;
    __Pyx_Coroutine_Undelegate(gen);
    __Pyx_PyGen__FetchStopIterationValue(__Pyx_PyThreadState_Current, &val);
    ret = __Pyx_Coroutine_SendEx(gen, val, 0);
    Py_XDECREF(val);
    return ret;
}
static PyObject *__Pyx_Coroutine_Send(PyObject *self, PyObject *value) {
    PyObject *retval;
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self;
    PyObject *yf = gen->yieldfrom;
    if (unlikely(gen->is_running))
        return __Pyx_Coroutine_AlreadyRunningError(gen);
    if (yf) {
        PyObject *ret;
        gen->is_running = 1;
        #ifdef __Pyx_Generator_USED
        if (__Pyx_Generator_CheckExact(yf)) {
            ret = __Pyx_Coroutine_Send(yf, value);
        } else
        #endif
        #ifdef __Pyx_Coroutine_USED
        if (__Pyx_Coroutine_Check(yf)) {
            ret = __Pyx_Coroutine_Send(yf, value);
        } else
        #endif
        #ifdef __Pyx_AsyncGen_USED
        if (__pyx_PyAsyncGenASend_CheckExact(yf)) {
            ret = __Pyx_async_gen_asend_send(yf, value);
        } else
        #endif
        #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3)
        if (PyGen_CheckExact(yf)) {
            ret = _PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value);
        } else
        #endif
        #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03050000 && defined(PyCoro_CheckExact) && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3)
        if (PyCoro_CheckExact(yf)) {
            ret = _PyGen_Send((PyGenObject*)yf, value == Py_None ? NULL : value);
        } else
        #endif
        {
            if (value == Py_None)
                ret = Py_TYPE(yf)->tp_iternext(yf);
            else
                ret = __Pyx_PyObject_CallMethod1(yf, __pyx_n_s_send, value);
        }
        gen->is_running = 0;
        if (likely(ret)) {
            return ret;
        }
        retval = __Pyx_Coroutine_FinishDelegation(gen);
    } else {
        retval = __Pyx_Coroutine_SendEx(gen, value, 0);
    }
    return __Pyx_Coroutine_MethodReturn(self, retval);
}
static int __Pyx_Coroutine_CloseIter(__pyx_CoroutineObject *gen, PyObject *yf) {
    PyObject *retval = NULL;
    int err = 0;
    #ifdef __Pyx_Generator_USED
    if (__Pyx_Generator_CheckExact(yf)) {
        retval = __Pyx_Coroutine_Close(yf);
        if (!retval)
            return -1;
    } else
    #endif
    #ifdef __Pyx_Coroutine_USED
    if (__Pyx_Coroutine_Check(yf)) {
        retval = __Pyx_Coroutine_Close(yf);
        if (!retval)
            return -1;
    } else
    if (__Pyx_CoroutineAwait_CheckExact(yf)) {
        retval = __Pyx_CoroutineAwait_Close((__pyx_CoroutineAwaitObject*)yf, NULL);
        if (!retval)
            return -1;
    } else
    #endif
    #ifdef __Pyx_AsyncGen_USED
    if (__pyx_PyAsyncGenASend_CheckExact(yf)) {
        retval = __Pyx_async_gen_asend_close(yf, NULL);
    } else
    if (__pyx_PyAsyncGenAThrow_CheckExact(yf)) {
        retval = __Pyx_async_gen_athrow_close(yf, NULL);
    } else
    #endif
    {
        PyObject *meth;
        gen->is_running = 1;
        meth = __Pyx_PyObject_GetAttrStr(yf, __pyx_n_s_close);
        if (unlikely(!meth)) {
            if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
                PyErr_WriteUnraisable(yf);
            }
            PyErr_Clear();
        } else {
            retval = PyObject_CallFunction(meth, NULL);
            Py_DECREF(meth);
            if (!retval)
                err = -1;
        }
        gen->is_running = 0;
    }
    Py_XDECREF(retval);
    return err;
}
static PyObject *__Pyx_Generator_Next(PyObject *self) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject*) self;
    PyObject *yf = gen->yieldfrom;
    if (unlikely(gen->is_running))
        return __Pyx_Coroutine_AlreadyRunningError(gen);
    if (yf) {
        PyObject *ret;
        gen->is_running = 1;
        #ifdef __Pyx_Generator_USED
        if (__Pyx_Generator_CheckExact(yf)) {
            ret = __Pyx_Generator_Next(yf);
        } else
        #endif
        #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03030000 && (defined(__linux__) || PY_VERSION_HEX >= 0x030600B3)
        if (PyGen_CheckExact(yf)) {
            ret = _PyGen_Send((PyGenObject*)yf, NULL);
        } else
        #endif
        #ifdef __Pyx_Coroutine_USED
        if (__Pyx_Coroutine_Check(yf)) {
            ret = __Pyx_Coroutine_Send(yf, Py_None);
        } else
        #endif
            ret = Py_TYPE(yf)->tp_iternext(yf);
        gen->is_running = 0;
        if (likely(ret)) {
            return ret;
        }
        return __Pyx_Coroutine_FinishDelegation(gen);
    }
    return __Pyx_Coroutine_SendEx(gen, Py_None, 0);
}
static PyObject *__Pyx_Coroutine_Close_Method(PyObject *self, CYTHON_UNUSED PyObject *arg) {
    return __Pyx_Coroutine_Close(self);
}
static PyObject *__Pyx_Coroutine_Close(PyObject *self) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    PyObject *retval, *raised_exception;
    PyObject *yf = gen->yieldfrom;
    int err = 0;
    if (unlikely(gen->is_running))
        return __Pyx_Coroutine_AlreadyRunningError(gen);
    if (yf) {
        Py_INCREF(yf);
        err = __Pyx_Coroutine_CloseIter(gen, yf);
        __Pyx_Coroutine_Undelegate(gen);
        Py_DECREF(yf);
    }
    if (err == 0)
        PyErr_SetNone(PyExc_GeneratorExit);
    retval = __Pyx_Coroutine_SendEx(gen, NULL, 1);
    if (unlikely(retval)) {
        const char *msg;
        Py_DECREF(retval);
        if ((0)) {
        #ifdef __Pyx_Coroutine_USED
        } else if (__Pyx_Coroutine_Check(self)) {
            msg = "coroutine ignored GeneratorExit";
        #endif
        #ifdef __Pyx_AsyncGen_USED
        } else if (__Pyx_AsyncGen_CheckExact(self)) {
#if PY_VERSION_HEX < 0x03060000
            msg = "async generator ignored GeneratorExit - might require Python 3.6+ finalisation (PEP 525)";
#else
            msg = "async generator ignored GeneratorExit";
#endif
        #endif
        } else {
            msg = "generator ignored GeneratorExit";
        }
        PyErr_SetString(PyExc_RuntimeError, msg);
        return NULL;
    }
    raised_exception = PyErr_Occurred();
    if (likely(!raised_exception || __Pyx_PyErr_GivenExceptionMatches2(raised_exception, PyExc_GeneratorExit, PyExc_StopIteration))) {
        if (raised_exception) PyErr_Clear();
        Py_INCREF(Py_None);
        return Py_None;
    }
    return NULL;
}
static PyObject *__Pyx__Coroutine_Throw(PyObject *self, PyObject *typ, PyObject *val, PyObject *tb,
                                        PyObject *args, int close_on_genexit) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    PyObject *yf = gen->yieldfrom;
    if (unlikely(gen->is_running))
        return __Pyx_Coroutine_AlreadyRunningError(gen);
    if (yf) {
        PyObject *ret;
        Py_INCREF(yf);
        if (__Pyx_PyErr_GivenExceptionMatches(typ, PyExc_GeneratorExit) && close_on_genexit) {
            int err = __Pyx_Coroutine_CloseIter(gen, yf);
            Py_DECREF(yf);
            __Pyx_Coroutine_Undelegate(gen);
            if (err < 0)
                return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0));
            goto throw_here;
        }
        gen->is_running = 1;
        if (0
        #ifdef __Pyx_Generator_USED
            || __Pyx_Generator_CheckExact(yf)
        #endif
        #ifdef __Pyx_Coroutine_USED
            || __Pyx_Coroutine_Check(yf)
        #endif
            ) {
            ret = __Pyx__Coroutine_Throw(yf, typ, val, tb, args, close_on_genexit);
        #ifdef __Pyx_Coroutine_USED
        } else if (__Pyx_CoroutineAwait_CheckExact(yf)) {
            ret = __Pyx__Coroutine_Throw(((__pyx_CoroutineAwaitObject*)yf)->coroutine, typ, val, tb, args, close_on_genexit);
        #endif
        } else {
            PyObject *meth = __Pyx_PyObject_GetAttrStr(yf, __pyx_n_s_throw);
            if (unlikely(!meth)) {
                Py_DECREF(yf);
                if (!PyErr_ExceptionMatches(PyExc_AttributeError)) {
                    gen->is_running = 0;
                    return NULL;
                }
                PyErr_Clear();
                __Pyx_Coroutine_Undelegate(gen);
                gen->is_running = 0;
                goto throw_here;
            }
            if (likely(args)) {
                ret = PyObject_CallObject(meth, args);
            } else {
                ret = PyObject_CallFunctionObjArgs(meth, typ, val, tb, NULL);
            }
            Py_DECREF(meth);
        }
        gen->is_running = 0;
        Py_DECREF(yf);
        if (!ret) {
            ret = __Pyx_Coroutine_FinishDelegation(gen);
        }
        return __Pyx_Coroutine_MethodReturn(self, ret);
    }
throw_here:
    __Pyx_Raise(typ, val, tb, NULL);
    return __Pyx_Coroutine_MethodReturn(self, __Pyx_Coroutine_SendEx(gen, NULL, 0));
}
static PyObject *__Pyx_Coroutine_Throw(PyObject *self, PyObject *args) {
    PyObject *typ;
    PyObject *val = NULL;
    PyObject *tb = NULL;
    if (!PyArg_UnpackTuple(args, (char *)"throw", 1, 3, &typ, &val, &tb))
        return NULL;
    return __Pyx__Coroutine_Throw(self, typ, val, tb, args, 1);
}
static CYTHON_INLINE int __Pyx_Coroutine_traverse_excstate(__Pyx_ExcInfoStruct *exc_state, visitproc visit, void *arg) {
    Py_VISIT(exc_state->exc_type);
    Py_VISIT(exc_state->exc_value);
    Py_VISIT(exc_state->exc_traceback);
    return 0;
}
static int __Pyx_Coroutine_traverse(__pyx_CoroutineObject *gen, visitproc visit, void *arg) {
    Py_VISIT(gen->closure);
    Py_VISIT(gen->classobj);
    Py_VISIT(gen->yieldfrom);
    return __Pyx_Coroutine_traverse_excstate(&gen->gi_exc_state, visit, arg);
}
static int __Pyx_Coroutine_clear(PyObject *self) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    Py_CLEAR(gen->closure);
    Py_CLEAR(gen->classobj);
    Py_CLEAR(gen->yieldfrom);
    __Pyx_Coroutine_ExceptionClear(&gen->gi_exc_state);
#ifdef __Pyx_AsyncGen_USED
    if (__Pyx_AsyncGen_CheckExact(self)) {
        Py_CLEAR(((__pyx_PyAsyncGenObject*)gen)->ag_finalizer);
    }
#endif
    Py_CLEAR(gen->gi_code);
    Py_CLEAR(gen->gi_name);
    Py_CLEAR(gen->gi_qualname);
    Py_CLEAR(gen->gi_modulename);
    return 0;
}
static void __Pyx_Coroutine_dealloc(PyObject *self) {
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    PyObject_GC_UnTrack(gen);
    if (gen->gi_weakreflist != NULL)
        PyObject_ClearWeakRefs(self);
    if (gen->resume_label >= 0) {
        PyObject_GC_Track(self);
#if PY_VERSION_HEX >= 0x030400a1 && CYTHON_USE_TP_FINALIZE
        if (PyObject_CallFinalizerFromDealloc(self))
#else
        Py_TYPE(gen)->tp_del(self);
        if (self->ob_refcnt > 0)
#endif
        {
            return;
        }
        PyObject_GC_UnTrack(self);
    }
#ifdef __Pyx_AsyncGen_USED
    if (__Pyx_AsyncGen_CheckExact(self)) {
        /* We have to handle this case for asynchronous generators
           right here, because this code has to be between UNTRACK
           and GC_Del. */
        Py_CLEAR(((__pyx_PyAsyncGenObject*)self)->ag_finalizer);
    }
#endif
    __Pyx_Coroutine_clear(self);
    PyObject_GC_Del(gen);
}
static void __Pyx_Coroutine_del(PyObject *self) {
    PyObject *error_type, *error_value, *error_traceback;
    __pyx_CoroutineObject *gen = (__pyx_CoroutineObject *) self;
    __Pyx_PyThreadState_declare
    if (gen->resume_label < 0) {
        return;
    }
#if !CYTHON_USE_TP_FINALIZE
    assert(self->ob_refcnt == 0);
    self->ob_refcnt = 1;
#endif
    __Pyx_PyThreadState_assign
    __Pyx_ErrFetch(&error_type, &error_value, &error_traceback);
#ifdef __Pyx_AsyncGen_USED
    if (__Pyx_AsyncGen_CheckExact(self)) {
        __pyx_PyAsyncGenObject *agen = (__pyx_PyAsyncGenObject*)self;
        PyObject *finalizer = agen->ag_finalizer;
        if (finalizer && !agen->ag_closed) {
            PyObject *res = __Pyx_PyObject_CallOneArg(finalizer, self);
            if (unlikely(!res)) {
                PyErr_WriteUnraisable(self);
            } else {
                Py_DECREF(res);
            }
            __Pyx_ErrRestore(error_type, error_value, error_traceback);
            return;
        }
    }
#endif
    if (unlikely(gen->resume_label == 0 && !error_value)) {
#ifdef __Pyx_Coroutine_USED
#ifdef __Pyx_Generator_USED
    if (!__Pyx_Generator_CheckExact(self))
#endif
        {
        PyObject_GC_UnTrack(self);
#if PY_MAJOR_VERSION >= 3  || defined(PyErr_WarnFormat)
        if (unlikely(PyErr_WarnFormat(PyExc_RuntimeWarning, 1, "coroutine '%.50S' was never awaited", gen->gi_qualname) < 0))
            PyErr_WriteUnraisable(self);
#else
        {PyObject *msg;
        char *cmsg;
        #if CYTHON_COMPILING_IN_PYPY
        msg = NULL;
        cmsg = (char*) "coroutine was never awaited";
        #else
        char *cname;
        PyObject *qualname;
        qualname = gen->gi_qualname;
        cname = PyString_AS_STRING(qualname);
        msg = PyString_FromFormat("coroutine '%.50s' was never awaited", cname);
        if (unlikely(!msg)) {
            PyErr_Clear();
            cmsg = (char*) "coroutine was never awaited";
        } else {
            cmsg = PyString_AS_STRING(msg);
        }
        #endif
        if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, cmsg, 1) < 0))
            PyErr_WriteUnraisable(self);
        Py_XDECREF(msg);}
#endif
        PyObject_GC_Track(self);
        }
#endif
    } else {
        PyObject *res = __Pyx_Coroutine_Close(self);
        if (unlikely(!res)) {
            if (PyErr_Occurred())
                PyErr_WriteUnraisable(self);
        } else {
            Py_DECREF(res);
        }
    }
    __Pyx_ErrRestore(error_type, error_value, error_traceback);
#if !CYTHON_USE_TP_FINALIZE
    assert(self->ob_refcnt > 0);
    if (--self->ob_refcnt == 0) {
        return;
    }
    {
        Py_ssize_t refcnt = self->ob_refcnt;
        _Py_NewReference(self);
        self->ob_refcnt = refcnt;
    }
#if CYTHON_COMPILING_IN_CPYTHON
    assert(PyType_IS_GC(self->ob_type) &&
           _Py_AS_GC(self)->gc.gc_refs != _PyGC_REFS_UNTRACKED);
    _Py_DEC_REFTOTAL;
#endif
#ifdef COUNT_ALLOCS
    --Py_TYPE(self)->tp_frees;
    --Py_TYPE(self)->tp_allocs;
#endif
#endif
}
static PyObject *
__Pyx_Coroutine_get_name(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context)
{
    PyObject *name = self->gi_name;
    if (unlikely(!name)) name = Py_None;
    Py_INCREF(name);
    return name;
}
static int
__Pyx_Coroutine_set_name(__pyx_CoroutineObject *self, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp;
#if PY_MAJOR_VERSION >= 3
    if (unlikely(value == NULL || !PyUnicode_Check(value)))
#else
    if (unlikely(value == NULL || !PyString_Check(value)))
#endif
    {
        PyErr_SetString(PyExc_TypeError,
                        "__name__ must be set to a string object");
        return -1;
    }
    tmp = self->gi_name;
    Py_INCREF(value);
    self->gi_name = value;
    Py_XDECREF(tmp);
    return 0;
}
static PyObject *
__Pyx_Coroutine_get_qualname(__pyx_CoroutineObject *self, CYTHON_UNUSED void *context)
{
    PyObject *name = self->gi_qualname;
    if (unlikely(!name)) name = Py_None;
    Py_INCREF(name);
    return name;
}
static int
__Pyx_Coroutine_set_qualname(__pyx_CoroutineObject *self, PyObject *value, CYTHON_UNUSED void *context)
{
    PyObject *tmp;
#if PY_MAJOR_VERSION >= 3
    if (unlikely(value == NULL || !PyUnicode_Check(value)))
#else
    if (unlikely(value == NULL || !PyString_Check(value)))
#endif
    {
        PyErr_SetString(PyExc_TypeError,
                        "__qualname__ must be set to a string object");
        return -1;
    }
    tmp = self->gi_qualname;
    Py_INCREF(value);
    self->gi_qualname = value;
    Py_XDECREF(tmp);
    return 0;
}
static __pyx_CoroutineObject *__Pyx__Coroutine_New(
            PyTypeObject* type, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
            PyObject *name, PyObject *qualname, PyObject *module_name) {
    __pyx_CoroutineObject *gen = PyObject_GC_New(__pyx_CoroutineObject, type);
    if (unlikely(!gen))
        return NULL;
    return __Pyx__Coroutine_NewInit(gen, body, code, closure, name, qualname, module_name);
}
static __pyx_CoroutineObject *__Pyx__Coroutine_NewInit(
            __pyx_CoroutineObject *gen, __pyx_coroutine_body_t body, PyObject *code, PyObject *closure,
            PyObject *name, PyObject *qualname, PyObject *module_name) {
    gen->body = body;
    gen->closure = closure;
    Py_XINCREF(closure);
    gen->is_running = 0;
    gen->resume_label = 0;
    gen->classobj = NULL;
    gen->yieldfrom = NULL;
    gen->gi_exc_state.exc_type = NULL;
    gen->gi_exc_state.exc_value = NULL;
    gen->gi_exc_state.exc_traceback = NULL;
#if CYTHON_USE_EXC_INFO_STACK
    gen->gi_exc_state.previous_item = NULL;
#endif
    gen->gi_weakreflist = NULL;
    Py_XINCREF(qualname);
    gen->gi_qualname = qualname;
    Py_XINCREF(name);
    gen->gi_name = name;
    Py_XINCREF(module_name);
    gen->gi_modulename = module_name;
    Py_XINCREF(code);
    gen->gi_code = code;
    PyObject_GC_Track(gen);
    return gen;
}

/* PatchModuleWithCoroutine */
  static PyObject* __Pyx_Coroutine_patch_module(PyObject* module, const char* py_code) {
#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
    int result;
    PyObject *globals, *result_obj;
    globals = PyDict_New();  if (unlikely(!globals)) goto ignore;
    result = PyDict_SetItemString(globals, "_cython_coroutine_type",
    #ifdef __Pyx_Coroutine_USED
        (PyObject*)__pyx_CoroutineType);
    #else
        Py_None);
    #endif
    if (unlikely(result < 0)) goto ignore;
    result = PyDict_SetItemString(globals, "_cython_generator_type",
    #ifdef __Pyx_Generator_USED
        (PyObject*)__pyx_GeneratorType);
    #else
        Py_None);
    #endif
    if (unlikely(result < 0)) goto ignore;
    if (unlikely(PyDict_SetItemString(globals, "_module", module) < 0)) goto ignore;
    if (unlikely(PyDict_SetItemString(globals, "__builtins__", __pyx_b) < 0)) goto ignore;
    result_obj = PyRun_String(py_code, Py_file_input, globals, globals);
    if (unlikely(!result_obj)) goto ignore;
    Py_DECREF(result_obj);
    Py_DECREF(globals);
    return module;
ignore:
    Py_XDECREF(globals);
    PyErr_WriteUnraisable(module);
    if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning, "Cython module failed to patch module with custom type", 1) < 0)) {
        Py_DECREF(module);
        module = NULL;
    }
#else
    py_code++;
#endif
    return module;
}

/* PatchGeneratorABC */
  #ifndef CYTHON_REGISTER_ABCS
#define CYTHON_REGISTER_ABCS 1
#endif
#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
static PyObject* __Pyx_patch_abc_module(PyObject *module);
static PyObject* __Pyx_patch_abc_module(PyObject *module) {
    module = __Pyx_Coroutine_patch_module(
        module, ""
"if _cython_generator_type is not None:\n"
"    try: Generator = _module.Generator\n"
"    except AttributeError: pass\n"
"    else: Generator.register(_cython_generator_type)\n"
"if _cython_coroutine_type is not None:\n"
"    try: Coroutine = _module.Coroutine\n"
"    except AttributeError: pass\n"
"    else: Coroutine.register(_cython_coroutine_type)\n"
    );
    return module;
}
#endif
static int __Pyx_patch_abc(void) {
#if defined(__Pyx_Generator_USED) || defined(__Pyx_Coroutine_USED)
    static int abc_patched = 0;
    if (CYTHON_REGISTER_ABCS && !abc_patched) {
        PyObject *module;
        module = PyImport_ImportModule((PY_MAJOR_VERSION >= 3) ? "collections.abc" : "collections");
        if (!module) {
            PyErr_WriteUnraisable(NULL);
            if (unlikely(PyErr_WarnEx(PyExc_RuntimeWarning,
                    ((PY_MAJOR_VERSION >= 3) ?
                        "Cython module failed to register with collections.abc module" :
                        "Cython module failed to register with collections module"), 1) < 0)) {
                return -1;
            }
        } else {
            module = __Pyx_patch_abc_module(module);
            abc_patched = 1;
            if (unlikely(!module))
                return -1;
            Py_DECREF(module);
        }
        module = PyImport_ImportModule("backports_abc");
        if (module) {
            module = __Pyx_patch_abc_module(module);
            Py_XDECREF(module);
        }
        if (!module) {
            PyErr_Clear();
        }
    }
#else
    if ((0)) __Pyx_Coroutine_patch_module(NULL, NULL);
#endif
    return 0;
}

/* Generator */
  static PyMethodDef __pyx_Generator_methods[] = {
    {"send", (PyCFunction) __Pyx_Coroutine_Send, METH_O,
     (char*) PyDoc_STR("send(arg) -> send 'arg' into generator,\nreturn next yielded value or raise StopIteration.")},
    {"throw", (PyCFunction) __Pyx_Coroutine_Throw, METH_VARARGS,
     (char*) PyDoc_STR("throw(typ[,val[,tb]]) -> raise exception in generator,\nreturn next yielded value or raise StopIteration.")},
    {"close", (PyCFunction) __Pyx_Coroutine_Close_Method, METH_NOARGS,
     (char*) PyDoc_STR("close() -> raise GeneratorExit inside generator.")},
    {0, 0, 0, 0}
};
static PyMemberDef __pyx_Generator_memberlist[] = {
    {(char *) "gi_running", T_BOOL, offsetof(__pyx_CoroutineObject, is_running), READONLY, NULL},
    {(char*) "gi_yieldfrom", T_OBJECT, offsetof(__pyx_CoroutineObject, yieldfrom), READONLY,
     (char*) PyDoc_STR("object being iterated by 'yield from', or None")},
    {(char*) "gi_code", T_OBJECT, offsetof(__pyx_CoroutineObject, gi_code), READONLY, NULL},
    {0, 0, 0, 0, 0}
};
static PyGetSetDef __pyx_Generator_getsets[] = {
    {(char *) "__name__", (getter)__Pyx_Coroutine_get_name, (setter)__Pyx_Coroutine_set_name,
     (char*) PyDoc_STR("name of the generator"), 0},
    {(char *) "__qualname__", (getter)__Pyx_Coroutine_get_qualname, (setter)__Pyx_Coroutine_set_qualname,
     (char*) PyDoc_STR("qualified name of the generator"), 0},
    {0, 0, 0, 0, 0}
};
static PyTypeObject __pyx_GeneratorType_type = {
    PyVarObject_HEAD_INIT(0, 0)
    "generator",
    sizeof(__pyx_CoroutineObject),
    0,
    (destructor) __Pyx_Coroutine_dealloc,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_HAVE_FINALIZE,
    0,
    (traverseproc) __Pyx_Coroutine_traverse,
    0,
    0,
    offsetof(__pyx_CoroutineObject, gi_weakreflist),
    0,
    (iternextfunc) __Pyx_Generator_Next,
    __pyx_Generator_methods,
    __pyx_Generator_memberlist,
    __pyx_Generator_getsets,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
    0,
#if CYTHON_USE_TP_FINALIZE
    0,
#else
    __Pyx_Coroutine_del,
#endif
    0,
#if CYTHON_USE_TP_FINALIZE
    __Pyx_Coroutine_del,
#elif PY_VERSION_HEX >= 0x030400a1
    0,
#endif
#if PY_VERSION_HEX >= 0x030800b1
    0,
#endif
#if PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000
    0,
#endif
};
static int __pyx_Generator_init(void) {
    __pyx_GeneratorType_type.tp_getattro = __Pyx_PyObject_GenericGetAttrNoDict;
    __pyx_GeneratorType_type.tp_iter = PyObject_SelfIter;
    __pyx_GeneratorType = __Pyx_FetchCommonType(&__pyx_GeneratorType_type);
    if (unlikely(!__pyx_GeneratorType)) {
        return -1;
    }
    return 0;
}

/* CheckBinaryVersion */
  static int __Pyx_check_binary_version(void) {
    char ctversion[4], rtversion[4];
    PyOS_snprintf(ctversion, 4, "%d.%d", PY_MAJOR_VERSION, PY_MINOR_VERSION);
    PyOS_snprintf(rtversion, 4, "%s", Py_GetVersion());
    if (ctversion[0] != rtversion[0] || ctversion[2] != rtversion[2]) {
        char message[200];
        PyOS_snprintf(message, sizeof(message),
                      "compiletime version %s of module '%.100s' "
                      "does not match runtime version %s",
                      ctversion, __Pyx_MODULE_NAME, rtversion);
        return PyErr_WarnEx(NULL, message, 1);
    }
    return 0;
}

/* VoidPtrImport */
  #ifndef __PYX_HAVE_RT_ImportVoidPtr
#define __PYX_HAVE_RT_ImportVoidPtr
static int __Pyx_ImportVoidPtr(PyObject *module, const char *name, void **p, const char *sig) {
    PyObject *d = 0;
    PyObject *cobj = 0;
    d = PyObject_GetAttrString(module, (char *)"__pyx_capi__");
    if (!d)
        goto bad;
    cobj = PyDict_GetItemString(d, name);
    if (!cobj) {
        PyErr_Format(PyExc_ImportError,
            "%.200s does not export expected C variable %.200s",
                PyModule_GetName(module), name);
        goto bad;
    }
#if PY_VERSION_HEX >= 0x02070000
    if (!PyCapsule_IsValid(cobj, sig)) {
        PyErr_Format(PyExc_TypeError,
            "C variable %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
             PyModule_GetName(module), name, sig, PyCapsule_GetName(cobj));
        goto bad;
    }
    *p = PyCapsule_GetPointer(cobj, sig);
#else
    {const char *desc, *s1, *s2;
    desc = (const char *)PyCObject_GetDesc(cobj);
    if (!desc)
        goto bad;
    s1 = desc; s2 = sig;
    while (*s1 != '\0' && *s1 == *s2) { s1++; s2++; }
    if (*s1 != *s2) {
        PyErr_Format(PyExc_TypeError,
            "C variable %.200s.%.200s has wrong signature (expected %.500s, got %.500s)",
             PyModule_GetName(module), name, sig, desc);
        goto bad;
    }
    *p = PyCObject_AsVoidPtr(cobj);}
#endif
    if (!(*p))
        goto bad;
    Py_DECREF(d);
    return 0;
bad:
    Py_XDECREF(d);
    return -1;
}
#endif

/* InitStrings */
  static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
    while (t->p) {
        #if PY_MAJOR_VERSION < 3
        if (t->is_unicode) {
            *t->p = PyUnicode_DecodeUTF8(t->s, t->n - 1, NULL);
        } else if (t->intern) {
            *t->p = PyString_InternFromString(t->s);
        } else {
            *t->p = PyString_FromStringAndSize(t->s, t->n - 1);
        }
        #else
        if (t->is_unicode | t->is_str) {
            if (t->intern) {
                *t->p = PyUnicode_InternFromString(t->s);
            } else if (t->encoding) {
                *t->p = PyUnicode_Decode(t->s, t->n - 1, t->encoding, NULL);
            } else {
                *t->p = PyUnicode_FromStringAndSize(t->s, t->n - 1);
            }
        } else {
            *t->p = PyBytes_FromStringAndSize(t->s, t->n - 1);
        }
        #endif
        if (!*t->p)
            return -1;
        if (PyObject_Hash(*t->p) == -1)
            return -1;
        ++t;
    }
    return 0;
}

static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
    return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str));
}
static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {
    Py_ssize_t ignore;
    return __Pyx_PyObject_AsStringAndSize(o, &ignore);
}
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
#if !CYTHON_PEP393_ENABLED
static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
    char* defenc_c;
    PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);
    if (!defenc) return NULL;
    defenc_c = PyBytes_AS_STRING(defenc);
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
    {
        char* end = defenc_c + PyBytes_GET_SIZE(defenc);
        char* c;
        for (c = defenc_c; c < end; c++) {
            if ((unsigned char) (*c) >= 128) {
                PyUnicode_AsASCIIString(o);
                return NULL;
            }
        }
    }
#endif
    *length = PyBytes_GET_SIZE(defenc);
    return defenc_c;
}
#else
static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
    if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL;
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
    if (likely(PyUnicode_IS_ASCII(o))) {
        *length = PyUnicode_GET_LENGTH(o);
        return PyUnicode_AsUTF8(o);
    } else {
        PyUnicode_AsASCIIString(o);
        return NULL;
    }
#else
    return PyUnicode_AsUTF8AndSize(o, length);
#endif
}
#endif
#endif
static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
    if (
#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
            __Pyx_sys_getdefaultencoding_not_ascii &&
#endif
            PyUnicode_Check(o)) {
        return __Pyx_PyUnicode_AsStringAndSize(o, length);
    } else
#endif
#if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
    if (PyByteArray_Check(o)) {
        *length = PyByteArray_GET_SIZE(o);
        return PyByteArray_AS_STRING(o);
    } else
#endif
    {
        char* result;
        int r = PyBytes_AsStringAndSize(o, &result, length);
        if (unlikely(r < 0)) {
            return NULL;
        } else {
            return result;
        }
    }
}
static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject* x) {
   int is_true = x == Py_True;
   if (is_true | (x == Py_False) | (x == Py_None)) return is_true;
   else return PyObject_IsTrue(x);
}
static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject* x) {
    int retval;
    if (unlikely(!x)) return -1;
    retval = __Pyx_PyObject_IsTrue(x);
    Py_DECREF(x);
    return retval;
}
static PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) {
#if PY_MAJOR_VERSION >= 3
    if (PyLong_Check(result)) {
        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
                "__int__ returned non-int (type %.200s).  "
                "The ability to return an instance of a strict subclass of int "
                "is deprecated, and may be removed in a future version of Python.",
                Py_TYPE(result)->tp_name)) {
            Py_DECREF(result);
            return NULL;
        }
        return result;
    }
#endif
    PyErr_Format(PyExc_TypeError,
                 "__%.4s__ returned non-%.4s (type %.200s)",
                 type_name, type_name, Py_TYPE(result)->tp_name);
    Py_DECREF(result);
    return NULL;
}
static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
#if CYTHON_USE_TYPE_SLOTS
  PyNumberMethods *m;
#endif
  const char *name = NULL;
  PyObject *res = NULL;
#if PY_MAJOR_VERSION < 3
  if (likely(PyInt_Check(x) || PyLong_Check(x)))
#else
  if (likely(PyLong_Check(x)))
#endif
    return __Pyx_NewRef(x);
#if CYTHON_USE_TYPE_SLOTS
  m = Py_TYPE(x)->tp_as_number;
  #if PY_MAJOR_VERSION < 3
  if (m && m->nb_int) {
    name = "int";
    res = m->nb_int(x);
  }
  else if (m && m->nb_long) {
    name = "long";
    res = m->nb_long(x);
  }
  #else
  if (likely(m && m->nb_int)) {
    name = "int";
    res = m->nb_int(x);
  }
  #endif
#else
  if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) {
    res = PyNumber_Int(x);
  }
#endif
  if (likely(res)) {
#if PY_MAJOR_VERSION < 3
    if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) {
#else
    if (unlikely(!PyLong_CheckExact(res))) {
#endif
        return __Pyx_PyNumber_IntOrLongWrongResultType(res, name);
    }
  }
  else if (!PyErr_Occurred()) {
    PyErr_SetString(PyExc_TypeError,
                    "an integer is required");
  }
  return res;
}
static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject* b) {
  Py_ssize_t ival;
  PyObject *x;
#if PY_MAJOR_VERSION < 3
  if (likely(PyInt_CheckExact(b))) {
    if (sizeof(Py_ssize_t) >= sizeof(long))
        return PyInt_AS_LONG(b);
    else
        return PyInt_AsSsize_t(b);
  }
#endif
  if (likely(PyLong_CheckExact(b))) {
    #if CYTHON_USE_PYLONG_INTERNALS
    const digit* digits = ((PyLongObject*)b)->ob_digit;
    const Py_ssize_t size = Py_SIZE(b);
    if (likely(__Pyx_sst_abs(size) <= 1)) {
        ival = likely(size) ? digits[0] : 0;
        if (size == -1) ival = -ival;
        return ival;
    } else {
      switch (size) {
         case 2:
           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -2:
           if (8 * sizeof(Py_ssize_t) > 2 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case 3:
           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -3:
           if (8 * sizeof(Py_ssize_t) > 3 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((((size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case 4:
           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
             return (Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
         case -4:
           if (8 * sizeof(Py_ssize_t) > 4 * PyLong_SHIFT) {
             return -(Py_ssize_t) (((((((((size_t)digits[3]) << PyLong_SHIFT) | (size_t)digits[2]) << PyLong_SHIFT) | (size_t)digits[1]) << PyLong_SHIFT) | (size_t)digits[0]));
           }
           break;
      }
    }
    #endif
    return PyLong_AsSsize_t(b);
  }
  x = PyNumber_Index(b);
  if (!x) return -1;
  ival = PyInt_AsSsize_t(x);
  Py_DECREF(x);
  return ival;
}
static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b) {
  return b ? __Pyx_NewRef(Py_True) : __Pyx_NewRef(Py_False);
}
static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t ival) {
    return PyInt_FromSize_t(ival);
}


#endif /* Py_PYTHON_H */
