X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/8b089c5e8c8a2140258d150ca1ce42afd3b79e1b..61c213fe224da24ce33c9187263e75a17ca83a04:/samples/opengl/penguin/lw.cpp?ds=sidebyside diff --git a/samples/opengl/penguin/lw.cpp b/samples/opengl/penguin/lw.cpp index e7bfe17843..9b2202000c 100644 --- a/samples/opengl/penguin/lw.cpp +++ b/samples/opengl/penguin/lw.cpp @@ -16,6 +16,17 @@ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#ifndef WX_PRECOMP +#include "wx/wx.h" +#endif + #ifdef __WXMSW__ #include #endif @@ -23,23 +34,13 @@ #include "lw.h" #include #include -#include -#define wxInt32 int -#define wxUint32 unsigned int - -#ifndef FALSE -#define FALSE 0 -#endif - -#ifndef TRUE -#define TRUE 1 -#endif +#if wxUSE_GLCANVAS #define MK_ID(a,b,c,d) ((((wxUint32)(a))<<24)| \ - (((wxUint32)(b))<<16)| \ - (((wxUint32)(c))<< 8)| \ - (((wxUint32)(d)) )) + (((wxUint32)(b))<<16)| \ + (((wxUint32)(c))<< 8)| \ + (((wxUint32)(d)) )) #define ID_FORM MK_ID('F','O','R','M') #define ID_LWOB MK_ID('L','W','O','B') @@ -57,12 +58,23 @@ static wxInt32 read_char(FILE *f) static wxInt32 read_short(FILE *f) { - return (read_char(f)<<8) | read_char(f); + // the execution path was not always correct + // when using the direct evaluation in the return statement + wxInt32 first = read_char(f) ; + wxInt32 second = read_char(f) ; + + return (first<<8) | second ; } static wxInt32 read_long(FILE *f) { - return (read_char(f)<<24) | (read_char(f)<<16) | (read_char(f)<<8) | read_char(f); + // the execution path was not always correct + // when using the direct evaluation in the return statement + wxInt32 first = read_char(f) ; + wxInt32 second = read_char(f) ; + wxInt32 third = read_char(f) ; + wxInt32 fourth = read_char(f) ; + return (first<<24) | (second<<16) | (third<<8) | fourth ; } static GLfloat read_float(FILE *f) @@ -78,7 +90,7 @@ static int read_string(FILE *f, char *s) do { c = read_char(f); if (cnt < LW_MAX_NAME_LEN) - s[cnt] = c; + s[cnt] = (char)c; else s[LW_MAX_NAME_LEN-1] = 0; cnt++; @@ -109,9 +121,9 @@ static void read_srfs(FILE *f, int nbytes, lwObject *lwo) nbytes -= read_string(f,material->name); /* defaults */ - material->r = 0.7; - material->g = 0.7; - material->b = 0.7; + material->r = 0.7f; + material->g = 0.7f; + material->b = 0.7f; } lwo->material = (lwMaterial*) realloc(lwo->material, sizeof(lwMaterial)*lwo->material_cnt); } @@ -157,7 +169,7 @@ static void read_surf(FILE *f, int nbytes, lwObject *lwo) static void read_pols(FILE *f, int nbytes, lwObject *lwo) { int guess_cnt = lwo->face_cnt; - + while (nbytes > 0) { lwFace *face; int i; @@ -175,17 +187,17 @@ static void read_pols(FILE *f, int nbytes, lwObject *lwo) /* allocate space for points */ face->index = (int*) calloc(sizeof(int)*face->index_cnt,1); - + /* read points in */ for (i=0; iindex_cnt; i++) { face->index[i] = read_short(f); nbytes -= 2; } - + /* read surface material */ face->material = read_short(f); nbytes -= 2; - + /* skip over detail polygons */ if (face->material < 0) { int det_cnt; @@ -193,9 +205,9 @@ static void read_pols(FILE *f, int nbytes, lwObject *lwo) det_cnt = read_short(f); nbytes -= 2; while (det_cnt-- > 0) { - int cnt = read_short(f); - fseek(f, cnt*2+2, SEEK_CUR); - nbytes -= cnt*2+2; + int cnt = read_short(f); + fseek(f, cnt*2+2, SEEK_CUR); + nbytes -= cnt*2+2; } } face->material -= 1; @@ -223,7 +235,7 @@ static void read_pnts(FILE *f, int nbytes, lwObject *lwo) -int lw_is_lwobject(const char *lw_file) +bool lw_is_lwobject(const char *lw_file) { FILE *f = fopen(lw_file, "rb"); if (f) { @@ -232,22 +244,17 @@ int lw_is_lwobject(const char *lw_file) wxInt32 lwob = read_long(f); fclose(f); if (form == ID_FORM && nlen != 0 && lwob == ID_LWOB) - return TRUE; + return true; } - return FALSE; + return false; } lwObject *lw_object_read(const char *lw_file) { - FILE *f = NULL; - lwObject *lw_object = NULL; - - wxInt32 form_bytes = 0; - wxInt32 read_bytes = 0; /* open file */ - f = fopen(lw_file, "rb"); + FILE *f = fopen(lw_file, "rb"); if (f == NULL) { return NULL; } @@ -257,7 +264,10 @@ lwObject *lw_object_read(const char *lw_file) fclose(f); return NULL; } - form_bytes = read_long(f); + + wxInt32 read_bytes = 0; + + wxInt32 form_bytes = read_long(f); read_bytes += 4; if (read_long(f) != ID_LWOB) { @@ -266,7 +276,7 @@ lwObject *lw_object_read(const char *lw_file) } /* create new lwObject */ - lw_object = (lwObject*) calloc(sizeof(lwObject),1); + lwObject *lw_object = (lwObject*) calloc(sizeof(lwObject),1); /* read chunks */ while (read_bytes < form_bytes) { @@ -361,13 +371,13 @@ void lw_object_show(const lwObject *lw_object) prev_index_cnt = face->index_cnt; switch (face->index_cnt) { case 3: - glBegin(GL_TRIANGLES); - break; + glBegin(GL_TRIANGLES); + break; case 4: - glBegin(GL_QUADS); - break; + glBegin(GL_QUADS); + break; default: - glBegin(GL_POLYGON); + glBegin(GL_POLYGON); } } @@ -375,8 +385,8 @@ void lw_object_show(const lwObject *lw_object) if (prev_material != face->material) { prev_material = face->material; glColor3f(lw_object->material[face->material].r, - lw_object->material[face->material].g, - lw_object->material[face->material].b); + lw_object->material[face->material].g, + lw_object->material[face->material].b); } /* update normal if necessary */ @@ -424,4 +434,5 @@ void lw_object_scale(lwObject *lwo, GLfloat scale) } } +#endif