Ajout du GUI
This commit is contained in:
74
kivy/graphics/memory.pxi
Normal file
74
kivy/graphics/memory.pxi
Normal file
@@ -0,0 +1,74 @@
|
||||
from cpython.array cimport array, clone
|
||||
|
||||
|
||||
'''
|
||||
These functions below, take a data element; if the data implements the
|
||||
buffer interface, the data is returned unchanged, otherwise, a python
|
||||
array is created from the data and returned.
|
||||
|
||||
in both cases, the second parameter is initialized with a pointer to the
|
||||
starting address of the returned buffer
|
||||
|
||||
The return value is a tuple, of (original data, array), where in the first
|
||||
case, array is None.
|
||||
|
||||
The method used below (a untyped python array + array.data.as_floats pointer)
|
||||
results in the fastest list to array creation and usage. Even malloc isn't
|
||||
faster. Note, using memoryview (which we avoided for this case) is relatively
|
||||
slow in cython.
|
||||
|
||||
When the user passes in a memoryview type, we have no choice but to use the
|
||||
memoryview passed in, though.
|
||||
'''
|
||||
cdef inline _ensure_float_view(data, float **f):
|
||||
cdef array arr
|
||||
cdef list src
|
||||
cdef int i
|
||||
cdef float [::1] memview
|
||||
# do if/else instead of straight try/except because its faster for list
|
||||
if not isinstance(data, (tuple, list)):
|
||||
try:
|
||||
memview = data
|
||||
f[0] = &memview[0]
|
||||
return data, None
|
||||
except Exception as e:
|
||||
import traceback; traceback.print_exc()
|
||||
src = list(data)
|
||||
arr = clone(array('f'), len(src), False)
|
||||
f[0] = arr.data.as_floats
|
||||
for i in range(len(src)):
|
||||
f[0][i] = src[i]
|
||||
else:
|
||||
src = list(data)
|
||||
arr = clone(array('f'), len(src), False)
|
||||
f[0] = arr.data.as_floats
|
||||
for i in range(len(src)):
|
||||
f[0][i] = src[i]
|
||||
return src, arr
|
||||
|
||||
|
||||
cdef inline _ensure_ushort_view(data, unsigned short **f):
|
||||
cdef array arr
|
||||
cdef list src
|
||||
cdef int i
|
||||
cdef unsigned short [::1] memview
|
||||
# do if/else instead of straight try/except because its faster for list
|
||||
if not isinstance(data, (tuple, list)):
|
||||
try:
|
||||
memview = data
|
||||
f[0] = &memview[0]
|
||||
return data, None
|
||||
except:
|
||||
src = list(data)
|
||||
arr = clone(array('H'), len(src), False)
|
||||
f[0] = arr.data.as_ushorts
|
||||
for i in range(len(src)):
|
||||
f[0][i] = src[i]
|
||||
else:
|
||||
src = list(data)
|
||||
arr = clone(array('H'), len(src), False)
|
||||
f[0] = arr.data.as_ushorts
|
||||
for i in range(len(src)):
|
||||
f[0][i] = src[i]
|
||||
return src, arr
|
||||
|
||||
Reference in New Issue
Block a user