1 /*******************************************************************************
\r
2 * Copyright (c) 2007 VTT Technical Research Centre of Finland and others.
\r
3 * All rights reserved. This program and the accompanying materials
\r
4 * are made available under the terms of the Eclipse Public License v1.0
\r
5 * which accompanies this distribution, and is available at
\r
6 * http://www.eclipse.org/legal/epl-v10.html
\r
9 * VTT Technical Research Centre of Finland - initial API and implementation
\r
10 *******************************************************************************/
\r
11 package org.simantics.proconf.g3d.common;
\r
14 import java.util.logging.LogManager;
\r
16 import org.eclipse.core.runtime.Path;
\r
17 import org.eclipse.swt.SWT;
\r
18 import org.eclipse.swt.events.ControlAdapter;
\r
19 import org.eclipse.swt.events.ControlEvent;
\r
20 import org.eclipse.swt.graphics.Rectangle;
\r
21 import org.eclipse.swt.layout.FillLayout;
\r
22 import org.eclipse.swt.opengl.GLCanvas;
\r
23 import org.eclipse.swt.widgets.Composite;
\r
24 import org.simantics.proconf.g3d.base.JmeRenderingComponent;
\r
25 import org.simantics.proconf.g3d.base.ResourceTextureCache;
\r
26 import org.simantics.utils.ErrorLogger;
\r
28 import com.jme.renderer.Renderer;
\r
29 import com.jme.renderer.lwjgl.LWJGLRenderer;
\r
30 import com.jme.scene.Node;
\r
31 import com.jme.system.DisplaySystem;
\r
32 import com.jme.system.swt.SWTDisplaySystem;
\r
33 import com.jme.util.TextureManager;
\r
36 public class JmeComposite extends Composite {
\r
37 protected Node rootNode = new Node("root");
\r
38 private SWTDisplaySystem displaySystem;
\r
39 protected GLCanvas renderingCanvas;
\r
40 private JmeRenderingComponent component;
\r
42 public JmeComposite(Composite parent, JmeRenderingComponent component) {
\r
43 super(parent,SWT.NONE);
\r
44 if (component == null)
\r
45 throw new NullPointerException("Rendering component must not be null.");
\r
47 //LoggingSystem.getLogger().setLevel(Level.OFF);
\r
48 this.component = component;
\r
49 this.setLayout(new FillLayout());
\r
50 displaySystem = (SWTDisplaySystem)DisplaySystem.getDisplaySystem("SWT");
\r
51 renderingCanvas = displaySystem.createCanvas(640, 480, this);
\r
52 renderingCanvas.addControlListener(new ControlAdapter() {
\r
53 public void controlResized(ControlEvent e) {
\r
61 private void disableLog() {
\r
62 //URL url = FileLocator.find(org.simantics.proconf.g3d.Activator.getDefault().getBundle(),new Path("logging.properties"),null);
\r
65 LogManager.getLogManager().readConfiguration(org.simantics.proconf.g3d.Activator.getDefault().openStream(new Path("logging.properties")));
\r
66 } catch (Exception e) {
\r
67 ErrorLogger.defaultLogError(e);
\r
71 public void resize() {
\r
72 displaySystem.setCurrent();
\r
73 LWJGLRenderer renderer = (LWJGLRenderer) displaySystem.getRenderer();
\r
74 if (renderer!= null) {
\r
75 Rectangle r = new Rectangle(renderingCanvas.getClientArea().x,renderingCanvas.getClientArea().y, renderingCanvas.getClientArea().width, renderingCanvas.getClientArea().height );
\r
76 if (r.width > 0 && r.height > 0)
\r
77 renderer.reinit(r.width, r.height);
\r
78 component.resize(r.width, r.height);
\r
82 public GLCanvas getCanvas() {
\r
83 return renderingCanvas;
\r
86 public Renderer getRenderer() {
\r
87 return displaySystem.getRenderer();
\r
90 public void initGL() {
\r
91 component.init(displaySystem);
\r
94 public void dispose() {
\r
95 LWJGLRenderer renderer = (LWJGLRenderer) displaySystem.getRenderer();
\r
96 renderer.clearVBOCache();
\r
97 renderer.clearQueue();
\r
98 renderer.clearStatistics();
\r
99 renderingCanvas.dispose();
\r
100 if (displaySystem.destroy()) {
\r
102 TextureManager.doTextureCleanup();
\r
103 TextureManager.clearCache();
\r
104 ResourceTextureCache.getInstance().clear();
\r
109 public DisplaySystem getDisplaySystem() {
\r
110 return displaySystem;
\r