-
the 317 opengl project.
planned updates:
* add .OBJ model support so we can stop converting
* add fullscreen mode with display settings like resolution
* set up basic Opengl
* texture support and texture blending
* lighting effects and shadows
* Suggest any other....
updates with an underline are already finished.
____________________
Pictures:
* none yet, will come later
___________________
update log:
day 1: I've added fullscreen exclusive mode with for all bit modes, you can set refresh rate, resolution and 16 or 32 bit mode if you run slow, so if you normally run on 1024X760 u can set it too 800X600 but you are still in fullscreen,
day 2: I've been doing some research about opengl and it's very interesting.
i found a website with tons of tutorials about opengl in java and texturing, blending etcetera,
also, i've downloaded all files and tomorow i'm trying to put opengl in my 317 client.
NOTE:
i lost my client with this options going to start all over again.
__________________________________________________ ______
F.A.Q.
Q :if you finish this , will you release this?
A : yes, I will release most of the stuff yea,
Q: how long does it take untill it's finished?
A:no idea, i'm not really active at the moment because of school issues.
but i'll start working on it again later
_________________________________________________
PICTURES
[Only registered and activated users can see links. Click Here To Register...]
displaymodetest
_________________________________________________
codes:
Code:
/*
test @(#)DisplayModeTest.java 1.4 01/07/17
@bug 4189326
@summary Tests changing display mode
@author [email protected]: area=FullScreen
@ignore This test enters full-screen mode, if available, and should not
be run as an applet or as part of the test harness.
*/
/**
* This test generates a table of all available display modes, enters
* full-screen mode, if available, and allows you to change the display mode.
* The application should look fine under each enumerated display mode.
* On UNIX, only a single display mode should be available, and on Microsoft
* Windows, display modes should depend on direct draw availability and the
* type of graphics card.
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.table.*;
class DisplayModeModel extends DefaultTableModel {
private DisplayMode[] modes;
public DisplayModeModel(DisplayMode[] modes) {
this.modes = modes;
}
public DisplayMode getDisplayMode(int r) {
return modes[r];
}
public String getColumnName(int c) {
return DisplayModeTest.COLUMN_NAMES[c];
}
public int getColumnCount() {
return DisplayModeTest.COLUMN_WIDTHS.length;
}
public boolean isCellEditable(int r, int c) {
return false;
}
public int getRowCount() {
if (modes == null) {
return 0;
}
return modes.length;
}
public Object getValueAt(int rowIndex, int colIndex) {
DisplayMode dm = modes[rowIndex];
switch (colIndex) {
case DisplayModeTest.INDEX_WIDTH :
return Integer.toString(dm.getWidth());
case DisplayModeTest.INDEX_HEIGHT :
return Integer.toString(dm.getHeight());
case DisplayModeTest.INDEX_BITDEPTH : {
int bitDepth = dm.getBitDepth();
String ret;
if (bitDepth == DisplayMode.BIT_DEPTH_MULTI) {
ret = "Multi";
} else {
ret = Integer.toString(bitDepth);
}
return ret;
}
case DisplayModeTest.INDEX_REFRESHRATE : {
int refreshRate = dm.getRefreshRate();
String ret;
if (refreshRate == DisplayMode.REFRESH_RATE_UNKNOWN) {
ret = "Unknown";
} else {
ret = Integer.toString(refreshRate);
}
return ret;
}
}
throw new ArrayIndexOutOfBoundsException("Invalid column value");
}
}
public class DisplayModeTest extends JFrame implements ActionListener,
ListSelectionListener {
private boolean waiting = false;
private GraphicsDevice device;
private DisplayMode originalDM;
private JButton exit = new JButton("Exit");
private JButton changeDM = new JButton("Set Display");
private JLabel currentDM = new JLabel();
private JTable dmList = new JTable();
private JScrollPane dmPane = new JScrollPane(dmList);
private boolean isFullScreen = false;
public static final int INDEX_WIDTH = 0;
public static final int INDEX_HEIGHT = 1;
public static final int INDEX_BITDEPTH = 2;
public static final int INDEX_REFRESHRATE = 3;
public static final int[] COLUMN_WIDTHS = new int[] {
100, 100, 100, 100
};
public static final String[] COLUMN_NAMES = new String[] {
"Width", "Height", "Bit Depth", "Refresh Rate"
};
public DisplayModeTest(GraphicsDevice device) {
super(device.getDefaultConfiguration());
this.device = device;
setTitle("Display Mode Test");
originalDM = device.getDisplayMode();
setDMLabel(originalDM);
setDefaultCloseOperation(EXIT_ON_CLOSE);
// Make sure a DM is always selected in the list
exit.addActionListener(this);
changeDM.addActionListener(this);
changeDM.setEnabled(device.isDisplayChangeSupported());
}
public void actionPerformed(ActionEvent ev) {
Object source = ev.getSource();
if (source == exit) {
device.setDisplayMode(originalDM);
System.exit(0);
} else { // if (source == changeDM)
int index = dmList.getSelectionModel().getAnchorSelectionIndex();
if (index >= 0) {
DisplayModeModel model = (DisplayModeModel)dmList.getModel();
DisplayMode dm = model.getDisplayMode(index);
device.setDisplayMode(dm);
setDMLabel(dm);
setSize(new Dimension(dm.getWidth(), dm.getHeight()));
validate();
}
}
}
public void valueChanged(ListSelectionEvent ev) {
changeDM.setEnabled(device.isDisplayChangeSupported());
}
private void initComponents(Container c) {
setContentPane(c);
c.setLayout(new BorderLayout());
// Current DM
JPanel currentPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
c.add(currentPanel, BorderLayout.NORTH);
JLabel current = new JLabel("Current Display Mode : ");
currentPanel.add(current);
currentPanel.add(currentDM);
// Display Modes
JPanel modesPanel = new JPanel(new GridLayout(1, 2));
c.add(modesPanel, BorderLayout.CENTER);
// List of display modes
for (int i = 0; i < COLUMN_WIDTHS.length; i++) {
TableColumn col = new TableColumn(i, COLUMN_WIDTHS[i]);
col.setIdentifier(COLUMN_NAMES[i]);
col.setHeaderValue(COLUMN_NAMES[i]);
dmList.addColumn(col);
}
dmList.getSelectionModel().setSelectionMode(
ListSelectionModel.SINGLE_SELECTION);
dmList.getSelectionModel().addListSelectionListener(this);
modesPanel.add(dmPane);
// Controls
JPanel controlsPanelA = new JPanel(new BorderLayout());
modesPanel.add(controlsPanelA);
JPanel controlsPanelB = new JPanel(new GridLayout(2, 1));
controlsPanelA.add(controlsPanelB, BorderLayout.NORTH);
// Exit
JPanel exitPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
controlsPanelB.add(exitPanel);
exitPanel.add(exit);
// Change DM
JPanel changeDMPanel = new JPanel(new FlowLayout(FlowLayout.CENTER));
controlsPanelB.add(changeDMPanel);
changeDMPanel.add(changeDM);
controlsPanelA.add(new JPanel(), BorderLayout.CENTER);
}
public void setVisible(boolean isVis) {
super.setVisible(isVis);
if (isVis) {
dmList.setModel(new DisplayModeModel(device.getDisplayModes()));
}
}
public void setDMLabel(DisplayMode newMode) {
int bitDepth = newMode.getBitDepth();
int refreshRate = newMode.getRefreshRate();
String bd, rr;
if (bitDepth == DisplayMode.BIT_DEPTH_MULTI) {
bd = "Multi";
} else {
bd = Integer.toString(bitDepth);
}
if (refreshRate == DisplayMode.REFRESH_RATE_UNKNOWN) {
rr = "Unknown";
} else {
rr = Integer.toString(refreshRate);
}
currentDM.setText(
COLUMN_NAMES[INDEX_WIDTH] + ": " + newMode.getWidth() + " "
+ COLUMN_NAMES[INDEX_HEIGHT] + ": " + newMode.getHeight() + " "
+ COLUMN_NAMES[INDEX_BITDEPTH] + ": " + bd + " "
+ COLUMN_NAMES[INDEX_REFRESHRATE] + ": " + rr
);
}
public void begin() {
isFullScreen = device.isFullScreenSupported();
setUndecorated(isFullScreen);
setResizable(!isFullScreen);
if (isFullScreen) {
// Full-screen mode
device.setFullScreenWindow(this);
validate();
} else {
// Windowed mode
pack();
setVisible(true);
}
}
public static void main(String[] args) {
GraphicsEnvironment env = GraphicsEnvironment.
getLocalGraphicsEnvironment();
GraphicsDevice[] devices = env.getScreenDevices();
// REMIND : Multi-monitor full-screen mode not yet supported
for (int i = 0; i < 1 /* devices.length */; i++) {
DisplayModeTest test = new DisplayModeTest(devices[i]);
test.initComponents(test.getContentPane());
test.begin();
}
}
}
-
Good luck, what's opengl?
-
opengl is a way to increase your computer performance it's called hardware acceleration,
so you can have better graphics but good prestations
the new runescape hd uses opengl to do that too.
i'm trying to do the same
-
just go to 508 saves time
-
why? that ruins all the fun -.-
-
because jagex needed a team i dont think anyone will be able to do it alone
it will take over 6 months
-
it's just that the jagex project is just somewhat more a complicated scenario than this.
adding opengl support it self isn't that hard, but all the details around it needed for a good running respectable online game like runescape takes months indeed.
but i don't want to have a good running online game, i'm just learning.
and in that 6 months i have probally learned more than you. :P
-
nice this means we might go hd on a 317/377 nice gl with that hope it works out
-
good luck maan : D dont understand anything bout opengl X D
-
It's been quite a while since you've last posted, in any case. If you are still working on this project, I would be more than glad to help out with it. I too have been studying the OpenGL bindings, and I could be of use for writing 3D model loaders, such as 3DS, OBJ, X.