Bump engine submodule and move batch flags and meshes to ctypes.
This commit is contained in:
parent
573c4bf326
commit
cdf13f50a7
2
engine
2
engine
@ -1 +1 @@
|
|||||||
Subproject commit 84ea17f1cca7d4d9c27be716c38e19f70335fa8a
|
Subproject commit abf1e87a3677cc01543f295df588cfa5c54db4e4
|
@ -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))
|
||||||
|
Loading…
Reference in New Issue
Block a user