diff --git a/Source/PluginProcessor.cpp b/Source/PluginProcessor.cpp index d88016a..54a20b9 100644 --- a/Source/PluginProcessor.cpp +++ b/Source/PluginProcessor.cpp @@ -179,11 +179,6 @@ OscirenderAudioProcessor::OscirenderAudioProcessor() : CommonAudioProcessor(Buse synth.addSound(defaultSound); addAllParameters(); - - if (objectServerPort == 0) { - objectServerPort = juce::Random::getSystemRandom().nextInt(juce::Range(51600, 51700)); - objectServer.reload(); - } } OscirenderAudioProcessor::~OscirenderAudioProcessor() { @@ -407,10 +402,6 @@ void OscirenderAudioProcessor::setObjectServerRendering(bool enabled) { } } -void OscirenderAudioProcessor::setObjectServerPort(int port) { - objectServerPort = port; -} - void OscirenderAudioProcessor::processBlock(juce::AudioBuffer& buffer, juce::MidiBuffer& midiMessages) { juce::ScopedNoDenormals noDenormals; // Audio info variables @@ -669,8 +660,6 @@ void OscirenderAudioProcessor::getStateInformation(juce::MemoryBlock& destData) } xml->setAttribute("currentFile", currentFile); - xml->setAttribute("objectServerPort", objectServerPort); - recordingParameters.save(xml.get()); copyXmlToBinary(*xml, destData); @@ -699,10 +688,6 @@ void OscirenderAudioProcessor::setStateInformation(const void* data, int sizeInB juce::SpinLock::ScopedLockType lock1(parsersLock); juce::SpinLock::ScopedLockType lock2(effectsLock); - // If a port is saved, use that one, otherwise choose a random port - objectServerPort = xml->getIntAttribute("objectServerPort", juce::Random::getSystemRandom().nextInt(juce::Range(51600, 51700))); - objectServer.reload(); - auto effectsXml = xml->getChildByName("effects"); if (effectsXml != nullptr) { for (auto effectXml : effectsXml->getChildIterator()) { diff --git a/Source/PluginProcessor.h b/Source/PluginProcessor.h index 07df86e..f5f658f 100644 --- a/Source/PluginProcessor.h +++ b/Source/PluginProcessor.h @@ -204,8 +204,6 @@ public: juce::String getFileId(int index); std::shared_ptr getFileBlock(int index); void setObjectServerRendering(bool enabled); - void setObjectServerPort(int port); - int objectServerPort = 0; void addErrorListener(ErrorListener* listener); void removeErrorListener(ErrorListener* listener); void notifyErrorListeners(int lineNumber, juce::String id, juce::String error); diff --git a/Source/components/AboutComponent.cpp b/Source/components/AboutComponent.cpp index 55729a7..97edf4d 100644 --- a/Source/components/AboutComponent.cpp +++ b/Source/components/AboutComponent.cpp @@ -1,9 +1,8 @@ #include "AboutComponent.h" -AboutComponent::AboutComponent(const void *image, size_t imageSize, juce::String sectionText, int* port) { +AboutComponent::AboutComponent(const void *image, size_t imageSize, juce::String sectionText) { addAndMakeVisible(logoComponent); addAndMakeVisible(text); - addAndMakeVisible(portText); logo = juce::ImageFileFormat::loadFrom(image, imageSize); @@ -17,22 +16,11 @@ AboutComponent::AboutComponent(const void *image, size_t imageSize, juce::String text.setColour(juce::TextEditor::outlineColourId, juce::Colours::transparentBlack); text.setJustification(juce::Justification(juce::Justification::centred)); text.setText(sectionText); - - // TODO: Integrate this better - portText.setMultiLine(false); - portText.setReadOnly(false); - portText.setInterceptsMouseClicks(false, false); - portText.setOpaque(false); - portText.setColour(juce::TextEditor::backgroundColourId, juce::Colours::transparentBlack); - portText.setColour(juce::TextEditor::outlineColourId, juce::Colours::transparentBlack); - portText.setJustification(juce::Justification(juce::Justification::centred)); - portText.setText(juce::String((port != nullptr) ? (*port) : 0)); } void AboutComponent::resized() { auto area = getLocalBounds(); area.removeFromTop(10); logoComponent.setBounds(area.removeFromTop(110)); - portText.setBounds(area.removeFromBottom(20).removeFromTop(15)); text.setBounds(area); } diff --git a/Source/components/AboutComponent.h b/Source/components/AboutComponent.h index 68e980d..07c349d 100644 --- a/Source/components/AboutComponent.h +++ b/Source/components/AboutComponent.h @@ -4,7 +4,7 @@ class AboutComponent : public juce::Component { public: - AboutComponent(const void *image, size_t imageSize, juce::String sectionText, int* port = nullptr); + AboutComponent(const void *image, size_t imageSize, juce::String sectionText); void resized() override; @@ -13,7 +13,6 @@ private: juce::ImageComponent logoComponent; juce::TextEditor text; - juce::TextEditor portText; JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AboutComponent) }; diff --git a/Source/components/OsciMainMenuBarModel.cpp b/Source/components/OsciMainMenuBarModel.cpp index 23d02b2..bdb876d 100644 --- a/Source/components/OsciMainMenuBarModel.cpp +++ b/Source/components/OsciMainMenuBarModel.cpp @@ -32,7 +32,7 @@ OsciMainMenuBarModel::OsciMainMenuBarModel(OscirenderAudioProcessor& p, Oscirend "BUS ERROR Collective, for providing the source code for the Hilligoss encoder\n" "Jean Perbet (@jeanprbt) for the osci-render macOS icon\n" "All the community, for suggesting features and reporting issues!" - , &audioProcessor.objectServerPort); + ); options.content.setOwned(about); options.content->setSize(500, 270); options.dialogTitle = "About"; diff --git a/Source/gpla/LineArtParser.cpp b/Source/gpla/LineArtParser.cpp index 4d077d2..73c3223 100644 --- a/Source/gpla/LineArtParser.cpp +++ b/Source/gpla/LineArtParser.cpp @@ -303,8 +303,6 @@ std::vector> LineArtParser::parseJsonFrames(juce::String jsonS // If no frames were valid, stop and parse invalid fallback instead if (!hasValidFrames) return parseJsonFrames(juce::String(BinaryData::invalid_gpla, BinaryData::invalid_gplaSize)); - - return frames; } void LineArtParser::setFrame(int fNum) { diff --git a/Source/obj/ObjectServer.cpp b/Source/obj/ObjectServer.cpp index de09608..50c0cf5 100644 --- a/Source/obj/ObjectServer.cpp +++ b/Source/obj/ObjectServer.cpp @@ -10,14 +10,8 @@ ObjectServer::~ObjectServer() { stopThread(1000); } -void ObjectServer::reload() { - stopThread(1000); - startThread(); -} - void ObjectServer::run() { - port = audioProcessor.objectServerPort; - if (socket.createListener(port, "127.0.0.1")) { + if (socket.createListener(51677, "127.0.0.1")) { // preallocating a large buffer to avoid allocations in the loop std::unique_ptr message{ new char[10 * 1024 * 1024] }; diff --git a/Source/obj/ObjectServer.h b/Source/obj/ObjectServer.h index a1d302a..402e2bb 100644 --- a/Source/obj/ObjectServer.h +++ b/Source/obj/ObjectServer.h @@ -10,9 +10,6 @@ public: ~ObjectServer(); void run() override; - void reload(); - - int port = 51677; private: OscirenderAudioProcessor& audioProcessor; diff --git a/blender/osci_render/__init__.py b/blender/osci_render/__init__.py index 8257883..0453a4e 100644 --- a/blender/osci_render/__init__.py +++ b/blender/osci_render/__init__.py @@ -23,6 +23,7 @@ from bpy.app.handlers import persistent from bpy_extras.io_utils import ImportHelper HOST = "localhost" +PORT = 51677 sock = None @@ -44,7 +45,6 @@ class OBJECT_PT_osci_render_settings(bpy.types.Panel): def draw(self, context): global sock - self.layout.prop(context.scene, "osciport") if sock is None: self.layout.operator("render.osci_render_connect", text="Connect to osci-render instance") else: @@ -58,7 +58,6 @@ class osci_render_connect(bpy.types.Operator): def execute(self, context): global sock - PORT = context.scene.osciport if sock is None: try: sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) @@ -204,42 +203,41 @@ def get_frame_info_binary(): if object.visible_get() and object.type == 'GREASEPENCIL': dg = bpy.context.evaluated_depsgraph_get() obj = object.evaluated_get(dg) - if obj.data.layers.active is not None: - frame_info.extend(("OBJECT ").encode("utf8")) + frame_info.extend(("OBJECT ").encode("utf8")) + + # matrix + frame_info.extend(("MATRIX ").encode("utf8")) + camera_space = bpy.context.scene.camera.matrix_world.inverted() @ obj.matrix_world + for i in range(4): + for j in range(4): + frame_info.extend(struct.pack("d", camera_space[i][j])) + frame_info.extend(("DONE ").encode("utf8")) + + # strokes + frame_info.extend(("STROKES ").encode("utf8")) + strokes = obj.data.layers.active.frames.data.current_frame().drawing.strokes + for stroke in strokes: + frame_info.extend(("STROKE ").encode("utf8")) - # matrix - frame_info.extend(("MATRIX ").encode("utf8")) - camera_space = bpy.context.scene.camera.matrix_world.inverted() @ obj.matrix_world - for i in range(4): - for j in range(4): - frame_info.extend(struct.pack("d", camera_space[i][j])) + frame_info.extend(("vertexCt").encode("utf8")) + frame_info.extend(len(stroke.points).to_bytes(8, "little")) + + frame_info.extend(("VERTICES").encode("utf8")) + for vert in stroke.points: + frame_info.extend(struct.pack("d", vert.position.x)) + frame_info.extend(struct.pack("d", vert.position.y)) + frame_info.extend(struct.pack("d", vert.position.z)) + # VERTICES frame_info.extend(("DONE ").encode("utf8")) - - # strokes - frame_info.extend(("STROKES ").encode("utf8")) - strokes = obj.data.layers.active.frames.data.current_frame().drawing.strokes - for stroke in strokes: - frame_info.extend(("STROKE ").encode("utf8")) - - frame_info.extend(("vertexCt").encode("utf8")) - frame_info.extend(len(stroke.points).to_bytes(8, "little")) - - frame_info.extend(("VERTICES").encode("utf8")) - for vert in stroke.points: - frame_info.extend(struct.pack("d", vert.position.x)) - frame_info.extend(struct.pack("d", vert.position.y)) - frame_info.extend(struct.pack("d", vert.position.z)) - # VERTICES - frame_info.extend(("DONE ").encode("utf8")) - - # STROKE - frame_info.extend(("DONE ").encode("utf8")) - - # STROKES - frame_info.extend(("DONE ").encode("utf8")) - - # OBJECT + + # STROKE frame_info.extend(("DONE ").encode("utf8")) + + # STROKES + frame_info.extend(("DONE ").encode("utf8")) + + # OBJECT + frame_info.extend(("DONE ").encode("utf8")) else: for object in bpy.data.objects: if object.visible_get() and obj.type == 'GPENCIL': @@ -307,7 +305,6 @@ operations = [OBJECT_PT_osci_render_settings, osci_render_connect, osci_render_c def register(): - bpy.types.Scene.osciport = bpy.props.IntProperty(name="osci-render port",description="Port to use when connecting to osci-render (default 51677)",min=1,max=65535,default=51677) bpy.app.handlers.frame_change_pre.append(send_scene_to_osci_render) bpy.app.handlers.depsgraph_update_post.append(send_scene_to_osci_render) atexit.register(close_osci_render) @@ -316,7 +313,6 @@ def register(): def unregister(): - del bpy.types.Scene.osciport bpy.app.handlers.frame_change_pre.remove(send_scene_to_osci_render) bpy.app.handlers.depsgraph_update_post.remove(send_scene_to_osci_render) atexit.unregister(close_osci_render) @@ -326,4 +322,3 @@ def unregister(): if __name__ == "__main__": register() - \ No newline at end of file