Mercurial > games > semicongine
changeset 1437:e54ef155de10
add: check whether submitted vertex-attribute-arrays have all the same length
author | sam <sam@basx.dev> |
---|---|
date | Tue, 21 Jan 2025 22:00:11 +0700 |
parents | cf0bae787044 |
children | 9a522527c01f |
files | semicongine/rendering/renderer.nim |
diffstat | 1 files changed, 17 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/semicongine/rendering/renderer.nim Mon Jan 20 23:12:30 2025 +0700 +++ b/semicongine/rendering/renderer.nim Tue Jan 21 22:00:11 2025 +0700 @@ -1,4 +1,5 @@ import std/typetraits +import std/strformat import std/macros import std/logging @@ -284,16 +285,30 @@ for meshName, meshValue in mesh.fieldPairs: when meshName == shaderAttributeName: debug(" vertex attr: ", shaderAttributeName) + assert meshValue.buffer.vk.Valid, + "Mesh vertex-attribute '{TMesh}.{shaderAttributeName}' has no valid buffer (encountered while rendering with '{TShader}')" vertexBuffers.add meshValue.buffer.vk vertexBuffersOffsets.add meshValue.offset - elementCount = meshValue.data.len.uint32 + if elementCount == 0: + elementCount = meshValue.data.len.uint32 + else: + assert meshValue.data.len.uint32 == elementCount, + "Mesh attribute '" & $(TMesh) & "." & meshName & "' has length " & + $(meshValue.data.len) & " but previous attributes had length " & + $elementCount elif hasCustomPragma(shaderAttribute, InstanceAttribute): for instanceName, instanceValue in instances.fieldPairs: when instanceName == shaderAttributeName: debug(" instnc attr: ", shaderAttributeName) vertexBuffers.add instanceValue.buffer.vk vertexBuffersOffsets.add instanceValue.offset - instanceCount = instanceValue.data.len.uint32 + if instanceCount == 1: + instanceCount = meshValue.data.len.uint32 + else: + assert instanceValue.data.len.uint32 == instanceCount, + "Mesh instance attribute '" & $(TMesh) & "." & instanceName & "' has length " & + $(instanceValue.data.len) & " but previous attributes had length " & + $instanceCount if vertexBuffers.len > 0: vkCmdBindVertexBuffers(