我在openvg库上工作。实际上,我曾使用代码块(在树莓上)运行此代码: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并尝试使用<div id="chart" >{!! $chart->script() !!}</div>
函数,但是我在新的终端窗口中收到了此消息:
断言失败:font.c:176:gx_priv_render_text():已初始化中止
Font.c的路径:https://github.com/adafruit/rpi-firmware/blob/master/vc/sdk/opt/vc/src/hello_pi/libs/vgfont/font.c。
我在font.c上执行了176行,并尝试调用graphics_resource_render_text_ext()
(终端窗口对此行进行了注释。),但是我在任何地方都找不到此功能(我尝试在树莓派中找到)。如果取消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;
}
时,没有更改编译器生成消息,但是代码运行良好。
答案 0 :(得分:1)
从gx_priv_render_text
的{{3}}看,由于未设置inited
静态变量,因此断言失败。
此变量是通过gx_graphics_init
(它是source code)设置的,如果初始化成功,它将调用gx_priv_font_init
。
因此,初始化在gx_priv_initialise
内部某处失败。在该处设置一个断点,并逐步完成该功能,然后还检查日志(该日志应包含在该函数中找到的错误消息之一)。