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

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

?? gameswf_render_handler_xbox.cpp

?? 一個開源的嵌入式flash播放器的源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
// gameswf_render_handler_xbox.cpp	-- Thatcher Ulrich <http://tulrich.com> 2003// This source code has been donated to the Public Domain.  Do// whatever you want with it.// A gameswf::render_handler that uses Xbox API's#ifdef _XBOX#include "gameswf.h"#include "gameswf/gameswf_log.h"#include "gameswf_types.h"#include "base/image.h"#include "base/container.h"#include <xtl.h>#include <d3d8.h>#include <string.h>namespace{	array<IDirect3DBaseTexture8*>	s_d3d_textures;	DWORD	s_vshader_handle = 0;	// Our vertex coords consist of two signed 16-bit integers, for (x,y) position only.	DWORD	s_vshader_decl[] =	{		D3DVSD_STREAM(0),		D3DVSD_REG(0, D3DVSDT_SHORT2),		0xFFFFFFFF	};	void	init_vshader()	// Initialize the vshader we use for SWF mesh rendering.	{		if (s_vshader_handle == 0)		{			HRESULT	result;			/* Shader source:				xvs.1.1				#pragma screenspace				mov	oD0, v3				dp4 oPos.x, v0, c[0]	// Transform position				dp4 oPos.y, v0, c[1]				dp4 oPos.z, v0, c[2]				dp4 oPos.w, v0, c[3]				dp4 oT0.x, v0, c[4]	// texgen				dp4 oT0.y, v0, c[5]			   Compile that with xsasm -h sometmp.vsh, and insert the contents of sometmp.h below:			*/			static const DWORD	s_compiled_shader[] =			{				0x00072078,				0x00000000, 0x0020061b, 0x0836106c, 0x2070f818,				0x00000000, 0x00ec001b, 0x0836186c, 0x20708800,				0x00000000, 0x00ec201b, 0x0836186c, 0x20704800,				0x00000000, 0x00ec401b, 0x0836186c, 0x20702800,				0x00000000, 0x00ec601b, 0x0836186c, 0x20701800,				0x00000000, 0x00ec801b, 0x0836186c, 0x20708848,				0x00000000, 0x00eca01b, 0x0836186c, 0x20704849			};			result = IDirect3DDevice8::CreateVertexShader(				s_vshader_decl,				s_compiled_shader,				&s_vshader_handle,				D3DUSAGE_PERSISTENTDIFFUSE);			if (result != S_OK)			{				gameswf::log_error("error: can't create Xbox vshader; error code = %d\n", result);				return;			}		}	}};// bitmap_info_xbox declarationstruct bitmap_info_xbox : public gameswf::bitmap_info{	bitmap_info_xbox(create_empty e);	bitmap_info_xbox(image::rgb* im);	bitmap_info_xbox(image::rgba* im);	virtual void set_alpha_image(int width, int height, Uint8* data);};struct render_handler_xbox : public gameswf::render_handler{	// Some renderer state.	gameswf::matrix	m_viewport_matrix;	gameswf::matrix	m_current_matrix;	gameswf::cxform	m_current_cxform;		void set_antialiased(bool enable)	{		// not supported	}	static void make_next_miplevel(int* width, int* height, Uint8* data)	// Utility.  Mutates *width, *height and *data to create the	// next mip level.	{		assert(width);		assert(height);		assert(data);		int	new_w = *width >> 1;		int	new_h = *height >> 1;		if (new_w < 1) new_w = 1;		if (new_h < 1) new_h = 1;				if (new_w * 2 != *width	 || new_h * 2 != *height)		{			// Image can't be shrunk along (at least) one			// of its dimensions, so don't bother			// resampling.	Technically we should, but			// it's pretty useless at this point.  Just			// change the image dimensions and leave the			// existing pixels.		}		else		{			// Resample.  Simple average 2x2 --> 1, in-place.			for (int j = 0; j < new_h; j++) {				Uint8*	out = ((Uint8*) data) + j * new_w;				Uint8*	in = ((Uint8*) data) + (j << 1) * *width;				for (int i = 0; i < new_w; i++) {					int	a;					a = (*(in + 0) + *(in + 1) + *(in + 0 + *width) + *(in + 1 + *width));					*(out) = (Uint8) (a >> 2);					out++;					in += 2;				}			}		}		// Munge parameters to reflect the shrunken image.		*width = new_w;		*height = new_h;	}	struct fill_style	{		enum mode		{			INVALID,			COLOR,			BITMAP_WRAP,			BITMAP_CLAMP,			LINEAR_GRADIENT,			RADIAL_GRADIENT,		};		mode	m_mode;		gameswf::rgba	m_color;		const gameswf::bitmap_info*	m_bitmap_info;		gameswf::matrix	m_bitmap_matrix;		gameswf::cxform	m_bitmap_color_transform;		bool	m_has_nonzero_bitmap_additive_color;		fill_style()			:			m_mode(INVALID),			m_has_nonzero_bitmap_additive_color(false)		{		}		void	apply(/*const matrix& current_matrix*/) const		// Push our style into D3D.		{			assert(m_mode != INVALID);			if (m_mode == COLOR)			{				apply_color(m_color);				IDirect3DDevice8::SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_DISABLE);				//IDirect3DDevice8::SetRenderState(state, value);//				glDisable(GL_TEXTURE_2D);			}			else if (m_mode == BITMAP_WRAP				 || m_mode == BITMAP_CLAMP)			{				assert(m_bitmap_info != NULL);				apply_color(m_color);				if (m_bitmap_info == NULL)				{					IDirect3DDevice8::SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_DISABLE);					//glDisable(GL_TEXTURE_2D);				}				else				{					// Set up the texture for rendering.					{						// Do the modulate part of the color						// transform in the first pass.  The						// additive part, if any, needs to						// happen in a second pass.// 						glColor4f(m_bitmap_color_transform.m_[0][0],// 							  m_bitmap_color_transform.m_[1][0],// 							  m_bitmap_color_transform.m_[2][0],// 							  m_bitmap_color_transform.m_[3][0]// 							  );						IDirect3DDevice8::SetVertexData4f(							D3DVSDE_DIFFUSE, 							m_bitmap_color_transform.m_[0][0],							m_bitmap_color_transform.m_[1][0],							m_bitmap_color_transform.m_[2][0],							m_bitmap_color_transform.m_[3][0]);					}//					glBindTexture(GL_TEXTURE_2D, m_bitmap_info->m_texture_id);//					glEnable(GL_TEXTURE_2D);//					glEnable(GL_TEXTURE_GEN_S);//					glEnable(GL_TEXTURE_GEN_T);					IDirect3DDevice8::SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_MODULATE);					IDirect3DDevice8::SetTexture(0, s_d3d_textures[m_bitmap_info->m_texture_id]);									if (m_mode == BITMAP_CLAMP)					{//						glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);//						glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);						IDirect3DDevice8::SetTextureStageState(0, D3DTSS_ADDRESSU, D3DTADDRESS_CLAMP);						IDirect3DDevice8::SetTextureStageState(0, D3DTSS_ADDRESSV, D3DTADDRESS_CLAMP);					}					else					{						assert(m_mode == BITMAP_WRAP);//						glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);//						glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);						IDirect3DDevice8::SetTextureStageState(0, D3DTSS_ADDRESSU, D3DTADDRESS_WRAP);						IDirect3DDevice8::SetTextureStageState(0, D3DTSS_ADDRESSV, D3DTADDRESS_WRAP);					}					// Set up the bitmap matrix for texgen.					float	inv_width = 1.0f / m_bitmap_info->m_original_width;					float	inv_height = 1.0f / m_bitmap_info->m_original_height;					const gameswf::matrix&	m = m_bitmap_matrix;//					glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);					float	p[4] = { 0, 0, 0, 0 };					p[0] = m.m_[0][0] * inv_width;					p[1] = m.m_[0][1] * inv_width;					p[3] = m.m_[0][2] * inv_width;//					glTexGenfv(GL_S, GL_OBJECT_PLANE, p);					IDirect3DDevice8::SetVertexShaderConstant(4, p, 1);//					glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_OBJECT_LINEAR);					p[0] = m.m_[1][0] * inv_height;					p[1] = m.m_[1][1] * inv_height;					p[3] = m.m_[1][2] * inv_height;//					glTexGenfv(GL_T, GL_OBJECT_PLANE, p);					IDirect3DDevice8::SetVertexShaderConstant(5, p, 1);				}			}		}		bool	needs_second_pass() const		// Return true if we need to do a second pass to make		// a valid color.  This is for cxforms with additive		// parts.		{			if (m_mode == BITMAP_WRAP			    || m_mode == BITMAP_CLAMP)			{				return m_has_nonzero_bitmap_additive_color;			}			else			{				return false;			}		}		void	apply_second_pass() const		// Set D3D state for a necessary second pass.		{			assert(needs_second_pass());			// Additive color.			IDirect3DDevice8::SetVertexData4f(				D3DVSDE_DIFFUSE,				m_bitmap_color_transform.m_[0][1] / 255.0f,				m_bitmap_color_transform.m_[1][1] / 255.0f,				m_bitmap_color_transform.m_[2][1] / 255.0f,				m_bitmap_color_transform.m_[3][1] / 255.0f				);			IDirect3DDevice8::SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);			IDirect3DDevice8::SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);#if 0			glDisable(GL_TEXTURE_2D);			glColor4f(				m_bitmap_color_transform.m_[0][1] / 255.0f,				m_bitmap_color_transform.m_[1][1] / 255.0f,				m_bitmap_color_transform.m_[2][1] / 255.0f,				m_bitmap_color_transform.m_[3][1] / 255.0f				);			glBlendFunc(GL_ONE, GL_ONE);#endif // 0		}		void	cleanup_second_pass() const		{			IDirect3DDevice8::SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);			IDirect3DDevice8::SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);#if 0			glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);#endif // 0		}		void	disable() { m_mode = INVALID; }		void	set_color(gameswf::rgba color) { m_mode = COLOR; m_color = color; }		void	set_bitmap(const gameswf::bitmap_info* bi, const gameswf::matrix& m, bitmap_wrap_mode wm, const gameswf::cxform& color_transform)		{			m_mode = (wm == WRAP_REPEAT) ? BITMAP_WRAP : BITMAP_CLAMP;			m_color = gameswf::rgba();			m_bitmap_info = bi;			m_bitmap_matrix = m;			m_bitmap_color_transform = color_transform;			if (m_bitmap_color_transform.m_[0][1] > 1.0f			    || m_bitmap_color_transform.m_[1][1] > 1.0f			    || m_bitmap_color_transform.m_[2][1] > 1.0f			    || m_bitmap_color_transform.m_[3][1] > 1.0f)			{				m_has_nonzero_bitmap_additive_color = true;			}			else			{				m_has_nonzero_bitmap_additive_color = false;			}		}		bool	is_valid() const { return m_mode != INVALID; }	};	render_handler_xbox()	// Constructor.	{		init_vshader();	}	// Style state.	enum style_index	{		LEFT_STYLE = 0,		RIGHT_STYLE,		LINE_STYLE,		STYLE_COUNT	};	fill_style	m_current_styles[STYLE_COUNT];	gameswf::bitmap_info*	create_bitmap_info(image::rgb* im)	// Given an image, returns a pointer to a bitmap_info struct	// that can later be passed to fill_styleX_bitmap(), to set a	// bitmap fill style.	{		return new bitmap_info_xbox(im);	}	gameswf::bitmap_info*	create_bitmap_info(image::rgba* im)	// Given an image, returns a pointer to a bitmap_info struct	// that can later be passed to fill_style_bitmap(), to set a	// bitmap fill style.	//	// This version takes an image with an alpha channel.	{		return new bitmap_info_xbox(im);	}	gameswf::bitmap_info*	create_bitmap_info_blank()	// Creates and returns an empty bitmap_info structure.	Image data	// can be bound to this info later, via set_alpha_image().	{		return new bitmap_info_xbox(gameswf::bitmap_info::empty);	}	void	set_alpha_image(gameswf::bitmap_info* bi, int w, int h, Uint8* data)	// Set the specified bitmap_info so that it contains an alpha	// texture with the given data (1 byte per texel).

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
处破女av一区二区| 一本久久综合亚洲鲁鲁五月天 | 久久99国产精品久久99果冻传媒| 日本欧美韩国一区三区| 国产精品一区二区三区乱码| av动漫一区二区| 欧美一卡在线观看| 中文无字幕一区二区三区| 国产欧美精品区一区二区三区| 综合久久给合久久狠狠狠97色| 日韩国产在线一| 国产成人av电影在线| 欧美日韩精品欧美日韩精品一| 国产日产欧美一区| 三级亚洲高清视频| 99久久综合狠狠综合久久| 日韩欧美二区三区| 亚洲精品视频在线观看网站| 久久av中文字幕片| 欧美日韩精品一区二区三区| 国产日产欧美一区二区三区 | 久久 天天综合| 91久久线看在观草草青青| 久久久激情视频| 日本三级亚洲精品| 在线亚洲一区观看| 中文字幕一区二区在线观看| 亚洲风情在线资源站| 成人午夜伦理影院| 欧美va亚洲va| 青娱乐精品视频在线| 国产aⅴ精品一区二区三区色成熟| 51久久夜色精品国产麻豆| 91久久精品日日躁夜夜躁欧美| 亚洲色欲色欲www| 国产精品不卡在线观看| 捆绑调教一区二区三区| 欧美日本在线一区| 一区二区三区国产| 91最新地址在线播放| 中文字幕中文字幕在线一区 | 91麻豆精品国产91久久久久| 中文字幕一区在线| 风间由美中文字幕在线看视频国产欧美| 亚洲视频一区二区免费在线观看| 国产一区二区三区四区在线观看| 日韩一区二区精品| 男人的j进女人的j一区| 91精品久久久久久蜜臀| 亚洲大片在线观看| 99久久久精品免费观看国产蜜| 久久精品夜色噜噜亚洲a∨| 国产精品一区免费视频| 久久久久高清精品| 国产精品一级片| 久久老女人爱爱| 成人深夜福利app| 亚洲国产成人在线| 黄页视频在线91| 久久久久久久久97黄色工厂| 大美女一区二区三区| 国产精品美女久久久久高潮| 91在线一区二区三区| 国产精品午夜在线| 国产精品18久久久久久久久久久久| 91精品欧美久久久久久动漫| 极品少妇一区二区| 国产精品毛片无遮挡高清| 色噜噜狠狠一区二区三区果冻| 亚洲一区二区视频| 日韩欧美另类在线| 三级不卡在线观看| 日韩女优毛片在线| 国产麻豆精品视频| 亚洲三级久久久| 欧美男男青年gay1069videost| 久久av老司机精品网站导航| 欧美成人aa大片| 91在线视频免费91| 肉丝袜脚交视频一区二区| 久久久国产午夜精品| 91美女蜜桃在线| 日本系列欧美系列| 欧美日韩精品一区二区在线播放| 久久国产福利国产秒拍| 国产精品午夜久久| 欧美日韩激情在线| 国产成人小视频| 伊人一区二区三区| 欧美videossexotv100| 91视频com| 欧美丰满高潮xxxx喷水动漫| 一区二区视频免费在线观看| 日韩一级片网站| 99re热这里只有精品免费视频| 午夜欧美视频在线观看| 国产欧美精品国产国产专区| 欧美日韩成人高清| 国产精品自拍三区| 亚洲成av人片| 337p日本欧洲亚洲大胆色噜噜| 91香蕉视频污| 国产精品538一区二区在线| 亚洲国产成人va在线观看天堂| 久久色视频免费观看| 粉嫩一区二区三区性色av| 日韩一区精品字幕| 亚洲精品自拍动漫在线| 久久久久久久综合日本| 91麻豆精品国产自产在线观看一区| 91麻豆国产精品久久| 成人自拍视频在线| 九一九一国产精品| 视频一区二区不卡| 亚洲国产精品久久人人爱蜜臀| 国产精品久久久久精k8| 久久久噜噜噜久久中文字幕色伊伊| 欧美精品亚洲二区| 在线观看成人小视频| 成年人国产精品| 粉嫩在线一区二区三区视频| 日韩av网站免费在线| 丝袜a∨在线一区二区三区不卡| ㊣最新国产の精品bt伙计久久| 久久久久久9999| 国产精品国产三级国产专播品爱网| 国产精品丝袜在线| 亚洲日本va午夜在线影院| 一级特黄大欧美久久久| 日韩电影在线一区二区三区| 麻豆成人91精品二区三区| 国产精品一级二级三级| 99久久精品久久久久久清纯| 欧美午夜精品久久久久久孕妇 | 欧美精品一区二区精品网| 久久精品一区四区| 国产精品欧美一区喷水| 亚洲一区在线播放| 狠狠色丁香婷婷综合| va亚洲va日韩不卡在线观看| 欧美日韩精品一区二区天天拍小说| 日韩一区二区在线看片| 国产精品丝袜91| 天天操天天色综合| 国产成人在线影院| 欧美日韩色一区| 久久久综合精品| 亚洲综合精品自拍| 国产一区三区三区| 91福利精品第一导航| 精品成人佐山爱一区二区| 国产精品白丝在线| 久久精品久久精品| 色狠狠av一区二区三区| 欧美www视频| 亚洲电影一级片| 成人污视频在线观看| 91麻豆精品国产自产在线 | 老司机午夜精品| 99精品视频一区二区| 日韩一区二区三区免费观看| 中文字幕中文在线不卡住| 日本欧美加勒比视频| 色婷婷亚洲精品| 久久亚洲精精品中文字幕早川悠里 | 亚洲成人tv网| 大尺度一区二区| 精品免费日韩av| 亚洲第一成人在线| www.一区二区| 久久天堂av综合合色蜜桃网| 亚洲不卡在线观看| 色综合久久88色综合天天6| 久久免费偷拍视频| 毛片av一区二区| 欧美精品久久久久久久久老牛影院| 亚洲欧美一区二区在线观看| 黄色成人免费在线| 欧美成人vr18sexvr| 亚洲午夜羞羞片| 91麻豆免费看片| 国产精品妹子av| 成人免费视频app| 精品国产91洋老外米糕| 欧美aa在线视频| 777久久久精品| 亚洲高清免费观看 | 99精品国产99久久久久久白柏 | 一区二区三区四区高清精品免费观看| 精品一区二区三区久久久| 这里是久久伊人| 午夜影院久久久| 欧美日韩国产经典色站一区二区三区 | 国产精品全国免费观看高清 | 免费精品视频在线| 欧美剧情片在线观看| 亚洲福利一二三区| 欧美高清视频在线高清观看mv色露露十八 | 一区二区三区日韩精品| 97久久久精品综合88久久|