diff options
Diffstat (limited to 'src/jake2/render/lwjgl/Misc.java')
-rw-r--r-- | src/jake2/render/lwjgl/Misc.java | 356 |
1 files changed, 147 insertions, 209 deletions
diff --git a/src/jake2/render/lwjgl/Misc.java b/src/jake2/render/lwjgl/Misc.java index bdce767..f51cd28 100644 --- a/src/jake2/render/lwjgl/Misc.java +++ b/src/jake2/render/lwjgl/Misc.java @@ -2,27 +2,27 @@ * Misc.java * Copyright (C) 2003 * - * $Id: Misc.java,v 1.8 2005-05-11 21:45:02 cawe Exp $ + * $Id: Misc.java,v 1.9 2006-10-31 13:06:32 salomo Exp $ */ /* -Copyright (C) 1997-2001 Id Software, Inc. + Copyright (C) 1997-2001 Id Software, Inc. -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. + This program is free software; you can redistribute it and/or + modify it under the terms of the GNU General Public License + as published by the Free Software Foundation; either version 2 + of the License, or (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -See the GNU General Public License for more details. + See the GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -*/ + */ package jake2.render.lwjgl; import jake2.Defines; @@ -41,227 +41,168 @@ import org.lwjgl.opengl.*; /** * Misc - * + * * @author cwei */ -public abstract class Misc extends Mesh { +public abstract class Misc extends Image { + + // /* + // ============================================================================== + // + // SCREEN SHOTS + // + // ============================================================================== + // */ + // + // typedef struct _TargaHeader { + // unsigned char id_length, colormap_type, image_type; + // unsigned short colormap_index, colormap_length; + // unsigned char colormap_size; + // unsigned short x_origin, y_origin, width, height; + // unsigned char pixel_size, attributes; + // } TargaHeader; - /* - ================== - R_InitParticleTexture - ================== - */ - byte[][] dottexture = - { - {0,0,0,0,0,0,0,0}, - {0,0,1,1,0,0,0,0}, - {0,1,1,1,1,0,0,0}, - {0,1,1,1,1,0,0,0}, - {0,0,1,1,0,0,0,0}, - {0,0,0,0,0,0,0,0}, - {0,0,0,0,0,0,0,0}, - {0,0,0,0,0,0,0,0}, - }; - - void R_InitParticleTexture() - { - int x,y; - byte[] data = new byte[8 * 8 * 4]; - - // - // particle texture - // - for (x=0 ; x<8 ; x++) - { - for (y=0 ; y<8 ; y++) - { - data[y * 32 + x * 4 + 0] = (byte)255; - data[y * 32 + x * 4 + 1] = (byte)255; - data[y * 32 + x * 4 + 2] = (byte)255; - data[y * 32 + x * 4 + 3] = (byte)(dottexture[x][y]*255); + private final static int TGA_HEADER_SIZE = 18; - } + /* + * ================== GL_ScreenShot_f ================== + */ + protected void GL_ScreenShot_f() { + StringBuffer sb = new StringBuffer(FS.Gamedir() + "/scrshot/jake00.tga"); + FS.CreatePath(sb.toString()); + File file = new File(sb.toString()); + // find a valid file name + int i = 0; + int offset = sb.length() - 6; + while (file.exists() && i++ < 100) { + sb.setCharAt(offset, (char) ((i / 10) + '0')); + sb.setCharAt(offset + 1, (char) ((i % 10) + '0')); + file = new File(sb.toString()); } - r_particletexture = GL_LoadPic("***particle***", data, 8, 8, it_sprite, 32); - - // - // also use this for bad textures, but without alpha - // - for (x=0 ; x<8 ; x++) - { - for (y=0 ; y<8 ; y++) - { - data[y * 32 + x * 4 + 0] = (byte)(dottexture[x&3][y&3]*255); - data[y * 32 + x * 4 + 1] = 0; // dottexture[x&3][y&3]*255; - data[y * 32 + x * 4 + 2] = 0; //dottexture[x&3][y&3]*255; - data[y * 32 + x * 4 + 3] = (byte)255; - } + if (i == 100) { + VID.Printf(Defines.PRINT_ALL, "Clean up your screenshots\n"); + return; } - r_notexture = GL_LoadPic("***r_notexture***", data, 8, 8, it_wall, 32); - } -// /* -// ============================================================================== -// -// SCREEN SHOTS -// -// ============================================================================== -// */ -// -// typedef struct _TargaHeader { -// unsigned char id_length, colormap_type, image_type; -// unsigned short colormap_index, colormap_length; -// unsigned char colormap_size; -// unsigned short x_origin, y_origin, width, height; -// unsigned char pixel_size, attributes; -// } TargaHeader; + try { + RandomAccessFile out = new RandomAccessFile(file, "rw"); + FileChannel ch = out.getChannel(); + int fileLength = TGA_HEADER_SIZE + vid.width * vid.height * 3; + out.setLength(fileLength); + MappedByteBuffer image = ch.map(FileChannel.MapMode.READ_WRITE, 0, + fileLength); + + // write the TGA header + image.put(0, (byte) 0).put(1, (byte) 0); + image.put(2, (byte) 2); // uncompressed type + image.put(12, (byte) (vid.width & 0xFF)); // vid.width + image.put(13, (byte) (vid.width >> 8)); // vid.width + image.put(14, (byte) (vid.height & 0xFF)); // vid.height + image.put(15, (byte) (vid.height >> 8)); // vid.height + image.put(16, (byte) 24); // pixel size + + // go to image data position + image.position(TGA_HEADER_SIZE); + + // change pixel alignment for reading + if (vid.width % 4 != 0) { + gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, 1); + } - private final static int TGA_HEADER_SIZE = 18; - - /* - ================== - GL_ScreenShot_f - ================== - */ - void GL_ScreenShot_f() { - StringBuffer sb = new StringBuffer(FS.Gamedir() + "/scrshot/jake00.tga"); - FS.CreatePath(sb.toString()); - File file = new File(sb.toString()); - // find a valid file name - int i = 0; int offset = sb.length() - 6; - while (file.exists() && i++ < 100) { - sb.setCharAt(offset, (char) ((i/10) + '0')); - sb.setCharAt(offset + 1, (char) ((i%10) + '0')); - file = new File(sb.toString()); - } - if (i == 100) { - VID.Printf(Defines.PRINT_ALL, "Clean up your screenshots\n"); - return; - } - - try { - RandomAccessFile out = new RandomAccessFile(file, "rw"); - FileChannel ch = out.getChannel(); - int fileLength = TGA_HEADER_SIZE + vid.width * vid.height * 3; - out.setLength(fileLength); - MappedByteBuffer image = ch.map(FileChannel.MapMode.READ_WRITE, 0, - fileLength); - - // write the TGA header - image.put(0, (byte) 0).put(1, (byte) 0); - image.put(2, (byte) 2); // uncompressed type - image.put(12, (byte) (vid.width & 0xFF)); // vid.width - image.put(13, (byte) (vid.width >> 8)); // vid.width - image.put(14, (byte) (vid.height & 0xFF)); // vid.height - image.put(15, (byte) (vid.height >> 8)); // vid.height - image.put(16, (byte) 24); // pixel size - - // go to image data position - image.position(TGA_HEADER_SIZE); - - - // change pixel alignment for reading - if (vid.width % 4 != 0) { - gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, 1); - } - - // OpenGL 1.2+ supports the GL_BGR color format - // check the GL_VERSION to use the TARGA BGR order if possible - // e.g.: 1.5.2 NVIDIA 66.29 - if (gl_config.getOpenGLVersion() >= 1.2f) { - // read the BGR values into the image buffer - gl.glReadPixels(0, 0, vid.width, vid.height, GL12.GL_BGR, GL.GL_UNSIGNED_BYTE, image); - } else { - // read the RGB values into the image buffer - gl.glReadPixels(0, 0, vid.width, vid.height, GL11.GL_RGB, GL.GL_UNSIGNED_BYTE, image); - // flip RGB to BGR - byte tmp; - for (i = TGA_HEADER_SIZE; i < fileLength; i += 3) { - tmp = image.get(i); - image.put(i, image.get(i + 2)); - image.put(i + 2, tmp); - } - } - // reset to default alignment - gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, 4); - // close the file channel - ch.close(); - } catch (IOException e) { - VID.Printf(Defines.PRINT_ALL, e.getMessage() + '\n'); - } - - VID.Printf(Defines.PRINT_ALL, "Wrote " + file + '\n'); - } + // OpenGL 1.2+ supports the GL_BGR color format + // check the GL_VERSION to use the TARGA BGR order if possible + // e.g.: 1.5.2 NVIDIA 66.29 + if (gl_config.getOpenGLVersion() >= 1.2f) { + // read the BGR values into the image buffer + gl.glReadPixels(0, 0, vid.width, vid.height, GL12.GL_BGR, + GL.GL_UNSIGNED_BYTE, image); + } else { + // read the RGB values into the image buffer + gl.glReadPixels(0, 0, vid.width, vid.height, GL11.GL_RGB, + GL.GL_UNSIGNED_BYTE, image); + // flip RGB to BGR + byte tmp; + for (i = TGA_HEADER_SIZE; i < fileLength; i += 3) { + tmp = image.get(i); + image.put(i, image.get(i + 2)); + image.put(i + 2, tmp); + } + } + // reset to default alignment + gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, 4); + // close the file channel + ch.close(); + } catch (IOException e) { + VID.Printf(Defines.PRINT_ALL, e.getMessage() + '\n'); + } - /* - ** GL_Strings_f - */ - void GL_Strings_f() { - VID.Printf(Defines.PRINT_ALL, "GL_VENDOR: " + gl_config.vendor_string + '\n'); - VID.Printf(Defines.PRINT_ALL, "GL_RENDERER: " + gl_config.renderer_string + '\n'); - VID.Printf(Defines.PRINT_ALL, "GL_VERSION: " + gl_config.version_string + '\n'); - VID.Printf(Defines.PRINT_ALL, "GL_EXTENSIONS: " + gl_config.extensions_string + '\n'); + VID.Printf(Defines.PRINT_ALL, "Wrote " + file + '\n'); } /* - ** GL_SetDefaultState - */ - void GL_SetDefaultState() - { - gl.glClearColor(1f,0f, 0.5f , 0.5f); // original quake2 - //gl.glClearColor(0, 0, 0, 0); // replaced with black + * * GL_SetDefaultState + */ + protected void GL_SetDefaultState() { + gl.glClearColor(1f, 0f, 0.5f, 0.5f); // original quake2 + // gl.glClearColor(0, 0, 0, 0); // replaced with black gl.glCullFace(GL11.GL_FRONT); gl.glEnable(GL11.GL_TEXTURE_2D); gl.glEnable(GL11.GL_ALPHA_TEST); gl.glAlphaFunc(GL11.GL_GREATER, 0.666f); - gl.glDisable (GL11.GL_DEPTH_TEST); - gl.glDisable (GL11.GL_CULL_FACE); - gl.glDisable (GL11.GL_BLEND); + gl.glDisable(GL11.GL_DEPTH_TEST); + gl.glDisable(GL11.GL_CULL_FACE); + gl.glDisable(GL11.GL_BLEND); + + gl.glColor4f(1, 1, 1, 1); - gl.glColor4f (1,1,1,1); + gl.glPolygonMode(GL11.GL_FRONT_AND_BACK, GL11.GL_FILL); + gl.glShadeModel(GL11.GL_FLAT); - gl.glPolygonMode (GL11.GL_FRONT_AND_BACK, GL11.GL_FILL); - gl.glShadeModel (GL11.GL_FLAT); + GL_TextureMode(gl_texturemode.string); + GL_TextureAlphaMode(gl_texturealphamode.string); + GL_TextureSolidMode(gl_texturesolidmode.string); - GL_TextureMode( gl_texturemode.string ); - GL_TextureAlphaMode( gl_texturealphamode.string ); - GL_TextureSolidMode( gl_texturesolidmode.string ); + gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, + gl_filter_min); + gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, + gl_filter_max); - gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, gl_filter_min); - gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, gl_filter_max); + gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, + GL11.GL_REPEAT); + gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, + GL11.GL_REPEAT); - gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_REPEAT); - gl.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_REPEAT); + gl.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); - gl.glBlendFunc (GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL_TexEnv(GL11.GL_REPLACE); - GL_TexEnv( GL11.GL_REPLACE ); + if (qglPointParameterfEXT) { + // float[] attenuations = { gl_particle_att_a.value, + // gl_particle_att_b.value, gl_particle_att_c.value }; + FloatBuffer att_buffer = BufferUtils.createFloatBuffer(4); + att_buffer.put(0, gl_particle_att_a.value); + att_buffer.put(1, gl_particle_att_b.value); + att_buffer.put(2, gl_particle_att_c.value); - if ( qglPointParameterfEXT ) - { - // float[] attenuations = { gl_particle_att_a.value, gl_particle_att_b.value, gl_particle_att_c.value }; - FloatBuffer att_buffer=BufferUtils.createFloatBuffer(4); - att_buffer.put(0,gl_particle_att_a.value); - att_buffer.put(1,gl_particle_att_b.value); - att_buffer.put(2,gl_particle_att_c.value); - - gl.glEnable( GL11.GL_POINT_SMOOTH ); - gl.glPointParameterfEXT( EXTPointParameters.GL_POINT_SIZE_MIN_EXT, gl_particle_min_size.value ); - gl.glPointParameterfEXT( EXTPointParameters.GL_POINT_SIZE_MAX_EXT, gl_particle_max_size.value ); - gl.glPointParameterEXT( EXTPointParameters.GL_DISTANCE_ATTENUATION_EXT, att_buffer ); + gl.glEnable(GL11.GL_POINT_SMOOTH); + gl.glPointParameterfEXT(EXTPointParameters.GL_POINT_SIZE_MIN_EXT, + gl_particle_min_size.value); + gl.glPointParameterfEXT(EXTPointParameters.GL_POINT_SIZE_MAX_EXT, + gl_particle_max_size.value); + gl.glPointParameterEXT( + EXTPointParameters.GL_DISTANCE_ATTENUATION_EXT, att_buffer); } - if ( qglColorTableEXT && gl_ext_palettedtexture.value != 0.0f ) - { - gl.glEnable( EXTSharedTexturePalette.GL_SHARED_TEXTURE_PALETTE_EXT ); + if (qglColorTableEXT && gl_ext_palettedtexture.value != 0.0f) { + gl.glEnable(EXTSharedTexturePalette.GL_SHARED_TEXTURE_PALETTE_EXT); - GL_SetTexturePalette( d_8to24table ); + GL_SetTexturePalette(d_8to24table); } GL_UpdateSwapInterval(); - + /* * vertex array extension */ @@ -270,13 +211,10 @@ public abstract class Misc extends Mesh { gl.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY); } - void GL_UpdateSwapInterval() - { - if ( gl_swapinterval.modified ) - { + protected void GL_UpdateSwapInterval() { + if (gl_swapinterval.modified) { gl_swapinterval.modified = false; - if ( !gl_state.stereo_enabled ) - { + if (!gl_state.stereo_enabled) { if (qwglSwapIntervalEXT) { // ((WGL)gl).wglSwapIntervalEXT((int)gl_swapinterval.value); } |