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 > &)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
#define HeapFree(x, y, z)
GLint GLint GLint GLint GLint x
GLuint GLuint GLsizei count
GLint GLint GLint GLint GLint GLint y
#define GL_UNPACK_ALIGNMENT
GLint GLint GLsizei GLsizei height
GLint GLint GLsizei width
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei const GLfloat * points
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
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 gluTessEndPolygon
#define gluTessBeginContour
#define gluTessEndContour
#define gluTessBeginPolygon
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static float(__cdecl *square_half_float)(float x
unsigned __int3264 UINT_PTR
FORCEINLINE const GLDISPATCHTABLE * IntGetCurrentDispatchTable(void)
static struct __wine_debug_functions funcs
POINTFLOAT gmfptGlyphOrigin
int base_length[LENGTH_CODES]
static BOOL wglUseFontBitmaps_common(HDC hdc, DWORD first, DWORD count, DWORD listBase, BOOL unicode)
static GLdouble * location
static int bezier_approximate(const bezier_vector *p, bezier_vector *points, FLOAT deviation)
BOOL WINAPI wglUseFontBitmapsW(HDC hdc, DWORD first, DWORD count, DWORD listBase)
static GLdouble GLdouble y
BOOL WINAPI wglUseFontBitmapsA(HDC hdc, DWORD first, DWORD count, DWORD listBase)
static BOOL wglUseFontOutlines_common(HDC hdc, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf, BOOL unicode)
static GLdouble GLvoid * data
static GLenum _GLUfuncptr fn
static GLUtesselator *WINAPI * pgluNewTess(void)
static void fixed_to_double(POINTFX fixed, UINT em_size, GLdouble vertex[3])
static GLdouble GLdouble GLdouble z
struct _bezier_vector bezier_vector
BOOL WINAPI wglUseFontOutlinesA(HDC hdc, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf)
static double bezier_deviation_squared(const bezier_vector *p)
static void * polygon_data
static void WINAPI tess_callback_begin(GLenum which)
static void WINAPI tess_callback_vertex(GLvoid *vertex)
void(WINAPI * _GLUfuncptr)(void)
static void WINAPI tess_callback_end(void)
BOOL WINAPI wglUseFontOutlinesW(HDC hdc, DWORD first, DWORD count, DWORD listBase, FLOAT deviation, FLOAT extrusion, int format, LPGLYPHMETRICSFLOAT lpgmf)
static HMODULE load_libglu(void)
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
#define WGL_FONT_POLYGONS
BOOL WINAPI DPtoLP(_In_ HDC hdc, _Inout_updates_(c) LPPOINT lppt, _In_ int c)
HGDIOBJ WINAPI GetCurrentObject(_In_ HDC, _In_ UINT)
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
HFONT WINAPI CreateFontIndirectW(_In_ const LOGFONTW *)
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)
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)