From 3ce7de6134487cc133c261aadc377a02d8469a61 Mon Sep 17 00:00:00 2001 From: John McCardle Date: Sat, 7 Feb 2026 11:54:01 -0500 Subject: [PATCH] Windows/WASM platform fixes --- src/3d/Math3D.h | 14 +++++++------- src/3d/VoxelPoint.cpp | 8 ++++---- src/platform/HeadlessTypes.h | 4 ++++ src/platform/SDL2Renderer.cpp | 11 +++++++++++ src/platform/SDL2Types.h | 1 + 5 files changed, 27 insertions(+), 11 deletions(-) diff --git a/src/3d/Math3D.h b/src/3d/Math3D.h index 5f6d9f8..9de2d83 100644 --- a/src/3d/Math3D.h +++ b/src/3d/Math3D.h @@ -247,30 +247,30 @@ struct mat4 { // Perspective projection matrix // fov: vertical field of view in radians // aspect: width / height - // near, far: clipping planes - static mat4 perspective(float fov, float aspect, float near, float far) { + // nearPlane, farPlane: clipping planes + static mat4 perspective(float fov, float aspect, float nearPlane, float farPlane) { mat4 result; float tanHalfFov = std::tan(fov / 2.0f); result.at(0, 0) = 1.0f / (aspect * tanHalfFov); result.at(1, 1) = 1.0f / tanHalfFov; - result.at(2, 2) = -(far + near) / (far - near); + result.at(2, 2) = -(farPlane + nearPlane) / (farPlane - nearPlane); result.at(2, 3) = -1.0f; - result.at(3, 2) = -(2.0f * far * near) / (far - near); + result.at(3, 2) = -(2.0f * farPlane * nearPlane) / (farPlane - nearPlane); return result; } // Orthographic projection matrix - static mat4 ortho(float left, float right, float bottom, float top, float near, float far) { + static mat4 ortho(float left, float right, float bottom, float top, float nearPlane, float farPlane) { mat4 result = identity(); result.at(0, 0) = 2.0f / (right - left); result.at(1, 1) = 2.0f / (top - bottom); - result.at(2, 2) = -2.0f / (far - near); + result.at(2, 2) = -2.0f / (farPlane - nearPlane); result.at(3, 0) = -(right + left) / (right - left); result.at(3, 1) = -(top + bottom) / (top - bottom); - result.at(3, 2) = -(far + near) / (far - near); + result.at(3, 2) = -(farPlane + nearPlane) / (farPlane - nearPlane); return result; } diff --git a/src/3d/VoxelPoint.cpp b/src/3d/VoxelPoint.cpp index b6d414c..f5c62b6 100644 --- a/src/3d/VoxelPoint.cpp +++ b/src/3d/VoxelPoint.cpp @@ -51,7 +51,7 @@ PyObject* VoxelPoint::get_bool_member(PyVoxelPointObject* self, void* closure) return NULL; } - long member = reinterpret_cast(closure); + intptr_t member = reinterpret_cast(closure); bool value = false; switch (member) { @@ -82,7 +82,7 @@ int VoxelPoint::set_bool_member(PyVoxelPointObject* self, PyObject* value, void* } bool newValue = PyObject_IsTrue(value); - long member = reinterpret_cast(closure); + intptr_t member = reinterpret_cast(closure); switch (member) { case VOXEL_WALKABLE: @@ -111,7 +111,7 @@ PyObject* VoxelPoint::get_float_member(PyVoxelPointObject* self, void* closure) return NULL; } - long member = reinterpret_cast(closure); + intptr_t member = reinterpret_cast(closure); float value = 0.0f; switch (member) { @@ -146,7 +146,7 @@ int VoxelPoint::set_float_member(PyVoxelPointObject* self, PyObject* value, void return -1; } - long member = reinterpret_cast(closure); + intptr_t member = reinterpret_cast(closure); switch (member) { case VOXEL_HEIGHT: diff --git a/src/platform/HeadlessTypes.h b/src/platform/HeadlessTypes.h index 977acb0..99f3972 100644 --- a/src/platform/HeadlessTypes.h +++ b/src/platform/HeadlessTypes.h @@ -503,6 +503,10 @@ public: size_ = Vector2u(256, 256); return true; } + bool loadFromImage(const Image& image) { + size_ = image.getSize(); + return true; + } Vector2u getSize() const { return size_; } void setSmooth(bool smooth) {} bool isSmooth() const { return false; } diff --git a/src/platform/SDL2Renderer.cpp b/src/platform/SDL2Renderer.cpp index 3ed9a13..d73e175 100644 --- a/src/platform/SDL2Renderer.cpp +++ b/src/platform/SDL2Renderer.cpp @@ -1100,6 +1100,17 @@ bool Texture::loadFromMemory(const void* data, size_t size) { return textureId_ != 0; } +bool Texture::loadFromImage(const Image& image) { + if (textureId_) { + SDL2Renderer::getInstance().deleteTexture(textureId_); + } + auto imgSize = image.getSize(); + size_ = imgSize; + textureId_ = SDL2Renderer::getInstance().createTexture( + imgSize.x, imgSize.y, image.getPixelsPtr()); + return textureId_ != 0; +} + void Texture::setSmooth(bool smooth) { smooth_ = smooth; if (textureId_) { diff --git a/src/platform/SDL2Types.h b/src/platform/SDL2Types.h index 1e1ff99..d5f9bdf 100644 --- a/src/platform/SDL2Types.h +++ b/src/platform/SDL2Types.h @@ -669,6 +669,7 @@ public: bool create(unsigned int width, unsigned int height); // Implemented in SDL2Renderer.cpp bool loadFromFile(const std::string& filename); // Implemented in SDL2Renderer.cpp bool loadFromMemory(const void* data, size_t size); // Implemented in SDL2Renderer.cpp + bool loadFromImage(const Image& image); // Implemented in SDL2Renderer.cpp Vector2u getSize() const { return size_; } void setSize(unsigned int width, unsigned int height) { size_ = Vector2u(width, height); }