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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? patch.h

?? hl2 source code. Do not use it illegal.
?? H
?? 第 1 頁 / 共 2 頁
字號:

// Types for Subdivision, below:
#define SUBDIV_EDGES 0
#define SUBDIV_PATCHES 1

// PatchMesh flags

class PatchMesh {
	friend class Patch;

	private:
#if MULTI_PROCESSING
		static int		refCount;
		static HANDLE	xfmThread;
		static HANDLE	xfmMutex;
		static HANDLE	xfmStartEvent;
		static HANDLE	xfmEndEvent;
		friend DWORD WINAPI xfmFunc(LPVOID ptr);
#endif
		// derived data-- can be regenerated
		PRVertex 		*rVerts;		// <<< instance specific.
		GraphicsWindow 	*cacheGW;  		// identifies rVerts cache
		Box3			bdgBox;			// object space--depends on geom+topo
 
		// The number of interpolations this patch will use for mesh conversion
		int			meshSteps;
//3-18-99 watje to support render steps
		int			meshStepsRender;
		BOOL		showInterior;

		BOOL		adaptive;
		// GAP tessellation
		TessApprox	viewTess;	// tessellation control for the interactive renderer
		TessApprox	prodTess;	// tessellation control for the production renderer
		TessApprox	dispTess;	// displacment tessellation control for the production renderer
		BOOL		mViewTessNormals;	// use normals from the tesselator
		BOOL		mProdTessNormals;	// use normals from the tesselator
		BOOL		mViewTessWeld;	// Weld the mesh after tessellation
		BOOL		mProdTessWeld;	// Weld the mesh after tessellation

 		// Vertex and patch work arrays -- for snap code
		int			snapVCt;
		int			snapPCt;
		char		*snapV;
		char		*snapP;

		// -------------------------------------
		//
		DWORD  		flags;		  	// work flags- 

		int 		renderPatch( GraphicsWindow *gw, int index, BOOL force=FALSE);
		int 		renderEdge( GraphicsWindow *gw, int index, BOOL force=FALSE);
		void		checkRVertsAlloc(void);
		void		setCacheGW(GraphicsWindow *gw)	{ cacheGW = gw; }
		GraphicsWindow *getCacheGW(void)			{ return cacheGW; }

		void 		freeVerts();
		void 		freeTVerts(int channel=0);
		void 		freeVecs();
		void  		freePatches();
		void  		freeTVPatches(int channel=0);
		void  		freeEdges();
		void  		freeRVerts();
		void		freeSnapData();
		int			buildSnapData(GraphicsWindow *gw,int verts,int edges);

	public:
		// Topology
		int			numVerts;
		int			numVecs;
		int	 		numPatches;
		int			numEdges;
		Patch *		patches;
		PatchVec *	vecs;
		PatchEdge *	edges;
		Tab<HookPoint> hooks;

//watje 4-16-99 to handle hooks and changes in topology
		Tab<Point3> hookTopoMarkers;
		Tab<Point3> hookTopoMarkersA;
		Tab<Point3> hookTopoMarkersB;
		CoreExport int HookFixTopology() ;


		// Geometry
		PatchVert *	verts;

		// Texture Coord assignment 
		Tab<int> numTVerts;
		Tab<UVVert *> tVerts;
		Tab<TVPatch *> tvPatches;  	 

		// Material assignment
		MtlID		mtlIndex;     // object material

		// Selection
		BitArray	vertSel;  		// selected vertices
		BitArray	edgeSel;  		// selected edges
		BitArray	patchSel;  		// selected patches

		// If hit bezier vector, this is its info:
		int bezVecVert;

		// Display attribute flags
		DWORD		dispFlags;

		// Selection level
		DWORD		selLevel;

		// Mesh cache
		Mesh mesh;
		int cacheSteps;		// meshSteps used for the cache
		BOOL cacheAdaptive;	// adaptive switch used for cache
		BOOL meshValid;

		CoreExport PatchMesh();
		CoreExport PatchMesh(PatchMesh& fromPatch);

		CoreExport void Init();

		CoreExport ~PatchMesh();

		CoreExport PatchMesh& 		operator=(PatchMesh& fromPatchMesh);
		CoreExport PatchMesh& 		operator=(Mesh& fromMesh);

