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

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

?? ogles_demo_02.cpp

?? 此程序需要Brew sdk2.1版本以上,是關(guān)于OpenGL的手機(jī)編程.
?? CPP
字號(hào):
/*=================================================================================
FILE:			ogles_demo_02.cpp
  
DESCRIPTION:	This file is provide as a standard sample Brew source file. 
				Please refer to this OpenGL(R)ES brew sample application as a 
				reference on how to use the standard OpenGL-ES and EGL APIs.
                          
ABSTRACT:		The ogles_demo_02 application is a spinning cube that displays 
				textures on each faces or smooth shading color.

AUTHOR:			QUALCOMM
                        
				Copyright (c) 2004 QUALCOMM Incorporated.
					   All Rights Reserved.
					QUALCOMM Proprietary/GTDR
=================================================================================*/

/*-------------------------------------------------------------------------------*
 *                      I N C L U D E   F I L E S                                *
 *-------------------------------------------------------------------------------*/

#include "ogles_demo_02.h"

/*-------------------------------------------------------------------------------*
 *       FOR OEM REFERENCE ONLY, USED ONLY FOR BUILDING STATIC APPLICATION       *
 *       Brew developers do not need this code snippet in their appliations      *
 *-------------------------------------------------------------------------------*/

#if defined(BREW_STATIC_APP)
extern "C"
{
	int   ogles_demo_02_CreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj);
	static int  ogles_demo_02_Load(IShell *ps, void * pHelpers, IModule ** pMod);

	// Constant Data...
	static const AEEAppInfo gai_ogles_demo_02 = { AEECLSID_OGLES_DEMO_02, OGLES_DEMO_02_RES_FILE, IDS_APPNAME, 0, 0, 0, 0, AFLAG_GAME };

	PFNMODENTRY ogles_demo_02_GetModInfo(IShell * ps, AEECLSID ** ppClasses, AEEAppInfo ** pApps, uint16 * pnApps, uint16 * pwMinPriv)
	{
	   *pApps = (AEEAppInfo *)&gai_ogles_demo_02;
	   *pnApps = 1;
	   return((PFNMODENTRY)ogles_demo_02_Load);
	}

	static int ogles_demo_02_Load(IShell *ps, void * pHelpers, IModule ** pMod)
	{
		return( AEEStaticMod_New((int16)(sizeof(AEEMod)),ps,pHelpers,pMod,ogles_demo_02_CreateInstance,NULL) );
	}
}
#endif  //BREW_STATIC_APP


/*-------------------------------------------------------------------------------*
 *                          B E G I N   P R O G R A M                            *
 *-------------------------------------------------------------------------------*/

/*===========================================================================
FUNCTION: CreateInstance
  
DESCRIPTION:
	This function will create an instance for the ogles_demo_02 application 
  
PROTOTYPE:
	int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
      
PARAMETERS:
	none
            
DEPENDENCIES
	none
              
RETURN VALUE
	none
                
===========================================================================*/
#if defined(BREW_STATIC_APP)
int ogles_demo_02_CreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
#else
int AEEClsCreateInstance(AEECLSID ClsId,IShell * pIShell,IModule * po,void ** ppObj)
#endif
{
	*ppObj = NULL;
	
DBGPRINTF("[AEEClsCreateInstance] ");
	if(ClsId == AEECLSID_OGLES_DEMO_02){
DBGPRINTF("[AEEClsCreateInstance] class id okay");
		if(  AEEApplet_New(sizeof(ogles_demo_02), ClsId, pIShell, po, (IApplet**)ppObj,
			(AEEHANDLER)ogles_demo_02::HandleEvent,(PFNFREEAPPDATA)ogles_demo_02::Destroy)== TRUE )
		{
DBGPRINTF("[AEEClsCreateInstance] AEEApplet_New success");
			
			return AEE_SUCCESS;
		}
DBGPRINTF("[AEEClsCreateInstance] AEEApplet_New fail");
	}
DBGPRINTF("[AEEClsCreateInstance] fail");
	return EFAILED;
}


/*===========================================================================
FUNCTION: ogles_demo_02::Init
  
DESCRIPTION:
	This function will initalize the ogles_demo_02 application 
  
PROTOTYPE:
	boolean ogles_demo_02::Init()
      
PARAMETERS:
	none
            
DEPENDENCIES
	none
              
RETURN VALUE
	TRUE	: if initialize was successful
	FALSE	: if error occured
                
===========================================================================*/
boolean ogles_demo_02::Init()
{

	DBGPRINTF("_X_INIT ROUTINE STARTED");
	// IGL and IEGL
	if( ISHELL_CreateInstance(m_applet.m_pIShell, AEECLSID_GL, (void **)&m_pIGL) != SUCCESS ){
		return FALSE;
	}else 
	{
#if !defined(BREW_STATIC_APP)
		IGL_Init(m_pIGL);
#endif
	}

	if( ISHELL_CreateInstance(m_applet.m_pIShell, AEECLSID_EGL, (void **)&m_pIEGL) != SUCCESS ){
		return FALSE;
	}else
	{
#if !defined(BREW_STATIC_APP)
	   IEGL_Init(m_pIEGL);
#endif
	}


	// File I/O
	if( ISHELL_CreateInstance( m_applet.m_pIShell, AEECLSID_FILEMGR, (void **)(&m_pIFileMgr) ) != SUCCESS )
	{
		CleanUp();	
		return FALSE;
	}

	// device frame buffer info
	if( IDISPLAY_GetDeviceBitmap(m_applet.m_pIDisplay, &m_pDDBitmap) != SUCCESS )
	{
		CleanUp();		
		return FALSE;
	}
	if( IBITMAP_GetInfo(m_pDDBitmap, &m_DDBitmapInfo, sizeof(AEEBitmapInfo)) != SUCCESS )
	{
		CleanUp();
		return FALSE;
	}

	m_iFontHeight = IDISPLAY_GetFontMetrics( m_applet.m_pIDisplay, AEE_FONT_NORMAL, NULL, NULL );

	// Setup GL/EGL 
	// MUST INIT EGL FIRST
	SetupEGL();
	SetupGL();

	Cube.Init(&m_applet);
	DBGPRINTF("_X_INIT init CUBE");

	Cube.LoadTextures(m_applet.m_pIShell);
	DBGPRINTF("_X_INIT loaded textures");

	DBGPRINTF("_X_INIT __COMPLETED___");

    return TRUE;

}


/*===========================================================================
FUNCTION: ogles_demo_02::Destroy
  
DESCRIPTION:
	This function provides a wrapper for the Brew exit routine. 
  
PROTOTYPE:
	void ogles_demo_02::Destroy(ogles_demo_02* p)
      
PARAMETERS:
	p: pointer to the ogles_demo_02 application instance
            
DEPENDENCIES
	static fucntion
              
RETURN VALUE
	none
                
===========================================================================*/
void ogles_demo_02::Destroy(ogles_demo_02* p)
{
	p->CleanUp();
}


/*===========================================================================
FUNCTION: ogles_demo_02::CleanUp
  
DESCRIPTION:
	This function frees all resource for the application upon exit. 
  
PROTOTYPE:
	void ogles_demo_02::CleanUp()
      
PARAMETERS:
	none
            
DEPENDENCIES
	none
              
RETURN VALUE
	none
                
===========================================================================*/
void ogles_demo_02::CleanUp()
{
	Cube.FreeData();

	if (m_pDDBitmap)  IBITMAP_Release( m_pDDBitmap );
	if (m_pIFileMgr) IFILEMGR_Release( m_pIFileMgr );

	if( eglMakeCurrent( EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT ) == EGL_FALSE || eglGetError() != EGL_SUCCESS ){}
	if( eglDestroyContext( m_eglDisplay, m_eglContext ) == EGL_FALSE || eglGetError() != EGL_SUCCESS ){}
	if( eglDestroySurface( m_eglDisplay, m_eglSurface ) == EGL_FALSE || eglGetError() != EGL_SUCCESS ){}
	if( eglTerminate( m_eglDisplay ) == EGL_FALSE || eglGetError() != EGL_SUCCESS ){}

	// MUST CALL IGL/IEGL RELEASE LAST, NO EGL OR GL calls will work after you release the interfaces.
	if (m_pIEGL)         IEGL_Release( m_pIEGL     );
	if (m_pIGL)           IGL_Release( m_pIGL      );
		
}

