| /* |
| * Copyright 2001 Marcus Meissner |
| * |
| * This library is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU Lesser General Public |
| * License as published by the Free Software Foundation; either |
| * version 2.1 of the License, or (at your option) any later version. |
| * |
| * This library is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| * Lesser General Public License for more details. |
| * |
| * You should have received a copy of the GNU Lesser General Public |
| * License along with this library; if not, write to the Free Software |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| */ |
| |
| #include <stdarg.h> |
| |
| #include "windef.h" |
| #include "winbase.h" |
| |
| #include "wine/debug.h" |
| |
| WINE_DEFAULT_DEBUG_CHANNEL(glu); |
| |
| /* The only non-trivial bit of this is the *Tess* functions. Here we |
| need to wrap the callbacks up in a thunk to switch calling |
| conventions, so we use our own tesselator type to store the |
| application's callbacks. wine_gluTessCallback always sets the |
| *_DATA type of callback so that we have access to the polygon_data |
| (which is in fact just wine_tess_t), in the thunk itself we can |
| check whether we should call the _DATA or non _DATA type. */ |
| |
| typedef struct { |
| void *tess; |
| void *polygon_data; |
| void (CALLBACK *cb_tess_begin)(int); |
| void (CALLBACK *cb_tess_begin_data)(int, void *); |
| void (CALLBACK *cb_tess_vertex)(void *); |
| void (CALLBACK *cb_tess_vertex_data)(void *, void *); |
| void (CALLBACK *cb_tess_end)(void); |
| void (CALLBACK *cb_tess_end_data)(void *); |
| void (CALLBACK *cb_tess_error)(int); |
| void (CALLBACK *cb_tess_error_data)(int, void *); |
| void (CALLBACK *cb_tess_edge_flag)(int); |
| void (CALLBACK *cb_tess_edge_flag_data)(int, void *); |
| void (CALLBACK *cb_tess_combine)(double *, void *, float *, void **); |
| void (CALLBACK *cb_tess_combine_data)(double *, void *, float *, void **, void *); |
| } wine_tess_t; |
| |
| #define GLU_TESS_BEGIN 100100 |
| #define GLU_TESS_VERTEX 100101 |
| #define GLU_TESS_END 100102 |
| #define GLU_TESS_ERROR 100103 |
| #define GLU_TESS_EDGE_FLAG 100104 |
| #define GLU_TESS_COMBINE 100105 |
| #define GLU_TESS_BEGIN_DATA 100106 |
| #define GLU_TESS_VERTEX_DATA 100107 |
| #define GLU_TESS_END_DATA 100108 |
| #define GLU_TESS_ERROR_DATA 100109 |
| #define GLU_TESS_EDGE_FLAG_DATA 100110 |
| #define GLU_TESS_COMBINE_DATA 100111 |
| |
| /*********************************************************************** |
| * gluLookAt (GLU32.@) |
| */ |
| extern int gluLookAt(double arg0,double arg1,double arg2,double arg3,double arg4,double arg5,double arg6,double arg7,double arg8); |
| int WINAPI wine_gluLookAt(double arg0,double arg1,double arg2,double arg3,double arg4,double arg5,double arg6,double arg7,double arg8) { |
| return gluLookAt(arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); |
| } |
| |
| /*********************************************************************** |
| * gluOrtho2D (GLU32.@) |
| */ |
| extern int gluOrtho2D(double arg0,double arg1,double arg2,double arg3); |
| int WINAPI wine_gluOrtho2D(double arg0,double arg1,double arg2,double arg3) { |
| return gluOrtho2D(arg0,arg1,arg2,arg3); |
| } |
| |
| /*********************************************************************** |
| * gluPerspective (GLU32.@) |
| */ |
| extern int gluPerspective(double arg0,double arg1,double arg2,double arg3); |
| int WINAPI wine_gluPerspective(double arg0,double arg1,double arg2,double arg3) { |
| return gluPerspective(arg0,arg1,arg2,arg3); |
| } |
| |
| /*********************************************************************** |
| * gluPickMatrix (GLU32.@) |
| */ |
| extern int gluPickMatrix(double arg0,double arg1,double arg2,double arg3,void *arg4); |
| int WINAPI wine_gluPickMatrix(double arg0,double arg1,double arg2,double arg3,void *arg4) { |
| return gluPickMatrix(arg0,arg1,arg2,arg3,arg4); |
| } |
| |
| /*********************************************************************** |
| * gluProject (GLU32.@) |
| */ |
| extern int gluProject(double arg0,double arg1,double arg2,void *arg3,void *arg4,void *arg5,void *arg6,void *arg7,void *arg8); |
| int WINAPI wine_gluProject(double arg0,double arg1,double arg2,void *arg3,void *arg4,void *arg5,void *arg6,void *arg7,void *arg8) { |
| return gluProject(arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); |
| } |
| |
| /*********************************************************************** |
| * gluUnProject (GLU32.@) |
| */ |
| extern int gluUnProject(double arg0,double arg1,double arg2,void *arg3,void *arg4,void *arg5,void *arg6,void *arg7,void *arg8); |
| int WINAPI wine_gluUnProject(double arg0,double arg1,double arg2,void *arg3,void *arg4,void *arg5,void *arg6,void *arg7,void *arg8) { |
| return gluUnProject(arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); |
| } |
| |
| /*********************************************************************** |
| * gluErrorString (GLU32.@) |
| */ |
| extern int gluErrorString(int arg0); |
| int WINAPI wine_gluErrorString(int arg0) { |
| return gluErrorString(arg0); |
| } |
| |
| /*********************************************************************** |
| * gluScaleImage (GLU32.@) |
| */ |
| extern int gluScaleImage(int arg0,int arg1,int arg2,int arg3,void *arg4,int arg5,int arg6,int arg7,void *arg8); |
| int WINAPI wine_gluScaleImage(int arg0,int arg1,int arg2,int arg3,void *arg4,int arg5,int arg6,int arg7,void *arg8) { |
| return gluScaleImage(arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8); |
| } |
| |
| /*********************************************************************** |
| * gluBuild1DMipmaps (GLU32.@) |
| */ |
| extern int gluBuild1DMipmaps(int arg0,int arg1,int arg2,int arg3,int arg4,void *arg5); |
| int WINAPI wine_gluBuild1DMipmaps(int arg0,int arg1,int arg2,int arg3,int arg4,void *arg5) { |
| return gluBuild1DMipmaps(arg0,arg1,arg2,arg3,arg4,arg5); |
| } |
| |
| /*********************************************************************** |
| * gluBuild2DMipmaps (GLU32.@) |
| */ |
| extern int gluBuild2DMipmaps(int arg0,int arg1,int arg2,int arg3,int arg4,int arg5,void *arg6); |
| int WINAPI wine_gluBuild2DMipmaps(int arg0,int arg1,int arg2,int arg3,int arg4,int arg5,void *arg6) { |
| return gluBuild2DMipmaps(arg0,arg1,arg2,arg3,arg4,arg5,arg6); |
| } |
| |
| /*********************************************************************** |
| * gluNewQuadric (GLU32.@) |
| */ |
| extern int gluNewQuadric(); |
| int WINAPI wine_gluNewQuadric() { |
| return gluNewQuadric(); |
| } |
| |
| /*********************************************************************** |
| * gluDeleteQuadric (GLU32.@) |
| */ |
| extern int gluDeleteQuadric(void *arg0); |
| int WINAPI wine_gluDeleteQuadric(void *arg0) { |
| return gluDeleteQuadric(arg0); |
| } |
| |
| /*********************************************************************** |
| * gluQuadricDrawStyle (GLU32.@) |
| */ |
| extern int gluQuadricDrawStyle(void *arg0,int arg1); |
| int WINAPI wine_gluQuadricDrawStyle(void *arg0,int arg1) { |
| return gluQuadricDrawStyle(arg0,arg1); |
| } |
| |
| /*********************************************************************** |
| * gluQuadricOrientation (GLU32.@) |
| */ |
| extern int gluQuadricOrientation(void *arg0,int arg1); |
| int WINAPI wine_gluQuadricOrientation(void *arg0,int arg1) { |
| return gluQuadricOrientation(arg0,arg1); |
| } |
| |
| /*********************************************************************** |
| * gluQuadricNormals (GLU32.@) |
| */ |
| extern int gluQuadricNormals(void *arg0,int arg1); |
| int WINAPI wine_gluQuadricNormals(void *arg0,int arg1) { |
| return gluQuadricNormals(arg0,arg1); |
| } |
| |
| /*********************************************************************** |
| * gluQuadricTexture (GLU32.@) |
| */ |
| extern int gluQuadricTexture(void *arg0,int arg1); |
| int WINAPI wine_gluQuadricTexture(void *arg0,int arg1) { |
| return gluQuadricTexture(arg0,arg1); |
| } |
| |
| /*********************************************************************** |
| * gluQuadricCallback (GLU32.@) |
| */ |
| extern int gluQuadricCallback(void *arg0,int arg1,void *arg2); |
| int WINAPI wine_gluQuadricCallback(void *arg0,int arg1,void *arg2) { |
| return gluQuadricCallback(arg0,arg1,arg2); |
| } |
| |
| /*********************************************************************** |
| * gluCylinder (GLU32.@) |
| */ |
| extern int gluCylinder(void *arg0,double arg1,double arg2,double arg3,int arg4,int arg5); |
| int WINAPI wine_gluCylinder(void *arg0,double arg1,double arg2,double arg3,int arg4,int arg5) { |
| return gluCylinder(arg0,arg1,arg2,arg3,arg4,arg5); |
| } |
| |
| /*********************************************************************** |
| * gluSphere (GLU32.@) |
| */ |
| extern int gluSphere(void *arg0,double arg1,int arg2,int arg3); |
| int WINAPI wine_gluSphere(void *arg0,double arg1,int arg2,int arg3) { |
| return gluSphere(arg0,arg1,arg2,arg3); |
| } |
| |
| /*********************************************************************** |
| * gluDisk (GLU32.@) |
| */ |
| extern int gluDisk(void *arg0,double arg1,double arg2,int arg3,int arg4); |
| int WINAPI wine_gluDisk(void *arg0,double arg1,double arg2,int arg3,int arg4) { |
| return gluDisk(arg0,arg1,arg2,arg3,arg4); |
| } |
| |
| /*********************************************************************** |
| * gluPartialDisk (GLU32.@) |
| */ |
| extern int gluPartialDisk(void *arg0,double arg1,double arg2,int arg3,int arg4,double arg5,double arg6); |
| int WINAPI wine_gluPartialDisk(void *arg0,double arg1,double arg2,int arg3,int arg4,double arg5,double arg6) { |
| return gluPartialDisk(arg0,arg1,arg2,arg3,arg4,arg5,arg6); |
| } |
| |
| /*********************************************************************** |
| * gluNewNurbsRenderer (GLU32.@) |
| */ |
| extern int gluNewNurbsRenderer(); |
| int WINAPI wine_gluNewNurbsRenderer() { |
| return gluNewNurbsRenderer(); |
| } |
| |
| /*********************************************************************** |
| * gluDeleteNurbsRenderer (GLU32.@) |
| */ |
| extern int gluDeleteNurbsRenderer(void *arg0); |
| int WINAPI wine_gluDeleteNurbsRenderer(void *arg0) { |
| return gluDeleteNurbsRenderer(arg0); |
| } |
| |
| /*********************************************************************** |
| * gluLoadSamplingMatrices (GLU32.@) |
| */ |
| extern int gluLoadSamplingMatrices(void *arg0,void *arg1,void *arg2,void *arg3); |
| int WINAPI wine_gluLoadSamplingMatrices(void *arg0,void *arg1,void *arg2,void *arg3) { |
| return gluLoadSamplingMatrices(arg0,arg1,arg2,arg3); |
| } |
| |
| /*********************************************************************** |
| * gluNurbsProperty (GLU32.@) |
| */ |
| extern int gluNurbsProperty(void *arg0,int arg1,int arg2); |
| int WINAPI wine_gluNurbsProperty(void *arg0,int arg1,int arg2) { |
| return gluNurbsProperty(arg0,arg1,arg2); |
| } |
| |
| /*********************************************************************** |
| * gluGetNurbsProperty (GLU32.@) |
| */ |
| extern int gluGetNurbsProperty(void *arg0,int arg1,void *arg2); |
| int WINAPI wine_gluGetNurbsProperty(void *arg0,int arg1,void *arg2) { |
| return gluGetNurbsProperty(arg0,arg1,arg2); |
| } |
| |
| /*********************************************************************** |
| * gluBeginCurve (GLU32.@) |
| */ |
| extern int gluBeginCurve(void *arg0); |
| int WINAPI wine_gluBeginCurve(void *arg0) { |
| return gluBeginCurve(arg0); |
| } |
| |
| /*********************************************************************** |
| * gluEndCurve (GLU32.@) |
| */ |
| extern int gluEndCurve(void *arg0); |
| int WINAPI wine_gluEndCurve(void *arg0) { |
| return gluEndCurve(arg0); |
| } |
| |
| /*********************************************************************** |
| * gluNurbsCurve (GLU32.@) |
| */ |
| extern int gluNurbsCurve(void *arg0,int arg1,void *arg2,int arg3,void *arg4,int arg5,int arg6); |
| int WINAPI wine_gluNurbsCurve(void *arg0,int arg1,void *arg2,int arg3,void *arg4,int arg5,int arg6) { |
| return gluNurbsCurve(arg0,arg1,arg2,arg3,arg4,arg5,arg6); |
| } |
| |
| /*********************************************************************** |
| * gluBeginSurface (GLU32.@) |
| */ |
| extern int gluBeginSurface(void *arg0); |
| int WINAPI wine_gluBeginSurface(void *arg0) { |
| return gluBeginSurface(arg0); |
| } |
| |
| /*********************************************************************** |
| * gluEndSurface (GLU32.@) |
| */ |
| extern int gluEndSurface(void *arg0); |
| int WINAPI wine_gluEndSurface(void *arg0) { |
| return gluEndSurface(arg0); |
| } |
| |
| /*********************************************************************** |
| * gluNurbsSurface (GLU32.@) |
| */ |
| extern int gluNurbsSurface(void *arg0,int arg1,void *arg2,int arg3,void *arg4,int arg5,int arg6,void *arg7,int arg8,int arg9,int arg10); |
| int WINAPI wine_gluNurbsSurface(void *arg0,int arg1,void *arg2,int arg3,void *arg4,int arg5,int arg6,void *arg7,int arg8,int arg9,int arg10) { |
| return gluNurbsSurface(arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7,arg8,arg9,arg10); |
| } |
| |
| /*********************************************************************** |
| * gluBeginTrim (GLU32.@) |
| */ |
| extern int gluBeginTrim(void *arg0); |
| int WINAPI wine_gluBeginTrim(void *arg0) { |
| return gluBeginTrim(arg0); |
| } |
| |
| /*********************************************************************** |
| * gluEndTrim (GLU32.@) |
| */ |
| extern int gluEndTrim(void *arg0); |
| int WINAPI wine_gluEndTrim(void *arg0) { |
| return gluEndTrim(arg0); |
| } |
| |
| /*********************************************************************** |
| * gluPwlCurve (GLU32.@) |
| */ |
| extern int gluPwlCurve(void *arg0,int arg1,void *arg2,int arg3,int arg4); |
| int WINAPI wine_gluPwlCurve(void *arg0,int arg1,void *arg2,int arg3,int arg4) { |
| return gluPwlCurve(arg0,arg1,arg2,arg3,arg4); |
| } |
| |
| /*********************************************************************** |
| * gluNurbsCallback (GLU32.@) |
| */ |
| extern int gluNurbsCallback(void *arg0,int arg1,void *arg2); |
| int WINAPI wine_gluNurbsCallback(void *arg0,int arg1,void *arg2) { |
| return gluNurbsCallback(arg0,arg1,arg2); |
| } |
| |
| /*********************************************************************** |
| * gluBeginPolygon (GLU32.@) |
| */ |
| extern int gluBeginPolygon(void *arg0); |
| int WINAPI wine_gluBeginPolygon(void *arg0) { |
| return gluBeginPolygon(arg0); |
| } |
| |
| /*********************************************************************** |
| * gluEndPolygon (GLU32.@) |
| */ |
| extern int gluEndPolygon(void *arg0); |
| int WINAPI wine_gluEndPolygon(void *arg0) { |
| return gluEndPolygon(arg0); |
| } |
| |
| /*********************************************************************** |
| * gluNextContour (GLU32.@) |
| */ |
| extern int gluNextContour(void *arg0,int arg1); |
| int WINAPI wine_gluNextContour(void *arg0,int arg1) { |
| return gluNextContour(arg0,arg1); |
| } |
| |
| /*********************************************************************** |
| * gluGetString (GLU32.@) |
| */ |
| extern int gluGetString(int arg0); |
| int WINAPI wine_gluGetString(int arg0) { |
| return gluGetString(arg0); |
| } |
| |
| /*********************************************************************** |
| * gluCheckExtension (GLU32.@) |
| */ |
| int WINAPI |
| wine_gluCheckExtension( const char *extName, void *extString ) { |
| return 0; |
| } |
| |
| extern void *gluNewTess(void); |
| extern void gluDeleteTess(void *); |
| |
| /*********************************************************************** |
| * gluNewTess (GLU32.@) |
| */ |
| void * WINAPI wine_gluNewTess(void) |
| { |
| void *tess; |
| wine_tess_t *ret; |
| |
| if((tess = gluNewTess()) == NULL) |
| return NULL; |
| |
| ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ret)); |
| if(!ret) { |
| gluDeleteTess(tess); |
| return NULL; |
| } |
| ret->tess = tess; |
| return ret; |
| } |
| |
| /*********************************************************************** |
| * gluDeleteTess (GLU32.@) |
| */ |
| void WINAPI wine_gluDeleteTess(void *tess) |
| { |
| wine_tess_t *wine_tess = tess; |
| gluDeleteTess(wine_tess->tess); |
| HeapFree(GetProcessHeap(), 0, wine_tess); |
| return; |
| } |
| |
| /*********************************************************************** |
| * gluTessBeginPolygon (GLU32.@) |
| */ |
| extern void gluTessBeginPolygon(void *, void *); |
| void WINAPI wine_gluTessBeginPolygon(void *tess, void *polygon_data) |
| { |
| wine_tess_t *wine_tess = tess; |
| wine_tess->polygon_data = polygon_data; |
| |
| gluTessBeginPolygon(wine_tess->tess, wine_tess); |
| } |
| |
| /*********************************************************************** |
| * gluTessEndPolygon (GLU32.@) |
| */ |
| extern void gluTessEndPolygon(void *); |
| void WINAPI wine_gluTessEndPolygon(void *tess) |
| { |
| wine_tess_t *wine_tess = tess; |
| gluTessEndPolygon(wine_tess->tess); |
| } |
| |
| |
| void wine_glu_tess_begin_data(int type, wine_tess_t *wine_tess) |
| { |
| if(wine_tess->cb_tess_begin_data) |
| wine_tess->cb_tess_begin_data(type, wine_tess->polygon_data); |
| else |
| wine_tess->cb_tess_begin(type); |
| } |
| |
| void wine_glu_tess_vertex_data(void *vertex_data, wine_tess_t *wine_tess) |
| { |
| if(wine_tess->cb_tess_vertex_data) |
| wine_tess->cb_tess_vertex_data(vertex_data, wine_tess->polygon_data); |
| else |
| wine_tess->cb_tess_vertex(vertex_data); |
| } |
| |
| void wine_glu_tess_end_data(wine_tess_t *wine_tess) |
| { |
| if(wine_tess->cb_tess_end_data) |
| wine_tess->cb_tess_end_data(wine_tess->polygon_data); |
| else |
| wine_tess->cb_tess_end(); |
| } |
| |
| void wine_glu_tess_error_data(int error, wine_tess_t *wine_tess) |
| { |
| if(wine_tess->cb_tess_error_data) |
| wine_tess->cb_tess_error_data(error, wine_tess->polygon_data); |
| else |
| wine_tess->cb_tess_error(error); |
| } |
| |
| void wine_glu_tess_edge_flag_data(int flag, wine_tess_t *wine_tess) |
| { |
| if(wine_tess->cb_tess_edge_flag_data) |
| wine_tess->cb_tess_edge_flag_data(flag, wine_tess->polygon_data); |
| else |
| wine_tess->cb_tess_edge_flag(flag); |
| } |
| |
| void wine_glu_tess_combine_data(double *coords, void *vertex_data, float *weight, void **outData, |
| wine_tess_t *wine_tess) |
| { |
| if(wine_tess->cb_tess_combine_data) |
| wine_tess->cb_tess_combine_data(coords, vertex_data, weight, outData, wine_tess->polygon_data); |
| else |
| wine_tess->cb_tess_combine(coords, vertex_data, weight, outData); |
| } |
| |
| |
| /*********************************************************************** |
| * gluTessCallback (GLU32.@) |
| */ |
| extern void gluTessCallback(void *,int,void *); |
| void WINAPI wine_gluTessCallback(void *tess,int which,void *fn) |
| { |
| wine_tess_t *wine_tess = tess; |
| switch(which) { |
| case GLU_TESS_BEGIN: |
| wine_tess->cb_tess_begin = fn; |
| fn = wine_glu_tess_begin_data; |
| which += 6; |
| break; |
| case GLU_TESS_VERTEX: |
| wine_tess->cb_tess_vertex = fn; |
| fn = wine_glu_tess_vertex_data; |
| which += 6; |
| break; |
| case GLU_TESS_END: |
| wine_tess->cb_tess_end = fn; |
| fn = wine_glu_tess_end_data; |
| which += 6; |
| break; |
| case GLU_TESS_ERROR: |
| wine_tess->cb_tess_error = fn; |
| fn = wine_glu_tess_error_data; |
| which += 6; |
| break; |
| case GLU_TESS_EDGE_FLAG: |
| wine_tess->cb_tess_edge_flag = fn; |
| fn = wine_glu_tess_edge_flag_data; |
| which += 6; |
| break; |
| case GLU_TESS_COMBINE: |
| wine_tess->cb_tess_combine = fn; |
| fn = wine_glu_tess_combine_data; |
| which += 6; |
| break; |
| case GLU_TESS_BEGIN_DATA: |
| wine_tess->cb_tess_begin_data = fn; |
| fn = wine_glu_tess_begin_data; |
| break; |
| case GLU_TESS_VERTEX_DATA: |
| wine_tess->cb_tess_vertex_data = fn; |
| fn = wine_glu_tess_vertex_data; |
| break; |
| case GLU_TESS_END_DATA: |
| wine_tess->cb_tess_end_data = fn; |
| fn = wine_glu_tess_end_data; |
| break; |
| case GLU_TESS_ERROR_DATA: |
| wine_tess->cb_tess_error_data = fn; |
| fn = wine_glu_tess_error_data; |
| break; |
| case GLU_TESS_EDGE_FLAG_DATA: |
| wine_tess->cb_tess_edge_flag_data = fn; |
| fn = wine_glu_tess_edge_flag_data; |
| break; |
| case GLU_TESS_COMBINE_DATA: |
| wine_tess->cb_tess_combine_data = fn; |
| fn = wine_glu_tess_combine_data; |
| break; |
| default: |
| ERR("Unknown callback %d\n", which); |
| break; |
| } |
| gluTessCallback(wine_tess->tess, which, fn); |
| } |
| |
| /*********************************************************************** |
| * gluTessBeginContour (GLU32.@) |
| */ |
| extern void gluTessBeginContour(void *); |
| void WINAPI wine_gluTessBeginContour(void *tess) |
| { |
| wine_tess_t *wine_tess = tess; |
| gluTessBeginContour(wine_tess->tess); |
| } |
| |
| /*********************************************************************** |
| * gluTessEndContour (GLU32.@) |
| */ |
| extern void gluTessEndContour(void *); |
| void WINAPI wine_gluTessEndContour(void *tess) |
| { |
| wine_tess_t *wine_tess = tess; |
| gluTessEndContour(wine_tess->tess); |
| } |
| |
| /*********************************************************************** |
| * gluTessVertex (GLU32.@) |
| */ |
| extern void gluTessVertex(void *, void *, void *); |
| void WINAPI wine_gluTessVertex(void *tess,void *arg1,void *arg2) |
| { |
| wine_tess_t *wine_tess = tess; |
| gluTessVertex(wine_tess->tess, arg1, arg2); |
| } |
| |
| |
| /*********************************************************************** |
| * gluTessProperty (GLU32.@) |
| */ |
| extern void gluTessProperty(void *, int, double); |
| void WINAPI wine_gluTessProperty(void *tess, int arg1, double arg2) |
| { |
| wine_tess_t *wine_tess = tess; |
| gluTessProperty(wine_tess->tess, arg1, arg2); |
| } |
| |
| /*********************************************************************** |
| * gluTessNormal (GLU32.@) |
| */ |
| extern void gluTessNormal(void *, double, double, double); |
| void WINAPI wine_gluTessNormal(void *tess, double arg1, double arg2, double arg3) |
| { |
| wine_tess_t *wine_tess = tess; |
| gluTessNormal(wine_tess->tess, arg1, arg2, arg3); |
| } |