Panel updates from Friedemann.
This commit is contained in:
parent
2c2b68fc47
commit
3563de2a16
3 changed files with 84 additions and 112 deletions
|
@ -304,12 +304,16 @@ void fgCockpitUpdate( void ) {
|
|||
|
||||
if ( current_options.get_panel_status() &&
|
||||
(fabs(pview->view_offset) < 0.2) ) {
|
||||
xglViewport(0, 0, pview->winWidth, pview->winHeight);
|
||||
fgPanelUpdate();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// $Log$
|
||||
// Revision 1.23 1998/11/09 23:38:50 curt
|
||||
// Panel updates from Friedemann.
|
||||
//
|
||||
// Revision 1.22 1998/11/06 21:17:45 curt
|
||||
// Converted to new logstream debugging facility. This allows release
|
||||
// builds with no messages at all (and no performance impact) by using
|
||||
|
|
|
@ -32,6 +32,8 @@
|
|||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
// #include <GL/gl.h>
|
||||
// #include <GL/glu.h>
|
||||
#include <GL/glut.h>
|
||||
#include <XGL/xgl.h>
|
||||
|
||||
|
@ -42,6 +44,7 @@
|
|||
#include <math.h>
|
||||
|
||||
#include <Aircraft/aircraft.hxx>
|
||||
#include <Debug/logstream.hxx>
|
||||
#include <Main/options.hxx>
|
||||
#include <Main/views.hxx>
|
||||
|
||||
|
@ -77,16 +80,16 @@ IMAGE *imag;
|
|||
IMAGE *img2;
|
||||
IMAGE *img;
|
||||
|
||||
static GLuint panel_list;
|
||||
static GLuint panel_tex_id;
|
||||
static GLubyte tex[32][128][3];
|
||||
static GLint stencil[1024][768];
|
||||
static float alphahist;
|
||||
static float Xzoom, Yzoom;
|
||||
// static GLint viewport[4];
|
||||
// static GLdouble mvmatrix[16], projmatrix[16];
|
||||
static Pointer pointer[20];
|
||||
static float NumPoint = 4;
|
||||
static int NumGyro = 1;
|
||||
static int NumPoint = 4;
|
||||
static int i = 0;
|
||||
static GLdouble mvmatrix[16];
|
||||
static GLdouble matrix[16];
|
||||
static double var[20];
|
||||
static double offset;
|
||||
static float alpha;
|
||||
|
@ -300,17 +303,16 @@ static IMAGE *ImageLoad(char *fileName)
|
|||
void fgPanelInit ( void ) {
|
||||
fgVIEW *v;
|
||||
string tpath;
|
||||
// char *root;
|
||||
int x, y, i;
|
||||
int x, y;
|
||||
|
||||
v = ¤t_view;
|
||||
|
||||
Xzoom = (float)((float)(current_view.winWidth)/1024);
|
||||
Yzoom = (float)((float)(current_view.winHeight)/768);
|
||||
|
||||
pointer[1].XPos = 352;
|
||||
pointer[1].YPos = 156;
|
||||
pointer[1].radius = 4;
|
||||
pointer[1].XPos = 357;
|
||||
pointer[1].YPos = 167;
|
||||
pointer[1].radius = 5;
|
||||
pointer[1].length = 32;
|
||||
pointer[1].width = 3;
|
||||
pointer[1].angle = 30;
|
||||
|
@ -319,12 +321,12 @@ pointer[1].value2 = 3000;
|
|||
pointer[1].alpha1 = 0;
|
||||
pointer[1].alpha2 = 1080;
|
||||
pointer[1].variable = 1;
|
||||
pointer[1].teXpos = 59;
|
||||
pointer[1].texYpos = 199;
|
||||
pointer[1].teXpos = 193;
|
||||
pointer[1].texYpos = 191;
|
||||
|
||||
pointer[0].XPos = 352;
|
||||
pointer[0].YPos = 156;
|
||||
pointer[0].radius = 4;
|
||||
pointer[0].XPos = 357;
|
||||
pointer[0].YPos = 167;
|
||||
pointer[0].radius = 5;
|
||||
pointer[0].length = 25;
|
||||
pointer[0].width = 4;
|
||||
pointer[0].angle = 30;
|
||||
|
@ -333,11 +335,11 @@ pointer[0].value2 = 10000;
|
|||
pointer[0].alpha1 = 0;
|
||||
pointer[0].alpha2 = 360;
|
||||
pointer[0].variable = 1;
|
||||
pointer[0].teXpos = 59;
|
||||
pointer[0].texYpos = 199;
|
||||
pointer[0].teXpos = 193;
|
||||
pointer[0].texYpos = 191;
|
||||
|
||||
pointer[2].XPos = 352;
|
||||
pointer[2].YPos = 48;
|
||||
pointer[2].XPos = 358;
|
||||
pointer[2].YPos = 52;
|
||||
pointer[2].radius = 4;
|
||||
pointer[2].length = 30;
|
||||
pointer[2].width = 3;
|
||||
|
@ -347,12 +349,12 @@ pointer[2].value2 = 3;
|
|||
pointer[2].alpha1 = 100;
|
||||
pointer[2].alpha2 = 440;
|
||||
pointer[2].variable = 2;
|
||||
pointer[2].teXpos = 63;
|
||||
pointer[2].texYpos = 68;
|
||||
pointer[2].teXpos = 66.15;
|
||||
pointer[2].texYpos = 66;
|
||||
|
||||
|
||||
pointer[3].XPos = 451;
|
||||
pointer[3].YPos = 125;
|
||||
pointer[3].XPos = 462;
|
||||
pointer[3].YPos = 133;
|
||||
pointer[3].radius = 9;
|
||||
pointer[3].length = 20;
|
||||
pointer[3].width = 5;
|
||||
|
@ -362,12 +364,14 @@ pointer[3].value2 = 1.0;
|
|||
pointer[3].alpha1 = 280;
|
||||
pointer[3].alpha2 = 540;
|
||||
pointer[3].variable = 3;
|
||||
pointer[3].teXpos = 162;
|
||||
pointer[3].texYpos = 40;
|
||||
pointer[3].teXpos = 173.8;
|
||||
pointer[3].texYpos = 83;
|
||||
|
||||
|
||||
for(i=0;i<NumPoint;i++){
|
||||
CreatePointer(&pointer[i]);
|
||||
}
|
||||
|
||||
#ifdef GL_VERSION_1_1
|
||||
xglGenTextures(1, &panel_tex_id);
|
||||
xglBindTexture(GL_TEXTURE_2D, panel_tex_id);
|
||||
|
@ -385,10 +389,6 @@ CreatePointer(&pointer[i]);
|
|||
xglMatrixMode(GL_MODELVIEW);
|
||||
xglPushMatrix();
|
||||
xglLoadIdentity();
|
||||
xglClearStencil(0x0);
|
||||
xglClear(GL_STENCIL_BUFFER_BIT);
|
||||
xglEnable(GL_STENCIL_TEST);
|
||||
//xglPixelStorei(GL_UNPACK_ROW_LENGTH, 32);
|
||||
xglPixelStorei(GL_UNPACK_ALIGNMENT, 4);
|
||||
xglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
xglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||
|
@ -396,78 +396,35 @@ CreatePointer(&pointer[i]);
|
|||
xglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
|
||||
/* load in the texture data */
|
||||
// current_options.get_fg_root(root);
|
||||
// tpath[0] = '\0';
|
||||
// strcat(tpath, "/home/fried/Flugsim/FlightGear-0.52");
|
||||
// strcat(tpath, "/Textures/");
|
||||
// strcat(tpath, "arthor.rgb");
|
||||
|
||||
// if ( (imag = ImageLoad(tpath)) == NULL ){
|
||||
// fgPrintf( FG_COCKPIT, FG_ALERT,
|
||||
// "Error loading cockpit texture %s\n", tpath );
|
||||
// exit(-1);
|
||||
// }
|
||||
|
||||
xglPixelStorei(GL_UNPACK_ROW_LENGTH, 256);
|
||||
// tpath[0] = '\0';
|
||||
// strcat(tpath, "/home/fried/Flugsim/FlightGear-0.52");
|
||||
tpath = current_options.get_fg_root() + "/Textures/gauges.rgb";
|
||||
if((img = ImageLoad( (char *)tpath.c_str() ))==NULL){
|
||||
}
|
||||
|
||||
xglPixelStorei(GL_UNPACK_ROW_LENGTH, 1024);
|
||||
|
||||
// tpath[0] = '\0';
|
||||
// strcat(tpath,"/home/fried/Flugsim/FlightGear-0.52" );
|
||||
tpath = current_options.get_fg_root() + "/Textures/Fullone.rgb";
|
||||
|
||||
if ((img2 = ImageLoad( (char *)tpath.c_str() ))==NULL ){
|
||||
}
|
||||
|
||||
for ( y = 0; y < 768; y++ ) {
|
||||
for ( x = 0; x < 1024; x++ ) {
|
||||
if ( (img2->data[(y+x*768)*3] == 0) && (img2->data[(y+x*768)*3+1] == 0) && (img2->data[(y+x*768)*3+2] == 0) ) {
|
||||
stencil[x][y]=0x0;//0x0
|
||||
} else {
|
||||
stencil[x][y]=0x1;//0x1
|
||||
}
|
||||
}
|
||||
}
|
||||
xglPixelZoom(Xzoom, Yzoom);
|
||||
xglPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
xglPixelStorei(GL_UNPACK_ROW_LENGTH, 1024);
|
||||
xglStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
|
||||
xglRasterPos2i(0,0);
|
||||
xglDrawPixels(1024, 768, GL_STENCIL_INDEX, GL_UNSIGNED_INT, (GLvoid *)(stencil));
|
||||
xglPixelStorei(GL_UNPACK_ROW_LENGTH, 1024);
|
||||
xglStencilFunc(GL_EQUAL, 0x1, 0x1);//0x1..
|
||||
xglStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
||||
xglRasterPos2i(0,0);
|
||||
xglPixelZoom(Xzoom, Yzoom);
|
||||
// xglDrawPixels(1024, 768, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)(img2->data));
|
||||
xglStencilFunc(GL_NOTEQUAL, 0x1, 0x1);
|
||||
xglStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
||||
xglEnable(GL_STENCIL_TEST);
|
||||
xglPixelStorei(GL_UNPACK_ROW_LENGTH, 256);
|
||||
xglTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB,
|
||||
GL_UNSIGNED_BYTE, (GLvoid *)(img->data));
|
||||
// #ifdef GL_VERSION_1_1
|
||||
// xglBindTexture(GL_TEXTURE_2D, panel_tex_id[1]);
|
||||
// #elif GL_EXT_texture_object
|
||||
// xglBindTextureEXT(GL_TEXTURE_2D, panel_tex_id[1]);
|
||||
// #else
|
||||
// # error port me
|
||||
// #endif
|
||||
// xglPixelStorei(GL_UNPACK_ROW_LENGTH, 256);
|
||||
// xglTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 256, 256, 0, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)(img->data));
|
||||
xglMatrixMode(GL_MODELVIEW);
|
||||
xglPopMatrix();
|
||||
}
|
||||
|
||||
void fgPanelReInit( void){
|
||||
void fgPanelReInit( int x, int y, int finx, int finy){
|
||||
fgVIEW *v;
|
||||
fgOPTIONS *o;
|
||||
int x, y, i;
|
||||
int i;
|
||||
|
||||
o = ¤t_options;
|
||||
v = ¤t_view;
|
||||
|
@ -483,30 +440,16 @@ void fgPanelReInit( void){
|
|||
xglMatrixMode(GL_MODELVIEW);
|
||||
xglPushMatrix();
|
||||
xglLoadIdentity();
|
||||
xglClearStencil(0x0);
|
||||
xglClear(GL_STENCIL_BUFFER_BIT);
|
||||
xglEnable(GL_STENCIL_TEST);
|
||||
xglPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
xglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
xglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||
xglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
xglTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
xglPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
|
||||
xglPixelZoom(Xzoom, Yzoom);
|
||||
xglPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
xglPixelStorei(GL_UNPACK_ROW_LENGTH, 1024);
|
||||
xglStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
|
||||
xglRasterPos2i(0,0);
|
||||
xglDrawPixels(1024, 768, GL_STENCIL_INDEX, GL_UNSIGNED_INT, (GLvoid *)(stencil));
|
||||
xglPixelStorei(GL_UNPACK_ROW_LENGTH, 1024);
|
||||
xglStencilFunc(GL_EQUAL, 0x1, 0x1);//0x1..
|
||||
xglStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
||||
xglRasterPos2i(0,0);
|
||||
xglPixelStorei(GL_UNPACK_SKIP_PIXELS, x);
|
||||
xglPixelStorei(GL_UNPACK_SKIP_ROWS, y);
|
||||
xglRasterPos2i(x, y);
|
||||
xglPixelZoom(Xzoom, Yzoom);
|
||||
xglDrawPixels(1024, 768, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)(img2->data));
|
||||
xglStencilFunc(GL_NOTEQUAL, 0x1, 0x1);
|
||||
xglStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
||||
xglEnable(GL_STENCIL_TEST);
|
||||
xglDrawPixels(finx - x, finy - y, GL_RGB, GL_UNSIGNED_BYTE, (GLvoid *)(img2->data));
|
||||
}
|
||||
|
||||
void fgPanelUpdate ( void ) {
|
||||
|
@ -525,16 +468,14 @@ void fgPanelUpdate ( void ) {
|
|||
xglMatrixMode(GL_PROJECTION);
|
||||
xglPushMatrix();
|
||||
xglLoadIdentity();
|
||||
gluOrtho2D(0, 640, 0, 480);
|
||||
glOrtho(0, 640, 0, 480, 1, -1);
|
||||
xglMatrixMode(GL_MODELVIEW);
|
||||
xglPushMatrix();
|
||||
xglLoadIdentity();
|
||||
xglDisable(GL_DEPTH_TEST);
|
||||
xglDisable(GL_LIGHTING);
|
||||
xglStencilFunc(GL_EQUAL, 0x1, 0x1);
|
||||
xglStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
||||
// xglEnable(GL_STENCIL_TEST);
|
||||
xglEnable(GL_TEXTURE_2D);
|
||||
xglEnable(GL_TEXTURE_2D);
|
||||
|
||||
#ifdef GL_VERSION_1_1
|
||||
xglBindTexture(GL_TEXTURE_2D, panel_tex_id);
|
||||
#elif GL_EXT_texture_object
|
||||
|
@ -542,9 +483,11 @@ void fgPanelUpdate ( void ) {
|
|||
#else
|
||||
# error port me
|
||||
#endif
|
||||
|
||||
xglMatrixMode(GL_MODELVIEW);
|
||||
xglPopMatrix();
|
||||
xglPushMatrix();
|
||||
|
||||
for(i=0;i<NumPoint;i++){
|
||||
xglLoadIdentity();
|
||||
xglTranslatef(pointer[i].XPos, pointer[i].YPos, 0.0);
|
||||
|
@ -552,19 +495,19 @@ void fgPanelUpdate ( void ) {
|
|||
ErasePointer(pointer[i]);
|
||||
xglLoadIdentity();
|
||||
}
|
||||
|
||||
for(i=0;i<NumPoint;i++){
|
||||
pointer[i].hist = UpdatePointer( pointer[i]);
|
||||
xglPopMatrix();
|
||||
xglPushMatrix();
|
||||
}
|
||||
|
||||
xglDisable(GL_TEXTURE_2D);
|
||||
xglLoadIdentity();
|
||||
xglPopMatrix();
|
||||
xglRasterPos2i(0, 0);
|
||||
// horizont(); //Let's do this, when Michael's horizont image is ready
|
||||
// xglRasterPos2i(0, 0);
|
||||
// horizont();
|
||||
xglEnable(GL_DEPTH_TEST);
|
||||
xglEnable(GL_STENCIL_TEST);
|
||||
xglStencilFunc(GL_NOTEQUAL, 0x1, 0x1);//1 1
|
||||
xglStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
||||
xglEnable(GL_LIGHTING);
|
||||
xglDisable(GL_TEXTURE_2D);
|
||||
xglDisable(GL_BLEND);
|
||||
|
@ -583,9 +526,6 @@ void horizont(void){
|
|||
xglEnable(GL_TEXTURE_2D);
|
||||
xglMatrixMode(GL_MODELVIEW);
|
||||
xglLoadIdentity();
|
||||
xglDisable(GL_STENCIL_TEST);
|
||||
xglStencilFunc(GL_NOTEQUAL, 0x1, 0x1);
|
||||
xglStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
|
||||
xglTranslatef(200, 130, 0);
|
||||
xglTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
|
||||
#ifdef GL_VERSION_1_1
|
||||
|
@ -613,7 +553,6 @@ void horizont(void){
|
|||
xglMatrixMode(GL_PROJECTION);
|
||||
xglPopMatrix();
|
||||
xglDisable(GL_TEXTURE_2D);
|
||||
xglEnable(GL_STENCIL_TEST);
|
||||
}
|
||||
|
||||
float UpdatePointer(Pointer pointer){
|
||||
|
@ -725,7 +664,18 @@ pointer->vertices[19] = pointer->vertices[3];
|
|||
}
|
||||
|
||||
|
||||
void PrintMatrix( void){
|
||||
glGetDoublev(GL_MODELVIEW_MATRIX, mvmatrix);
|
||||
printf("matrix2 = %f %f %f %f \n", mvmatrix[0], mvmatrix[1], mvmatrix[2], mvmatrix[3]);
|
||||
printf(" %f %f %f %f \n", mvmatrix[4], mvmatrix[5], mvmatrix[6], mvmatrix[7]);
|
||||
printf(" %f %f %f %f \n", mvmatrix[8], mvmatrix[9], mvmatrix[10], mvmatrix[11]);
|
||||
printf(" %f %f %f %f \n", mvmatrix[12], mvmatrix[13], mvmatrix[14], mvmatrix[15]);
|
||||
}
|
||||
|
||||
/* $Log$
|
||||
/* Revision 1.10 1998/11/09 23:38:52 curt
|
||||
/* Panel updates from Friedemann.
|
||||
/*
|
||||
/* Revision 1.9 1998/11/06 21:18:01 curt
|
||||
/* Converted to new logstream debugging facility. This allows release
|
||||
/* builds with no messages at all (and no performance impact) by using
|
||||
|
|
|
@ -31,6 +31,17 @@
|
|||
#endif
|
||||
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_WINDOWS_H
|
||||
# include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <GL/glut.h>
|
||||
|
||||
|
||||
typedef struct {
|
||||
unsigned short imagic;
|
||||
unsigned short type;
|
||||
|
@ -58,23 +69,30 @@ typedef struct {
|
|||
GLfloat vertices[20];
|
||||
} Pointer;
|
||||
|
||||
|
||||
void fgPanelInit( void);
|
||||
void fgPanelReInit( void);
|
||||
void fgPanelReInit( int x, int y, int finx, int finy );
|
||||
void fgPanelUpdate( void);
|
||||
void horizont( void);
|
||||
void CreatePointer(Pointer *pointer);
|
||||
float UpdatePointer(Pointer pointer);
|
||||
void ErasePointer(Pointer pointer);
|
||||
void DrawBox(float x1, float y1, float x2, float y2);
|
||||
|
||||
void PrintMatrix( void);
|
||||
|
||||
extern int panel_hist;
|
||||
|
||||
#endif /* _PANEL_HXX */
|
||||
|
||||
|
||||
/* $Log$
|
||||
/* Revision 1.2 1998/08/28 18:14:41 curt
|
||||
/* Added new cockpit code from Friedemann Reinhard
|
||||
/* <mpt218@faupt212.physik.uni-erlangen.de>
|
||||
/* Revision 1.3 1998/11/09 23:38:54 curt
|
||||
/* Panel updates from Friedemann.
|
||||
/*
|
||||
* Revision 1.2 1998/08/28 18:14:41 curt
|
||||
* Added new cockpit code from Friedemann Reinhard
|
||||
* <mpt218@faupt212.physik.uni-erlangen.de>
|
||||
*
|
||||
* Revision 1.1 1998/06/27 16:47:55 curt
|
||||
* Incorporated Friedemann Reinhard's <mpt218@faupt212.physik.uni-erlangen.de>
|
||||
* first pass at an isntrument panel.
|
||||
|
|
Loading…
Add table
Reference in a new issue