/*===========================================================================
FUNCTION: ogles_demo_02::HandleEvent
  
DESCRIPTION:
	All events to the ogles_demo_02 application are handled in this function. 
  
PROTOTYPE:
	boolean ogles_demo_02::HandleEvent( ogles_demo_02 *p, AEEEvent event, uint16 wParam, uint32 dwParam )
      
PARAMETERS:
	p: pointer to a ogles_demo_02 application instance
	event: the event that needs to be handled
	wParam,dwParam:   Event specific data.
            
DEPENDENCIES
	none
              
RETURN VALUE
	TRUE	: If the event has been processed 
	FALSE	: If the event was not vaild or processed
                
===========================================================================*/
boolean ogles_demo_02::HandleEvent( ogles_demo_02 *p, AEEEvent event, uint16 wParam, uint32 dwParam )
{

	DBGPRINTF("%d event posted",event);
	switch (event) 
	{
		case EVT_APP_START:
			// intialize the applet
			p->Init();
			NextFrame(p);
			return TRUE;

		case EVT_APP_STOP:
			return TRUE;

			
		case EVT_APP_RESUME:
			DBGPRINTF("resume called");
			p->Init();
			NextFrame(p);

			return TRUE;
			
		case EVT_APP_SUSPEND:
			DBGPRINTF("suspend called");
			ISHELL_CancelTimer( p->m_applet.m_pIShell, NULL, (void *)p );
			p->CleanUp();
			return TRUE;
			
		case EVT_APP_NO_SLEEP:
//		case EVT_APP_NO_CLOSE:
			return TRUE;
			
		case EVT_COMMAND:
			break;
			
		case EVT_KEY_PRESS:
			p->m_key_state = 1;
			p->m_key_wParam = wParam;
			
			if (p->KeyEvent(wParam))
				return HandleEvent(p, EVT_KEY, wParam, dwParam);
			else
				return TRUE;

			break;

		case EVT_KEY_RELEASE:	
			p->m_key_state =0;
			p->m_key_wParam = wParam;
			return TRUE;
			
			break;
			
		case EVT_KEY:
			return (p->KeyEvent(wParam));
			break;
			
		default:
			break;
		
	}
	
	return  FALSE; 
	
}

/*===========================================================================
FUNCTION: ogles_demo_02::KeyEvent
  
DESCRIPTION:
	All key events to the ogles_demo_02 application are handled in this function. 
  
PROTOTYPE:
	boolean ogles_demo_02::KeyEvent( uint16 wParam)
      
PARAMETERS:
	wParam:   Event specific data.
            
DEPENDENCIES
	none
              
RETURN VALUE
	TRUE	: If the event has been processed 
	FALSE	: If the event was not vaild or processed
                
===========================================================================*/
boolean ogles_demo_02::KeyEvent( uint16 wParam)
{
	if (wParam == AVK_CLR)
	{
		ISHELL_CancelTimer( m_applet.m_pIShell, NULL, (void *)this ) ;
	}

	return Cube.KeyEvent(wParam);

}

