Java-Gaming.org Hi !
Featured games (90)
games approved by the League of Dukes
Games in Showcase (741)
Games in Android Showcase (225)
games submitted by our members
Games in WIP (823)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
   Home   Help   Search   Login   Register   
  Show Posts
Pages: [1]
1  Java Game APIs & Engines / JOGL Development / Re: Mystery problem with JOGL using display lists and texturing on: 2009-06-19 16:30:49
Ok last post on this topic - I promise....

First, thank you cylab, and bienator for your assistance!

The approach of loading the texture myself was a good step towards making this work.  Also the general idea that loading textures in the middle of a glNewList is a BAD THING turned out to be very accurate!  While it was working ok for small (256 x 256) png textures, the first time I hit a larger texture I got an access violation....in all three implementations of my program in jython, cpython and IronPython!  That forced me to think of a better way to handle this.  Now as I load the objects and materials that I'm going to draw into my application I just do a quick check for unloaded textures (instead of each time I draw them)!  In the cpython and IronPython versions I just load the unloaded textures.  In the jython version I just throw the texture names into a queue and then process the queue in the display method of the listener.  This seems to be rock solid and the jython version has very little extra overhead (just checking the queue each time in draw).

Thanks again for the help!

Regards,

David
2  Java Game APIs & Engines / JOGL Development / Re: Mystery problem with JOGL using display lists and texturing on: 2009-06-17 14:47:29
Well, despite limited knowledge about this I got mad at the problem and decided to try manually loading the texture 'the old fashioned way' without using TextureIO or even Texture.  After not understanding that I needed to 'rewind' my ByteBuffer for a little while  Huh  I managed to get the routine to work.  It just loads a texture and hands me back a texture id.  After I got the routine to work outside of glNewList I fearfully placed it after the glNewList and......it worked!!!

So my problem is solved.  Unfortunately, the mystery is not...but now I'm not sure I care  Smiley

I can understand that loading a texture while inside a glNewList is perhaps not a great idea in theory, but it does seem to work...just not with the TextureIO class.

Regards,

David

I will attach the test program's GLRenderer code...
3  Java Game APIs & Engines / JOGL Development / Re: Mystery problem with JOGL using display lists and texturing on: 2009-06-16 20:13:23
Quote
Move the loading of the texture outside of glNewList

that works....but I already knew that.  The reason that it is such a pain is that I'm lazy-loading the textures while I draw the 'faces' in my objects whenever I find a texture that is not already loaded.  I have a work around, but it requires that I 'pre-scan' each object for unloaded textures.  This results in an extra step and performance decrease that I'd love to avoid.  Does TextureIO work on a different thread or make state changes that could cause this?

This is doubly odd to me as really (true confession time), what I am doing is writing a python application.  I have a cpython version that uses pyOpengl, an IronPython version that uses OpenTK and the jython version using JOGL.  The other two work fine if I load the textures 'on the fly' while 'in' a glNewList  persecutioncomplex.  I figured that maybe jython was messing something up...but my ugly test program in java does the same exact thing.

Oh well I guess I will live with the issue and just not worry about it.   Undecided


Thanks,

David
4  Java Game APIs & Engines / JOGL Development / Re: Mystery problem with JOGL using display lists and texturing on: 2009-06-16 12:43:12
should have said JOGL version JSR-231 1.1.1  (windows....the version that is available to download currently).
5  Java Game APIs & Engines / JOGL Development / Re: Mystery problem with JOGL using display lists and texturing on: 2009-06-16 12:39:04
I should have mentioned I am using JOGL 1.1.1, Netbeans 6.7 RC2, and Java 6 update 12.

I will attach the console messages and the error report in hopes that they will help.  They give me no clues.  I can make this all work by simply moving the texture loading outside of the lines where the display list is being compiled.  I don't really want to do this in my 'real' application as it forces me to check each object for new textures before drawing it, which adds steps that I have not needed in very similar situations with other toolkits.  Let me know if there is anything else I can provide that will help decide if this is a bug or a 'feature'.

Thanks,

David
6  Java Game APIs & Engines / JOGL Development / Mystery problem with JOGL using display lists and texturing on: 2009-06-16 04:50:58
I'm lost....the attached programs blow up with an unexpected error in the Java runtime.  If I take out either the texture related commands OR the display list handling - it works.  Similar code works in c#/OpenTK and pyOpenGL.  I will attach both program files....but the relavant code will follow (just an ugly example):

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
    public void display(GLAutoDrawable drawable) {

        System.err.println("display");
        GL gl = drawable.getGL();

        // Clear the drawing area
        gl.glClear(GL.GL_COLOR_BUFFER_BIT | GL.GL_DEPTH_BUFFER_BIT);
        // Reset the current matrix to the "identity"
        gl.glLoadIdentity();

        // Move the "drawing cursor" around
        gl.glTranslatef(-1.5f, 0.0f, -6.0f);

        if (flag) {

            displaylist = gl.glGenLists(1);
            gl.glNewList(displaylist, GL.GL_COMPILE);
            if (texture == null) {
                try {
                    texture = TextureIO.newTexture(new File("C:\\Documents and Settings\\LD003\\My Documents\\Python Projects\\pyBzEdit2\\textures\\wall.png"), false);
                } catch (IOException e) {
                   
                }
                gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_S, GL.GL_REPEAT);
                gl.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_WRAP_T, GL.GL_REPEAT);
                texture.setTexParameteri(GL.GL_TEXTURE_MIN_FILTER, GL.GL_LINEAR);
                texture.setTexParameteri(GL.GL_TEXTURE_MAG_FILTER, GL.GL_LINEAR);
            }
            texture.enable();
            texture.bind();

            gl.glBegin(GL.GL_TRIANGLES);
            gl.glColor4f(1.0f, 1.0f, 1.0f, 1.0f);    // Set the current drawing color to white
            gl.glTexCoord2f(0.0f, 1.0f);
            gl.glVertex3f(0.0f, 1.0f, 0.0f);   // Top
            gl.glTexCoord2f(-1.0f, -1.0f);
            gl.glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
            gl.glTexCoord2f(1.0f, -1.0f);
            gl.glVertex3f(1.0f, -1.0f, 0.0f);  // Bottom Right
            // Finished Drawing The Triangle
            gl.glEnd();
            texture.disable();
            gl.glEndList();

            gl.glCallList(displaylist);

        } else {
            gl.glCallList(displaylist);
           
        }


        // Move the "drawing cursor" to another position
        gl.glTranslatef(3.0f, 0.0f, 0.0f);
        // Draw A Quad
        gl.glBegin(GL.GL_QUADS);
            gl.glColor4f(0.5f, 0.5f, 1.0f, 1.0f);    // Set the current drawing color to light blue
            gl.glVertex3f(-1.0f, 1.0f, 0.0f);  // Top Left
            gl.glVertex3f(1.0f, 1.0f, 0.0f);   // Top Right
            gl.glVertex3f(1.0f, -1.0f, 0.0f);  // Bottom Right
            gl.glVertex3f(-1.0f, -1.0f, 0.0f); // Bottom Left
        // Done Drawing The Quad
        gl.glEnd();

        // Flush all drawing operations to the graphics card
        gl.glFlush();
    }


7  Game Development / Newbie & Debugging Questions / Re: Problem with Split Pane, JOGL, GLCanvas on: 2009-06-09 23:12:04
For anyone else who comes across this.....the clue was in this discussion: http://www.java-gaming.org/topics/resizing-a-jsplitpane-causes-gleventlistener-s-to-be-called/19147/view.html

I was able to add the GLCanvas to a JScrollPane, change the horizontal and vertical ScrollBarPolicies to Never.  Then I had to change the Listener for the JScrollPane to resize the GLCanvas whenever the JScrollPane is resized.

