34 unsigned int glyph,
size = 0;
43 static const MAT2 identity = { {0,1},{0,0},{0,0},{0,1} };
51 TRACE(
"Glyph: %3d / List: %d size %d\n", glyph, listBase, needed_size);
57 if (needed_size >
size) {
72 unsigned char *bitmap_ =
bitmap;
77 if (needed_size != 0) {
78 TRACE(
" - bitmap:\n");
86 if (*bitmap_ & bitmask)
91 bitmap_ += (4 - ((
UINT_PTR)bitmap_ & 0x03));
100 if (needed_size != 0) {
111 if (needed_size != 0) {
150 #define GLU_TESS_BEGIN 100100 151 #define GLU_TESS_VERTEX 100101 152 #define GLU_TESS_END 100102 166 static const WCHAR glu32W[] = {
'g',
'l',
'u',
'3',
'2',
'.',
'd',
'l',
'l',0};
167 static int already_loaded;
170 if (already_loaded)
return module;
173 TRACE(
"Trying to load GLU library\n");
177 WARN(
"Failed to load glu32\n");
180 #define LOAD_FUNCPTR(f) p##f = (void *)GetProcAddress( module, #f ) 205 TRACE(
"%f, %f, %f\n", dbl[0], dbl[1], dbl[2]);
254 return deviation.
x*deviation.
x + deviation.
y*deviation.
y;
274 first_curve[0] =
p[0];
275 first_curve[1].
x = (
p[0].x +
p[1].x)/2;
276 first_curve[1].
y = (
p[0].y +
p[1].y)/2;
280 second_curve[1].
x = (
p[2].x +
p[1].x)/2;
281 second_curve[1].
y = (
p[2].y +
p[1].y)/2;
282 second_curve[2] =
p[2];
288 return total_vertices;
309 HFONT old_font, unscaled_font;
313 TRACE(
"(%p, %d, %d, %d, %f, %f, %d, %p, %s)\n",
hdc,
first,
count,
314 listBase, deviation, extrusion,
format, lpgmf, unicode ?
"W" :
"A");
317 deviation = 1.0/em_size;
323 ERR(
"glu32 is required for this function but isn't available\n");
328 if(!tess)
return FALSE;
351 int vertex_total = -1;
371 TRACE(
"glyph %d\n", glyph);
391 funcs->Normal3d(0.0, 0.0, 1.0);
392 pgluTessNormal(tess, 0, 0, 1);
393 pgluTessBeginPolygon(tess,
NULL);
398 if(vertex_total != -1)
403 while((
BYTE*)pph <
buf + needed)
412 pgluTessBeginContour(tess);
420 pgluTessVertex(tess, vertices, vertices);
422 funcs->Vertex3d(vertices[0], vertices[1], vertices[2]);
428 while((
char*)ppc < (
char*)pph + pph->
cb)
439 TRACE(
"\t\tline to %d, %d\n",
443 pgluTessVertex(tess, vertices, vertices);
445 funcs->Vertex3d(vertices[0], vertices[1], vertices[2]);
454 for(
i = 0;
i < ppc->
cpfx-1;
i++)
461 TRACE(
"\t\tcurve %d,%d %d,%d\n",
465 curve[0].
x = previous[0];
466 curve[0].
y = previous[1];
468 curve[1].
x = curve_vertex[0];
469 curve[1].
y = curve_vertex[1];
471 curve[2].
x = curve_vertex[0];
472 curve[2].
y = curve_vertex[1];
475 curve[2].
x = (curve[1].
x + curve[2].
x)/2;
476 curve[2].
y = (curve[1].
y + curve[2].
y)/2;
491 pgluTessVertex(tess, vertices, vertices);
493 funcs->Vertex3d(vertices[0], vertices[1], vertices[2]);
498 previous[0] = curve[2].
x;
499 previous[1] = curve[2].
y;
503 ERR(
"\t\tcurve type = %d\n", ppc->
wType);
505 pgluTessEndContour(tess);
515 pgluTessEndContour(tess);
524 pgluTessEndPolygon(tess);
537 pgluDeleteTess(tess);
_STLP_DECLSPEC complex< float > _STLP_CALL sqrt(const complex< float > &)
unsigned __int3264 UINT_PTR
static void(WINAPI *pgluDeleteTess)(GLUtesselator *tess)
GLint GLint GLsizei width
int base_length[LENGTH_CODES]
static void WINAPI tess_callback_vertex(GLvoid *vertex)
#define gluTessEndPolygon
static GLenum _GLUfuncptr fn
GLuint GLuint GLsizei count
static int bezier_approximate(const bezier_vector *p, bezier_vector *points, FLOAT deviation)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
static double bezier_deviation_squared(const bezier_vector *p)
GLint GLint GLint GLint GLint x
#define gluTessBeginContour
BOOL WINAPI DPtoLP(_In_ HDC hdc, _Inout_updates_(c) LPPOINT lppt, _In_ int c)
DWORD WINAPI GetGlyphOutlineA(_In_ HDC hdc, _In_ UINT uChar, _In_ UINT fuFormat, _Out_ LPGLYPHMETRICS lpgm, _In_ DWORD cjBuffer, _Out_writes_bytes_opt_(cjBuffer) LPVOID pvBuffer, _In_ CONST MAT2 *lpmat2)
GLint GLint GLsizei GLsizei GLsizei GLint GLenum format
static GLdouble * location
#define GL_UNPACK_ALIGNMENT
GLenum GLuint GLenum GLsizei const GLchar * buf
ios_base &_STLP_CALL fixed(ios_base &__s)
static BOOL wglUseFontBitmaps_common(HDC hdc, DWORD first, DWORD count, DWORD listBase, BOOL unicode)
static GLdouble GLdouble y
DWORD WINAPI GetGlyphOutlineW(_In_ HDC hdc, _In_ UINT uChar, _In_ UINT fuFormat, _Out_ LPGLYPHMETRICS lpgm, _In_ DWORD cjBuffer, _Out_writes_bytes_opt_(cjBuffer) LPVOID pvBuffer, _In_ CONST MAT2 *lpmat2)
WINE_DEFAULT_DEBUG_CHANNEL(wgl)
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
static BOOL wglUseFontOutlines_common(HDC hdc, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf, BOOL unicode)
static void WINAPI tess_callback_end(void)
BOOL WINAPI wglUseFontBitmapsW(HDC hdc, DWORD first, DWORD count, DWORD listBase)
static GLUtesselator *WINAPI * pgluNewTess(void)
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define WGL_FONT_POLYGONS
static void * polygon_data
#define gluTessBeginPolygon
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
static HMODULE load_libglu(void)
static void fixed_to_double(POINTFX fixed, UINT em_size, GLdouble vertex[3])
static struct __wine_debug_functions funcs
void(WINAPI * _GLUfuncptr)(void)
GLsizei const GLfloat * points
static void WINAPI tess_callback_begin(GLenum which)
BOOL WINAPI wglUseFontOutlinesW(HDC hdc, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf)
GLint GLint GLsizei GLsizei height
static GLdouble GLdouble GLdouble z
BOOL WINAPI wglUseFontOutlinesA(HDC hdc, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf)
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
POINTFLOAT gmfptGlyphOrigin
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static float(__cdecl *square_half_float)(float x
struct _bezier_vector bezier_vector
FORCEINLINE const GLDISPATCHTABLE * IntGetCurrentDispatchTable(void)
GLint GLint GLint GLint GLint GLint y
#define gluTessEndContour
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static GLdouble GLvoid * data
BOOL WINAPI wglUseFontBitmapsA(HDC hdc, DWORD first, DWORD count, DWORD listBase)
#define HeapFree(x, y, z)
HGDIOBJ WINAPI GetCurrentObject(_In_ HDC, _In_ UINT)