Я не могу найти функцию, которая указана в компиляторе - PullRequest
0 голосов
/ 03 октября 2018

Я работаю над библиотекой openvg.На самом деле я работал для запуска этого кода с Code Blocks (на малине): https://github.com/raspberrypi/firmware/blob/master/opt/vc/src/hello_pi/hello_font/main.c

Я добился цвета рендеринга и увидел псевдонимы.Но я хочу написать текст на экране с использованием того же метода.Я проанализировал эту библиотеку: https://github.com/raspberrypi/firmware/blob/master/opt/vc/src/hello_pi/libs/vgfont/vgfont.h и попытался использовать функцию graphics_resource_render_text_ext(), но я взял это сообщение в новом окне терминала:

Ошибка подтверждения: font.c: 176: gx_priv_render_text (): inited прервано

Мой сборочный компилятор это сообщение: enter image description here

Путь Font.c: https://github.com/adafruit/rpi-firmware/blob/master/vc/sdk/opt/vc/src/hello_pi/libs/vgfont/font.c.

Я пошел 176. строка в font.c и попытался вызвать gx_font_init() (окно терминала отмечает эту строку.), Но я не мог найти эту функцию нигде (я пытался найти в малины).Если я отменяю команду graphics_resource_render_text_ext(), мой код работает хорошо.Почему я не могу использовать эту функцию?Мой код такой:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <assert.h>
#include "bcm_host.h"
#include "vgfont.h"
#include "openvg.h"
#include "egl.h"
#include "vgu.h"
#include "fontinfo.h"
#include "shapes.h"
#include "eglplatform.h"
#include "graphics_x_private.h"

int main()
{       
    GRAPHICS_RESOURCE_HANDLE img;
    uint32_t width, height;
    int LAYER = 1;
    bcm_host_init();

    int s;

    s = gx_graphics_init(".");
    assert(s == 0);
    s = graphics_get_display_size(0, &width, &height);
    assert(s == 0);
    s = gx_create_window(0, width, height, GRAPHICS_RESOURCE_RGBA32, &img);
    assert(s == 0);

    graphics_resource_fill(img, 0, 0, width, height, GRAPHICS_RGBA32(0, 0, 0, 0x00));
    graphics_display_resource(img, 0, LAYER, 0, 0, GRAPHICS_RESOURCE_WIDTH, GRAPHICS_RESOURCE_HEIGHT, VC_DISPMAN_ROT0, 1 );

    while(1)
    {
        graphics_resource_fill(img, 0, 0,width, height, GRAPHICS_RGBA32(0,0,0,0x55));
        graphics_resource_fill(img, 600, 500, 100, 50, GRAPHICS_RGBA32(0,0,0xff,0xaa));
        graphics_resource_fill(img, 600, 400, 200, 50, GRAPHICS_RGBA32(0,0xff,0,0xaa));

        graphics_resource_render_text_ext( img, 100, 100, 200, 200, GRAPHICS_RGBA32(0xff,0,0,0xdd), GRAPHICS_RGBA32(0, 0xff,0, 0xdd), "hello", strlen("hello"), 20);  // This line has problem.

        graphics_update_displayed_resource(img, 0,0,0,0);
    }

    graphics_display_resource(img, 0, LAYER, 0, 0, GRAPHICS_RESOURCE_WIDTH, GRAPHICS_RESOURCE_HEIGHT, VC_DISPMAN_ROT0, 0); 
    graphics_delete_resource(img);

    printf("Hello world!\n");
    return 0;
}

ПРИМЕЧАНИЕ: не изменил сообщение сборки компилятора, когда я отменил graphics_resource_render_text_ext(), но код работал хорошо.

1 Ответ

0 голосов
/ 03 октября 2018

Исходный код для gx_priv_render_text показывает, что утверждение не выполнено, поскольку не установлена ​​статическая переменная inited.

Эта переменная устанавливается через gx_graphics_init (это здесь внутри graphics.c), который вызывает gx_priv_font_init в случае успешной инициализации.

Итак, инициализация завершается ошибкой где-то внутри gx_priv_initialise.Установите там точку останова и пошагово пройдитесь по функции, а также проверьте журнал (он должен содержать одно из сообщений об ошибках, найденных внутри этой функции).

...