1 /* 2 * This program is free software; you can redistribute it and/or modify 3 * it under the terms of version 3 or later of the GNU General Public License as 4 * published by the Free Software Foundation. 5 * 6 * This program is distributed in the hope that it will be useful, 7 * but WITHOUT ANY WARRANTY; without even the implied warranty of 8 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 9 * GNU General Public License for more details. 10 * 11 * You should have received a copy of the GNU General Public License 12 * along with this program; if not, write to the Free Software 13 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 14 * 15 * $Id: fun3d.h,v 1.38 2018/04/28 21:40:58 plm Exp $ 16 */ 17 18 #ifndef FUN3D_H 19 #define FUN3D_H 20 21 #include "types3d.h" 22 #include "gtkboard.h" 23 #include "analysis.h" 24 25 #if defined(WIN32) 26 /* MS gl.h needs windows.h to be included first */ 27 #include <windows.h> 28 #endif 29 30 #if defined(USE_APPLE_OPENGL) 31 #include <gl.h> 32 #include <glu.h> 33 #else 34 #include <GL/gl.h> 35 #include <GL/glu.h> 36 #endif 37 38 #if defined(HAVE_GL_GLX_H) 39 #include <GL/glx.h> /* x-windows file */ 40 #endif 41 42 /* Setup functions */ 43 void InitGL(const BoardData * bd); 44 45 /* Drawing functions */ 46 void drawBoard(const BoardData * bd, const BoardData3d * bd3d, const renderdata * prd); 47 extern void Draw3d(const BoardData * bd); 48 void SetupPerspVolume(const BoardData * bd, BoardData3d * bd3d, const renderdata * prd, GLint viewport[4]); 49 float getBoardWidth(void); 50 float getBoardHeight(void); 51 void calculateBackgroundSize(BoardData3d * bd3d, const GLint viewport[4]); 52 53 void RestrictiveRender(const BoardData * bd, const BoardData3d * bd3d, const renderdata * prd); 54 void RestrictiveDrawFrame(const float pos[3], float width, float height, float depth); 55 void RestrictiveDrawFrameWindow(int x, int y, int width, int height); 56 void RestrictiveDraw(ClipBox * pCb, const float pos[3], float width, float height, float depth); 57 void EnlargeCurrentToBox(const ClipBox * pOtherCb); 58 void RestrictiveDrawFlag(const BoardData * bd); 59 60 extern void getPiecePos(unsigned int point, unsigned int pos, float v[3]); 61 62 /* Graph functions */ 63 GtkWidget *StatGraph(GraphData * pgd); 64 void SetNumGames(GraphData * pgd, unsigned int numGames); 65 void AddGameData(GraphData * pgd, int game, const statcontext * psc); 66 void TidyGraphData(GraphData * pgd); 67 GraphData *CreateGraphData(void); 68 69 /* Misc functions */ 70 void SetupSimpleMat(Material * pMat, float r, float g, float b); 71 void SetupMat(Material * pMat, float r, float g, float b, float dr, float dg, float db, float sr, float sg, float sb, 72 int shin, float a); 73 void setMaterial(const Material * pMat); 74 void SetColour3d(float r, float g, float b, float a); 75 float randRange(float range); 76 void setupPath(const BoardData * bd, Path * p, float *pRotate, unsigned int fromPoint, unsigned int fromDepth, 77 unsigned int toPoint, unsigned int toDepth); 78 int finishedPath(const Path * p); 79 void getProjectedPieceDragPos(int x, int y, float pos[3]); 80 void updateMovingPieceOccPos(const BoardData * bd, BoardData3d * bd3d); 81 void LoadTextureInfo(void); 82 GList *GetTextureList(TextureType type); 83 extern void FindTexture(TextureInfo ** textureInfo, const char *file); 84 extern void FindNamedTexture(TextureInfo ** textureInfo, char *name); 85 float Dist2d(float a, float b); 86 float ***Alloc3d(unsigned int x, unsigned int y, unsigned int z); 87 void Free3d(float ***array, unsigned int x, unsigned int y); 88 int LoadTexture(Texture *texture, const char *filename); 89 void CheckOpenglError(void); 90 91 /* Functions for 3d board */ 92 extern void InitGTK3d(int *argc, char ***argv); 93 extern void InitBoard3d(BoardData * bd, BoardData3d * bd3d); 94 extern void freeEigthPoints(float ****boardPoints, unsigned int accuracy); 95 extern void SetupVisual(void); 96 extern void SetupViewingVolume3d(const BoardData * bd, BoardData3d * bd3d, const renderdata * prd); 97 extern void DisplayCorrectBoardType(BoardData * bd, BoardData3d * bd3d, renderdata * prd); 98 extern int CreateGLWidget(BoardData * bd); 99 100 extern void RollDice3d(BoardData * bd, BoardData3d * bd3d, const renderdata * prd); 101 extern void AnimateMove3d(BoardData * bd, BoardData3d * bd3d); 102 extern void ShowFlag3d(BoardData * bd, BoardData3d * bd3d, const renderdata * prd); 103 extern void StopIdle3d(const BoardData * bd, BoardData3d * bd3d); 104 extern void preDraw3d(const BoardData * bd, BoardData3d * bd3d, renderdata * prd); 105 extern void CloseBoard3d(BoardData * bd, BoardData3d * bd3d, renderdata * prd); 106 extern int BoardPoint3d(const BoardData * bd, int x, int y); 107 extern int BoardSubPoint3d(const BoardData * bd, int x, int y, guint point); 108 extern int MouseMove3d(const BoardData * bd, BoardData3d * bd3d, const renderdata * prd, int x, int y); 109 extern void RenderToBuffer3d(const BoardData * bd, BoardData3d * bd3d, unsigned int width, unsigned int height, 110 unsigned char *buf); 111 extern void Tidy3dObjects(BoardData3d * bd3d, const renderdata * prd); 112 extern float TestPerformance3d(BoardData * bd); 113 extern void Set3dSettings(renderdata * prdnew, const renderdata * prd); 114 extern void MakeCurrent3d(const BoardData3d * bd3d); 115 extern void GetTextures(BoardData3d * bd3d, renderdata * prd); 116 extern void ClearTextures(BoardData3d * bd3d); 117 extern void DeleteTextureList(void); 118 119 extern void PlaceMovingPieceRotation(const BoardData * bd, BoardData3d * bd3d, unsigned int dest, unsigned int src); 120 extern void SetMovingPieceRotation(const BoardData * bd, BoardData3d * bd3d, unsigned int pt); 121 extern void UpdateShadows(BoardData3d * bd3d); 122 extern void updateOccPos(const BoardData * bd); 123 extern void updateDiceOccPos(const BoardData * bd, BoardData3d * bd3d); 124 extern void updatePieceOccPos(const BoardData * bd, BoardData3d * bd3d); 125 extern void updateHingeOccPos(BoardData3d * bd3d, int show3dHinges); 126 extern void updateFlagOccPos(const BoardData * bd, BoardData3d * bd3d); 127 128 extern void RestrictiveRedraw(void); 129 extern void RestrictiveDrawPiece(unsigned int pos, unsigned int depth); 130 extern void RestrictiveStartMouseMove(unsigned int pos, unsigned int depth); 131 extern void RestrictiveEndMouseMove(unsigned int pos, unsigned int depth); 132 extern void RestrictiveDrawDice(BoardData * bd); 133 extern void RestrictiveDrawCube(BoardData * bd, int old_doubled, int old_cube_owner); 134 extern void RestrictiveDrawMoveIndicator(BoardData * bd); 135 extern void RestrictiveDrawBoardNumbers(const BoardData3d * bd3d); 136 137 extern void setDicePos(BoardData * bd, BoardData3d * bd3d); 138 extern int DiceTooClose(const BoardData3d * bd3d, const renderdata * prd); 139 140 void SuspendDiceRolling(renderdata * prd); 141 void ResumeDiceRolling(renderdata * prd); 142 143 extern int ShadowsInitilised(const BoardData3d * bd3d); 144 void shadowInit(BoardData3d * bd3d, renderdata * prd); 145 void shadowDisplay(void (*drawScene) (const BoardData *, const BoardData3d *, const renderdata *), const BoardData * bd, 146 const BoardData3d * bd3d, const renderdata * prd); 147 148 /* font functions */ 149 void glPrintPointNumbers(const OGLFont * numberFont, const char *text); 150 void glPrintCube(OGLFont * cubeFont, const char *text); 151 void glPrintNumbersRA(const OGLFont * numberFont, const char *text); 152 int CreateFonts(BoardData3d * bd3d); 153 float GetFontHeight3d(const OGLFont * font); 154 int CreateNumberFont(OGLFont ** ppFont, const char *fontFile, int pitch, float size, float heightRatio); 155 void FreeFontText(OGLFont * ppFont); 156 void FreeNumberFont(OGLFont * ppFont); 157 int CreateFontText(OGLFont ** ppFont, const char *text, const char *fontFile, int pitch, float size, float heightRatio); 158 extern void glDrawText(const OGLFont * font); 159 160 GtkWidget *GetDrawingArea3d(const BoardData3d * bd3d); 161 extern int MaterialCompare(Material * pMat1, Material * pMat2); 162 extern char *MaterialGetTextureFilename(const Material * pMat); 163 extern void TidyCurveAccuracy3d(BoardData3d * bd3d, unsigned int accuracy); 164 extern void DrawScene3d(const BoardData3d * bd3d); 165 extern int Animating3d(const BoardData3d * bd3d); 166 167 extern void ResetPreviews(void); 168 extern void UpdateColPreviews(void); 169 extern int GetPreviewId(void); 170 extern void UpdateColPreview(int ID); 171 extern void SetPreviewLightLevel(const int levels[3]); 172 extern gboolean display_is_2d(const renderdata * prd); 173 extern gboolean display_is_3d(const renderdata * prd); 174 extern void RerenderBase(BoardData3d * bd3d); 175 extern int setVSync(int state); 176 extern int extensionSupported(const char *extension); 177 178 extern void InitColourSelectionDialog(void); 179 extern GtkWidget *gtk_colour_picker_new3d(Material * pMat, int opacity, TextureType textureType); 180 181 #endif 182