1 /*******************************************************************************
\r
2 * Copyright (c) 2007- VTT Technical Research Centre of Finland.
\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.events.PaintEvent;
\r
21 import org.eclipse.swt.events.PaintListener;
\r
22 import org.eclipse.swt.graphics.Rectangle;
\r
23 import org.eclipse.swt.layout.FillLayout;
\r
24 import org.eclipse.swt.opengl.GLCanvas;
\r
25 import org.eclipse.swt.widgets.Composite;
\r
26 import org.simantics.proconf.g3d.base.JmeRenderingComponent;
\r
27 import org.simantics.proconf.g3d.base.ResourceTextureCache;
\r
28 import org.simantics.utils.ui.ErrorLogger;
\r
30 import com.jme.renderer.Renderer;
\r
31 import com.jme.renderer.lwjgl.LWJGLRenderer;
\r
32 import com.jme.scene.Node;
\r
33 import com.jme.system.DisplaySystem;
\r
34 import com.jme.system.swt.SWTDisplaySystem;
\r
35 import com.jme.util.TextureManager;
\r
38 public class JmeComposite extends Composite {
\r
39 protected Node rootNode = new Node("root");
\r
40 private SWTDisplaySystem displaySystem;
\r
41 protected GLCanvas renderingCanvas;
\r
42 private JmeRenderingComponent component;
\r
44 public JmeComposite(Composite parent, JmeRenderingComponent component) {
\r
45 super(parent,SWT.NONE);
\r
46 if (component == null)
\r
47 throw new NullPointerException("Rendering component must not be null.");
\r
49 //LoggingSystem.getLogger().setLevel(Level.OFF);
\r
50 this.component = component;
\r
51 this.setLayout(new FillLayout());
\r
52 displaySystem = (SWTDisplaySystem)DisplaySystem.getDisplaySystem("SWT");
\r
53 renderingCanvas = displaySystem.createCanvas(640, 480, this);
\r
54 renderingCanvas.addControlListener(new ControlAdapter() {
\r
55 public void controlResized(ControlEvent e) {
\r
60 // this.addPaintListener(new PaintListener() {
\r
62 // public void paintControl(PaintEvent e) {
\r
63 // displaySystem.setCurrent();
\r
64 // JmeComposite.this.component.render();
\r
71 private void disableLog() {
\r
72 //URL url = FileLocator.find(org.simantics.proconf.g3d.Activator.getDefault().getBundle(),new Path("logging.properties"),null);
\r
75 LogManager.getLogManager().readConfiguration(org.simantics.proconf.g3d.Activator.getDefault().openStream(new Path("logging.properties")));
\r
76 } catch (Exception e) {
\r
77 ErrorLogger.defaultLogError(e);
\r
81 public void resize() {
\r
82 displaySystem.setCurrent();
\r
83 LWJGLRenderer renderer = (LWJGLRenderer) displaySystem.getRenderer();
\r
84 if (renderer!= null) {
\r
85 Rectangle r = new Rectangle(renderingCanvas.getClientArea().x,renderingCanvas.getClientArea().y, renderingCanvas.getClientArea().width, renderingCanvas.getClientArea().height );
\r
86 if (r.width > 0 && r.height > 0)
\r
87 renderer.reinit(r.width, r.height);
\r
88 component.resize(r.width, r.height);
\r
92 public GLCanvas getCanvas() {
\r
93 return renderingCanvas;
\r
96 public Renderer getRenderer() {
\r
97 return displaySystem.getRenderer();
\r
100 public void initGL() {
\r
101 component.init(displaySystem);
\r
104 public void dispose() {
\r
105 LWJGLRenderer renderer = (LWJGLRenderer) displaySystem.getRenderer();
\r
106 renderer.clearVBOCache();
\r
107 renderer.clearQueue();
\r
108 renderer.clearStatistics();
\r
109 renderingCanvas.dispose();
\r
110 if (displaySystem.destroy()) {
\r
112 TextureManager.doTextureCleanup();
\r
113 TextureManager.clearCache();
\r
114 ResourceTextureCache.getInstance().clear();
\r
119 public DisplaySystem getDisplaySystem() {
\r
120 return displaySystem;
\r