www.pudn.com > potemkin_sourceforPSP.rar > DSDisplay.cpp


#include "stdafx.h" 
 
#include  
#include  
#include  
 
#include "DSDisplay.h" 
 
#include "../Graphics/G2D.h" 
#include "../Host.h" 
 
static GLuint backbufTex[2]; 
 
void DSDisplay_Init() 
{ 
	glPolygonMode (GL_FRONT_AND_BACK, GL_FILL); 
	 
	glDisable(GL_CULL_FACE); 
	glDisable(GL_DEPTH_TEST); 
	glDisable(GL_BLEND); 
 
	glShadeModel(GL_SMOOTH); 
 
	glEnable(GL_TEXTURE_2D); 
	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);	 
 
	glGenTextures(2,backbufTex); 
 
	//initialize lights 
	for (int i=0; i<4; i++) 
	{ 
		float ones[4]={1,1,1,1}; 
		float zeros[4]={0,0,0,1}; 
		glLightfv(i,GL_DIFFUSE,ones); 
		glLightfv(i,GL_AMBIENT,zeros); 
		glLightfv(i,GL_SPECULAR,ones); 
		glDisable(GL_LIGHT0+i); 
	} 
 
	//initialize backbuffer textures 
	for (int i=0; i<2; i++) 
	{ 
		glBindTexture(GL_TEXTURE_2D,backbufTex[i]); 
		glPixelStorei(GL_UNPACK_ALIGNMENT,1); 
		glTexEnvf (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); 
		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); 
		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); 
		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
		glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
 		glTexImage2D(GL_TEXTURE_2D,0,GL_RGB5_A1,256,256,0, GL_RGBA,GL_UNSIGNED_SHORT_1_5_5_5_REV,0); 
	} 
	//gluBuild2DMipmaps(GL_TEXTURE_2D,GL_RGB5_A1,256,128,GL_RDS,GL_UNSIGNED_BYTE,g2dCores[0].GetPointer()); 
	//(GL_TEXTURE_2D,0,3,128,128,0,GL_BGR_EXT,GL_UNSIGNED_BYTE,g2dCores[0].GetPointer()); 
} 
 
void DSDisplay_Draw() 
{ 
	host->BeginFrame(); 
 
	glClearColor(1,0,1,0); 
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
 
	glEnable(GL_TEXTURE_2D); 
 
	glColor3f(1,1,1); 
	float u1 = 256.0f/256.0f; 
	float v1 = 192.0f/256.0f; 
	for (int i=0; i<2; i++) 
	{ 
		glBindTexture(GL_TEXTURE_2D,backbufTex[i]); 
		glTexSubImage2D(GL_TEXTURE_2D,0,0,0,256, 256, GL_RGBA, GL_UNSIGNED_SHORT_1_5_5_5_REV, g2dCores[i].GetPointer()); 
		float y = (float)i*192; 
		glBegin(GL_TRIANGLE_FAN); 
		glTexCoord2f(0,0); 
		glVertex3f(0,y,0); 
		glTexCoord2f(u1,0); 
		glVertex3f(2*256,y,0); 
		glTexCoord2f(u1,v1); 
		glVertex3f(2*256,y+2*192,0); 
		glTexCoord2f(0,v1); 
		glVertex3f(0,y+2*192,0); 
		glEnd(); 
	} 
 
	glDisable(GL_TEXTURE_2D); 
 
	host->EndFrame(); 
} 
 
void DSDisplay_Shutdown() 
{ 
	glDeleteTextures(2,backbufTex); 
}