| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600 |
- //#include <windows.h>
- #include <vg/openvg.h>
- #include <vg/vgu.h>
- #include <EGL/egl.h>
- #include <stdio.h>
- #include <assert.h>
- #include <string.h>
- #include <time.h>
- #include <math.h>
- #include "reversing_auxiliary_line.h"
- // 红黄绿辅助线及轨迹线的原始SVG数据.
- // 直接运行.\image\run.bat, 将原始的SVG格式设计数据转换为OpenVG格式的C数据文件.
- // 注意: SVG格式的坐标系是自顶向下, 使用时应将其转换到OpenVG坐标系.
- //
- // 参考如下 do_paint_auxiliary_line 代码中的坐标映射
- // VGfloat m[9];
- // // 设置自顶向下(SVG坐标系)到自底向上(OpenVG)的坐标映射, 将SVG坐标转换为OpenVG坐标
- // // 以下红黄绿辅助线及轨迹线均使用SVG元素绘制.
- // vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE);
- // vgGetMatrix(m);
- // m[4] = -1;
- // m[7] = VG_H;
- // vgLoadMatrix(m);
- //
- #include ".\image\bg.c"
- #include ".\image\BackLine001.c"
- #include ".\image\BackLine002.c"
- #include ".\image\BackLine003.c"
- #include ".\image\BackLine004.c"
- #include ".\image\BackLine005.c"
- #include ".\image\BackLine006.c"
- #include ".\image\BackLine007.c"
- #include ".\image\BackLine008.c"
- #include ".\image\BackLine009.c"
- #include ".\image\BackLine010.c"
- #include ".\image\BackLine011.c"
- #include ".\image\BackLine012.c"
- #include ".\image\BackLine013.c"
- #include ".\image\BackLine014.c"
- #include ".\image\BackLine015.c"
- #include ".\image\BackLine016.c"
- #include ".\image\BackLine017.c"
- #include ".\image\BackLine018.c"
- #include ".\image\BackLine019.c"
- #include ".\image\BackLine020.c"
- #include ".\image\BackLine021.c"
- #include ".\image\BackLine022.c"
- #include ".\image\BackLine023.c"
- #include ".\image\BackLine024.c"
- #include ".\image\BackLine025.c"
- #include ".\image\BackLine026.c"
- #include ".\image\BackLine027.c"
- #include ".\image\BackLine028.c"
- #include ".\image\BackLine029.c"
- #include ".\image\BackLine030.c"
- #include ".\image\BackLine031.c"
- #include ".\image\BackLine032.c"
- #include ".\image\BackLine033.c"
- #include ".\image\BackLine034.c"
- #include ".\image\BackLine035.c"
- #include ".\image\BackLine036.c"
- #include ".\image\BackLine037.c"
- #include ".\image\BackLine038.c"
- #include ".\image\BackLine039.c"
- #include ".\image\BackLine040.c"
- #include ".\image\BackLine041.c"
- #include ".\image\BackLine042.c"
- #include ".\image\BackLine043.c"
- #include ".\image\BackLine044.c"
- #include ".\image\BackLine045.c"
- #include ".\image\BackLine046.c"
- #include ".\image\BackLine047.c"
- #include ".\image\BackLine048.c"
- #include ".\image\BackLine049.c"
- #include ".\image\BackLine050.c"
- #include ".\image\BackLine051.c"
- #include ".\image\BackLine052.c"
- #include ".\image\BackLine053.c"
- #include ".\image\BackLine054.c"
- #include ".\image\BackLine055.c"
- #include ".\image\BackLine056.c"
- #include ".\image\BackLine057.c"
- #include ".\image\BackLine058.c"
- #include ".\image\BackLine059.c"
- #include ".\image\BackLine060.c"
- #include ".\image\BackLine061.c"
- #include ".\image\BackLine062.c"
- #include ".\image\BackLine063.c"
- #include ".\image\BackLine064.c"
- #include ".\image\BackLine065.c"
- #include ".\image\BackLine066.c"
- #include ".\image\BackLine067.c"
- #include ".\image\BackLine068.c"
- #include ".\image\BackLine069.c"
- #include ".\image\BackLine070.c"
- #include ".\image\BackLine071.c"
- #include ".\image\BackLine072.c"
- #include ".\image\BackLine073.c"
- #include ".\image\BackLine074.c"
- #include ".\image\BackLine075.c"
- #include ".\image\BackLine076.c"
- #include ".\image\BackLine077.c"
- #include ".\image\BackLine078.c"
- #include ".\image\BackLine079.c"
- #include ".\image\BackLine080.c"
- #include ".\image\BackLine081.c"
- #include ".\image\BackLine082.c"
- #include ".\image\BackLine083.c"
- #include ".\image\BackLine084.c"
- #include ".\image\BackLine085.c"
- #include ".\image\BackLine086.c"
- #include ".\image\BackLine087.c"
- #include ".\image\BackLine088.c"
- #include ".\image\BackLine089.c"
- #include ".\image\BackLine090.c"
- #include ".\image\BackLine091.c"
- #include ".\image\BackLine092.c"
- #include ".\image\BackLine093.c"
- #include ".\image\BackLine094.c"
- #include ".\image\BackLine095.c"
- #include ".\image\BackLine096.c"
- #include ".\image\BackLine097.c"
- #include ".\image\BackLine098.c"
- #include ".\image\BackLine099.c"
- #include ".\image\BackLine100.c"
- #include ".\image\BackLine101.c"
- #include ".\image\BackLine102.c"
- #include ".\image\BackLine103.c"
- #include ".\image\BackLine104.c"
- #include ".\image\BackLine105.c"
- #include ".\image\BackLine106.c"
- #include ".\image\BackLine107.c"
- #include ".\image\BackLine108.c"
- #include ".\image\BackLine109.c"
- #include ".\image\BackLine110.c"
- #include ".\image\BackLine111.c"
- #include ".\image\BackLine112.c"
- #include ".\image\BackLine113.c"
- // 轨迹线描述结构
- typedef struct {
- const VGubyte *command;
- int cb_command;
- const VGfloat *coordinate;
- } BACK_LINE;
- #define L_DEF(num) { BackLine##num##_path_0_commands , sizeof(BackLine##num##_path_0_commands )/sizeof(BackLine##num##_path_0_commands [0]), BackLine##num##_path_0_coordinates }
- #define R_DEF(num) { BackLine##num##_path_1_commands , sizeof(BackLine##num##_path_1_commands )/sizeof(BackLine##num##_path_1_commands [0]), BackLine##num##_path_1_coordinates }
- // 左轨迹数据
- static const BACK_LINE back_lines_left[] = {
- L_DEF(001),
- L_DEF(002),
- L_DEF(003),
- L_DEF(004),
- L_DEF(005),
- L_DEF(006),
- L_DEF(007),
- L_DEF(008),
- L_DEF(009),
- L_DEF(010),
- L_DEF(011),
- L_DEF(012),
- L_DEF(013),
- L_DEF(014),
- L_DEF(015),
- L_DEF(016),
- L_DEF(017),
- L_DEF(018),
- L_DEF(019),
- L_DEF(020),
- L_DEF(021),
- L_DEF(022),
- L_DEF(023),
- L_DEF(024),
- L_DEF(025),
- L_DEF(026),
- L_DEF(027),
- L_DEF(028),
- L_DEF(029),
- L_DEF(030),
- L_DEF(031),
- L_DEF(032),
- L_DEF(033),
- L_DEF(034),
- L_DEF(035),
- L_DEF(036),
- L_DEF(037),
- L_DEF(038),
- L_DEF(039),
- L_DEF(040),
- L_DEF(041),
- L_DEF(042),
- L_DEF(043),
- L_DEF(044),
- L_DEF(045),
- L_DEF(046),
- L_DEF(047),
- L_DEF(048),
- L_DEF(049),
- L_DEF(050),
- L_DEF(051),
- L_DEF(052),
- L_DEF(053),
- L_DEF(054),
- L_DEF(055),
- L_DEF(056),
- L_DEF(057),
- L_DEF(058),
- L_DEF(059),
- L_DEF(060),
- L_DEF(061),
- L_DEF(062),
- L_DEF(063),
- L_DEF(064),
- L_DEF(065),
- L_DEF(066),
- L_DEF(067),
- L_DEF(068),
- L_DEF(069),
- L_DEF(070),
- L_DEF(071),
- L_DEF(072),
- L_DEF(073),
- L_DEF(074),
- L_DEF(075),
- L_DEF(076),
- L_DEF(077),
- L_DEF(078),
- L_DEF(079),
- L_DEF(080),
- L_DEF(081),
- L_DEF(082),
- L_DEF(083),
- L_DEF(084),
- L_DEF(085),
- L_DEF(086),
- L_DEF(087),
- L_DEF(088),
- L_DEF(089),
- L_DEF(090),
- L_DEF(091),
- L_DEF(092),
- L_DEF(093),
- L_DEF(094),
- L_DEF(095),
- L_DEF(096),
- L_DEF(097),
- L_DEF(098),
- L_DEF(099),
- L_DEF(100),
- L_DEF(101),
- L_DEF(102),
- L_DEF(103),
- L_DEF(104),
- L_DEF(105),
- L_DEF(106),
- L_DEF(107),
- L_DEF(108),
- L_DEF(109),
- L_DEF(110),
- L_DEF(111),
- L_DEF(112),
- L_DEF(113),
- };
- // 右轨迹数据
- static const BACK_LINE back_lines_right[] = {
- R_DEF(001),
- R_DEF(002),
- R_DEF(003),
- R_DEF(004),
- R_DEF(005),
- R_DEF(006),
- R_DEF(007),
- R_DEF(008),
- R_DEF(009),
- R_DEF(010),
- R_DEF(011),
- R_DEF(012),
- R_DEF(013),
- R_DEF(014),
- R_DEF(015),
- R_DEF(016),
- R_DEF(017),
- R_DEF(018),
- R_DEF(019),
- R_DEF(020),
- R_DEF(021),
- R_DEF(022),
- R_DEF(023),
- R_DEF(024),
- R_DEF(025),
- R_DEF(026),
- R_DEF(027),
- R_DEF(028),
- R_DEF(029),
- R_DEF(030),
- R_DEF(031),
- R_DEF(032),
- R_DEF(033),
- R_DEF(034),
- R_DEF(035),
- R_DEF(036),
- R_DEF(037),
- R_DEF(038),
- R_DEF(039),
- R_DEF(040),
- R_DEF(041),
- R_DEF(042),
- R_DEF(043),
- R_DEF(044),
- R_DEF(045),
- R_DEF(046),
- R_DEF(047),
- R_DEF(048),
- R_DEF(049),
- R_DEF(050),
- R_DEF(051),
- R_DEF(052),
- R_DEF(053),
- R_DEF(054),
- R_DEF(055),
- R_DEF(056),
- R_DEF(057),
- R_DEF(058),
- R_DEF(059),
- R_DEF(060),
- R_DEF(061),
- R_DEF(062),
- R_DEF(063),
- R_DEF(064),
- R_DEF(065),
- R_DEF(066),
- R_DEF(067),
- R_DEF(068),
- R_DEF(069),
- R_DEF(070),
- R_DEF(071),
- R_DEF(072),
- R_DEF(073),
- R_DEF(074),
- R_DEF(075),
- R_DEF(076),
- R_DEF(077),
- R_DEF(078),
- R_DEF(079),
- R_DEF(080),
- R_DEF(081),
- R_DEF(082),
- R_DEF(083),
- R_DEF(084),
- R_DEF(085),
- R_DEF(086),
- R_DEF(087),
- R_DEF(088),
- R_DEF(089),
- R_DEF(090),
- R_DEF(091),
- R_DEF(092),
- R_DEF(093),
- R_DEF(094),
- R_DEF(095),
- R_DEF(096),
- R_DEF(097),
- R_DEF(098),
- R_DEF(099),
- R_DEF(100),
- R_DEF(101),
- R_DEF(102),
- R_DEF(103),
- R_DEF(104),
- R_DEF(105),
- R_DEF(106),
- R_DEF(107),
- R_DEF(108),
- R_DEF(109),
- R_DEF(110),
- R_DEF(111),
- R_DEF(112),
- R_DEF(113),
- };
- #define LEFT_PATH_ORG_X (0.0f)
- #define LEFT_PATH_ORG_Y (0.0f)
- #define RIGHT_PATH_ORG_X (0.0f)
- #define RIGHT_PATH_ORG_Y (0.0f)
- #define BACK_LINE_WIDTH 7.0f // 红黄绿辅助线线宽
- static VGPath back_line_path_0; // 绿色标线
- static VGPath back_line_path_1; // 黄色标线
- static VGPath back_line_path_2; // 红色标线
- static int vg_w, vg_h;
- // 绘制红黄绿辅助线及轨迹线
- // path_line_index 轨迹线图片索引
- static void do_paint_auxiliary_line (int path_line_index)
- {
- VGfloat line_color[4];
- VGPaint colorPaint;
- if (path_line_index < 0 || path_line_index >= sizeof(back_lines_left) / sizeof(back_lines_left[0])
- || path_line_index >= sizeof(back_lines_right) / sizeof(back_lines_right[0]))
- return;
- // 设置单位矩阵
- vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE);
- vgLoadIdentity();
- // 创建一个纯色画笔对象
- colorPaint = vgCreatePaint();
- vgSetParameteri(colorPaint, VG_PAINT_TYPE, VG_PAINT_TYPE_COLOR);
- VGfloat m[9];
- // 设置自顶向下(SVG坐标系)到自底向上(OpenVG)的坐标映射, 将SVG坐标转换为OpenVG坐标
- // 以下红黄绿辅助线及轨迹线均使用SVG元素绘制.
- vgSeti(VG_MATRIX_MODE, VG_MATRIX_PATH_USER_TO_SURFACE);
- vgGetMatrix(m);
- m[4] = -1;
- m[7] = vg_h;
- vgLoadMatrix(m);
- // 绘制红黄绿辅助线 (以下路径使用的坐标为SVG坐标, 通过上面的转换矩阵m进行坐标系转换)
-
- // 绘制绿色标线
- // SVG代码
- // <path d="M568.5 199L499 148H223L152.5 199" stroke="#00FF00" stroke-width="7" stroke-linecap="round"/>
- // 创建绿色画笔
- line_color[0] = 0.00f; // 绿色
- line_color[1] = 1.00f;
- line_color[2] = 0.00f;
- line_color[3] = 1.00f;
- vgSetParameterfv (colorPaint, VG_PAINT_COLOR, 4, line_color);
- // 标记画笔对象colorPaint用于下面的路径描边操作
- vgSetPaint (colorPaint, VG_STROKE_PATH);
- // 设置笔宽度
- vgSetf (VG_STROKE_LINE_WIDTH, BACK_LINE_WIDTH);
- // 设置笔帽类型
- vgSetf (VG_STROKE_CAP_STYLE, VG_CAP_ROUND);
- // 绘制绿色标线
- vgDrawPath (back_line_path_0, VG_STROKE_PATH);
- // 绘制黄色标线
- // SVG代码
- // <path d="M653.5 266.5L568.5 199H152.51L66.5 266.5" stroke="#FFFF00" stroke-width="7" stroke-linecap="round"/>
- // 创建黄色画笔
- line_color[0] = 1.00f; // 黄色
- line_color[1] = 1.00f;
- line_color[2] = 0.00f;
- line_color[3] = 1.00f;
- vgSetParameterfv (colorPaint, VG_PAINT_COLOR, 4, line_color);
- // 标记画笔对象colorPaint用于下面的路径描边操作
- vgSetPaint (colorPaint, VG_STROKE_PATH);
- // 设置笔宽度
- vgSetf (VG_STROKE_LINE_WIDTH, BACK_LINE_WIDTH);
- // 设置笔帽类型
- vgSetf (VG_STROKE_CAP_STYLE, VG_CAP_ROUND);
- // 绘制黄色标线
- vgDrawPath (back_line_path_1, VG_STROKE_PATH);
- // 绘制红色标线
- // SVG代码
- // <path d="M713.5 316.5L653 266H67L3.5 319.5" stroke="#FF0000" stroke-width="7" stroke-linecap="round"/>
- // 创建红色画笔
- line_color[0] = 1.00f; // 红色
- line_color[1] = 0.00f;
- line_color[2] = 0.00f;
- line_color[3] = 1.00f;
- vgSetParameterfv (colorPaint, VG_PAINT_COLOR, 4, line_color);
- // 标记画笔对象colorPaint用于下面的路径描边操作
- vgSetPaint (colorPaint, VG_STROKE_PATH);
- // 设置笔宽度
- vgSetf (VG_STROKE_LINE_WIDTH, BACK_LINE_WIDTH);
- // 设置笔帽类型
- vgSetf (VG_STROKE_CAP_STYLE, VG_CAP_ROUND);
- // 绘制红色标线
- vgDrawPath (back_line_path_2, VG_STROKE_PATH);
- // 绘制倒车轨迹
- // leftBackLine001.svg
- // <path d="M6.5 4C15 3.99996 41.6468 9.29998 43 30.4997C44.5 54 18 84 3 98.4997" stroke="#FFFF00" stroke-width="7"/>
- line_color[0] = 1.00f; // 黄色
- line_color[1] = 1.00f;
- line_color[2] = 0.00f;
- line_color[3] = 1.00f;
- vgSetParameterfv (colorPaint, VG_PAINT_COLOR, 4, line_color);
- // 标记画笔对象colorPaint用于下面的路径填充操作
- vgSetPaint (colorPaint, VG_STROKE_PATH);
- // 设置笔宽度
- vgSetf (VG_STROKE_LINE_WIDTH, BACK_LINE_WIDTH);
- // 设置笔帽类型
- vgSetf (VG_STROKE_CAP_STYLE, VG_CAP_BUTT); // VG_CAP_BUTT为缺省类型
- // 绘制左边的轨迹线
- // 移至坐标原点至左轨迹SVG相对于VG背景的偏移位置
- vgTranslate(LEFT_PATH_ORG_X, LEFT_PATH_ORG_Y);
- const BACK_LINE *back_line_left = back_lines_left + path_line_index;
- // 创建左轨迹路径
- VGPath path_line_path_left = vgCreatePath (VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, 0, 0, VG_PATH_CAPABILITY_ALL);
- if (path_line_path_left != VG_INVALID_HANDLE)
- {
- // 以下VG命令个数 - 1 "back_line_left->cb_command - 1"的作用是去除最后的 VG_CLOSE_PATH 命令. SVG2OPENVG.exe工具转换时自动在所有路径命令上补全 VG_CLOSE_PATH
- vgAppendPathData (path_line_path_left, back_line_left->cb_command - 1, back_line_left->command, back_line_left->coordinate);
- // 绘制左轨迹
- vgDrawPath (path_line_path_left, VG_STROKE_PATH);
- }
- // 释放左轨迹路径资源
- vgDestroyPath (path_line_path_left);
- vgTranslate (-LEFT_PATH_ORG_X, -LEFT_PATH_ORG_Y);
- // 绘制右边的轨迹线
- // 移至坐标原点至右轨迹SVG相对于VG背景的偏移位置
- vgTranslate (RIGHT_PATH_ORG_X, RIGHT_PATH_ORG_Y);
- const BACK_LINE *back_line_right = back_lines_right + path_line_index;
- // 创建右轨迹路径
- VGPath path_line_path_right = vgCreatePath (VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, 0, 0, VG_PATH_CAPABILITY_ALL);
- if (path_line_path_right != VG_INVALID_HANDLE)
- {
- // 以下VG命令个数 - 1 "back_line_right->cb_command - 1"的作用是去除最后的 VG_CLOSE_PATH 命令. SVG2OPENVG.exe工具转换时自动在所有路径命令上补全 VG_CLOSE_PATH
- vgAppendPathData (path_line_path_right, back_line_right->cb_command - 1, back_line_right->command, back_line_right->coordinate);
- vgDrawPath (path_line_path_right, VG_STROKE_PATH);
- }
- // 释放右轨迹路径资源
- vgDestroyPath (path_line_path_right);
- vgTranslate (-RIGHT_PATH_ORG_X, -RIGHT_PATH_ORG_Y);
- // 设置无效句柄用于路径描边, 将colorPaint的引用次数减1
- vgSetPaint (VG_INVALID_HANDLE, VG_STROKE_PATH);
- // 释放colorPaint资源
- vgDestroyPaint (colorPaint);
- vgFinish();
- }
- int reversing_auxiliary_line_draw (int index)
- {
- vgSeti(VG_IMAGE_QUALITY, VG_IMAGE_QUALITY_BETTER);
- vgSeti(VG_RENDERING_QUALITY, VG_RENDERING_QUALITY_BETTER);
- do_paint_auxiliary_line(index);
- return 0;
- }
- int reversing_auxiliary_line_init (int width, int height)
- {
- vg_w = width;
- vg_h = height;
- (void)vg_w;
- (void)vg_h;
-
- // 创建红黄绿辅助线路径对象
- // 以下VG命令个数 - 1 "sizeof(bg_path_0_commands) / sizeof(VGubyte) - 1"的作用是去除最后的 VG_CLOSE_PATH 命令. SVG2OPENVG.exe工具转换时自动在所有路径命令上补全 VG_CLOSE_PATH
- back_line_path_0 = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, 0, 0, VG_PATH_CAPABILITY_ALL);
- if(back_line_path_0 != VG_INVALID_HANDLE)
- vgAppendPathData(back_line_path_0, sizeof(bg_path_0_commands) / sizeof(VGubyte) - 1, bg_path_0_commands, bg_path_0_coordinates);
- back_line_path_1 = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, 0, 0, VG_PATH_CAPABILITY_ALL);
- if (back_line_path_1 != VG_INVALID_HANDLE)
- vgAppendPathData(back_line_path_1, sizeof(bg_path_1_commands) / sizeof(VGubyte) - 1, bg_path_1_commands, bg_path_1_coordinates);
- back_line_path_2 = vgCreatePath(VG_PATH_FORMAT_STANDARD, VG_PATH_DATATYPE_F, 1.0f, 0.0f, 0, 0, VG_PATH_CAPABILITY_ALL);
- if (back_line_path_2 != VG_INVALID_HANDLE)
- vgAppendPathData(back_line_path_2, sizeof(bg_path_2_commands) / sizeof(VGubyte) - 1, bg_path_2_commands, bg_path_2_coordinates);
- return 0;
- }
- int reversing_auxiliary_line_exit (void)
- {
- // 释放背景轨迹路径对象
- if (back_line_path_0 != VG_INVALID_HANDLE)
- {
- vgDestroyPath(back_line_path_0);
- back_line_path_0 = VG_INVALID_HANDLE;
- }
- if (back_line_path_1 != VG_INVALID_HANDLE)
- {
- vgDestroyPath(back_line_path_1);
- back_line_path_1 = VG_INVALID_HANDLE;
- }
- if (back_line_path_2 != VG_INVALID_HANDLE)
- {
- vgDestroyPath(back_line_path_2);
- back_line_path_2 = VG_INVALID_HANDLE;
- }
- return 0;
- }
|