		// The following is similar to operator=, but just takes the major components,
		// not the display flags, selection level, etc.
		CoreExport void CopyPatchDataFrom(PatchMesh &fromPatchMesh);

		CoreExport BOOL	setNumVerts(int ct, BOOL keep = FALSE);
		int				getNumVerts(void)	{ return numVerts; }
		
		CoreExport BOOL	setNumVecs(int ct, BOOL keep = FALSE);
		int				getNumVecs(void)	{ return numVecs; }
		
		CoreExport BOOL	setNumPatches(int ct, BOOL keep = FALSE);
		int				getNumPatches(void)		{ return numPatches; }

		CoreExport BOOL	setNumEdges(int ct, BOOL keep = FALSE);
		int				getNumEdges(void)		{ return numEdges; }
		
		void		setVert(int i, const Point3 &xyz)	{ verts[i].p = xyz; }
		void		setVert(int i, float x, float y, float z)	{ verts[i].p.x=x; verts[i].p.y=y; verts[i].p.z=z; }
		void		setVec(int i, const Point3 &xyz)	{ vecs[i].p = xyz; }
		void		setVec(int i, float x, float y, float z)	{ vecs[i].p.x=x; vecs[i].p.y=y; vecs[i].p.z=z; }
		
		PatchVert &	getVert(int i)					{ return verts[i];  }
		PatchVert *	getVertPtr(int i)				{ return verts+i; }
		PatchVec &	getVec(int i)					{ return vecs[i];  }
		PatchVec *	getVecPtr(int i)				{ return vecs+i; }
		PRVertex &	getRVert(int i)					{ return rVerts[i]; }
		PRVertex *	getRVertPtr(int i)				{ return rVerts+i; }
		
		// Two versions of following methods, to cope with necessary change in map indexing between 2.5 and 3.
		// Old TV/VC methods are given with "TV" in the name.  For these methods, channel 0 is the original map
		// channel, 1, while any nonzero channel is vertex colors.  (No higher channels!)
		BOOL	setNumTVertsChannel(int mp, int ct, BOOL keep=FALSE) { return setNumMapVerts (mp?0:1, ct, keep); }
		BOOL setNumTVerts(int ct, BOOL keep=FALSE) { return setNumMapVerts (1, ct, keep); }
		int	getNumTVertsChannel(int mp) const { return numTVerts[mp?0:1]; }
		int getNumTVerts() const { return getNumMapVerts(1); }

		// New methods have "Map" in the name, and accept normal Object-level map indexing: 0 is VC channel, 1 or more
		// are map channels.
		CoreExport BOOL setNumMapVerts (int mp, int ct, BOOL keep = FALSE);
		int getNumMapVerts (int mp) const { return (mp<numTVerts.Count()) ? numTVerts[mp] : 0; }

		CoreExport UVVert *mapVerts (int mp) const;
		CoreExport TVPatch *mapPatches (int mp) const;

		// These are parallel to patches
		// These are called from setNumPatches() to maintain the same count.
		//
		// If they are NULL and keep = TRUE they stay NULL.
		// If they are NULL and keep = FALSE they are allocated (3D verts also init themselves from the main vert array)
		// If they are non-NULL and ct = 0 they are set to NULL (and freed)
		// Old version: nonzero = vc channel
		BOOL setNumTVPatchesChannel(int channel, int ct, BOOL keep=FALSE, int oldCt=0) { return setNumMapPatches (channel?0:1, ct, keep, oldCt); }
		BOOL setNumTVPatches(int ct, BOOL keep=FALSE, int oldCt=0) { return setNumMapPatches (1, ct, keep, oldCt); }
		// New version: 0 = vc channel
		CoreExport BOOL 	setNumMapPatches (int channel, int ct, BOOL keep=FALSE, int oldCt=0);

