eclipse 更新到1.4.2后如何初始化nifty

bvjxkvbb  于 2023-08-04  发布在  Eclipse
关注(0)|答案(1)|浏览(89)

我更新了Nifty到v.1.4.2,Jogamp到v.2.4.0.,Java到jdk-11.0.2。更新前代码:

public class ISOView extends Object2D
{
  private IViewManipulation viewerInteraction;
  private IRenderEvent renderEvent;
  private ISOViewNiftyController isoNiftyController;
  private JoglInputSystem inputSystem;
  private Nifty nifty;

  public ISOView(IViewManipulation viewerInteraction, IRenderEvent renderEvent) 
  {
    super(RenderOption.TOP);
    this.renderEvent = renderEvent;
    this.viewerInteraction = viewerInteraction;
  }

  @Override
  public void render(GL gl, RenderParameters params, boolean selection)
  {
    if( params == null || params.getCamera() == null || !params.getCamera().hasFrustum() )
      return;
    
    GL2 gl2 = OpenGLUtil.getMinGL(gl);
    renderNifty(gl2, selection);
    isoNiftyController.update();
  }

  private void renderNifty(GL2 gl2, boolean selection)
  {
    if (ISOViewNiftyController.isNiftyUsed()) {
      // some code
    }
  }

  private void initNifty()
  {
    Logger.getLogger("de.lessvoid").setLevel(Level.OFF);
    inputSystem = new JoglInputSystem();
    nifty = new Nifty(new JoglRenderDevice(), new NullSoundDevice(), inputSystem, new AccurateTimeProvider());
    // other code
  }

  @Override
  public void cleanUp(GL gl)
  {
    // TODO Auto-generated method stub

  }

  public JoglInputSystem getInputSystem()
  {
    return inputSystem;
  }

  @Override
  public boolean belongsToScene(SceneType type)
  {
    // some code
  }
  
  @Override
  public void dispose( BaseViewer baseViewer )
  {
    // some code
  }
}

字符串
现在我有两个问题:

  • 创建JoglInputSystem,它接受新参数
  • 创建Nifty,它的JoglRenderDevice()方法已被弃用。

新代码:

private void initNifty(){
  Logger.getLogger("de.lessvoid").setLevel(Level.OFF);
  com.jogamp.newt.Window newtWindow = null;//Fix!!!
  inputSystem = new JoglInputSystem(newtWindow);
  de.lessvoid.nifty.spi.render.RenderDevice renderDevice = null;//Fix!!!
  nifty = new Nifty(renderDevice, new NullSoundDevice(), inputSystem, new AccurateTimeProvider());
  // some code
}


有人能帮忙吗?Using Eclipse IDE for RCP and RAP Developers,版本:2020-06(4.16.0),赢10
我试过了:

GLCapabilities caps = new GLCapabilities(GLProfile.getMaxProgrammable(true));

GLWindow glW = GLWindow.create(caps);// implements com.jogamp.newt.Window
inputSystem = new JoglInputSystem(glW);


有创建一些JoglInputSystem,我不知道如果正确的一个。但我不知道,如何创建一个Nifty。要创建它,我需要RenderDevice。这是一个只由两个类实现的接口。所以我创建了ScalingRenderDevice。要做到这一点,我需要NiftyRenderEngine。为此,我需要NiftyRenderEngineImpl,我开始了,因为我再次需要RenderDevice

Nifty(RenderDevice newRenderDevice, SoundDevice newSoundDevice, InputSystem newInputSystem, TimeProvider newTimeProvider) 
    Interface RenderDevice - All Known Implementing Classes:
        BatchRenderDevice
            BatchRenderDevice(BatchRenderBackend renderBackend)
            BatchRenderDevice(BatchRenderBackend renderBackend, BatchRenderConfiguration renderConfig)
        ScalingRenderDevice
            ScalingRenderDevice(NiftyRenderEngine renderEngine, RenderDevice interal)
                Interface NiftyRenderEngine - All Known Implementing Classes:
                    NiftyRenderEngineImpl(RenderDevice renderDeviceParam)

mwecs4sa

mwecs4sa1#

我们在这里提供了示例代码:JOGLNiftyRunner.java#L123,展示了如何使用JOGL的nifty-render-jogl项目提供的BatchRenderBackend实现初始化Nifty。
Nifty提供的BatchRenderDevice是一个RenderDevice实现,它使用BatchRenderBackend接口与特定的图形API对话。其想法是在BatchRenderDevice中提供通用批处理逻辑,并使用BatchRenderBackend连接到不同的图形API。因此,对于一个新的图形API,人们不需要实现完整的RenderDevice接口,而只需要BatchRenderBackend。
目标是使连接到不同图形API变得更简单。但最后,我们以旧风格(完整的RenderDevice实现)和新风格(基于BatchRenderBackend实现,需要使用Nifty自己提供的BatchRenderDevice)而告终。
跳过所有这些混乱,简单地将BatchRenderBackend作为新的RenderDevice,并在内部使用批处理作为新的默认值,可能会将旧的RenderDevice更改为一些私有的内部Nifty API,而不是公共API。
KISS和最小惊喜原则以及所有这些Nifty喜欢违反这么多的原则,不幸的是。说实话,我还是很抱歉:/
另一方面,ScalingRenderDevice是一个 Package 器RenderDevice,它会自动应用一些全局缩放。这里的想法是使用ScalingRenderDevice来 Package 现有的RenderDevice实现,以将缩放功能添加到任何RenderDevice。

相关问题