After that I got the exact behivior that I was hoping for, with init() only called at the appropriate time, but with a fully functional GLCanvas.

Regards,

David
8  Game Development / Newbie & Debugging Questions / Re: Problem with Split Pane, JOGL, GLCanvas on: 2009-06-09 18:42:20
DOH!  Changed my search and found an answer in another section......please disregard or delete!

Sorry,

Daivd
9  Game Development / Newbie & Debugging Questions / Problem with Split Pane, JOGL, GLCanvas on: 2009-06-09 18:37:00
When I create a simple app with a split pane that contains a tree on the left and a glcanvas on the right everything seems to work ok.  Then, when I go to move the split, as soon as I click on the splitter to move it, the init method gets called on the gllistener.  This seems to imply that the GLContext has changed or gone away??  In order to compensate for this I will have to reload all my textures and display lists everytime someone changes the split.  This is not very good.  Is there a way to avoid this behavior?

I'm doing this in Jython....so to 'prove' that it happens with a normal java project I made the below program starting with the default JOGL GLCanvas project in Netbeans.  The same behavior happens.  Is there a way to initialize and 'hold' a GLContext so that I can make this work?  (I have not included the code for the generated GLRenderer.java because I did not change anything in it).

Thanks

1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
32  
33  
34  
35  
36  
37  
38  
39  
40  
41  
42  
43  
44  
45  
46  
47  
48  
49  
50  
51  
52  
53  
54  
55  
56  
57  
58  
59  
60  
61  
62  
63  
64  
65  
66  
67  
68  
69  
70  
71  
72  
73  
74  
75  
76  
77  
78  
79  
80  
81  
82  
83  
84  
85  
86  
87  
88  
89  
90  
91  
92  
93  
94  
95  
96  
97  
98  
99  
100  
101  
102  
103  
104  
105  
106  
107  
108  
109  
110  
111  
112  
113  
114  
115  
116  
117  
118  
119  
120  
121  
122  
123  
124  
125  
126  
127  
128  
129  
130  
131  
132  
133  
134  
135  
136  
137  
138  
139  
140  
141  
142  
143  
144  
145  
146  
147  
148  
149  
150  
151  
152  
153  
154  
155  
156  
157  
158  
159  
160  
161  
162  
163  
164  
165  
166  
167  
168  
169  
170  
171  
172  
173  
174  
175  
176  
177  
178  
/*
 * SimpleGLCanvas.java
 *
 * Created on 30. Juli 2008, 16:18
 */


package org.yourorghere;

import com.sun.opengl.util.Animator;
import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLCapabilities;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPopupMenu;
import javax.swing.JScrollPane;
import javax.swing.JSplitPane;
import javax.swing.JTree;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.UIManager;
import javax.swing.WindowConstants;

/**
 *
 * @author cylab
 * @author mbien
 */

public class SimpleGLCanvas extends JFrame {

    static {
        // When using a GLCanvas, we have to set the Popup-Menues to be HeavyWeight,
        // so they display properly on top of the GLCanvas
        JPopupMenu.setDefaultLightWeightPopupEnabled(false);
    }

    //private Animator animator;

    /** Creates new form MainFrame */
    public SimpleGLCanvas() {
        initComponents();
        setTitle("Simple JOGL Application");

        canvas.addGLEventListener(new GLRenderer());
        //animator = new Animator(canvas);

        // This is a workaround for the GLCanvas not adjusting its size, when the frame is resized.
        canvas.setMinimumSize(new Dimension());

        this.addWindowListener(new WindowAdapter() {

            @Override
            public void windowClosing(WindowEvent e) {
                // Run this on another thread than the AWT event queue to
                // make sure the call to Animator.stop() completes before
                // exiting
                new Thread(new Runnable() {

                    public void run() {
                        //animator.stop();
                        System.exit(0);
                    }
                }).start();
            }
        });
    }

