first pass Windows support

This commit is contained in:
Nick Fisher
2023-09-23 15:27:09 +10:00
parent 64cfea2952
commit 609e349d58
344 changed files with 3886 additions and 261 deletions

View File

@@ -9,6 +9,7 @@
#include <android/log.h>
#define LOGTAG "PolyvoxFilament"
#else
#include <stdarg.h>
#include <stdio.h>
#include <iostream>
#endif

View File

@@ -3,10 +3,23 @@
#include "ResourceBuffer.hpp"
#ifdef _WIN32
#ifdef IS_DLL
#define FLUTTER_PLUGIN_EXPORT __declspec( dllimport )
#else
#define FLUTTER_PLUGIN_EXPORT __declspec( dllexport )
#endif
#else
#define FLUTTER_PLUGIN_EXPORT __attribute__((visibility("default")))
#endif
#ifdef __cplusplus
extern "C" {
#endif
typedef int32_t EntityId;
const void* create_filament_viewer(const void* const context, const ResourceLoaderWrapper* const loader);
ResourceLoaderWrapper* make_resource_loader(LoadResourceFromOwner loadFn, FreeResourceFromOwner freeFn, void* owner);
ResourceLoaderWrapper* make_resource_loader(LoadFilamentResourceFromOwner loadFn, FreeFilamentResourceFromOwner freeFn, void* owner);
void delete_filament_viewer(const void* const viewer);
void* get_asset_manager(const void* const viewer);
void create_render_target(const void* const viewer, uint32_t textureId, uint32_t width, uint32_t height);
@@ -98,6 +111,7 @@ void set_camera_focus_distance(const void* const viewer, float focusDistance);
int hide_mesh(void* assetManager, EntityId asset, const char* meshName);
int reveal_mesh(void* assetManager, EntityId asset, const char* meshName);
void ios_dummy();
#ifdef __cplusplus
}
#endif
#endif

View File

@@ -3,7 +3,6 @@
#include <stdint.h>
#if defined(__cplusplus)
#include "Log.hpp"
extern "C" {
#endif
//
@@ -35,41 +34,41 @@ extern "C" {
};
typedef struct ResourceBuffer ResourceBuffer;
typedef ResourceBuffer (*LoadResource)(const char* uri);
typedef ResourceBuffer (*LoadResourceFromOwner)(const char* const, void* const owner);
typedef void (*FreeResource)(ResourceBuffer);
typedef void (*FreeResourceFromOwner)(ResourceBuffer, void* const owner);
typedef ResourceBuffer (*LoadFilamentResource)(const char* uri);
typedef ResourceBuffer (*LoadFilamentResourceFromOwner)(const char* const, void* const owner);
typedef void (*FreeFilamentResource)(ResourceBuffer);
typedef void (*FreeFilamentResourceFromOwner)(ResourceBuffer, void* const owner);
// this may be compiled as either C or C++, depending on which compiler is being invoked (e.g. binding to Swift will compile as C).
// the former does not allow default initialization to be specified inline), so we need to explicitly set the unused members to nullptr
struct ResourceLoaderWrapper {
#if defined(__cplusplus)
ResourceLoaderWrapper(LoadResource loader, FreeResource freeResource) : mLoadResource(loader), mFreeResource(freeResource), mLoadResourceFromOwner(nullptr), mFreeResourceFromOwner(nullptr),
ResourceLoaderWrapper(LoadFilamentResource loader, FreeFilamentResource freeResource) : mLoadFilamentResource(loader), mFreeFilamentResource(freeResource), mLoadFilamentResourceFromOwner(nullptr), mFreeFilamentResourceFromOwner(nullptr),
mOwner(nullptr) {}
ResourceLoaderWrapper(LoadResourceFromOwner loader, FreeResourceFromOwner freeResource, void* const owner) : mLoadResource(nullptr), mFreeResource(nullptr), mLoadResourceFromOwner(loader), mFreeResourceFromOwner(freeResource), mOwner(owner) {
ResourceLoaderWrapper(LoadFilamentResourceFromOwner loader, FreeFilamentResourceFromOwner freeResource, void* const owner) : mLoadFilamentResource(nullptr), mFreeFilamentResource(nullptr), mLoadFilamentResourceFromOwner(loader), mFreeFilamentResourceFromOwner(freeResource), mOwner(owner) {
};
ResourceBuffer load(const char* uri) const {
if(mLoadResourceFromOwner) {
return mLoadResourceFromOwner(uri, mOwner);
if(mLoadFilamentResourceFromOwner) {
return mLoadFilamentResourceFromOwner(uri, mOwner);
}
return mLoadResource(uri);
return mLoadFilamentResource(uri);
}
void free(ResourceBuffer rb) const {
if(mFreeResourceFromOwner) {
mFreeResourceFromOwner(rb, mOwner);
if(mFreeFilamentResourceFromOwner) {
mFreeFilamentResourceFromOwner(rb, mOwner);
} else {
mFreeResource(rb);
mFreeFilamentResource(rb);
}
}
#endif
LoadResource mLoadResource;
FreeResource mFreeResource;
LoadResourceFromOwner mLoadResourceFromOwner;
FreeResourceFromOwner mFreeResourceFromOwner;
LoadFilamentResource mLoadFilamentResource;
FreeFilamentResource mFreeFilamentResource;
LoadFilamentResourceFromOwner mLoadFilamentResourceFromOwner;
FreeFilamentResourceFromOwner mFreeFilamentResourceFromOwner;
void* mOwner;
};
typedef struct ResourceLoaderWrapper ResourceLoaderWrapper;

View File

@@ -3,7 +3,7 @@
#pragma once
#if __cplusplus <= 199711L
#if __cplusplus <= 199711L && !_WIN32
#include <ctime>
#else
#include <chrono>
@@ -19,7 +19,7 @@ class Timer
private:
#if __cplusplus <= 199711L
#if __cplusplus <= 199711L && !_WIN32
timespec beg_, end_;
#else
typedef std::chrono::high_resolution_clock clock_;