我正在尝试创建虚拟上下文,以便我可以使用cairo-gl进行渲染,然后我可以将该表面复制到表面图像缓冲区。
以下代码只是一个测试,因此我可以评估openGL支持是否有效。
所以这就是我正在做的事情,但是在创建cairo_device时我总是遇到错误。 _cairo_gl_dispatch_init_buffers会抛出错误。
编辑:实际上,cairo无法获得_cairo_gl_get_version和_cairo_gl_get_flavor。
HDC hdc = GetDC((HWND)pGraphics->GetWindow());
PIXELFORMATDESCRIPTOR pfd = {
sizeof(PIXELFORMATDESCRIPTOR), // size of this pfd
1, // version number
PFD_DRAW_TO_WINDOW | // support window
PFD_SUPPORT_OPENGL | // support OpenGL
PFD_DOUBLEBUFFER, // double buffered
PFD_TYPE_RGBA, // RGBA type
24, // 24-bit color depth
0, 0, 0, 0, 0, 0, // color bits ignored
0, // no alpha buffer
0, // shift bit ignored
0, // no accumulation buffer
0, 0, 0, 0, // accum bits ignored
32, // 32-bit z-buffer
0, // no stencil buffer
0, // no auxiliary buffer
PFD_MAIN_PLANE, // main layer
0, // reserved
0, 0, 0 // layer masks ignored
};
//HDC hdc;
int iPixelFormat;
// get the best available match of pixel format for the device context
iPixelFormat = ChoosePixelFormat(hdc, &pfd);
// make that the pixel format of the device context
SetPixelFormat(hdc, iPixelFormat, &pfd);
////// create a rendering context
HGLRC hglrc = wglCreateContext(hdc);
// Test openGL
cairo_surface_t *surface_gl;
cairo_t *cr_gl;
cairo_device_t *cairo_device = cairo_wgl_device_create(hglrc);
surface_gl = cairo_gl_surface_create_for_dc(cairo_device, hdc, 500, 500);
cr_gl = cairo_create(surface_gl);
cairo_set_source_rgb(cr_gl, 1, 0, 0);
cairo_paint(cr_gl);
cairo_set_source_rgb(cr_gl, 0, 0, 0);
cairo_select_font_face(cr_gl, "Sans", CAIRO_FONT_SLANT_NORMAL,
CAIRO_FONT_WEIGHT_NORMAL);
cairo_set_font_size(cr_gl, 40.0);
cairo_move_to(cr_gl, 10.0, 50.0);
cairo_show_text(cr_gl, "openGL test");
cairo_surface_write_to_png(surface_gl, "C:/Users/Youlean/Desktop/imageGL.png");
cairo_destroy(cr_gl);
cairo_surface_destroy(surface_gl);