Bump engine submodule and move batch flags and meshes to ctypes.

This commit is contained in:
Roz K 2022-12-20 14:40:17 +01:00
parent 573c4bf326
commit cdf13f50a7
Signed by: roz
GPG Key ID: 51FBF4E483E1C822
2 changed files with 11 additions and 9 deletions

2
engine

@ -1 +1 @@
Subproject commit 84ea17f1cca7d4d9c27be716c38e19f70335fa8a Subproject commit abf1e87a3677cc01543f295df588cfa5c54db4e4

View File

@ -13,34 +13,36 @@
# You should have received a copy of the GNU Affero General Public License # You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>. # along with this program. If not, see <http://www.gnu.org/licenses/>.
from ctypes import POINTER from ctypes import c_ubyte, c_uint, POINTER
from array import array from array import array
from engine import ( from engine import (
INSTANCE_FLAG_SPAWNED, BATCH_MAX_SIZE, create_batch, draw_batch, destroy_batch) INSTANCE_FLAG_SPAWNED, BATCH_MAX_SIZE, create_batch, draw_batch, destroy_batch)
class Batch: class Batch:
__slots__ = '_batch', '_paramsp', 'max_size', 'flags', 'meshes', 'params' __slots__ = '_batch', '_paramsp', 'size', 'max_size', 'flags', 'meshes', 'params'
def __init__(self, vertices, max_size, params_format, params_type): def __init__(self, vertices, max_size, params_format, params_type):
assert max_size <= BATCH_MAX_SIZE assert max_size <= BATCH_MAX_SIZE
self._batch = create_batch(vertices, max_size, params_format) self._batch = create_batch(vertices, max_size, params_format)
self._paramsp = POINTER(params_type) self._paramsp = POINTER(params_type)
self.size = 0
self.max_size = max_size self.max_size = max_size
self.flags = array('B') self.flags = (c_ubyte * max_size)()
self.meshes = array('I') self.meshes = (c_uint * max_size)()
self.params = (params_type * max_size)() self.params = (params_type * max_size)()
def __del__(self): def __del__(self):
destroy_batch(self._batch) destroy_batch(self._batch)
def append(self, flags, mesh, params): def append(self, flags, mesh, params):
index = len(self.flags) index = self.size
assert index < self.max_size assert index < self.max_size
self.flags.append(flags | INSTANCE_FLAG_SPAWNED) self.flags[index] = flags | INSTANCE_FLAG_SPAWNED
self.meshes.append(mesh) self.meshes[index] = mesh
self.params[index] = params self.params[index] = params
self.size += 1
return index return index
def draw(self): def draw(self):
draw_batch(self._batch, self.flags, self.meshes, self._paramsp(self.params)) draw_batch(self._batch, self.size, self.flags, self.meshes, self._paramsp(self.params))