Cleanup pointers types and addrs.

This commit is contained in:
Roz K 2022-12-25 04:05:44 +01:00
parent 026ead0b33
commit e286d33c35
Signed by: roz
GPG Key ID: 51FBF4E483E1C822

View File

@ -27,18 +27,18 @@ def _flag(x):
def buffer(type, size): def buffer(type, size):
return (type * size)() return (type * size)()
def _voidp(x): def _void_addr(x):
return x.buffer_info()[0] return x.buffer_info()[0]
def _ubytep(x): def _ubyte_addr(x):
assert x.typecode == 'B' assert x.typecode == 'B'
return x.buffer_info()[0] return x.buffer_info()[0]
def _ushortp(x): def _ushort_addr(x):
assert x.typecode == 'H' assert x.typecode == 'H'
return x.buffer_info()[0] return x.buffer_info()[0]
def _floatp(x): def _float_addr(x):
assert x.typecode == 'f' assert x.typecode == 'f'
return x.buffer_info()[0] return x.buffer_info()[0]
@ -67,10 +67,10 @@ class mat3(ctypes.Structure):
class mat4(ctypes.Structure): class mat4(ctypes.Structure):
_fields_ = ('x', vec4), ('y', vec4), ('z', vec4), ('w', vec4) _fields_ = ('x', vec4), ('y', vec4), ('z', vec4), ('w', vec4)
_vec3p = ctypes.POINTER(vec3) _vec3_p = ctypes.POINTER(vec3)
_vec4p = ctypes.POINTER(vec4) _vec4_p = ctypes.POINTER(vec4)
_mat3p = ctypes.POINTER(mat3) _mat3_p = ctypes.POINTER(mat3)
_mat4p = ctypes.POINTER(mat4) _mat4_p = ctypes.POINTER(mat4)
vec3_right = vec3(1.0, 0.0, 0.0) vec3_right = vec3(1.0, 0.0, 0.0)
vec3_forward = vec3(0.0, 1.0, 0.0) vec3_forward = vec3(0.0, 1.0, 0.0)
@ -78,39 +78,38 @@ vec3_up = vec3(0.0, 0.0, 1.0)
vec3_rotate = _engine.rk_vec3_rotate vec3_rotate = _engine.rk_vec3_rotate
vec3_rotate.argtypes = ( vec3_rotate.argtypes = (
_vec3p, # ret _vec3_p, # ret
_vec3p, # vec3 _vec3_p, # vec3
_vec3p, # axis _vec3_p, # axis
ctypes.c_float) # angle ctypes.c_float) # angle
vec3_mul_vec3 = _engine.rk_vec3_mul_vec3 vec3_mul_vec3 = _engine.rk_vec3_mul_vec3
vec3_mul_vec3.argtypes = ( vec3_mul_vec3.argtypes = (
_vec3p, # ret _vec3_p, # ret
_vec3p, # a _vec3_p, # a
_vec3p) # b _vec3_p) # b
mat3_rotation = _engine.rk_mat3_rotation mat3_rotation = _engine.rk_mat3_rotation
mat3_rotation.argtypes = ( mat3_rotation.argtypes = (
_mat3p, # ret _mat3_p, # ret
_vec3p, # axis _vec3_p, # axis
ctypes.c_float) # angle ctypes.c_float) # angle
mat3_mul_vec3 = _engine.rk_mat3_mul_vec3 mat3_mul_vec3 = _engine.rk_mat3_mul_vec3
mat3_mul_vec3.argtypes = ( mat3_mul_vec3.argtypes = (
_vec3p, # ret _vec3_p, # ret
_mat3p, # a _mat3_p, # a
_vec3p) # b _vec3_p) # b
mat3_mul_mat3 = _engine.rk_mat3_mul_mat3 mat3_mul_mat3 = _engine.rk_mat3_mul_mat3
mat3_mul_mat3.argtypes = ( mat3_mul_mat3.argtypes = (
_mat3p, # ret _mat3_p, # ret
_mat3p, # a _mat3_p, # a
_mat3p) # b _mat3_p) # b
mat4_projection = _engine.rk_mat4_projection mat4_projection = _engine.rk_mat4_projection
mat4_projection.argtypes = ( mat4_projection.argtypes = (
_mat4p, # ret _mat4_p, # ret
ctypes.c_float, # hfov ctypes.c_float, # hfov
ctypes.c_float, # ratio ctypes.c_float, # ratio
ctypes.c_float, # near ctypes.c_float, # near
@ -118,28 +117,28 @@ mat4_projection.argtypes = (
mat4_lookat = _engine.rk_mat4_lookat mat4_lookat = _engine.rk_mat4_lookat
mat4_lookat.argtypes = ( mat4_lookat.argtypes = (
_mat4p, # ret _mat4_p, # ret
_vec3p, # position _vec3_p, # position
_vec3p) # lookat _vec3_p) # lookat
mat4_mul_vec3 = _engine.rk_mat4_mul_vec3 mat4_mul_vec3 = _engine.rk_mat4_mul_vec3
mat4_mul_vec3.argtypes = ( mat4_mul_vec3.argtypes = (
_vec3p, # ret _vec3_p, # ret
_mat4p, # a _mat4_p, # a
_vec3p, # b _vec3_p, # b
ctypes.c_float) # w ctypes.c_float) # w
mat4_mul_vec4 = _engine.rk_mat4_mul_vec4 mat4_mul_vec4 = _engine.rk_mat4_mul_vec4
mat4_mul_vec4.argtypes = ( mat4_mul_vec4.argtypes = (
_vec4p, # ret _vec4_p, # ret
_mat4p, # a _mat4_p, # a
_vec4p) # b _vec4_p) # b
mat4_mul_mat4 = _engine.rk_mat4_mul_mat4 mat4_mul_mat4 = _engine.rk_mat4_mul_mat4
mat4_mul_mat4.argtypes = ( mat4_mul_mat4.argtypes = (
_mat4p, # ret _mat4_p, # ret
_mat4p, # a _mat4_p, # a
_mat4p) # b _mat4_p) # b
# display.hpp # display.hpp
@ -203,9 +202,9 @@ _load_shader = _engine.rk_load_shader
_load_shader.restype = ctypes.c_void_p _load_shader.restype = ctypes.c_void_p
_load_shader.argtypes = ( _load_shader.argtypes = (
ctypes.c_uint, # vert_nlines ctypes.c_uint, # vert_nlines
ctypes.c_void_p, # vert_lines ctypes.POINTER(ctypes.c_char_p), # vert_lines
ctypes.c_uint, # frag_nlines ctypes.c_uint, # frag_nlines
ctypes.c_void_p) # frag_lines ctypes.POINTER(ctypes.c_char_p)) # frag_lines
def load_shader(vert_lines, frag_lines): def load_shader(vert_lines, frag_lines):
vert_nlines = len(vert_lines) vert_nlines = len(vert_lines)
@ -214,9 +213,7 @@ def load_shader(vert_lines, frag_lines):
frag_nlines = len(frag_lines) frag_nlines = len(frag_lines)
frag_type = ctypes.c_char_p * frag_nlines frag_type = ctypes.c_char_p * frag_nlines
frag_lines = frag_type(*map(ctypes.c_char_p, frag_lines)) frag_lines = frag_type(*map(ctypes.c_char_p, frag_lines))
return _load_shader( return _load_shader(vert_nlines, vert_lines, frag_nlines, frag_lines)
vert_nlines, ctypes.addressof(vert_lines),
frag_nlines, ctypes.addressof(frag_lines))
resolve_input = _engine.rk_resolve_input resolve_input = _engine.rk_resolve_input
resolve_input.restype = ctypes.c_void_p resolve_input.restype = ctypes.c_void_p
@ -243,7 +240,7 @@ _create_texture.argtypes = (
def create_texture(format, width, height, nlevels, flags, pixels): def create_texture(format, width, height, nlevels, flags, pixels):
assert pixels.typecode == TEXTURE_FORMAT_TYPECODE[format] assert pixels.typecode == TEXTURE_FORMAT_TYPECODE[format]
assert len(pixels) == width * height * max(1, nlevels) * TEXTURE_FORMAT_NELEMS[format] assert len(pixels) == width * height * max(1, nlevels) * TEXTURE_FORMAT_NELEMS[format]
return _create_texture(format, width, height, nlevels, flags, _voidp(pixels)) return _create_texture(format, width, height, nlevels, flags, _void_addr(pixels))
_create_triangles = _engine.rk_create_triangles _create_triangles = _engine.rk_create_triangles
_create_triangles.restype = ctypes.c_void_p _create_triangles.restype = ctypes.c_void_p
@ -253,7 +250,7 @@ _create_triangles.argtypes = (
def create_triangles(vertices): def create_triangles(vertices):
assert len(vertices) % 9 == 0 assert len(vertices) % 9 == 0
return _create_triangles(len(vertices) // 3, _floatp(vertices)) return _create_triangles(len(vertices) // 3, _float_addr(vertices))
_create_vertices = _engine.rk_create_vertices _create_vertices = _engine.rk_create_vertices
_create_vertices.restype = ctypes.c_void_p _create_vertices.restype = ctypes.c_void_p
@ -265,7 +262,7 @@ _create_vertices.argtypes = (
ctypes.c_void_p) # indices ctypes.c_void_p) # indices
def create_vertices(format, nvertices, vertices, indices): def create_vertices(format, nvertices, vertices, indices):
return _create_vertices(format, nvertices, _ubytep(vertices), len(indices), _ushortp(indices)) return _create_vertices(format, nvertices, _ubyte_addr(vertices), len(indices), _ushort_addr(indices))
create_batch = _engine.rk_create_batch create_batch = _engine.rk_create_batch
create_batch.restype = ctypes.c_void_p create_batch.restype = ctypes.c_void_p
@ -288,22 +285,22 @@ set_input_float.argtypes = (
set_input_vec3 = _engine.rk_set_input_vec3 set_input_vec3 = _engine.rk_set_input_vec3
set_input_vec3.argtypes = ( set_input_vec3.argtypes = (
ctypes.c_void_p, # input ctypes.c_void_p, # input
_vec3p) # value _vec3_p) # value
set_input_mat3 = _engine.rk_set_input_mat3 set_input_mat3 = _engine.rk_set_input_mat3
set_input_mat3.argtypes = ( set_input_mat3.argtypes = (
ctypes.c_void_p, # input ctypes.c_void_p, # input
_mat3p) # value _mat3_p) # value
set_input_mat4 = _engine.rk_set_input_mat4 set_input_mat4 = _engine.rk_set_input_mat4
set_input_mat4.argtypes = ( set_input_mat4.argtypes = (
ctypes.c_void_p, # input ctypes.c_void_p, # input
_mat4p) # value _mat4_p) # value
set_param_vec3 = _engine.rk_set_param_vec3 set_param_vec3 = _engine.rk_set_param_vec3
set_param_vec3.argtypes = ( set_param_vec3.argtypes = (
ctypes.c_uint, # layout ctypes.c_uint, # layout
_vec3p) # value _vec3_p) # value
select_texture = _engine.rk_select_texture select_texture = _engine.rk_select_texture
select_texture.argtypes = ( select_texture.argtypes = (