From 0003d5bd4be9cb58e47d58780328410ab43153b9 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Fri, 7 Apr 2023 14:46:08 -0500 Subject: [PATCH] chore(gx): tweak style in GxPrimVertexPtr --- src/gx/Buffer.cpp | 45 ++++++++++++++++++++++++--------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/src/gx/Buffer.cpp b/src/gx/Buffer.cpp index 29a76fe..94dd527 100644 --- a/src/gx/Buffer.cpp +++ b/src/gx/Buffer.cpp @@ -242,6 +242,7 @@ void GxPrimVertexPtr(uint32_t vertexCount, const C3Vector* pos, uint32_t posStri if (pos && normal && color) { format = GxVBF_PNC; + if (tex0 && tex1) { format = GxVBF_PNCT2; } else if (tex0) { @@ -249,6 +250,7 @@ void GxPrimVertexPtr(uint32_t vertexCount, const C3Vector* pos, uint32_t posStri } } else if (pos && normal) { format = GxVBF_PN; + if (tex0 && tex1) { format = GxVBF_PNT2; } else if (tex0) { @@ -256,6 +258,7 @@ void GxPrimVertexPtr(uint32_t vertexCount, const C3Vector* pos, uint32_t posStri } } else if (pos && color) { format = GxVBF_PC; + if (tex0 && tex1) { format = GxVBF_PCT2; } else if (tex0) { @@ -281,6 +284,7 @@ void GxPrimVertexPtr(uint32_t vertexCount, const C3Vector* pos, uint32_t posStri auto bufPos = reinterpret_cast(bufData + GxVertexAttribOffset(format, GxVA_Position)); auto bufPosStride = vertexSize; + auto bufNormal = reinterpret_cast(bufData + GxVertexAttribOffset(format, GxVA_Normal)); auto bufNormalStride = vertexSize; if (!normal) { @@ -289,6 +293,7 @@ void GxPrimVertexPtr(uint32_t vertexCount, const C3Vector* pos, uint32_t posStri bufNormal = &emptyNormal; bufNormalStride = 0; } + auto bufColor = reinterpret_cast(bufData + GxVertexAttribOffset(format, GxVA_Color0)); auto bufColorStride = vertexSize; if (!color) { @@ -297,6 +302,7 @@ void GxPrimVertexPtr(uint32_t vertexCount, const C3Vector* pos, uint32_t posStri bufColor = &emptyColor; bufColorStride = 0; } + auto bufTex0 = reinterpret_cast(bufData + GxVertexAttribOffset(format, GxVA_TexCoord0)); auto bufTex0Stride = vertexSize; if (!tex0) { @@ -305,6 +311,7 @@ void GxPrimVertexPtr(uint32_t vertexCount, const C3Vector* pos, uint32_t posStri bufTex0 = &emptyTex0; bufTex0Stride = 0; } + auto bufTex1 = reinterpret_cast(bufData + GxVertexAttribOffset(format, GxVA_TexCoord1)); auto bufTex1Stride = vertexSize; if (!tex1) { @@ -314,31 +321,27 @@ void GxPrimVertexPtr(uint32_t vertexCount, const C3Vector* pos, uint32_t posStri bufTex1Stride = 0; } - if (vertexCount != 0) { - C3Vector* bufPos = reinterpret_cast(reinterpret_cast(bufData) + uintptr_t(GxVertexAttribOffset(format, GxVA_Position))); + for (uint32_t i = 0; i < vertexCount; i++) { + *bufPos = *pos; + pos = reinterpret_cast(reinterpret_cast(pos) + posStride); + bufPos = reinterpret_cast(reinterpret_cast(bufPos) + bufPosStride); - for (uint32_t i = 0; i < vertexCount; i++) { - *bufPos = *pos; - pos = reinterpret_cast(reinterpret_cast(pos) + posStride); - bufPos = reinterpret_cast(reinterpret_cast(bufPos) + bufPosStride); + *bufNormal = *normal; + normal = reinterpret_cast(reinterpret_cast(normal) + normalStride); + bufNormal = reinterpret_cast(reinterpret_cast(bufNormal) + bufNormalStride); - *bufNormal = *normal; - normal = reinterpret_cast(reinterpret_cast(normal) + normalStride); - bufNormal = reinterpret_cast(reinterpret_cast(bufNormal) + bufNormalStride); - *bufColor = *color; + *bufColor = *color; + GxFormatColor(*bufColor); + color = reinterpret_cast(reinterpret_cast(color) + colorStride); + bufColor = reinterpret_cast(reinterpret_cast(bufColor) + bufColorStride); - GxFormatColor(*bufColor); - color = reinterpret_cast(reinterpret_cast(color) + colorStride); - bufColor = reinterpret_cast(reinterpret_cast(bufColor) + bufColorStride); + *bufTex0 = *tex0; + tex0 = reinterpret_cast(reinterpret_cast(tex0) + tex0Stride); + bufTex0 = reinterpret_cast(reinterpret_cast(bufTex0) + bufTex0Stride); - *bufTex0 = *tex0; - tex0 = reinterpret_cast(reinterpret_cast(tex0) + tex0Stride); - bufTex0 = reinterpret_cast(reinterpret_cast(bufTex0) + bufTex0Stride); - - *bufTex1 = *tex1; - tex1 = reinterpret_cast(reinterpret_cast(tex1) + tex1Stride); - bufTex1 = reinterpret_cast(reinterpret_cast(bufTex1) + bufTex1Stride); - } + *bufTex1 = *tex1; + tex1 = reinterpret_cast(reinterpret_cast(tex1) + tex1Stride); + bufTex1 = reinterpret_cast(reinterpret_cast(bufTex1) + bufTex1Stride); } GxBufUnlock(buf, vertexSize * vertexCount);