HISE Logo Forum
    • Categories
    • Register
    • Login

    Is it possible to get the Display Buffer into a Floating Tile?

    Scheduled Pinned Locked Moved Solved General Questions
    19 Posts 7 Posters 869 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • Dan KorneffD
      Dan Korneff @Christoph Hart
      last edited by

      @Christoph-Hart How is the inverted plotter supposed to work? I was assuming that a plotter would set the value at the bottom of the panel to 0 and draw upwards, and an inverted plotter would set the value at the top of the panel to 0 and draw downwards.

      I'm not seeing any difference when I change the START and use drawPath.

      g.createPath(area, [0,1,0,-1], 0.0);
      Screenshot 2024-10-15 095328.png

      g.createPath(area, [0,1,0,-1], 1.0);
      Screenshot 2024-10-15 095400.png

      I AM seeing a difference if fillPath:
      g.createPath(area, [0,1,0,-1], 0.0);
      Screenshot 2024-10-15 095303.png

      g.createPath(area, [0,1,0,-1], 1.0);
      Screenshot 2024-10-15 095247.png

      The question: Is this the way it's supposed to work? If so, how can I invert the value of a display buffer so I can start drawing at the top of the panel?

      // Oscilloscope:
      d.createPath([0, 0, w, h],   // target rectangle 
                   [-1, 1, 0, -1], // samplerange 0 - numSamples,
                                   // valuerange: from -1 to 1
                   0.0);           // start at the center (bipolar)
      
      // Plotter
      d.createPath([0, 0, w, h],   // target rectangle 
                   [0, 1, 0, -1],  // samplerange 0 - numSamples,
                                   // valuerange: from 0 to 1
                   0.0);           // start at the bottom (unibipolar)
      
      // Inverted Plotter
      d.createPath([0, 0, w, h],   // target rectangle 
                   [0, 1, 0, -1],  // samplerange 0 - numSamples,
                                   // valuerange: from 0 to 1
                   1.0);           // start at the top (negative)
      

      Dan Korneff - Producer / Mixer / Audio Nerd

      ustkU 1 Reply Last reply Reply Quote 0
      • ustkU
        ustk @Dan Korneff
        last edited by

        @Dan-Korneff Seems to work if you just flip the height to be a negative value:

        var p = gr.createPath([a[0], a[1], a[2], -a[3]], [0,1,0,-1], 0.0);
        

        Can't help pressing F5 in the forum...

        Dan KorneffD 1 Reply Last reply Reply Quote 0
        • Dan KorneffD
          Dan Korneff @ustk
          last edited by

          @ustk You're hired!

          Dan Korneff - Producer / Mixer / Audio Nerd

          1 Reply Last reply Reply Quote 2
          • Dan KorneffD
            Dan Korneff @Christoph Hart
            last edited by

            @Christoph-Hart I need to increase the buffer size to about twice what's available to the Plotter. Can I just change this:

            return SimpleRingBuffer::withinRange<4096, 32768 * 4>(v) && wasPowerOfTwo;
            

            to:

            return SimpleRingBuffer::withinRange<4096, 32768 * 8>(v) && wasPowerOfTwo;
            

            Or will this blow up??

            Dan Korneff - Producer / Mixer / Audio Nerd

            Dan KorneffD 1 Reply Last reply Reply Quote 0
            • Dan KorneffD
              Dan Korneff @Dan Korneff
              last edited by

              So far, no explosions

              Dan Korneff - Producer / Mixer / Audio Nerd

              ustkU JulesVJ 2 Replies Last reply Reply Quote 2
              • ustkU
                ustk @Dan Korneff
                last edited by

                @Dan-Korneff I imagine the only issue would be that a longer buffer would require more time to create a path, but if it can be noticeable I don't know :man_shrugging:

                Can't help pressing F5 in the forum...

                1 Reply Last reply Reply Quote 1
                • JulesVJ
                  JulesV @Dan Korneff
                  last edited by

                  @Dan-Korneff @ustk It seems interesting. Can you guys share a basic fast snippet for this please?

                  JulesVJ 1 Reply Last reply Reply Quote 0
                  • JulesVJ
                    JulesV @JulesV
                    last edited by

                    Bump please

                    orangeO 1 Reply Last reply Reply Quote 0
                    • orangeO
                      orange @JulesV
                      last edited by orange

                      @JulesV Here is a custom node example. After adding a display buffer to the custom node and compiling it, you need to open this node in HardcodedMasterFX and apply the following method. To get the look I wanted here, I had to keep the buffer length quite high, it's set to 65536 :)

                      The drawing process takes place in a timer object.

                      Pnlll2.gif

                      const var dp = Synth.getDisplayBufferSource("HardcodedMasterFX");
                      const var gr = dp.getDisplayBuffer(0);
                      
                      gr.setRingBufferProperties({
                      "BufferLength": 65536,
                      "NumChannels": 1
                      });
                      
                      const var Panel1 = Content.getComponent ("Panel1");
                      const var a = Panel1.getLocalBounds(0);
                      const var Cmpt = Engine.createTimerObject();
                      
                      Cmpt.setTimerCallback(function()
                      {	
                      	Panel1.setPaintRoutine(function(g)
                      	{
                      		g.setColour (this.get("bgColour"));
                      		g.fillRect(a);
                      		g.setColour(this.get("itemColour"));
                      		var p = gr.createPath(a, [0,1,0,-1], 1.0);
                      		g.fillPath(p, a);
                      	});
                      });
                      
                      Cmpt.startTimer(40);
                      
                      
                      LindonL 1 Reply Last reply Reply Quote 2
                      • LindonL
                        Lindon @orange
                        last edited by

                        @orange is there some reason you are declaring the paint routine in the timer and not outside it, then issuing a repaint in the timer?

                        HISE Development for hire.
                        www.channelrobot.com

                        orangeO 1 Reply Last reply Reply Quote 0
                        • orangeO
                          orange @Lindon
                          last edited by orange

                          @Lindon Not a specific reason, I just used the time object to refresh the paint.
                          If you have a better usage recommendation instead, I'm open to it.

                          LindonL 1 Reply Last reply Reply Quote 0
                          • LindonL
                            Lindon @orange
                            last edited by Lindon

                            @orange well clearly I havent tried it, but give this a go and see if it works?

                            const var dp = Synth.getDisplayBufferSource("HardcodedMasterFX");
                            const var gr = dp.getDisplayBuffer(0);
                            
                            gr.setRingBufferProperties({
                            "BufferLength": 65536,
                            "NumChannels": 1
                            });
                            
                            reg p;
                            const var Panel1 = Content.getComponent ("Panel1");
                            Panel1.setPaintRoutine(function(g)
                            {
                            	g.setColour (this.get("bgColour"));
                            	g.fillRect(a);
                            	g.setColour(this.get("itemColour"));
                            	p = gr.createPath(a, [0,1,0,-1], 1.0);
                            	g.fillPath(p, a);
                            });
                            
                            
                            
                            const var a = Panel1.getLocalBounds(0);
                            const var Cmpt = Engine.createTimerObject();
                            Cmpt.setTimerCallback(function()
                            {	
                            	Panel1.repaint()
                            });
                            
                            Cmpt.startTimer(40);
                            

                            HISE Development for hire.
                            www.channelrobot.com

                            orangeO 2 Replies Last reply Reply Quote 3
                            • orangeO
                              orange @Lindon
                              last edited by

                              @Lindon Thatโ€™s better, thanks :)

                              LindonL 1 Reply Last reply Reply Quote 0
                              • orangeO
                                orange @Lindon
                                last edited by

                                This post is deleted!
                                1 Reply Last reply Reply Quote 0
                                • LindonL
                                  Lindon @orange
                                  last edited by

                                  @orange glad that it worked...

                                  HISE Development for hire.
                                  www.channelrobot.com

                                  JulesVJ 1 Reply Last reply Reply Quote 0
                                  • JulesVJ
                                    JulesV @Lindon
                                    last edited by

                                    @Lindon @orange Thank you for your help!

                                    1 Reply Last reply Reply Quote 0
                                    • First post
                                      Last post

                                    21

                                    Online

                                    1.8k

                                    Users

                                    12.0k

                                    Topics

                                    104.8k

                                    Posts