/*===========================================================================
FUNCTION: ogles_demo_02::SetupEGL
  
DESCRIPTION:
	This routine is used for EGL setup.  
   
PROTOTYPE:
	boolean ogles_demo_02::SetupEGL()
      
PARAMETERS:
	none
            
DEPENDENCIES
	none
              
RETURN VALUE
	TRUE	: if no errors
	FALSE	: if an error occured
                
===========================================================================*/
boolean ogles_demo_02::SetupEGL()
{

	EGLConfig myConfig;
	EGLint ncfg = 1;
	EGLint params[5] = {EGL_NONE,EGL_NONE,EGL_NONE,EGL_NONE,EGL_NONE};
	
	// Init State Data
	m_eglDisplay		= EGL_NO_DISPLAY;
	m_eglSurface		= EGL_NO_SURFACE;
	m_eglContext		= EGL_NO_CONTEXT;
	
	// Main Display
	m_eglDisplay = eglGetDisplay( m_applet.m_pIDisplay );
	if( m_eglDisplay == EGL_NO_DISPLAY || eglGetError() != EGL_SUCCESS ) 
		return FALSE;
	
	if( eglInitialize( m_eglDisplay, NULL, NULL ) == EGL_FALSE || eglGetError() != EGL_SUCCESS )
		return FALSE;
	
	// Get Configuration	
	eglGetConfigs( m_eglDisplay, &myConfig, 1, &ncfg );
		
	// Window Surface
	{
		IDIB *pDIB;
		
		if( IBITMAP_QueryInterface(m_pDDBitmap, AEECLSID_DIB, (void**)&pDIB) != SUCCESS )
			return EFAILED;
		
		m_eglSurface = eglCreateWindowSurface( m_eglDisplay, myConfig, pDIB, params );
		
		IDIB_Release( pDIB );
		
		if( m_eglSurface == EGL_NO_SURFACE || eglGetError() != EGL_SUCCESS )
			return FALSE;
	}
	
	// Context
	m_eglContext = eglCreateContext( m_eglDisplay, myConfig, 0, 0 );
	if( m_eglContext == EGL_NO_CONTEXT || eglGetError() != EGL_SUCCESS )
		return FALSE;
	
	if( eglMakeCurrent( m_eglDisplay, m_eglSurface, m_eglSurface, m_eglContext ) == EGL_FALSE || eglGetError() != EGL_SUCCESS )
		return FALSE;
	
	return TRUE;

}

/*===========================================================================
FUNCTION: ogles_demo_02::SetupGL
  
DESCRIPTION:
	This routine is used for GL setup.  
   
PROTOTYPE:
	boolean ogles_demo_02::SetupGL()
      
PARAMETERS:
	none
            
DEPENDENCIES
	none
              
RETURN VALUE
	TRUE	: if no errors
	FALSE	: if an error occured
                
===========================================================================*/
boolean ogles_demo_02::SetupGL()
{
	
	// Smooth shading
	glShadeModel( GL_SMOOTH );
	
	// Depth Test
	glEnable( GL_DEPTH_TEST );
	
	// Perspective Correction
	glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST );
	
	// GL Initialization
	glViewport( 0, 0, GetScreenWidth(), GetScreenHeight() );
	
	// Init Projection Matrix
	glMatrixMode( GL_PROJECTION );
	glLoadIdentity();
	
	glDisable(GL_LIGHTING);
	glDisable(GL_BLEND);
		
	// GL Initialization
	glViewport( 0, 0, GetScreenWidth(), GetScreenHeight() );
	
	// Init Projection Matrix
	glMatrixMode( GL_PROJECTION );
	glLoadIdentity();
	
	glFrustumx(		ITOX(-5),	ITOX(5),
					ITOX(-5),	ITOX(5),
					ITOX(10),	ITOX(100)	);
	
	glMatrixMode( GL_MODELVIEW );
	glLoadIdentity();
	
	if (glGetError() != GL_NO_ERROR) return FALSE;
	
	return TRUE;
	
}

