Как отобразить вывод cairo в окно GLFW, используя GL в качестве бэкэнда - PullRequest
0 голосов
/ 24 апреля 2020

Я хочу использовать Каир в сочетании с 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.

...