    @Override
    public void setVisible(boolean show){
        //if(!show)
            //animator.stop();
        super.setVisible(show);
        //if(!show)
            //animator.start();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">
    private void initComponents() {
        JLabel label = new JLabel();
        jSplitPane1 = new JSplitPane();
        canvas = new GLCanvas(createGLCapabilites());
        jScrollPane1 = new JScrollPane();
        jTree1 = new JTree();

        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);

        label.setText("Below you see a GLCanvas");

        jSplitPane1.setRightComponent(canvas);

        jScrollPane1.setViewportView(jTree1);

        jSplitPane1.setLeftComponent(jScrollPane1);

        GroupLayout layout = new GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(Alignment.LEADING)
                    .addComponent(label)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(10, 10, 10)
                        .addComponent(jSplitPane1, GroupLayout.DEFAULT_SIZE, 627, Short.MAX_VALUE)))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(label)
                .addPreferredGap(ComponentPlacement.RELATED)
                .addComponent(jSplitPane1, GroupLayout.DEFAULT_SIZE, 447, Short.MAX_VALUE)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>

    /**
     * Called from within initComponents().
     * hint: to customize the generated code choose 'Customize Code' in the contextmenu
     * of the selected UI Component you wish to cutomize in design mode.
     * @return Returns customized GLCapabilities.
     */

    private GLCapabilities createGLCapabilites() {

        GLCapabilities capabilities = new GLCapabilities();
        capabilities.setHardwareAccelerated(true);

        // try to enable 2x anti aliasing - should be supported on most hardware
        capabilities.setNumSamples(2);
        capabilities.setSampleBuffers(true);

        return capabilities;
    }

    /**
    * @param args the command line arguments
    */

    public static void main(String args[]) {
        // Run this in the AWT event thread to prevent deadlocks and race conditions
        System.setProperty("sun.awt.noerasebackground", "true");
        EventQueue.invokeLater(new Runnable() {
            public void run() {

                // switch to system l&f for native font rendering etc.
                try{
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                }catch(Exception ex) {
                    Logger.getLogger(getClass().getName()).log(Level.INFO, "can not enable system look and feel", ex);
                }
                SimpleGLCanvas frame = new SimpleGLCanvas();
                frame.setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify
    private GLCanvas canvas;
    private JScrollPane jScrollPane1;
    private JSplitPane jSplitPane1;
    private JTree jTree1;
    // End of variables declaration

}


David
10  Java Game APIs & Engines / JOGL Development / Re: Exception when starting Netbeans after installing all jogl 0.5.3 plugins on: 2009-01-23 02:53:10
Thanks for the fast reply....I will check the plugin portal for an update.  Netbeans and jogl are making me rethink my choice to work on my latest project with opentk and .net/c#.

Regards,

David
11  Java Game APIs & Engines / JOGL Development / Exception when starting Netbeans after installing all jogl 0.5.3 plugins on: 2009-01-22 23:26:54
I installed Netbeans and the 0.5.3 version of the opengl pack today.  Netbeans has gotten WAY WAY better since the last time I looked at it (two years ago).  jogl looks very nice as well.  Just one issue....when I launch Netbeans now I get two exceptions:

javax.xml.bind.UnmarshalException: unexpected element (uri:"http://net/java/nativelibsupport/natives_config", local:"library"). Expected elements are <{}library>
   at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:556)
   at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:199)
   at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:194)
   at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:71)
   at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:962)
   at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:399)
   at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:380)
   at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:101)
   at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
   at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
   at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:626)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3095)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:921)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
   at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
   at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
   at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
   at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
   at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
   at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
   at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
   at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:195)
   at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:168)
   at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
   at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:184)
   at net.java.nativelibsupport.NativeLibSupport.deploy(NativeLibSupport.java:92)
   at net.java.nboglpack.gluegen.Installer.restored(Installer.java:25)
   at org.netbeans.core.startup.NbInstaller.loadCode(NbInstaller.java:419)
   at org.netbeans.core.startup.NbInstaller.load(NbInstaller.java:340)
   at org.netbeans.ModuleManager.enable(ModuleManager.java:906)
   at org.netbeans.core.startup.ModuleList.installNew(ModuleList.java:428)
   at org.netbeans.core.startup.ModuleList.trigger(ModuleList.java:364)
   at org.netbeans.core.startup.ModuleSystem.restore(ModuleSystem.java:276)
   at org.netbeans.core.startup.Main.getModuleSystem(Main.java:165)
   at org.netbeans.core.startup.Main.start(Main.java:312)
   at org.netbeans.core.startup.TopThreadGroup.run(TopThreadGroup.java:110)
   at java.lang.Thread.run(Thread.java:619)
