Compare commits

...

4 Commits

Author SHA1 Message Date
roz 7ed23a5d5f Terminate on key release. 2022-12-23 10:25:37 +01:00
roz 34277274a3 Use the new buffer method to create ctypes arrays. 2022-12-23 10:24:21 +01:00
roz 858dcd95bc Bump engine submodule. 2022-12-23 10:23:32 +01:00
roz 3e83c636ee A little bit of clenaup. 2022-12-23 06:36:24 +01:00
3 changed files with 33 additions and 20 deletions
+1 -1
Submodule engine updated: ccce6c5d83...61cfdbccf3
+4 -5
View File
@@ -14,10 +14,9 @@
# along with this program. If not, see <http://www.gnu.org/licenses/>.
from ctypes import c_ubyte, c_uint, POINTER
from array import array
from engine import (
INSTANCE_FLAG_SPAWNED, BATCH_MAX_SIZE, create_batch, draw_batch, destroy_batch)
INSTANCE_FLAG_SPAWNED, BATCH_MAX_SIZE, buffer, create_batch, draw_batch, destroy_batch)
class Batch:
__slots__ = '_batch', '_paramsp', 'size', 'max_size', 'flags', 'meshes', 'params'
@@ -28,9 +27,9 @@ class Batch:
self._paramsp = POINTER(params_type)
self.size = 0
self.max_size = max_size
self.flags = (c_ubyte * max_size)()
self.meshes = (c_uint * max_size)()
self.params = (params_type * max_size)()
self.flags = buffer(c_ubyte, max_size)
self.meshes = buffer(c_uint, max_size)
self.params = buffer(params_type, max_size)
def __del__(self):
destroy_batch(self._batch)
+28 -14
View File
@@ -20,12 +20,12 @@ from ctypes import Structure
from engine import *
from game import math
from game import generator
from game import shader
from game import resources
from game import batch
from game import triangles
from game import sea
from game.generator import Generator
from game.resources import RuntimeArchive
from game.batch import Batch
from game.camera import Camera
from game.environment import Environment
@@ -42,9 +42,9 @@ sun_power = 1.0
def main():
print("Generating terrain...")
gen_begin = time.process_time()
generated = generator.Generator(256)
gen_end = time.process_time()
gen_begin = time.thread_time()
generated = Generator(256)
gen_end = time.thread_time()
print("Done: ", round(gen_end - gen_begin, 2), "seconds")
print("Initializing...")
@@ -66,7 +66,7 @@ def main():
tests_normalmap_sampler = resolve_input(tests_shader, b'u_normal_sampler')
print("Loading resources...")
archive = resources.RuntimeArchive.load('data/rk_island.rkar')
archive = RuntimeArchive.load('data/rk_island.rkar')
print("Building tiles...")
tiles_texture = archive.get_texture('tiles')
@@ -79,7 +79,7 @@ def main():
rock_model = archive.get_model('rock')
mud_model = archive.get_model('mud')
lava_model = archive.get_model('lava')
terrain_batch = batch.Batch(tiles_vertices, generated.size ** 2, params_format(PARAM_FORMAT_VEC3_SHORT), vec3)
terrain_batch = Batch(tiles_vertices, generated.size ** 2, params_format(PARAM_FORMAT_VEC3_SHORT), vec3)
#TODO: generator & for real
vc = generated.volcano_c
@@ -112,7 +112,7 @@ def main():
model = rock_model
model.spawn(terrain_batch, vec3(float(((mx - 128) * 8) + 4), float(((127 - my) * 8) + 4), 0.0))
class testsparams(Structure):
class TestsParams(Structure):
_fields_ = ('translation', vec3), ('orientation', vec3)
tests_texture = archive.get_texture('tests')
@@ -121,14 +121,14 @@ def main():
blob_model = archive.get_model('blob')
cube_model = archive.get_model('cube')
clouds_model = archive.get_model('clouds')
tests_batch = batch.Batch(tests_vertices, 3,
params_format(PARAM_FORMAT_VEC3_FLOAT, PARAM_FORMAT_VEC3_INT10 | PARAM_FORMAT_NORMALIZE), testsparams)
tests_batch = Batch(tests_vertices, 3,
params_format(PARAM_FORMAT_VEC3_FLOAT, PARAM_FORMAT_VEC3_INT10 | PARAM_FORMAT_NORMALIZE), TestsParams)
blob_spawn_translation = vec3(-100.0, -500.0, 0.0)
cube_spawn_translation = vec3(100.0, -500.0, 0.0)
blob_id = blob_model.spawn(tests_batch,
testsparams(blob_spawn_translation, vec3(*math.vec3_normalize((sun_direction[0], sun_direction[1], 0.0)))))
cube_id = cube_model.spawn(tests_batch, testsparams(cube_spawn_translation, vec3_forward))
clouds_id = clouds_model.spawn(tests_batch, testsparams(vec3(0.0, 0.0, 32.0), vec3_forward))
TestsParams(blob_spawn_translation, vec3(*math.vec3_normalize((sun_direction[0], sun_direction[1], 0.0)))))
cube_id = cube_model.spawn(tests_batch, TestsParams(cube_spawn_translation, vec3_forward))
clouds_id = clouds_model.spawn(tests_batch, TestsParams(vec3(0.0, 0.0, 32.0), vec3_forward))
sea_phase = resolve_input(sky_shader, b'u_sea_phase')
sea_polar_textures = sea.load_polar_textures(('data/sea_bump1.png', 'data/sea_bump2.png'))
@@ -154,6 +154,7 @@ def main():
clouds_orientation = tests_batch.params[clouds_id].orientation
print("Running...")
events = buffer(Event, 16)
start_time = time.monotonic()
current_time = 0.0
frame_min = 10000.0
@@ -236,6 +237,19 @@ def main():
frame_max = max(frame_max, frame_ms)
frame_avg += frame_ms
perf_count += 1
stop = False
while True:
nevents = consume_events(events, len(events))
if not nevents:
break
for event in events[:nevents]:
if event.type == EVENT_KEY_RELEASE:
print("EVENT_KEY_RELEASE:", event.data.key.keycode)
stop = True
if stop:
break
except KeyboardInterrupt:
pass