mirror of https://github.com/AxioDL/metaforce.git
Additions to BlenderConnection
This commit is contained in:
parent
62ce25b8b6
commit
21b4fe88f7
|
@ -1,3 +1,11 @@
|
||||||
|
/* Include this file once in the main translation unit of any executable file
|
||||||
|
* using HECL's database functionality (see driver/main.cpp)
|
||||||
|
*/
|
||||||
|
#ifdef DATA_SPEC_REGISTRY_HPP
|
||||||
|
#error DataSpecRegistry.hpp may only be included once
|
||||||
|
#endif
|
||||||
|
#define DATA_SPEC_REGISTRY_HPP
|
||||||
|
|
||||||
#include "HECL/Database.hpp"
|
#include "HECL/Database.hpp"
|
||||||
|
|
||||||
namespace HECL
|
namespace HECL
|
||||||
|
@ -17,6 +25,8 @@ namespace Retro
|
||||||
extern HECL::Database::DataSpecEntry SpecEntMP3;
|
extern HECL::Database::DataSpecEntry SpecEntMP3;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* An overzealous optimizing compiler may not init the specs if
|
||||||
|
* there's no in-code reference.. this is a simple hack to solve that */
|
||||||
extern "C" void HECLDataSpecs()
|
extern "C" void HECLDataSpecs()
|
||||||
{
|
{
|
||||||
HECL::Printf(Retro::SpecEntMP1.m_name);
|
HECL::Printf(Retro::SpecEntMP1.m_name);
|
||||||
|
|
|
@ -11,9 +11,11 @@
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <functional>
|
#include <functional>
|
||||||
|
#include <mutex>
|
||||||
|
|
||||||
class BlenderConnection
|
class BlenderConnection
|
||||||
{
|
{
|
||||||
|
std::mutex m_lock;
|
||||||
#if _WIN32
|
#if _WIN32
|
||||||
HANDLE m_blenderProc;
|
HANDLE m_blenderProc;
|
||||||
HANDLE m_readpipe[2];
|
HANDLE m_readpipe[2];
|
||||||
|
@ -43,6 +45,49 @@ public:
|
||||||
const std::string& expectedType,
|
const std::string& expectedType,
|
||||||
const std::string& platform,
|
const std::string& platform,
|
||||||
bool bigEndian=false);
|
bool bigEndian=false);
|
||||||
|
|
||||||
|
class PyOutStream : public std::ostream
|
||||||
|
{
|
||||||
|
friend class BlenderConnection;
|
||||||
|
std::unique_lock<std::mutex> m_lk;
|
||||||
|
BlenderConnection* m_parent;
|
||||||
|
struct StreamBuf : std::streambuf
|
||||||
|
{
|
||||||
|
BlenderConnection* m_parent;
|
||||||
|
StreamBuf(BlenderConnection* parent) : m_parent(parent) {}
|
||||||
|
StreamBuf(const StreamBuf& other) = delete;
|
||||||
|
StreamBuf(StreamBuf&& other) = default;
|
||||||
|
int_type overflow(int_type ch)
|
||||||
|
{
|
||||||
|
if (ch != traits_type::eof())
|
||||||
|
{
|
||||||
|
char_type chi = ch;
|
||||||
|
m_parent->_writeBuf(&chi, 1);
|
||||||
|
}
|
||||||
|
return ch;
|
||||||
|
}
|
||||||
|
} m_sbuf;
|
||||||
|
PyOutStream(BlenderConnection* parent)
|
||||||
|
: m_lk(parent->m_lock), m_parent(parent), m_sbuf(parent), std::ostream(&m_sbuf)
|
||||||
|
{
|
||||||
|
m_parent->_writeBuf("\033PYBEGIN\n", 9);
|
||||||
|
}
|
||||||
|
public:
|
||||||
|
PyOutStream(const PyOutStream& other) = delete;
|
||||||
|
PyOutStream(PyOutStream&& other)
|
||||||
|
: m_lk(std::move(other.m_lk)), m_parent(other.m_parent), m_sbuf(std::move(other.m_sbuf))
|
||||||
|
{other.m_parent = nullptr;}
|
||||||
|
~PyOutStream()
|
||||||
|
{
|
||||||
|
if (m_parent)
|
||||||
|
m_parent->_writeBuf("\033PYEND\n", 7);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
inline PyOutStream beginPythonOut()
|
||||||
|
{
|
||||||
|
return PyOutStream(this);
|
||||||
|
}
|
||||||
|
|
||||||
void quitBlender();
|
void quitBlender();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@ add_executable(hecl main.cpp
|
||||||
ToolAdd.hpp
|
ToolAdd.hpp
|
||||||
ToolRemove.hpp
|
ToolRemove.hpp
|
||||||
ToolSpec.hpp
|
ToolSpec.hpp
|
||||||
|
../DataSpecRegistry.hpp
|
||||||
)
|
)
|
||||||
|
|
||||||
list(APPEND DATA_SPEC_LIBS
|
list(APPEND DATA_SPEC_LIBS
|
||||||
|
|
|
@ -25,6 +25,8 @@ LogVisor::LogModule LogModule("HECLDriver");
|
||||||
#include "ToolPackage.hpp"
|
#include "ToolPackage.hpp"
|
||||||
#include "ToolHelp.hpp"
|
#include "ToolHelp.hpp"
|
||||||
|
|
||||||
|
/* Static reference to dataspec additions
|
||||||
|
* (used by MSVC to definitively link DataSpecs) */
|
||||||
#include "../DataSpecRegistry.hpp"
|
#include "../DataSpecRegistry.hpp"
|
||||||
|
|
||||||
bool XTERM_COLOR = false;
|
bool XTERM_COLOR = false;
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit fb0abb652a9149b369540d787fc3a5dacca8912a
|
Subproject commit c526c7df855ddc1e403d70ae98d5e3d6f4d5a095
|
Loading…
Reference in New Issue