		void		setTVertChannel(int channel, int i, const UVVert &xyz)	{ tVerts[channel?0:1][i] = xyz; }
		void		setTVert(int i, const UVVert &xyz)	{ tVerts[1][i] = xyz; }
		void		setTVertChannel(int channel, int i, float x, float y, float z)	{ tVerts[channel?0:1][i].x=x; tVerts[channel?0:1][i].y=y; tVerts[channel?0:1][i].z=z; }
		void		setTVert(int i, float x, float y, float z)	{ tVerts[1][i].x=x; tVerts[1][i].y=y; tVerts[1][i].z=z; }
		void		setTVPatchChannel(int channel, int i, TVPatch &tvp)	{ tvPatches[channel?0:1][i] = tvp; }
		void		setTVPatch(int i, TVPatch &tvp)	{ tvPatches[1][i] = tvp; }
		UVVert &	getTVertChannel(int channel, int i)	{ return tVerts[channel?0:1][i];  }
		UVVert &	getTVert(int i)	{ return tVerts[1][i];  }
		UVVert *	getTVertPtrChannel(int channel, int i)	{ return tVerts[channel?0:1]+i; }
		UVVert *	getTVertPtr(int i)	{ return tVerts[1]+i; }
		TVPatch &	getTVPatchChannel(int channel, int i)	{ return tvPatches[channel?0:1][i];  }
		TVPatch &	getTVPatch(int i)	{ return tvPatches[1][i];  }

		// New map methods: for these, channel 0 is v.c. channel, and anything higher is a map channel.
		void setMapVert (int mp, int i, const UVVert &xyz) { tVerts[mp][i] = xyz; }
		void setMapVert (int mp, int i, float x, float y, float z) { tVerts[mp][i].x=x; tVerts[mp][i].y=y; tVerts[mp][i].z = z; }
		void setMapPatch (int mp, int i, const TVPatch &tvp) { tvPatches[mp][i] = tvp; }
		UVVert & getMapVert (int mp, int i) { return tVerts[mp][i]; }
		UVVert * getMapVertPtr (int mp, int i) { return tVerts[mp] + i; }
		TVPatch & getMapPatch (int mp, int i) { return tvPatches[mp][i];  }

		void		setMtlIndex(MtlID i)	{ mtlIndex = i; }
		MtlID		getMtlIndex(void) 		{ return mtlIndex; }
	    CoreExport MtlID		getPatchMtlIndex(int i);
		CoreExport void		setPatchMtlIndex(int i, MtlID id); 	

		// Automatically update all the adjacency info, etc.
		// Returns TRUE if patch mesh is valid, FALSE if it's not!
		CoreExport BOOL		buildLinkages();
		
		// Compute the interior bezier points for each patch in the mesh
		CoreExport void		computeInteriors();

		// Compute the degree-4 bezier points for each triangular patch in the mesh
		CoreExport void		computeAux();

		CoreExport void		render(GraphicsWindow *gw, Material *ma, RECT *rp, int compFlags, int numMat=1);
		CoreExport BOOL		select(GraphicsWindow *gw, Material *ma, HitRegion *hr, int abortOnHit=FALSE, int numMat=1);
		CoreExport void		snap(GraphicsWindow *gw, SnapInfo *snap, IPoint2 *p, Matrix3 &tm);
		CoreExport BOOL 	SubObjectHitTest(GraphicsWindow *gw, Material *ma, HitRegion *hr,
								DWORD flags, SubPatchHitList& hitList, int numMat=1 );

		CoreExport void		buildBoundingBox(void);
		CoreExport Box3		getBoundingBox(Matrix3 *tm=NULL); // RB: optional TM allows the box to be calculated in any space.
		                                              // NOTE: this will be slower becuase all the points must be transformed.
		CoreExport void		GetDeformBBox(Box3& box, Matrix3 *tm=NULL, BOOL useSel=FALSE);
		
		CoreExport void 	InvalidateGeomCache();
		CoreExport void		InvalidateMesh();
		CoreExport void 	FreeAll(); //DS
				
		// functions for use in data flow evaluation
		CoreExport void 	ShallowCopy(PatchMesh *amesh, unsigned long channels);
		CoreExport void 	DeepCopy(PatchMesh *amesh, unsigned long channels);
		CoreExport void		NewAndCopyChannels(unsigned long channels);
		CoreExport void 	FreeChannels( unsigned long channels, int zeroOthers=1);

		// Display flags
		void		SetDispFlag(DWORD f) { dispFlags |= f; }
		DWORD		GetDispFlag(DWORD f) { return dispFlags & f; }
		void		ClearDispFlag(DWORD f) { dispFlags &= ~f; }

