aboutsummaryrefslogtreecommitdiffstats
path: root/src/renderer/RenderBuffer.cpp
diff options
context:
space:
mode:
authorSergeanur <s.anureev@yandex.ua>2021-07-18 00:03:57 +0300
committerSergeanur <s.anureev@yandex.ua>2021-07-18 00:03:57 +0300
commitc937bdbfea8f522d14d7a41f24372bddf5bdafcc (patch)
treeeb8f97f6cf9fac31d7ab90388af232d51cc9c137 /src/renderer/RenderBuffer.cpp
parentc8cb1ed013a880a49f83859757af942ca8bbac19 (diff)
render -> renderer (original name)
Diffstat (limited to 'src/renderer/RenderBuffer.cpp')
-rw-r--r--src/renderer/RenderBuffer.cpp52
1 files changed, 52 insertions, 0 deletions
diff --git a/src/renderer/RenderBuffer.cpp b/src/renderer/RenderBuffer.cpp
new file mode 100644
index 00000000..687cc76b
--- /dev/null
+++ b/src/renderer/RenderBuffer.cpp
@@ -0,0 +1,52 @@
+#include "common.h"
+
+#include "RenderBuffer.h"
+
+int32 TempBufferVerticesStored;
+int32 TempBufferIndicesStored;
+
+VertexBufferUnion TempVertexBuffer;
+RwImVertexIndex TempBufferRenderIndexList[TEMPBUFFERINDEXSIZE];
+
+int RenderBuffer::VerticesToBeStored;
+int RenderBuffer::IndicesToBeStored;
+
+void
+RenderBuffer::ClearRenderBuffer(void)
+{
+ TempBufferVerticesStored = 0;
+ TempBufferIndicesStored = 0;
+}
+
+void
+RenderBuffer::StartStoring(int numIndices, int numVertices, RwImVertexIndex **indexStart, RwIm3DVertex **vertexStart)
+{
+ if(TempBufferIndicesStored + numIndices >= TEMPBUFFERINDEXSIZE)
+ RenderStuffInBuffer();
+ if(TempBufferVerticesStored + numVertices >= TEMPBUFFERVERTSIZE)
+ RenderStuffInBuffer();
+ *indexStart = &TempBufferRenderIndexList[TempBufferIndicesStored];
+ *vertexStart = &TempBufferRenderVertices[TempBufferVerticesStored];
+ IndicesToBeStored = numIndices;
+ VerticesToBeStored = numVertices;
+}
+
+void
+RenderBuffer::StopStoring(void)
+{
+ int i;
+ for(i = TempBufferIndicesStored; i < TempBufferIndicesStored+IndicesToBeStored; i++)
+ TempBufferRenderIndexList[i] += TempBufferVerticesStored;
+ TempBufferIndicesStored += IndicesToBeStored;
+ TempBufferVerticesStored += VerticesToBeStored;
+}
+
+void
+RenderBuffer::RenderStuffInBuffer(void)
+{
+ if(TempBufferVerticesStored && RwIm3DTransform(TempBufferRenderVertices, TempBufferVerticesStored, nil, rwIM3D_VERTEXUV)){
+ RwIm3DRenderIndexedPrimitive(rwPRIMTYPETRILIST, TempBufferRenderIndexList, TempBufferIndicesStored);
+ RwIm3DEnd();
+ }
+ ClearRenderBuffer();
+}