亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? surf.java

?? Jake2是一個Java 3D游戲引擎.
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
/* * Surf.java * Copyright (C) 2003 * * $Id: Surf.java,v 1.9 2005/06/08 21:27:10 cawe Exp $ *//*Copyright (C) 1997-2001 Id Software, Inc.This program is free software; you can redistribute it and/ormodify it under the terms of the GNU General Public Licenseas published by the Free Software Foundation; either version 2of 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 ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the GNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.*/package jake2.render.lwjgl;import jake2.Defines;import jake2.client.*;import jake2.game.cplane_t;import jake2.qcommon.Com;import jake2.render.*;import jake2.util.Lib;import jake2.util.Math3D;import java.nio.*;import java.util.Arrays;import org.lwjgl.BufferUtils;import org.lwjgl.opengl.GL11;/** * Surf *   * @author cwei */public abstract class Surf extends Draw {	// GL_RSURF.C: surface-related refresh code	float[] modelorg = {0, 0, 0};		// relative to viewpoint	msurface_t	r_alpha_surfaces;	static final int DYNAMIC_LIGHT_WIDTH = 128;	static final int DYNAMIC_LIGHT_HEIGHT = 128;	static final int LIGHTMAP_BYTES = 4;	static final int BLOCK_WIDTH = 128;	static final int BLOCK_HEIGHT = 128;	static final int MAX_LIGHTMAPS = 128;	int c_visible_lightmaps;	int c_visible_textures;	static final int GL_LIGHTMAP_FORMAT = GL11.GL_RGBA;	static class gllightmapstate_t 	{		int internal_format;		int current_lightmap_texture;		msurface_t[] lightmap_surfaces = new msurface_t[MAX_LIGHTMAPS];		int[] allocated = new int[BLOCK_WIDTH];		// the lightmap texture data needs to be kept in		// main memory so texsubimage can update properly		//byte[] lightmap_buffer = new byte[4 * BLOCK_WIDTH * BLOCK_HEIGHT];		IntBuffer lightmap_buffer = Lib.newIntBuffer(BLOCK_WIDTH * BLOCK_HEIGHT, ByteOrder.LITTLE_ENDIAN);						public gllightmapstate_t() {			for (int i = 0; i < MAX_LIGHTMAPS; i++)				lightmap_surfaces[i] = new msurface_t();		}				public void clearLightmapSurfaces() {			for (int i = 0; i < MAX_LIGHTMAPS; i++)				// TODO lightmap_surfaces[i].clear();				lightmap_surfaces[i] = new msurface_t();		}			} 	gllightmapstate_t gl_lms = new gllightmapstate_t();	// Model.java	abstract byte[] Mod_ClusterPVS(int cluster, model_t model);	// Warp.java	abstract void R_DrawSkyBox();	abstract void R_AddSkySurface(msurface_t surface);	abstract void R_ClearSkyBox();	abstract void EmitWaterPolys(msurface_t fa);	// Light.java	abstract void R_MarkLights (dlight_t light, int bit, mnode_t node);	abstract void R_SetCacheState( msurface_t surf );	abstract void R_BuildLightMap(msurface_t surf, IntBuffer dest, int stride);	/*	=============================================================		BRUSH MODELS	=============================================================	*/	/**	 * R_TextureAnimation	 * Returns the proper texture for a given time and base texture	 */	image_t R_TextureAnimation(mtexinfo_t tex)	{		if (tex.next == null)			return tex.image;		int c = currententity.frame % tex.numframes;		while (c != 0)		{			tex = tex.next;			c--;		}		return tex.image;	}	/**	 * DrawGLPoly	 */	void DrawGLPoly(glpoly_t p)	{		gl.glDrawArrays(GL11.GL_POLYGON, p.pos, p.numverts);	}	/**	 * DrawGLFlowingPoly	 * version that handles scrolling texture	 */	void DrawGLFlowingPoly(glpoly_t p)	{		float scroll = -64 * ( (r_newrefdef.time / 40.0f) - (int)(r_newrefdef.time / 40.0f) );		if(scroll == 0.0f)			scroll = -64.0f;		p.beginScrolling(scroll);		gl.glDrawArrays(GL11.GL_POLYGON, p.pos, p.numverts);		p.endScrolling();	}	/**	 * R_DrawTriangleOutlines	*/	void R_DrawTriangleOutlines()	{        if (gl_showtris.value == 0)            return;        gl.glDisable(GL11.GL_TEXTURE_2D);        gl.glDisable(GL11.GL_DEPTH_TEST);        gl.glColor4f(1, 1, 1, 1);        msurface_t surf;        glpoly_t p;        int j;	        for (int i = 0; i < MAX_LIGHTMAPS; i++) {             for (surf = gl_lms.lightmap_surfaces[i]; surf != null; surf = surf.lightmapchain) {                for (p = surf.polys; p != null; p = p.chain) {                    for (j = 2; j < p.numverts; j++) {                        gl.glBegin(GL11.GL_LINE_STRIP);						gl.glVertex3f(p.x(0), p.y(0), p.z(0));						gl.glVertex3f(p.x(j-1), p.y(j-1), p.z(j-1));						gl.glVertex3f(p.x(j), p.y(j), p.z(j));						gl.glVertex3f(p.x(0), p.y(0), p.z(0));                        gl.glEnd();                    }                }            }        }        gl.glEnable(GL11.GL_DEPTH_TEST);        gl.glEnable(GL11.GL_TEXTURE_2D);	}	private final IntBuffer temp2 = Lib.newIntBuffer(34 * 34, ByteOrder.LITTLE_ENDIAN);	/**	 * R_RenderBrushPoly	 */	void R_RenderBrushPoly(msurface_t fa)	{		c_brush_polys++;		image_t image = R_TextureAnimation(fa.texinfo);		if ((fa.flags & Defines.SURF_DRAWTURB) != 0)		{				GL_Bind( image.texnum );			// warp texture, no lightmaps			GL_TexEnv( GL11.GL_MODULATE );			gl.glColor4f( gl_state.inverse_intensity, 						gl_state.inverse_intensity,						gl_state.inverse_intensity,						1.0F );			EmitWaterPolys (fa);			GL_TexEnv( GL11.GL_REPLACE );			return;		}		else		{			GL_Bind( image.texnum );			GL_TexEnv( GL11.GL_REPLACE );		}		//	  ======		//	  PGM		if((fa.texinfo.flags & Defines.SURF_FLOWING) != 0)			DrawGLFlowingPoly(fa.polys);		else			DrawGLPoly (fa.polys);		//	  PGM		//	  ======		// ersetzt goto		boolean gotoDynamic = false;		/*		** check for lightmap modification		*/		int maps;		for ( maps = 0; maps < Defines.MAXLIGHTMAPS && fa.styles[maps] != (byte)255; maps++ )		{			if ( r_newrefdef.lightstyles[fa.styles[maps] & 0xFF].white != fa.cached_light[maps] ) {				gotoDynamic = true;				break;			}		}				// this is a hack from cwei		if (maps == 4) maps--;		// dynamic this frame or dynamic previously		boolean is_dynamic = false;		if ( gotoDynamic || ( fa.dlightframe == r_framecount ) )		{			//	label dynamic:			if ( gl_dynamic.value != 0 )			{				if (( fa.texinfo.flags & (Defines.SURF_SKY | Defines.SURF_TRANS33 | Defines.SURF_TRANS66 | Defines.SURF_WARP ) ) == 0)				{					is_dynamic = true;				}			}		}		if ( is_dynamic )		{			if ( ( (fa.styles[maps] & 0xFF) >= 32 || fa.styles[maps] == 0 ) && ( fa.dlightframe != r_framecount ) )			{				// ist ersetzt durch temp2:	unsigned	temp[34*34];				int smax, tmax;				smax = (fa.extents[0]>>4)+1;				tmax = (fa.extents[1]>>4)+1;				R_BuildLightMap( fa, temp2, smax);				R_SetCacheState( fa );				GL_Bind( gl_state.lightmap_textures + fa.lightmaptexturenum );				gl.glTexSubImage2D( GL11.GL_TEXTURE_2D, 0,								  fa.light_s, fa.light_t, 								  smax, tmax, 								  GL_LIGHTMAP_FORMAT, 								  GL11.GL_UNSIGNED_BYTE, temp2 );				fa.lightmapchain = gl_lms.lightmap_surfaces[fa.lightmaptexturenum];				gl_lms.lightmap_surfaces[fa.lightmaptexturenum] = fa;			}			else			{				fa.lightmapchain = gl_lms.lightmap_surfaces[0];				gl_lms.lightmap_surfaces[0] = fa;			}		}		else		{			fa.lightmapchain = gl_lms.lightmap_surfaces[fa.lightmaptexturenum];			gl_lms.lightmap_surfaces[fa.lightmaptexturenum] = fa;		}	}	/**	 * R_DrawAlphaSurfaces	 * Draw water surfaces and windows.	 * The BSP tree is waled front to back, so unwinding the chain	 * of alpha_surfaces will draw back to front, giving proper ordering.	 */	void R_DrawAlphaSurfaces()	{		r_world_matrix.clear();		//		// go back to the world matrix		//		gl.glLoadMatrix(r_world_matrix);		gl.glEnable (GL11.GL_BLEND);		GL_TexEnv(GL11.GL_MODULATE );				// the textures are prescaled up for a better lighting range,		// so scale it back down		float intens = gl_state.inverse_intensity;		gl.glInterleavedArrays(GL11.GL_T2F_V3F, Polygon.BYTE_STRIDE, globalPolygonInterleavedBuf);		for (msurface_t s = r_alpha_surfaces ; s != null ; s=s.texturechain)		{			GL_Bind(s.texinfo.image.texnum);			c_brush_polys++;			if ((s.texinfo.flags & Defines.SURF_TRANS33) != 0)				gl.glColor4f (intens, intens, intens, 0.33f);			else if ((s.texinfo.flags & Defines.SURF_TRANS66) != 0)				gl.glColor4f (intens, intens, intens, 0.66f);			else				gl.glColor4f (intens,intens,intens,1);			if ((s.flags & Defines.SURF_DRAWTURB) != 0)				EmitWaterPolys(s);			else if((s.texinfo.flags & Defines.SURF_FLOWING) != 0)			// PGM	9/16/98				DrawGLFlowingPoly(s.polys);							// PGM			else				DrawGLPoly(s.polys);		}		GL_TexEnv( GL11.GL_REPLACE );		gl.glColor4f (1,1,1,1);		gl.glDisable (GL11.GL_BLEND);		r_alpha_surfaces = null;	}	/**	 * DrawTextureChains	 */	void DrawTextureChains()	{		c_visible_textures = 0;		msurface_t	s;		image_t image;		int i;		for (i = 0; i < numgltextures ; i++)		{			image = gltextures[i];			if (image.registration_sequence == 0)				continue;			if (image.texturechain == null)				continue;			c_visible_textures++;			for ( s = image.texturechain; s != null ; s=s.texturechain)			{				if ( ( s.flags & Defines.SURF_DRAWTURB) == 0 )					R_RenderBrushPoly(s);			}		}		GL_EnableMultitexture( false );		for (i = 0; i < numgltextures ; i++)		{			image = gltextures[i];			if (image.registration_sequence == 0)				continue;			s = image.texturechain;			if (s == null)				continue;			for ( ; s != null ; s=s.texturechain)			{				if ( (s.flags & Defines.SURF_DRAWTURB) != 0 )					R_RenderBrushPoly(s);			}			image.texturechain = null;		}		GL_TexEnv( GL11.GL_REPLACE );	}	// direct buffer	private final IntBuffer temp = Lib.newIntBuffer(128 * 128, ByteOrder.LITTLE_ENDIAN);		/**	 * GL_RenderLightmappedPoly	 * @param surf	 */	void GL_RenderLightmappedPoly( msurface_t surf )	{		// ersetzt goto		boolean gotoDynamic = false;		int map;		for ( map = 0; map < Defines.MAXLIGHTMAPS && (surf.styles[map] != (byte)255); map++ )		{			if ( r_newrefdef.lightstyles[surf.styles[map] & 0xFF].white != surf.cached_light[map] ) {				gotoDynamic = true;				break;			}		}		// this is a hack from cwei		if (map == 4) map--;		// dynamic this frame or dynamic previously		boolean is_dynamic = false;		if ( gotoDynamic || ( surf.dlightframe == r_framecount ) )		{			//	label dynamic:			if ( gl_dynamic.value != 0 )			{				if ( (surf.texinfo.flags & (Defines.SURF_SKY | Defines.SURF_TRANS33 | Defines.SURF_TRANS66 | Defines.SURF_WARP )) == 0 )				{					is_dynamic = true;				}			}		}		glpoly_t p;		FloatBuffer texCoord = globalPolygonInterleavedBuf;		image_t image = R_TextureAnimation( surf.texinfo );		int lmtex = surf.lightmaptexturenum;		if ( is_dynamic )		{			// ist raus gezogen worden int[] temp = new int[128*128];

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区美女| 欧美aaaaa成人免费观看视频| 亚洲精品日产精品乱码不卡| 男女男精品视频网| 91蜜桃视频在线| 久久午夜国产精品| 天天综合日日夜夜精品| 成人av网在线| 精品伦理精品一区| 亚洲a一区二区| 色综合色综合色综合色综合色综合| 精品粉嫩超白一线天av| 调教+趴+乳夹+国产+精品| 一本色道久久综合亚洲aⅴ蜜桃 | www.欧美.com| 337p亚洲精品色噜噜狠狠| 一区在线观看免费| 从欧美一区二区三区| 精品区一区二区| 免费成人av资源网| 91精品蜜臀在线一区尤物| 亚洲风情在线资源站| 欧美午夜精品一区二区三区| 亚洲欧美福利一区二区| 成人av在线观| 国产精品全国免费观看高清| 国产精品99精品久久免费| 国产亚洲精品bt天堂精选| 国产真实乱偷精品视频免| 亚洲精品在线一区二区| 国产精品自在在线| 国产三级欧美三级日产三级99 | 日韩色视频在线观看| 久久久久久一级片| 亚洲美女偷拍久久| 国内精品伊人久久久久影院对白| 欧美丰满一区二区免费视频| 天天综合网 天天综合色| 欧美性生交片4| 日韩av电影免费观看高清完整版在线观看| 日本道在线观看一区二区| 亚洲一区二区欧美日韩| 欧美三级在线看| 日本欧美一区二区在线观看| 日韩欧美色电影| 国产91丝袜在线播放九色| 国产精品水嫩水嫩| 色婷婷综合激情| 日韩专区一卡二卡| 日韩久久精品一区| 国产精品一区二区久久精品爱涩| 久久久美女毛片| 青椒成人免费视频| 欧美电影在哪看比较好| 日本不卡视频在线| 国产日本欧洲亚洲| 欧美午夜精品久久久| 日韩电影免费在线| 久久先锋影音av鲁色资源网| 99国内精品久久| 午夜久久久久久电影| 精品日韩一区二区三区| 97国产一区二区| 首页国产欧美日韩丝袜| 26uuu亚洲综合色| 色婷婷激情综合| 精品一二线国产| 夜夜嗨av一区二区三区中文字幕| 在线成人免费视频| 成人精品视频一区二区三区尤物| 亚洲综合在线第一页| 久久伊人中文字幕| 欧美色手机在线观看| 国产a精品视频| 视频一区在线视频| 国产精品久久久久久久裸模| 欧美一区三区四区| 91一区二区三区在线播放| 久久疯狂做爰流白浆xx| 亚洲欧美日韩国产综合| 久久久久久久综合日本| 欧美精品乱人伦久久久久久| av男人天堂一区| 精品一区二区三区免费播放| 亚洲最快最全在线视频| 中文字幕欧美日本乱码一线二线 | 99久久夜色精品国产网站| 国产午夜精品久久久久久久| 亚洲一区视频在线| 日韩视频免费观看高清完整版在线观看 | 91蜜桃网址入口| 久久爱www久久做| 一区二区激情小说| 国产日产欧美一区二区三区| 免费观看在线色综合| 国产一区二区三区国产| 亚洲精品视频在线看| 久久蜜桃香蕉精品一区二区三区| 成人av动漫网站| 国产一区二区三区观看| 中文字幕av一区二区三区高| 在线精品视频免费播放| 成人午夜激情在线| 91高清视频免费看| 风流少妇一区二区| 国产亚洲欧美一区在线观看| 偷窥国产亚洲免费视频| 一区二区三区日韩精品| 自拍偷拍国产精品| 亚洲人成7777| 亚洲免费在线观看| 一区二区三区中文字幕| 亚洲精品成人精品456| 成人免费一区二区三区在线观看| 欧美国产一区视频在线观看| 久久久久久久久久久久久女国产乱| 精品噜噜噜噜久久久久久久久试看| 91精品国产综合久久香蕉麻豆| 色哟哟国产精品免费观看| 色久优优欧美色久优优| 色综合天天性综合| 在线影院国内精品| 亚洲一区二区精品久久av| 成人黄色国产精品网站大全在线免费观看| 亚洲高清在线视频| 日产国产欧美视频一区精品| 免费黄网站欧美| 国产麻豆一精品一av一免费 | 国产精品大尺度| 日韩美女久久久| 亚洲综合丁香婷婷六月香| 亚洲成a人片在线不卡一二三区 | 一区二区在线观看视频在线观看| 亚洲精品美腿丝袜| 日本视频中文字幕一区二区三区| 久久精品999| 成人精品视频一区| 91一区二区三区在线播放| 欧美日韩国产高清一区二区| 欧美一二三四在线| 国产肉丝袜一区二区| 一区二区三区视频在线看| 青青草一区二区三区| 国产大片一区二区| 日本久久精品电影| 欧美成人精品3d动漫h| 国产精品美女久久久久久久 | 欧美日韩一级视频| 欧美va亚洲va在线观看蝴蝶网| 国产欧美日韩不卡免费| 亚洲一区二区三区四区在线观看 | 在线日韩av片| 日韩精品专区在线| 最近中文字幕一区二区三区| 男女男精品视频| kk眼镜猥琐国模调教系列一区二区| 欧美色图12p| 欧美国产97人人爽人人喊| 亚洲国产另类精品专区| 国产精品18久久久久久久久| 欧美午夜一区二区三区| 精品福利av导航| 性做久久久久久免费观看欧美| 激情国产一区二区 | 精品va天堂亚洲国产| 亚洲狠狠丁香婷婷综合久久久| 国内精品国产成人国产三级粉色 | 丁香五精品蜜臀久久久久99网站| 欧美三片在线视频观看| 国产精品国产自产拍在线| 美女mm1313爽爽久久久蜜臀| 欧洲一区在线观看| 中文字幕在线不卡视频| 国产一区二区剧情av在线| 欧美精品日日鲁夜夜添| 亚洲免费观看视频| 波多野结衣精品在线| 欧美成人一区二区三区在线观看| 亚洲综合在线第一页| 成人av电影在线播放| 精品捆绑美女sm三区| 欧美aⅴ一区二区三区视频| 欧美色精品天天在线观看视频| 国产精品久久久久久户外露出 | 美女精品一区二区| 欧美日本国产视频| 亚洲曰韩产成在线| 99久久夜色精品国产网站| 国产欧美视频一区二区| 国产精品一区二区三区乱码| 日韩一级精品视频在线观看| 亚洲亚洲人成综合网络| 欧美亚一区二区| 亚洲国产一区视频| 欧美午夜精品一区| 亚洲国产综合91精品麻豆| 欧美亚洲一区二区三区四区| 亚洲一区二区三区精品在线| 在线免费观看成人短视频| 一区二区三区在线影院|