		// Selection access
		BitArray& 	VertSel() { return vertSel;  }	
		BitArray& 	PatchSel() { return patchSel;  }	
		BitArray& 	EdgeSel() { return edgeSel;  }	

		// Constructs a vertex selection list based on the current selection level.
		CoreExport BitArray 	VertexTempSel();

		// Apply the coplanar constraints to the patch mesh
		// (Optionally only apply it to selected vertices)
		CoreExport void ApplyConstraints(BOOL selOnly = FALSE);

		// Create triangular or quadrilateral patch
		CoreExport BOOL MakeQuadPatch(int index, int va, int vab, int vba, int vb, int vbc, int vcb, int vc, int vcd, int vdc, int vd, int vda, int vad, int i1, int i2, int i3, int i4, DWORD sm);
		CoreExport BOOL MakeTriPatch(int index, int va, int vab, int vba, int vb, int vbc, int vcb, int vc, int vca, int vac, int i1, int i2, int i3, DWORD sm);

		// Get/Set mesh steps, adaptive switch
		CoreExport void SetMeshSteps(int steps);
		CoreExport int GetMeshSteps();
//3-18-99 watje to support render steps
		CoreExport void SetMeshStepsRender(int steps);
		CoreExport int GetMeshStepsRender();
		CoreExport void SetShowInterior(BOOL si);
		CoreExport BOOL GetShowInterior();


		CoreExport void SetAdaptive(BOOL sw);
		CoreExport BOOL GetAdaptive();

		CoreExport void SetViewTess(TessApprox tess);
		CoreExport TessApprox GetViewTess();
		CoreExport void SetProdTess(TessApprox tess);
		CoreExport TessApprox GetProdTess();
		CoreExport void SetDispTess(TessApprox tess);
		CoreExport TessApprox GetDispTess();
		CoreExport BOOL GetViewTessNormals();
		CoreExport void SetViewTessNormals(BOOL use);
		CoreExport BOOL GetProdTessNormals();
		CoreExport void SetProdTessNormals(BOOL use);
		CoreExport BOOL GetViewTessWeld();
		CoreExport void SetViewTessWeld(BOOL weld);
		CoreExport BOOL GetProdTessWeld();
		CoreExport void SetProdTessWeld(BOOL weld);

		// Find the edge index for a given vertex-vector-vector-vertex sequence
		int GetEdge(int v1, int v12, int v21, int v2, int p);

		// Apply mapping to the patch mesh
		CoreExport void setNumMaps (int ct, BOOL keep=TRUE);
		int getNumMaps () { return numTVerts.Count(); }
		BOOL getMapSupport (int mp) { return ((mp<tvPatches.Count()) && tvPatches[mp]) ? TRUE : FALSE; }
		int NumMapChannels () { return MAX_MESHMAPS; }
		CoreExport void ApplyUVWMap(int type,
			float utile, float vtile, float wtile,
			int uflip, int vflip, int wflip, int cap,
			const Matrix3 &tm,int channel=1);

		// Tag the points in the patch components to record our topology (This stores
		// identifying values in the various aux2 fields in the Patch)
		// This info can be used after topology-changing operations to remap information
		// tied to vertices, edges and patches.
		// Returns TRUE if tagged successfully
		CoreExport BOOL RecordTopologyTags();

		CoreExport void Transform(Matrix3 &tm);

		// Weld the vertices
		CoreExport BOOL Weld(float thresh, BOOL weldIdentical=FALSE, int startVert=0);

		// General-purpose deletion
		CoreExport void DeletePatchParts(BitArray &delVerts, BitArray &delPatches);

		// Subdivision
		CoreExport void Subdivide(int type, BOOL propagate);

		// Add patch to selected single-patch edges
		CoreExport void AddPatch(int type);

		// Hooks a vertex to a patch edge
		CoreExport int AddHook();
		//tries to add hook patch at the specified vert
		CoreExport int AddHook(int index);
		CoreExport int AddHook(int vertIndex, int segIndex) ;

		CoreExport int RemoveHook();
		//goes through and looks for invalid hooks and tries to fix them used when topology changes
		CoreExport int UpdateHooks();

