<html>
<head>
</head>
<body class='hmmessage'><div dir='ltr'>


<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
<div dir="ltr">Hello<br><br>I have trouble drawing text in an OpenGL texture with Cairo<br><br>It works with SDL and SDL_ttf with :<br><br>&nbsp;&nbsp;&nbsp; GLuint textureId;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; SDL_Color Color = {150, 0, 240};<br>&nbsp;&nbsp; &nbsp; &nbsp;&nbsp; SDL_Surface *Message = TTF_RenderText_Blended(font, "Hello!", Color);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; unsigned Texture = 0;<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glGenTextures(1, &amp;Texture);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glBindTexture(GL_TEXTURE_2D, Texture);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Message-&gt;w, Message-&gt;h, 0, GL_BGRA, GL_UNSIGNED_BYTE, Message-&gt;pixels);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glBegin(GL_QUADS);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glColor4f(1, 0, 0, 1);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glTexCoord2d(0, 0); glVertex3d(0, 0, 0);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glTexCoord2d(1, 0); glVertex3d(0.2, 0, 0);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glTexCoord2d(1, 1); glVertex3d(0.2, -0.2, 0);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glTexCoord2d(0, 1); glVertex3d(0,&nbsp; -0.2, 0);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glEnd();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glDeleteTextures(1, &amp;Texture);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; SDL_FreeSurface(Message);<br><br>Clearly, the Message-&gt;pixels argument in "glTexImage2D" seems important; if I replace it with NULL, I get random lines and points.<br><br>If I do this with Cairo :<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cairo_surface_t *surface;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cairo_t *cr;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GLuint textureId;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; unsigned char* surfaceData;<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, 64, 64);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cr = cairo_create (surface);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cairo_select_font_face (cr, "serif", CAIRO_FONT_SLANT_NORMAL,&nbsp; CAIRO_FONT_WEIGHT_BOLD);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cairo_set_font_size (cr, 32.0);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cairo_set_source_rgb (cr, 1.0, 1.0, 0.0);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cairo_show_text (cr, "HELLO");<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; surfaceData = cairo_image_surface_get_data (surface);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; unsigned Texture = 0;<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glGenTextures(1, &amp;Texture);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glBindTexture(GL_TEXTURE_2D, Texture);<br><br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, cairo_image_surface_get_width (surface), cairo_image_surface_get_height (surface), 0, GL_BGRA, GL_UNSIGNED_BYTE, surfaceData);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glBegin(GL_QUADS);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glColor4f(1, 0, 0, 1);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; glTexCoord2d(0, 0); glVertex3d(0, 0, 0);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glTexCoord2d(1, 0); glVertex3d(0.2, 0, 0);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glTexCoord2d(1, 1); glVertex3d(0.2, -0.2, 0);<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glTexCoord2d(0, 1); glVertex3d(0,&nbsp; -0.2, 0);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glEnd();<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; glDeleteTextures(1, &amp;Texture);<br>&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; cairo_destroy (cr);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cairo_surface_destroy (surface);<br><br><br><br>If I do that I get a few red points but not the text I want. I use the " cairo_image_surface_get_data (surface)" function to get the appropriate data and to give it to glTextImage2D but I suppose this is where it won't work. <br><br>In some examples I have come across the "create_cairo_context" through which surfaceData can be taken. But this function seems completely unknown on my system...<br>I am using Ubuntu Linux 11.10 (lateste version)<br><br>Please could give me some help about this?<br><br>Victor<br></div>
                                               </div></body>
</html>