/*===========================================================================
FUNCTION: ogles_demo_02::NextFrame
  
DESCRIPTION:
	This routine sets up the frame timer, and then renders the next frame  
   
PROTOTYPE:
	void ogles_demo_02::NextFrame(ogles_demo_02* p)
      
PARAMETERS:
	p: pointer to the ogles_demo_02 application instance
            
DEPENDENCIES
	static fucntion
              
RETURN VALUE
	none
                
===========================================================================*/
void ogles_demo_02::NextFrame(ogles_demo_02* p)
{	
	p->RenderFrame();

	if (p->m_key_state ==1) 
		p->KeyEvent(p->m_key_wParam);

	ISHELL_SetTimer( p->m_applet.m_pIShell, 10,(PFNNOTIFY) NextFrame,(void*)p);	

}


/*===========================================================================
FUNCTION: ogles_demo_02::RenderFrame
  
DESCRIPTION:
	The main rendering routine for the ogles_demo_02 application  
   
PROTOTYPE:
	void ogles_demo_02::RenderFrame()
      
PARAMETERS:
	none
            
DEPENDENCIES
	none
              
RETURN VALUE
	none
                
===========================================================================*/
void ogles_demo_02::RenderFrame()
{
	Cube.Render();	
	
	// Swap the Buffers
	eglSwapBuffers( m_eglDisplay, m_eglSurface );	
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线视频一区二区三| 色综合久久综合中文综合网| 最近日韩中文字幕| 91精品国产91综合久久蜜臀| 成人激情小说网站| 喷水一区二区三区| 一级做a爱片久久| 久久精品一级爱片| 欧美一级在线观看| 在线日韩国产精品| 欧美一区2区视频在线观看| 三级成人在线视频| 国产精品毛片大码女人| 337p亚洲精品色噜噜狠狠| 97国产精品videossex| 国产一级精品在线| 秋霞影院一区二区| 亚洲高清免费视频| 亚洲另类中文字| 国产精品久久久久久户外露出| 欧美大片一区二区三区| 欧美巨大另类极品videosbest | 亚洲欧美精品午睡沙发| 精品久久久久一区二区国产| 欧美日韩第一区日日骚| 日本韩国一区二区| 91视频一区二区| 大胆欧美人体老妇| 国产一区在线观看视频| 蜜桃一区二区三区四区| 日韩专区中文字幕一区二区| 亚洲一区国产视频| 亚洲美女屁股眼交3| 日本一区二区三区四区| 精品粉嫩超白一线天av| 欧美成人福利视频| 日韩亚洲电影在线| 日韩欧美在线综合网| 7777精品久久久大香线蕉| 欧美午夜不卡在线观看免费| 在线精品视频免费播放| 国产日产精品1区| 2020国产成人综合网| 日韩欧美精品在线视频| 日韩三级伦理片妻子的秘密按摩| 91精品在线免费| 欧美一区二区三区影视| 欧美一区二区视频观看视频| 日韩一级成人av| 日韩精品中文字幕一区| 精品国产第一区二区三区观看体验| 日韩一区二区在线观看视频| 日韩一区二区在线观看视频| 欧美xxxx在线观看| 久久久久久久免费视频了| 国产欧美日韩综合精品一区二区| 国产欧美日韩激情| 亚洲日韩欧美一区二区在线| 一区二区三区加勒比av| 午夜精品影院在线观看| 日本不卡一区二区三区| 激情综合色综合久久综合| 国产精品综合网| 91污在线观看| 欧美日韩国产高清一区| 日韩精品在线网站| 国产欧美一区二区三区网站| 亚洲卡通动漫在线| 亚洲成人在线观看视频| 激情综合色丁香一区二区| 久久亚洲精华国产精华液| 久久免费国产精品| 亚洲色欲色欲www| 日韩不卡手机在线v区| 国内外精品视频| 一本色道久久综合狠狠躁的推荐| 欧美视频在线观看一区| 精品毛片乱码1区2区3区| 国产精品国产a| 日韩黄色片在线观看| 丁香天五香天堂综合| 欧美无砖砖区免费| 2017欧美狠狠色| 亚洲中国最大av网站| 久久99久久精品| jiyouzz国产精品久久| 欧美日韩在线观看一区二区| 精品成a人在线观看| 亚洲精品国产高清久久伦理二区| 青青草97国产精品免费观看| 99视频一区二区| 日韩午夜三级在线| 亚洲欧美另类综合偷拍| 国内精品伊人久久久久影院对白| 91丨porny丨在线| 精品久久久久久久久久久久久久久久久| 亚洲欧美综合在线精品| 麻豆成人久久精品二区三区红 | 99re这里只有精品首页| 日韩一区二区三区在线视频| 成人欧美一区二区三区小说| 狂野欧美性猛交blacked| 在线精品视频一区二区三四 | 午夜伊人狠狠久久| 99精品一区二区三区| 精品sm在线观看| 日韩国产欧美在线播放| 色综合色综合色综合色综合色综合| 日韩精品一区二区三区蜜臀| 亚洲一区二区三区视频在线播放| 国产精品羞羞答答xxdd| 欧美一区二区三区影视| 亚洲成av人综合在线观看| thepron国产精品| 国产日韩欧美不卡| 男人操女人的视频在线观看欧美 | 国产免费成人在线视频| 另类小说欧美激情| 欧美精品日韩综合在线| 亚洲蜜臀av乱码久久精品蜜桃| 国产一区二区三区美女| 日韩亚洲国产中文字幕欧美| 午夜精品久久久久久久| 色av成人天堂桃色av| 中文字幕在线视频一区| 丁香天五香天堂综合| 久久久久久久久久久99999| 另类综合日韩欧美亚洲| 欧美老肥妇做.爰bbww视频| 夜夜嗨av一区二区三区网页| 91视频观看免费| 国产精品网站在线观看| 国产**成人网毛片九色| 国产午夜精品久久久久久免费视| 久草中文综合在线| 欧美电影免费观看高清完整版| 日韩国产成人精品| 日韩午夜在线影院| 国产最新精品免费| 国产亚洲精品中文字幕| 国产高清精品网站| 亚洲国产精品成人综合色在线婷婷 | 久久疯狂做爰流白浆xx| 日韩欧美高清一区| 久久精品国产免费看久久精品| 91麻豆精品久久久久蜜臀| 日本欧美一区二区三区| 日韩视频123| 国产永久精品大片wwwapp| 欧美韩日一区二区三区| heyzo一本久久综合| 一二三区精品福利视频| 欧美顶级少妇做爰| 久久成人免费网站| 久久综合九色综合97_久久久| 国产精品影音先锋| 国产精品久久久久久久久免费桃花 | 7777女厕盗摄久久久| 久久精品国产**网站演员| 久久看人人爽人人| 成人一级黄色片| 一区二区三区不卡在线观看| 欧美男女性生活在线直播观看| 日av在线不卡| 国产三级一区二区三区| 91首页免费视频| 日韩电影在线观看一区| 久久嫩草精品久久久精品| 91在线精品秘密一区二区| 亚洲va国产天堂va久久en| 精品久久久三级丝袜| 99在线精品观看| 亚洲18女电影在线观看| 精品噜噜噜噜久久久久久久久试看| 风间由美一区二区三区在线观看 | 奇米777欧美一区二区| 国产偷v国产偷v亚洲高清| 91在线观看免费视频| 五月天久久比比资源色| 久久新电视剧免费观看| 色婷婷av一区| 久88久久88久久久| 亚洲美女偷拍久久| 日韩欧美成人激情| 99久久综合国产精品| 奇米四色…亚洲| 亚洲九九爱视频| 久久女同精品一区二区| 欧美在线不卡一区| 精品一区二区三区久久久| 亚洲精品日韩综合观看成人91| 日韩欧美资源站| 一本大道久久a久久精二百 | av午夜一区麻豆| 美日韩一区二区三区| 亚洲精品老司机| 久久久高清一区二区三区| 69堂国产成人免费视频| 色94色欧美sute亚洲13| 国产成人精品免费视频网站|