		Tab<Point3> extrudeDeltas;
		Tab<ExtrudeData> extrudeData;
//creates initial extrude faces and temporary data used in move normal
		CoreExport void CreateExtrusion();
//computes the average normals of the selected faces
		CoreExport Point3 AverageNormals();
		CoreExport Point3 PatchNormal(int index);
		CoreExport void MoveNormal(float amount, BOOL useLocalNorms);

//creates temporary data used in Bevel
		BitArray bevelEdges;
		Tab<float> edgeDistances;
		CoreExport void CreateBevel();
		CoreExport void Bevel(float amount, int smoothStart, int smoothEnd);
//computes the bevel direction of patch based on which edges are open
		Point3 GetBevelDir(int patchVertID);

		// Attach a second PatchMesh, adjusting materials
		CoreExport void Attach(PatchMesh *attPatch, int mtlOffset);

		// Change the interior type of a patch or selected patches (index < 0)
		CoreExport void ChangePatchInterior(int index, int type);

		// Change the type of a vertex or selected vertices (index < 0)
		CoreExport void ChangeVertType(int index, int type);

		CoreExport BOOL SelVertsSameType();	// Are all selected vertices the same type?
		CoreExport BOOL SelPatchesSameType();	// Are all selected patches the same type?

		// Dump the patch mesh structure via DebugPrints
		CoreExport void Dump();
#ifdef CHECK_TRI_PATCH_AUX
		CoreExport void CheckTriAux();
#endif //CHECK_TRI_PATCH_AUX

		// Ready the mesh cache
		CoreExport void PrepareMesh();

		// Get the Mesh version
		CoreExport Mesh& GetMesh();

		CoreExport int IntersectRay(Ray& ray, float& at, Point3& norm);

		CoreExport IOResult Save(ISave* isave);
		CoreExport IOResult Load(ILoad* iload);

	};