Caused: java.lang.RuntimeException: error reading deployment file
   at net.java.nativelibsupport.NativeLibSupport.deploy(NativeLibSupport.java:96)
Caused: net.java.nativelibsupport.LibDeploymentException: can not deploy gluegen-rt natives
   at net.java.nativelibsupport.NativeLibSupport.deploy(NativeLibSupport.java:146)
   at net.java.nboglpack.gluegen.Installer.restored(Installer.java:25)
   at org.netbeans.core.startup.NbInstaller.loadCode(NbInstaller.java:419)
   at org.netbeans.core.startup.NbInstaller.load(NbInstaller.java:340)
   at org.netbeans.ModuleManager.enable(ModuleManager.java:906)
   at org.netbeans.core.startup.ModuleList.installNew(ModuleList.java:428)
   at org.netbeans.core.startup.ModuleList.trigger(ModuleList.java:364)
   at org.netbeans.core.startup.ModuleSystem.restore(ModuleSystem.java:276)
   at org.netbeans.core.startup.Main.getModuleSystem(Main.java:165)
   at org.netbeans.core.startup.Main.start(Main.java:312)
   at org.netbeans.core.startup.TopThreadGroup.run(TopThreadGroup.java:110)
[catch] at java.lang.Thread.run(Thread.java:619)

there is a second very similar exception after this one....but it is too many characters to post in this message!
lines that are different:
   at net.java.nboglpack.jogl.Installer.restored(Installer.java:28)
Caused: net.java.nativelibsupport.LibDeploymentException: can not deploy gluegen-rt natives
   at net.java.nboglpack.jogl.Installer.restored(Installer.java:28)

Oh....I have the latest version of the java jdk 6_11 I believe and the jogl demo programs run fine!  I have no idea where to start looking for the issue as I best know python and....err.... .net (/me ducks).  Can anyone point me in the right direction?  If this is the wrong place for this kind of question I apologize and will appreciate being re-directed.

Thanks,

David
Pages: [1]
 
xxMrPHDxx (18 views)
2017-11-21 16:21:00

xxMrPHDxx (11 views)
2017-11-21 16:14:31

xxMrPHDxx (14 views)
2017-11-21 16:10:57

Ecumene (114 views)
2017-09-30 02:57:34

theagentd (148 views)
2017-09-26 18:23:31

cybrmynd (248 views)
2017-08-02 12:28:51

cybrmynd (248 views)
2017-08-02 12:19:43

cybrmynd (244 views)
2017-08-02 12:18:09

Sralse (258 views)
2017-07-25 17:13:48

Archive (878 views)
2017-04-27 17:45:51
List of Learning Resources
by elect
2017-03-13 14:05:44

List of Learning Resources
by elect
2017-03-13 14:04:45

SF/X Libraries
by philfrei
2017-03-02 08:45:19

SF/X Libraries
by philfrei
2017-03-02 08:44:05

SF/X Libraries
by SkyAphid
2017-03-02 06:38:56

SF/X Libraries
by SkyAphid
2017-03-02 06:38:32

SF/X Libraries
by SkyAphid
2017-03-02 06:38:05

SF/X Libraries
by SkyAphid
2017-03-02 06:37:51
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!