summaryrefslogtreecommitdiff
path: root/2d/softbody
diff options
context:
space:
mode:
authormattkae <mattkae@protonmail.com>2022-01-22 13:57:55 -0500
committermattkae <mattkae@protonmail.com>2022-01-22 13:57:55 -0500
commit3f3d1ed1cba61015aa47a6ad9812ae0d30316cc5 (patch)
treeba6f5d8aa5114de81f331828ef877a6f4ddebfda /2d/softbody
parent19defa9be56588803bbae0f38e2f271a91b9d690 (diff)
(mkosarek) Added dots to the spring bodied rectangle
Diffstat (limited to '2d/softbody')
-rw-r--r--2d/softbody/softbody_2/SpringRectangle.h31
-rw-r--r--2d/softbody/softbody_2/dist/output.js9
-rwxr-xr-x2d/softbody/softbody_2/dist/output.wasmbin33390 -> 36383 bytes
-rw-r--r--2d/softbody/softbody_2/main.cpp1
4 files changed, 37 insertions, 4 deletions
diff --git a/2d/softbody/softbody_2/SpringRectangle.h b/2d/softbody/softbody_2/SpringRectangle.h
index b45bd3c..bc8eed8 100644
--- a/2d/softbody/softbody_2/SpringRectangle.h
+++ b/2d/softbody/softbody_2/SpringRectangle.h
@@ -2,24 +2,33 @@
#include "../../../shared_cpp/types.h"
#include "../../../shared_cpp/mathlib.h"
+struct SoftbodyUpdateVertexData {
+ Vector2 position;
+};
struct SoftbodyRectangle {
float32 width = 100;
float32 height = 100;
+ Vector2 position = Vector2(300, 400);
+
// Represents the density of springs that will be in the rectangle.
int32 springDensity = 10;
-
- int32 numSubdivisions = 0;
+ SoftbodyUpdateVertexData* updateData = NULL;
Mesh2d mesh;
+ Mesh2d pointsMesh;
+
+ Vertex2d* pointsVertices = NULL;
void load(Renderer2d* renderer) {
int32 numVertices = springDensity * springDensity; // Each subdivision is a square.
int32 numIndices = 6 * ((springDensity - 1) * (springDensity - 1));
auto vertices = new Vertex2d[numVertices];
+ updateData = new SoftbodyUpdateVertexData[numVertices];
auto indices = new GLuint[numIndices];
+ // Load a square with the desired density
int32 vIdx = 0;
int32 iIdx = 0;
float32 inverseDensity = 1.f / springDensity;
@@ -28,6 +37,7 @@ struct SoftbodyRectangle {
for (int32 x = 0; x < springDensity; x++) { // Columns
Vector2 position = Vector2(x * inverseDensity - halfInv, y * inverseDensity- halfInv);
vertices[vIdx] = { position, Vector4(1, 0, 0, 1) };
+ updateData[vIdx].position = position;
if (y != springDensity - 1 && x != springDensity - 1) {
indices[iIdx++] = vIdx;
@@ -42,22 +52,35 @@ struct SoftbodyRectangle {
}
}
- mesh.load(vertices, numVertices, indices, numIndices, renderer);
+ mesh.load(vertices, numVertices, indices, numIndices, renderer, GL_DYNAMIC_DRAW);
mesh.model = Mat4x4().scale(Vector3(width, height, 0)).translateByVec2(Vector2(300, 400));
+ pointsVertices = new Vertex2d[numVertices];
+ for (int32 v = 0; v < numVertices; v++) {
+ pointsVertices[v].position = vertices[v].position;
+ pointsVertices[v].color = Vector4(1, 1, 0, 1);
+ }
+ pointsMesh.load(pointsVertices, numVertices, renderer, GL_DYNAMIC_DRAW);
+
delete [] vertices;
delete [] indices;
}
void update(float32 dtSeconds) {
-
+ for (int32 v = 0; v < pointsMesh.numVertices; v++) {
+ pointsVertices[v].position = Vector2(updateData[v].position.x * width, updateData[v].position.y * height) + position;
+ }
+ pointsMesh.updateVertices(pointsVertices);
}
void render(Renderer2d* renderer) {
mesh.render(renderer);
+ pointsMesh.render(renderer, GL_POINTS);
}
void unload() {
mesh.unload();
+ pointsMesh.unload();
+ delete [] pointsVertices;
}
};
diff --git a/2d/softbody/softbody_2/dist/output.js b/2d/softbody/softbody_2/dist/output.js
index 864fed6..2502d5e 100644
--- a/2d/softbody/softbody_2/dist/output.js
+++ b/2d/softbody/softbody_2/dist/output.js
@@ -2573,6 +2573,14 @@ var ASM_CONSTS = {
}
}
+ function _glBufferSubData(target, offset, size, data) {
+ if (GL.currentContext.version >= 2) { // WebGL 2 provides new garbage-free entry points to call to WebGL. Use those always when possible.
+ GLctx.bufferSubData(target, offset, HEAPU8, data, size);
+ return;
+ }
+ GLctx.bufferSubData(target, offset, HEAPU8.subarray(data, data+size));
+ }
+
function _glClear(x0) { GLctx['clear'](x0) }
function _glClearColor(x0, x1, x2, x3) { GLctx['clearColor'](x0, x1, x2, x3) }
@@ -3062,6 +3070,7 @@ var asmLibraryArg = {
"glBindBuffer": _glBindBuffer,
"glBindVertexArray": _glBindVertexArray,
"glBufferData": _glBufferData,
+ "glBufferSubData": _glBufferSubData,
"glClear": _glClear,
"glClearColor": _glClearColor,
"glClearDepth": _glClearDepth,
diff --git a/2d/softbody/softbody_2/dist/output.wasm b/2d/softbody/softbody_2/dist/output.wasm
index 8f52a3d..4d1241e 100755
--- a/2d/softbody/softbody_2/dist/output.wasm
+++ b/2d/softbody/softbody_2/dist/output.wasm
Binary files differ
diff --git a/2d/softbody/softbody_2/main.cpp b/2d/softbody/softbody_2/main.cpp
index 80686f9..29cecd6 100644
--- a/2d/softbody/softbody_2/main.cpp
+++ b/2d/softbody/softbody_2/main.cpp
@@ -46,6 +46,7 @@ void load() {
void update(float32 deltaTimeSeconds, void* userData) {
// -- Update
+ rectangle.update(deltaTimeSeconds);
// -- Render
renderer.render();