#endif // _PATCH_H_

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91麻豆免费观看| 欧美一级电影网站| 国产天堂亚洲国产碰碰| 欧美在线制服丝袜| 日韩欧美一区二区免费| 亚洲成人资源网| 亚洲精品ww久久久久久p站| 中文乱码免费一区二区| 久久精品免费在线观看| 日韩手机在线导航| 欧美精品乱码久久久久久| 成人视屏免费看| 成人激情小说乱人伦| 成人动漫一区二区三区| 国产成人一级电影| 国产91富婆露脸刺激对白| 国产成人午夜精品影院观看视频| 久88久久88久久久| 国产一区二区三区免费在线观看| 久久国内精品视频| 国产精品亚洲人在线观看| 国产精品99久久久久久有的能看| 国产成人av电影免费在线观看| 日韩中文字幕亚洲一区二区va在线| 国产亚洲精品精华液| 最新热久久免费视频| 日韩欧美中文一区| 色综合天天综合网天天狠天天| 激情综合色播激情啊| 亚洲bt欧美bt精品777| 亚洲素人一区二区| 国产精品系列在线| 精品国产乱码久久久久久免费| 美女一区二区久久| 亚洲视频免费观看| 亚洲三级电影网站| 亚洲高清免费观看高清完整版在线观看 | 国产精品 日产精品 欧美精品| 亚洲成人精品一区二区| 亚洲人成小说网站色在线 | 亚洲在线视频网站| 亚洲欧美日韩国产综合| 一区二区三区在线不卡| 伊人一区二区三区| 日本aⅴ免费视频一区二区三区 | 欧美精品一区二区三区在线播放| 久久亚洲综合色一区二区三区| 欧美日韩极品在线观看一区| 欧美韩国日本一区| 老司机免费视频一区二区三区| 久久99国产精品免费| 久久99精品国产91久久来源| 亚洲色图制服诱惑| 一区二区三区 在线观看视频| 亚洲成av人片www| 成人精品免费视频| 亚洲成人中文在线| 国产成人av自拍| 日韩女优av电影| 亚洲视频在线一区| 国内偷窥港台综合视频在线播放| 91香蕉视频mp4| 欧美精品一区二区三区蜜臀| 亚洲精品成人悠悠色影视| 国产一区不卡在线| 日韩中文字幕区一区有砖一区| 日韩不卡手机在线v区| 国产aⅴ综合色| 精品久久一区二区三区| 久久激五月天综合精品| 成人午夜电影小说| 欧美一级夜夜爽| 亚洲欧洲无码一区二区三区| 裸体歌舞表演一区二区| 69堂亚洲精品首页| 9久草视频在线视频精品| 国产麻豆精品theporn| 亚洲国产一区二区三区青草影视 | 日本亚洲视频在线| 色偷偷88欧美精品久久久| 欧美一级二级在线观看| 亚洲sss视频在线视频| 色综合久久综合中文综合网| 国产精品无码永久免费888| 久久91精品久久久久久秒播| 欧美片在线播放| 亚洲一区二区三区四区在线免费观看 | 日韩精品一区二区三区四区| 亚洲午夜激情av| 91久久线看在观草草青青| 欧美国产在线观看| 国产麻豆91精品| 日韩你懂的电影在线观看| 五月婷婷色综合| 欧美区视频在线观看| 亚洲福利一二三区| 欧美系列亚洲系列| 精品精品欲导航| 国产盗摄精品一区二区三区在线| 亚洲天堂a在线| 国产精品欧美一区二区三区| 国产福利91精品一区| 亚洲少妇中出一区| 欧美日韩激情一区二区| 日韩精品五月天| 亚洲精品一区二区三区精华液| 国产一区二区免费看| 欧美激情一区三区| 欧美午夜理伦三级在线观看| 精品无人码麻豆乱码1区2区| 91精品国产一区二区三区 | 狠狠色综合色综合网络| 日韩色视频在线观看| 蜜臀av性久久久久av蜜臀妖精| 日韩欧美一级二级三级| 日本视频在线一区| 国产亚洲欧美激情| 不卡视频免费播放| 久久精品理论片| 亚洲欧美电影一区二区| 亚洲精品在线网站| 欧美日本高清视频在线观看| 国产成人精品1024| 日韩和欧美的一区| 亚洲黄色免费电影| 国产日本亚洲高清| 日韩一区二区三区观看| 91美女片黄在线观看91美女| 狠狠色狠狠色合久久伊人| 亚洲成av人片一区二区梦乃| 中文字幕一区二区三区在线播放 | 日韩一区二区在线观看视频| 在线欧美小视频| 成人国产精品视频| 国产丶欧美丶日本不卡视频| 2017欧美狠狠色| 色婷婷激情一区二区三区| 国产精品一区不卡| 国内精品第一页| av一二三不卡影片| 国产精品色眯眯| 麻豆精品一区二区综合av| 成人在线一区二区三区| 亚洲视频免费在线| 日韩视频免费观看高清完整版在线观看 | 国产91清纯白嫩初高中在线观看| 日本不卡一区二区三区| 婷婷久久综合九色国产成人| 亚洲午夜电影在线| 视频在线观看91| 亚洲国产一区视频| 亚洲成国产人片在线观看| 午夜精品久久久久| 久久福利视频一区二区| 蜜桃一区二区三区在线| 蜜乳av一区二区| 国产伦精品一区二区三区在线观看| 美女视频第一区二区三区免费观看网站| 爽好久久久欧美精品| 国产一区二区三区免费在线观看| 国产在线一区二区| 91网站最新网址| 欧美日韩大陆在线| 国产精品久久久久天堂| 国产精品狼人久久影院观看方式| 一区二区三区视频在线看| 午夜精品免费在线观看| 国产乱码精品1区2区3区| 91蜜桃免费观看视频| 日韩欧美成人一区二区| 亚洲美女淫视频| 精品一区二区三区视频| 成人免费高清视频| 国产欧美视频一区二区三区| 日本一区二区视频在线| 国产拍欧美日韩视频二区| 欧美mv和日韩mv的网站| 亚洲人成网站色在线观看| 麻豆成人综合网| 欧美视频在线一区| 秋霞av亚洲一区二区三| 亚洲色图欧洲色图婷婷| 欧美少妇性性性| 一区二区三区欧美激情| 国产欧美日韩视频在线观看| 日韩三级免费观看| 欧美挠脚心视频网站| 91在线精品一区二区三区| 国产精品一区二区果冻传媒| 日韩电影网1区2区| 天天亚洲美女在线视频| 亚洲伊人伊色伊影伊综合网| 国产亚洲一区二区三区四区| 日韩视频免费直播| 国产精品一二三四区| 欧美一区二区三区在| 一区二区三区中文在线| 欧美亚洲高清一区| 亚洲综合色网站| 欧美一区二区免费视频|