mirror of https://github.com/BOINC/boinc.git
image support added for jpg, bmp and ppm
svn path=/trunk/boinc/; revision=2337
This commit is contained in:
parent
6ffcc46f96
commit
606e797e25
|
@ -108,6 +108,7 @@ int boinc_init_opengl() {
|
|||
}
|
||||
|
||||
int boinc_finish_opengl() {
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -35,6 +35,7 @@ GLenum InitGL(GLvoid);
|
|||
GLenum ReSizeGLScene(GLsizei width, GLsizei height);
|
||||
extern bool app_render(int xs, int ys, double time_of_day);
|
||||
extern void app_init_gl(void);
|
||||
extern void app_unload_gl();
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
136
api/gutil.C
136
api/gutil.C
|
@ -129,15 +129,40 @@ void ortho_done()
|
|||
glPopMatrix();
|
||||
}
|
||||
|
||||
bool get_matrix(float src[16])
|
||||
bool get_matrix(double src[16])
|
||||
{
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPushMatrix();
|
||||
glGetFloatv(GL_MODELVIEW_MATRIX,src);
|
||||
glGetDoublev(GL_MODELVIEW_MATRIX,src);
|
||||
glPopMatrix();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool get_projection(double src[16])
|
||||
{
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPushMatrix();
|
||||
glGetDoublev(GL_PROJECTION_MATRIX,src);
|
||||
glPopMatrix();
|
||||
return true;
|
||||
}
|
||||
|
||||
bool get_viewport(int view[4])
|
||||
{
|
||||
glGetIntegerv(GL_VIEWPORT,view);
|
||||
return true;
|
||||
}
|
||||
|
||||
void get_2d_positions(float p1,float p2,float p3,
|
||||
double model[16], double proj[16], int viewport[4], double proj_pos[3])
|
||||
{
|
||||
gluProject(p1,p2,p3,model,proj,viewport,&proj_pos[0],&proj_pos[1],&proj_pos[2]);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
bool get_matrix_invert(float src[16])
|
||||
{
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
|
@ -712,6 +737,7 @@ void draw_texture(float* p, float* size) {
|
|||
//pointer to the begining of the list
|
||||
Star* stars = new Star;
|
||||
|
||||
//makes a list of stars that lie on cocentric circles (inefficient, most will be out of sight)
|
||||
void build_stars()
|
||||
{
|
||||
int i=0;
|
||||
|
@ -740,7 +766,7 @@ void build_stars()
|
|||
tmpStar=NULL;
|
||||
}
|
||||
|
||||
|
||||
//moves stars towards the eye vector, and replaces ones that go behind z=0
|
||||
void update_stars()
|
||||
{
|
||||
float modelview[16];
|
||||
|
@ -812,4 +838,108 @@ void replaceStar(Star* star)
|
|||
star->v=v;
|
||||
}
|
||||
|
||||
//jpg texture support
|
||||
//this is the array that will contain pointers to texture pixel data
|
||||
UINT g_Texture[MAX_TEXTURES];
|
||||
|
||||
void DecodeJPG(jpeg_decompress_struct* cinfo, tImageJPG *pImageData)
|
||||
{
|
||||
jpeg_read_header(cinfo, TRUE);
|
||||
jpeg_start_decompress(cinfo);
|
||||
|
||||
pImageData->rowSpan = cinfo->image_width * cinfo->num_components;
|
||||
pImageData->sizeX = cinfo->image_width;
|
||||
pImageData->sizeY = cinfo->image_height;
|
||||
pImageData->data = new unsigned char[pImageData->rowSpan * pImageData->sizeY];
|
||||
|
||||
unsigned char** rowPtr = new unsigned char*[pImageData->sizeY];
|
||||
for (int i = 0; i < pImageData->sizeY; i++)
|
||||
rowPtr[i] = &(pImageData->data[i*pImageData->rowSpan]);
|
||||
|
||||
int rowsRead = 0;
|
||||
while (cinfo->output_scanline < cinfo->output_height)
|
||||
{
|
||||
rowsRead += jpeg_read_scanlines(cinfo, &rowPtr[rowsRead], cinfo->output_height - rowsRead);
|
||||
}
|
||||
delete [] rowPtr;
|
||||
jpeg_finish_decompress(cinfo);
|
||||
}
|
||||
|
||||
tImageJPG *LoadJPG(const char *filename)
|
||||
{
|
||||
struct jpeg_decompress_struct cinfo;
|
||||
tImageJPG *pImageData = NULL;
|
||||
FILE *pFile;
|
||||
|
||||
if((pFile = fopen(filename, "rb")) == NULL)
|
||||
{
|
||||
MessageBox(NULL, "Unable to load JPG File!", "Error", MB_OK);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
jpeg_error_mgr jerr;
|
||||
cinfo.err = jpeg_std_error(&jerr);
|
||||
jpeg_create_decompress(&cinfo);
|
||||
jpeg_stdio_src(&cinfo, pFile);
|
||||
pImageData = (tImageJPG*)malloc(sizeof(tImageJPG));
|
||||
DecodeJPG(&cinfo, pImageData);
|
||||
jpeg_destroy_decompress(&cinfo);
|
||||
fclose(pFile);
|
||||
return pImageData;
|
||||
}
|
||||
|
||||
bool CreateTextureJPG(UINT textureArray[], LPSTR strFileName, int textureID)
|
||||
{
|
||||
if(!strFileName) return false;
|
||||
tImageJPG *pImage = LoadJPG(strFileName); // Load the image and store the data
|
||||
if(pImage == NULL)
|
||||
exit(0);
|
||||
glGenTextures(1, &textureArray[textureID]);
|
||||
glBindTexture(GL_TEXTURE_2D, textureArray[textureID]);
|
||||
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, pImage->sizeX, pImage->sizeY, GL_RGB, GL_UNSIGNED_BYTE, pImage->data);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_LINEAR);
|
||||
|
||||
if (pImage)
|
||||
{
|
||||
if (pImage->data)
|
||||
{
|
||||
free(pImage->data);
|
||||
}
|
||||
|
||||
free(pImage);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CreateTextureBMP(UINT textureArray[], LPSTR strFileName, int textureID)
|
||||
{
|
||||
DIB_BITMAP image;
|
||||
if(image.loadBMP(strFileName) == false)
|
||||
return false;
|
||||
|
||||
glGenTextures(1, &textureArray[textureID]);
|
||||
glBindTexture(GL_TEXTURE_2D, textureArray[textureID]);
|
||||
gluBuild2DMipmaps(GL_TEXTURE_2D, image.get_channels(), image.get_width(),
|
||||
image.get_height(), GL_BGR_EXT, GL_UNSIGNED_BYTE,
|
||||
image.getLinePtr(0));
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_LINEAR);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool CreateTexturePPM(UINT textureArray[], LPSTR strFileName, int textureID)
|
||||
{
|
||||
unsigned char* pixels;
|
||||
int width, height;
|
||||
if(read_ppm_file(strFileName, width, height, &pixels)==-1) return false;
|
||||
|
||||
glGenTextures(1, &textureArray[textureID]);
|
||||
glBindTexture(GL_TEXTURE_2D, textureArray[textureID]);
|
||||
gluBuild2DMipmaps(GL_TEXTURE_2D,3,width,height,GL_RGB,GL_UNSIGNED_BYTE,pixels);
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR_MIPMAP_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR_MIPMAP_LINEAR);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
|
16
api/gutil.h
16
api/gutil.h
|
@ -67,7 +67,11 @@ extern void mode_unshaded();
|
|||
extern void mode_lines();
|
||||
extern void ortho_done();
|
||||
extern bool get_matrix_invert(float[16]);
|
||||
extern bool get_matrix(float[16]);
|
||||
extern bool get_matrix(double src[16]);
|
||||
extern bool get_projection(double src[16]);
|
||||
extern bool get_viewport(int view[4]);
|
||||
extern void get_2d_positions(float p1,float p2,float p3,
|
||||
double model[16], double proj[16], int viewport[4], double proj_pos[3]);
|
||||
|
||||
// draw a progress bar as an opaque cylinder within a translucent cylinder
|
||||
//
|
||||
|
@ -102,7 +106,6 @@ extern int read_ppm(char* name, int& w, int& h, unsigned char** arrayp);
|
|||
extern int init_texture(char* filename);
|
||||
extern void draw_texture(float* pos, float* size);
|
||||
|
||||
|
||||
//stars
|
||||
struct Star
|
||||
{
|
||||
|
@ -113,3 +116,12 @@ struct Star
|
|||
extern void build_stars();
|
||||
extern void update_stars();
|
||||
extern void replaceStar(Star* tmpStar);
|
||||
|
||||
#include "jpeglib.h"
|
||||
#include "bmplib.h"
|
||||
#define MAX_TEXTURES 16
|
||||
extern UINT g_Texture[MAX_TEXTURES];
|
||||
extern bool CreateTextureJPG(UINT textureArray[], LPSTR strFileName, int textureID);
|
||||
extern bool CreateTextureBMP(UINT textureArray[], LPSTR strFileName, int textureID);
|
||||
extern bool CreateTexturePPM(UINT textureArray[], LPSTR strFileName, int textureID);
|
||||
extern tImageJPG *LoadJPG(const char *filename);
|
153
api/reduce.C
153
api/reduce.C
|
@ -504,55 +504,57 @@ void REDUCED_ARRAY::draw_axis_labels()
|
|||
}
|
||||
|
||||
void REDUCED_ARRAY::draw_axes() {
|
||||
/* box
|
||||
|
||||
float adj=-.18f;
|
||||
// box
|
||||
mode_unshaded();
|
||||
|
||||
glLineWidth(1.0);
|
||||
glEnable(GL_LINE_SMOOTH);
|
||||
glLineWidth(.5);
|
||||
// glEnable(GL_LINE_SMOOTH);
|
||||
glBegin(GL_LINES);
|
||||
glColor4d(1,1,1,.9);
|
||||
glColor4d(1,1,1,.5);
|
||||
|
||||
//base square
|
||||
glVertex3f(draw_pos[0], draw_pos[1], draw_pos[2]);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1], draw_pos[2]);
|
||||
glVertex3f(draw_pos[0], draw_pos[1], draw_pos[2]+adj);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1], draw_pos[2]+adj);
|
||||
|
||||
glVertex3f(draw_pos[0], draw_pos[1], draw_pos[2]);
|
||||
glVertex3f(draw_pos[0], draw_pos[1]+draw_size[1], draw_pos[2]);
|
||||
glVertex3f(draw_pos[0], draw_pos[1], draw_pos[2]+adj);
|
||||
glVertex3f(draw_pos[0], draw_pos[1]+draw_size[1], draw_pos[2]+adj);
|
||||
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1], draw_pos[2]);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1]+draw_size[1], draw_pos[2]);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1], draw_pos[2]+adj);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1]+draw_size[1], draw_pos[2]+adj);
|
||||
|
||||
glVertex3f(draw_pos[0], draw_pos[1]+draw_size[1], draw_pos[2]);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1]+draw_size[1], draw_pos[2]);
|
||||
glVertex3f(draw_pos[0], draw_pos[1]+draw_size[1], draw_pos[2]+adj);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1]+draw_size[1], draw_pos[2]+adj);
|
||||
|
||||
//top square
|
||||
glVertex3f(draw_pos[0], draw_pos[1], draw_pos[2]+draw_size[2]);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1], draw_pos[2]+draw_size[2]);
|
||||
glVertex3f(draw_pos[0], draw_pos[1], draw_pos[2]+draw_size[2]+adj);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1], draw_pos[2]+draw_size[2]+adj);
|
||||
|
||||
glVertex3f(draw_pos[0], draw_pos[1], draw_pos[2]+draw_size[2]);
|
||||
glVertex3f(draw_pos[0], draw_pos[1]+draw_size[1], draw_pos[2]+draw_size[2]);
|
||||
glVertex3f(draw_pos[0], draw_pos[1], draw_pos[2]+draw_size[2]+adj);
|
||||
glVertex3f(draw_pos[0], draw_pos[1]+draw_size[1], draw_pos[2]+draw_size[2]+adj);
|
||||
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1], draw_pos[2]+draw_size[2]);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1]+draw_size[1], draw_pos[2]+draw_size[2]);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1], draw_pos[2]+draw_size[2]+adj);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1]+draw_size[1], draw_pos[2]+draw_size[2]+adj);
|
||||
|
||||
glVertex3f(draw_pos[0], draw_pos[1]+draw_size[1], draw_pos[2]+draw_size[2]);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1]+draw_size[1], draw_pos[2]+draw_size[2]);
|
||||
glVertex3f(draw_pos[0], draw_pos[1]+draw_size[1], draw_pos[2]+draw_size[2]+adj);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1]+draw_size[1], draw_pos[2]+draw_size[2]+adj);
|
||||
|
||||
//connecting lines
|
||||
glVertex3f(draw_pos[0], draw_pos[1], draw_pos[2]);
|
||||
glVertex3f(draw_pos[0], draw_pos[1], draw_pos[2]+draw_size[2]);
|
||||
glVertex3f(draw_pos[0], draw_pos[1], draw_pos[2]+adj);
|
||||
glVertex3f(draw_pos[0], draw_pos[1], draw_pos[2]+draw_size[2]+adj);
|
||||
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1], draw_pos[2]);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1], draw_pos[2]+draw_size[2]);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1], draw_pos[2]+adj);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1], draw_pos[2]+draw_size[2]+adj);
|
||||
|
||||
glVertex3f(draw_pos[0], draw_pos[1]+draw_size[1], draw_pos[2]);
|
||||
glVertex3f(draw_pos[0], draw_pos[1]+draw_size[1], draw_pos[2]+draw_size[2]);
|
||||
glVertex3f(draw_pos[0], draw_pos[1]+draw_size[1], draw_pos[2]+adj);
|
||||
glVertex3f(draw_pos[0], draw_pos[1]+draw_size[1], draw_pos[2]+draw_size[2]+adj);
|
||||
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1]+draw_size[1], draw_pos[2]);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1]+draw_size[1], draw_pos[2]+draw_size[2]);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1]+draw_size[1], draw_pos[2]+adj);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1]+draw_size[1], draw_pos[2]+draw_size[2]+adj);
|
||||
glEnd();
|
||||
|
||||
*/
|
||||
|
||||
mode_unshaded();
|
||||
|
||||
glLineWidth(1.0);
|
||||
|
@ -560,7 +562,7 @@ void REDUCED_ARRAY::draw_axes() {
|
|||
glBegin(GL_LINES);
|
||||
glColor4d(1,1,1,1);
|
||||
|
||||
float adj=-.18f;
|
||||
|
||||
glVertex3f(draw_pos[0], draw_pos[1], draw_pos[2]+adj);
|
||||
glVertex3f(draw_pos[0]+draw_size[0], draw_pos[1], draw_pos[2]+adj);
|
||||
|
||||
|
@ -589,38 +591,71 @@ void REDUCED_ARRAY::draw_axes() {
|
|||
|
||||
void REDUCED_ARRAY::draw_labels()
|
||||
{
|
||||
float model[16];
|
||||
double model[16];
|
||||
double proj[16];
|
||||
double z_pos[3];
|
||||
double x_pos[3];
|
||||
double xzmin_corner[3];
|
||||
double zmax_corner[3];
|
||||
double xmax_corner[3];
|
||||
|
||||
int viewport[4];
|
||||
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
get_matrix_invert(model);
|
||||
// get_matrix(model);
|
||||
get_matrix(model);
|
||||
get_projection(proj);
|
||||
get_viewport(viewport);
|
||||
|
||||
float offset = 0;
|
||||
|
||||
char* zlabel = "Time(sec)";
|
||||
char* xlabel = "Frequency(HZ)";
|
||||
|
||||
char* zmax = "107.4";
|
||||
char* zmin = "0";
|
||||
|
||||
char* xmax = "9765.620";
|
||||
char* xmin = "0.0";
|
||||
|
||||
float left_of_z = -0.1f;
|
||||
float left_of_z2 = -0.04f;
|
||||
float below_x = -.03f;
|
||||
float center_x = -.06f;
|
||||
|
||||
|
||||
get_2d_positions(draw_pos[0],draw_pos[1],draw_pos[2]+(draw_size[2]/2.0f),
|
||||
model, proj, viewport,z_pos);
|
||||
|
||||
get_2d_positions(draw_pos[0]+draw_size[0]/2.0f,draw_pos[1],draw_pos[2]+draw_size[2],
|
||||
model, proj, viewport,x_pos);
|
||||
|
||||
get_2d_positions(draw_pos[0],draw_pos[1],draw_pos[2]+draw_size[2],
|
||||
model, proj, viewport,xzmin_corner);
|
||||
|
||||
get_2d_positions(draw_pos[0]+draw_size[0],draw_pos[1],draw_pos[2]+draw_size[2],
|
||||
model, proj, viewport,xmax_corner);
|
||||
|
||||
get_2d_positions(draw_pos[0],draw_pos[1],draw_pos[2],
|
||||
model, proj, viewport,zmax_corner);
|
||||
|
||||
mode_ortho();
|
||||
|
||||
float w = .05f;
|
||||
float pos[3];
|
||||
pos[0]=draw_pos[0]*model[0]+draw_pos[1]*model[4]+draw_pos[2]*model[8];
|
||||
pos[1]=draw_pos[0]*model[1]+draw_pos[1]*model[5]+draw_pos[2]*model[9];
|
||||
pos[2]=draw_pos[0]*model[2]+draw_pos[1]*model[6]+draw_pos[2]*model[10];
|
||||
//convert to 2d space
|
||||
if(pos[2]>0)
|
||||
{
|
||||
pos[0]=pos[0]/pos[2];
|
||||
pos[1]=pos[1]/pos[2];
|
||||
pos[2]=1;
|
||||
}
|
||||
|
||||
//scale to [-1,1]
|
||||
pos[0]=pos[0]/4.0f;
|
||||
pos[1]=pos[1]/4.0f;
|
||||
pos[2]=1;
|
||||
|
||||
char buf[512];
|
||||
sprintf(buf,"%f,%f,%f",pos[0],pos[1],pos[2]);
|
||||
//MessageBox(NULL,buf,"F",0);
|
||||
|
||||
mode_unshaded();
|
||||
glColor3d(1,1,1);
|
||||
glLineWidth(2);
|
||||
draw_text_line(pos, w, 2, "Time");
|
||||
float w=.015f;
|
||||
float l=1.0f;
|
||||
mode_unshaded();
|
||||
glColor3d(1,1,1);
|
||||
float zpos[3]={(float)z_pos[0]/(float)(viewport[2]) + left_of_z,(float)z_pos[1]/(float)(viewport[3]),(float)z_pos[2]};
|
||||
float xpos[3]={(float)x_pos[0]/(float)(viewport[2]) + center_x,(float)x_pos[1]/(float)(viewport[3])+below_x,(float)x_pos[2]};
|
||||
float xminpos[3]={(float)xzmin_corner[0]/(float)(viewport[2]),(float)xzmin_corner[1]/(float)(viewport[3])+below_x,(float)xzmin_corner[2]};
|
||||
float xmaxpos[3]={(float)xmax_corner[0]/(float)(viewport[2]),(float)xmax_corner[1]/(float)(viewport[3])+below_x,(float)xmax_corner[2]};
|
||||
float zminpos[3]={(float)xzmin_corner[0]/(float)(viewport[2])+left_of_z2,(float)xzmin_corner[1]/(float)(viewport[3]),(float)xzmin_corner[2]};
|
||||
float zmaxpos[3]={(float)zmax_corner[0]/(float)(viewport[2])+left_of_z2,(float)zmax_corner[1]/(float)(viewport[3]),(float)zmax_corner[2]};
|
||||
draw_text_line(zpos, w, l, zlabel);
|
||||
draw_text_line(xpos, w, l, xlabel);
|
||||
// draw_text_line(xminpos, w, l, xmin);
|
||||
// draw_text_line(xmaxpos, w, l, xmax);
|
||||
// draw_text_line(zminpos, w, l, zmin);
|
||||
// draw_text_line(zmaxpos, w, l, zmax);
|
||||
|
||||
ortho_done();
|
||||
}
|
||||
|
|
|
@ -28,13 +28,9 @@ static int current_graphics_mode = MODE_HIDE_GRAPHICS;
|
|||
static POINT mousePos;
|
||||
static UINT m_uEndSSMsg;
|
||||
|
||||
BOOL win_loop_done;
|
||||
HDC myhDC;
|
||||
|
||||
void SetupPixelFormat(HDC hDC);
|
||||
unsigned int CreateFont(char *fontName, int fontSize);
|
||||
void PrintText(unsigned int base, char *string);
|
||||
void ClearGLFont(unsigned int base);
|
||||
unsigned int listBase;
|
||||
BOOL win_loop_done;
|
||||
|
||||
extern bool using_opengl;
|
||||
extern bool standalone;
|
||||
|
@ -67,6 +63,8 @@ bool KillWindow() {
|
|||
return false;
|
||||
hWnd=NULL; // Set hWnd To NULL
|
||||
}
|
||||
|
||||
app_unload_gl();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -111,16 +109,18 @@ void SetMode(int mode) {
|
|||
WindowRect.right-WindowRect.left,WindowRect.bottom-WindowRect.top,
|
||||
NULL, NULL, hInstance, NULL);
|
||||
|
||||
|
||||
|
||||
SetForegroundWindow(hWnd);
|
||||
|
||||
GetCursorPos(&mousePos);
|
||||
//
|
||||
hDC = GetDC(hWnd);
|
||||
SetupPixelFormat(hDC);
|
||||
ClearGLFont(listBase);
|
||||
listBase = CreateFont("Arial", 24);
|
||||
// hDC = GetDC(hWnd);
|
||||
// SetupPixelFormat(hDC);
|
||||
// ClearGLFont(listBase);
|
||||
// listBase = CreateFont("Arial", 24);
|
||||
//
|
||||
/*
|
||||
|
||||
PIXELFORMATDESCRIPTOR pfd= // pfd Tells Windows How We Want Things To Be
|
||||
{
|
||||
sizeof(PIXELFORMATDESCRIPTOR), // Size Of This Pixel Format Descriptor
|
||||
|
@ -144,10 +144,11 @@ void SetMode(int mode) {
|
|||
};
|
||||
|
||||
hDC = GetDC(hWnd);
|
||||
myhDC=hDC;
|
||||
int PixelFormat;
|
||||
PixelFormat = ChoosePixelFormat(hDC, &pfd);
|
||||
SetPixelFormat(hDC, PixelFormat, &pfd);
|
||||
*/
|
||||
|
||||
|
||||
if(!(hRC = wglCreateContext(hDC))) {
|
||||
ReleaseDC(hWnd, hDC);
|
||||
|
@ -332,118 +333,3 @@ BOOL unreg_win_class() {
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//my text drawing functions -<oliver wang>-
|
||||
void SetupPixelFormat(HDC hDC)
|
||||
{
|
||||
int nPixelFormat;
|
||||
|
||||
static PIXELFORMATDESCRIPTOR pfd = {
|
||||
sizeof(PIXELFORMATDESCRIPTOR), // size of structure.
|
||||
1, // always 1.
|
||||
PFD_DRAW_TO_WINDOW | // support window
|
||||
PFD_SUPPORT_OPENGL | // support OpenGl
|
||||
PFD_DOUBLEBUFFER, // support double buffering
|
||||
PFD_TYPE_RGBA, // support RGBA
|
||||
32, // 32 bit color mode
|
||||
0, 0, 0, 0, 0, 0, // ignore color bits
|
||||
0, // no alpha buffer
|
||||
0, // ignore shift bit
|
||||
0, // no accumulation buffer
|
||||
0, 0, 0, 0, // ignore accumulation bits.
|
||||
16, // number of depth buffer bits.
|
||||
0, // number of stencil buffer bits.
|
||||
0, // 0 means no auxiliary buffer
|
||||
PFD_MAIN_PLANE, // The main drawing plane
|
||||
0, // this is reserved
|
||||
0, 0, 0 }; // layer masks ignored.
|
||||
|
||||
|
||||
// this chooses the best pixel format and returns index.
|
||||
nPixelFormat = ChoosePixelFormat(hDC, &pfd);
|
||||
// This set pixel format to device context.
|
||||
SetPixelFormat(hDC, nPixelFormat, &pfd);
|
||||
}
|
||||
|
||||
void PrepareWindow()
|
||||
{
|
||||
// Always clear the screen and depth buffer then reset modleview matrix.
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clears the screen.
|
||||
glLoadIdentity(); //Reset modelview matrix for new frame.
|
||||
}
|
||||
|
||||
|
||||
// There is a lot of new code in our render scene function.
|
||||
void RenderScene()
|
||||
{
|
||||
glTranslatef(0.0f, 0.0f, -1.0f);// Move back 1 into the screen.
|
||||
glColor3f(1.0f, 1.0f, 1.0f); // Set the color of the text.
|
||||
|
||||
// This is the X and Y coordinate that the text will be printed at.
|
||||
glRasterPos2f(-0.35f, 0.1f);
|
||||
PrintText(listBase, "www.UltimateGameProgramming.com");// The string to print.
|
||||
|
||||
// Print second line
|
||||
glColor3f(1.0f, 0.0f, 0.0f);
|
||||
glRasterPos2f(-0.35f, 0.0f);
|
||||
PrintText(listBase, "Created by the Programming Ace!");
|
||||
|
||||
// Print third line.
|
||||
glColor3f(0.0f, 1.0f, 0.0f);
|
||||
glRasterPos2f(-0.35f, -0.1f);
|
||||
PrintText(listBase, "Order the CD for more great tutorials!");
|
||||
}
|
||||
|
||||
unsigned int CreateFont(char *fontName, int Size)
|
||||
{
|
||||
// windows font
|
||||
HFONT hFont;
|
||||
unsigned int base;
|
||||
|
||||
// Create space for 96 characters.
|
||||
base = glGenLists(96);
|
||||
|
||||
if(stricmp(fontName, "symbol")==0)
|
||||
{
|
||||
hFont = CreateFont(Size, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
|
||||
SYMBOL_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
|
||||
ANTIALIASED_QUALITY, FF_DONTCARE | DEFAULT_PITCH, fontName);
|
||||
}
|
||||
else
|
||||
{
|
||||
hFont = CreateFont(Size, 0, 0, 0, FW_BOLD, FALSE, FALSE, FALSE,
|
||||
ANSI_CHARSET, OUT_TT_PRECIS, CLIP_DEFAULT_PRECIS,
|
||||
ANTIALIASED_QUALITY, FF_DONTCARE | DEFAULT_PITCH, fontName);
|
||||
}
|
||||
|
||||
if(!hFont)
|
||||
return 0;
|
||||
|
||||
hDC = GetDC(hWnd);
|
||||
SelectObject(hDC, hFont);
|
||||
wglUseFontBitmaps(hDC, 32, 96, base);
|
||||
|
||||
return base;
|
||||
}
|
||||
|
||||
|
||||
void PrintText(unsigned int base, char *string)
|
||||
{
|
||||
if((base == 0 || string == NULL))
|
||||
return;
|
||||
|
||||
glPushAttrib(GL_LIST_BIT);
|
||||
glListBase(base - 32);
|
||||
glCallLists(strlen(string), GL_UNSIGNED_BYTE, string);
|
||||
glPopAttrib();
|
||||
}
|
||||
|
||||
|
||||
void ClearGLFont(unsigned int base)
|
||||
{
|
||||
if(base != 0)
|
||||
glDeleteLists(base, 96);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue