Я хочу использовать Каир в сочетании с glfw. Там нет абсолютно никакого рабочего документа. И то, что найдено, не компилируется. Это лучший рабочий пример для glfw, который я нашел:
#include <GLFW/glfw3.h>
#define GLFW_EXPOSE_NATIVE_X11
#define GLFW_EXPOSE_NATIVE_GLX
#include <GLFW/glfw3native.h>
#include <cairo/cairo.h>
//#include <cairo/cairo-gl.h>
#include <stdlib.h>
int main(int argc, char * argv[]) {
glfwInit();
// changes nothing on 3.2
// glfwWindowHint(GLFW_CONTEXT_CREATION_API, GLFW_NATIVE_CONTEXT_API);
GLFWwindow * window = glfwCreateWindow(800, 600, "Test", NULL, NULL);
glfwMakeContextCurrent(window);
glfwSwapInterval(1);
Display * x11_display = glfwGetX11Display();
GLXContext glx_context = glfwGetGLXContext(window);
Window x11_window = glfwGetX11Window(window);
cairo_device_t * cairo_device = cairo_glx_device_create(x11_display, glx_context);
cairo_surface_t * cairo_surface = cairo_gl_surface_create_for_window(cairo_device, x11_window, 800, 600);
cairo_device_destroy(cairo_device);
cairo_t * ctx = cairo_create(cairo_surface);
while (!glfwWindowShouldClose(window)) {
cairo_set_source_rgb(ctx, 1.0, 0.0, 0.0);
cairo_paint(ctx);
cairo_gl_surface_swapbuffers(cairo_surface);
glfwSwapBuffers(window);
glfwPollEvents();
glfwSetWindowShouldClose(window, 1);
}
}
, как вы можете видеть, я прокомментировал строку
#include <cairo/cairo-gl.h>
, поскольку она не существует. Но после игры с библиотеками pkg-config я достиг этого.
gcc cairogl.c `pkg-config --libs --cflags gl glfw3 cairo`
Это компилируется, но, конечно, некоторые команды неизвестны, и я также получаю ошибки компоновщика. Что я могу сделать для этого? Кстати, все это началось с попытки отрисовки вывода harfbuzz в glfw, и нет пригодного для использования документа, поэтому я пытаюсь выполнить работу, используя pan go, который работает с harfbuzz и cairo.