我更新了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)
型
1条答案
按热度按时间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。