Вот графический эквивалент "Привет, мир"
// first OpenVG program
// Anthony Starks ([email protected])
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "VG/openvg.h"
#include "VG/vgu.h"
#include "fontinfo.h"
#include "shapes.h"
int main() {
int width, height;
char s[3];
init(&width, &height); // Graphics initialization
Start(width, height); // Start the picture
Background(0, 0, 0); // Black background
Fill(44, 77, 232, 1); // Big blue marble
Circle(width / 2, 0, width); // The "world"
Fill(255, 255, 255, 1); // White text
TextMid(width / 2, height / 2, "hello, world", SerifTypeface, width / 10); // Greetings
End(); // End the picture
fgets(s, 2, stdin); // look at the pic, end with [RETURN]
finish(); // Graphics cleanup
exit(0);
}
Координаты являются значениями VGFLOAT, с началом левого нижнего левого, с x увеличивается вправо, а y увеличивается. OpenVG указывает цвета как массив VGFLOAT, содержащий красные, зеленые, синие, альфа-значения в диапазоне от 0,0 до 1,0, но обычно цвета определяются как RGBA (0-255 для RGB, от 0,0 до 1,0)
void WindowClear()
Windowclear очищает окно, чтобы ранее установить цвет фона
void AreaClear(unsigned int x, unsigned int y, unsigned int w, unsigned int h)
Gainclear очищает данный прямоугольник в координатах окон
void WindowOpacity(unsigned int a)
Windopacity устанавливает окно непрозрачность
void WindowPosition(int x, int y)
WindowPosition перемещает окно в данное положение
void init(int *w, int *h)
Инициализировать графику: ширина и высота холста возвращаются. Это должно начинать каждую программу.
void initWindowSize(int x, int y, unsigned int w, unsigned int h)
Инициализировать с определенными размерами
void finish()
Выключите графику. Это должно закончить каждую программу.
void Start(int width, int height)
Начните изображение, очистите экран с белого цвета по умолчанию, установите ход и заполните черным.
void End()
Завершите изображение, рендеринг на экране.
void SaveEnd(char *filename)
Завершите изображение, рендеринг на экране, сохраните растровый в именованном файле как 4-байтовые слова RGBA, с шагом ширины*4 байт. Программа RAW2PNG преобразует «RAW» растра в PNG.
void saveterm(), restoreterm(), rawterm()
Настройки терминала, сохраняют настройки текущих настроек, настройки восстановления, поместите терминал в необработанном режиме.
void setfill(float color[4])
Установите цвет наполнения
void Background(unsigned int r, unsigned int g, unsigned int b)
Заполните экран с цветом фона, определенного из значений RGB.
void BackgroundRGB(unsigned int r, unsigned int g, unsigned int b, VGfloat a)
очищает экран на фоновый цвет с альфа
void StrokeWidth(float width)
Установите ширину хода.
void RGBA(unsigned int r, unsigned int g, unsigned int b, VGfloat a, VGfloat color[4])
Заполните цветный вектор из значений RGBA.
void RGB(unsigned int r, unsigned int g, unsigned int b, VGfloat color[4])
Заполните цветный вектор из значений RGB.
void Stroke(unsigned int r, unsigned int g, unsigned int b, VGfloat a)
Установите цвет хода, используя значения RGBA.
void Fill(unsigned int r, unsigned int g, unsigned int b, VGfloat a)
Установите цвет заполнения, используя значения RGBA.
void FillLinearGradient(VGfloat x1, VGfloat y1, VGfloat x2, VGfloat y2, VGfloat *stops, int n)
Установите заполнение на линейный градиент, ограниченный (x1, Y1) и (x2, y2). Использование смещений и цветов, указанных в n количестве остановок
void FillRadialGradient(VGfloat cx, VGfloat cy, VGfloat fx VGfloat fy, VGfloat r, VGfloat *stops, int n)
Установите заполнение на радиальный градиент, сосредоточенное на (CX, CY) с радиусом R и фокальной точкой AT (FX, RY), используя смещения и цвета, указанные в n -количестве остановок
void Line(VGfloat x1, VGfloat y1, VGfloat x2, VGfloat y2)
Нарисуйте линию между (x1, y1) и (x2, y2).
void Rect(VGfloat x, VGfloat y, VGfloat w, VGfloat h)
Нарисуйте прямоугольник с его происхождением (внизу слева) в (x, y), а размер (ширина, высота).
void RectOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h)
Изложенная версия
void Roundrect(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat rw, VGfloat rh)
Нарисуйте округлый прямоугольник с его происхождением (внизу слева) в (x, y), а размер (ширина, высота).
Ширина и высота углов указаны с помощью (RW, RH).
void RoundrectOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat rw, VGfloat rh)
Изложенная версия
void Polygon(VGfloat *x, VGfloat *y, VGint n)
Нарисуйте многоугольник, используя координаты в массивах, на которые указывает X и Y. Количество координат n.
void Polyline(VGfloat *x, VGfloat *y, VGint n)
Нарисуйте полилин, используя координаты в массивах, на которые указывает X и Y. Количество координат n.
void Circle(VGfloat x, VGfloat y, VGfloat d)
Нарисуйте круг, центрированный по (x, y) диаметром d.
void CircleOutline(VGfloat x, VGfloat y, VGfloat r)
Изложенная версия
void Ellipse(VGfloat x, VGfloat y, VGfloat w, VGfloat h)
Нарисуйте эллипс, сосредоточенный на (x, y) с радиусами (w, h).
void EllipseOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h)
Изложенная версия
void Qbezier(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat ex, VGfloat ey)
Нарисуйте квадратичную кривую Безера, начиная с (SX, SY), используя контрольные точки AT (CX, CY), заканчивая (EX, EY).
void QbezierOutline(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat ex, VGfloat ey)
Изложенная версия
void Cbezier(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat px, VGfloat py, VGfloat ex, VGfloat ey)
Нарисуйте кубическую кривую Безье, начиная с (SX, SY), используя контрольные точки AT (CX, CY) и (PX, PY), заканчиваясь (EX, EY).
void CbezierOutline(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat px, VGfloat py, VGfloat ex, VGfloat ey)
Изложенная версия
void Arc(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat sa, VGfloat aext)
Нарисуйте эллиптическую дугу, сосредоточенную на (x, y), с шириной и высотой в (w, h). Угол начала (градусы) - это SA, угол экстент - AEXT.
void ArcOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat sa, VGfloat aext)
Изложенная версия
void Text(VGfloat x, VGfloat y, char* s, Fontinfo f, int pointsize)
Нарисуйте текст srtring (ы) в месте (x, y), используя точки.
void TextMid(VGfloat x, VGfloat y, char* s, Fontinfo f, int pointsize)
Нарисуйте текст Srtring (ы) в центре в месте (x, y), используя точки.
void TextEnd(VGfloat x, VGfloat y, char* s, Fontinfo f, int pointsize)
Нарисуйте текст Srtring (ы) с его кредитом, выровненным по местоположению (x, y), используя точки
VGfloat TextWidth(char *s, Fontinfo f, int pointsize)
Вернуть ширину текста
VGfloat TextHeight(Fontinfo f, int pointsize)
Вернуть высоту шрифта
TextDepth(Fontinfo f, int pointsize)
Верните расстояние шрифта за базовую линию.
void Image(VGfloat x, VGfloat y, int w, int h, char * filename)
Поместите изображение JPEG с размерами (W, H) в (x, y).
void Translate(VGfloat x, VGfloat y)
Перевести систему координат на (x, y).
void Rotate(VGfloat r)
Поверните систему координат вокруг угла R (градусы).
void Scale(VGfloat x, VGfloat y)
Масштаб по x, y.
void Shear(VGfloat x, VGfloat y)
Сдвиг под углами x, y.
void ClipRect(VGint x, VGint y, VGint w, VGint h)
Ограничьте чертеж область чертежа до указанного прямоугольника, конец клиендом ()
void ClipEnd()
Заканчивается зона отсечения
Также включена программа FONT2OPENVG, которая превращает информацию о шрифте в источник C, которую вы можете встроить в свою программу. Makefile производит код шрифта из файлов, найденных в/usr/share/fonts/truetype/ttf-dejavu/. Если вы хотите использовать другие шрифты, отрегулируйте MakeFile соответственно или создайте код шрифта самостоятельно, как только будет построена программа FONT2OpenVG.
FONT2OPENVG принимает три аргумента: файл шрифта TRUETYPE, выходной файл, который должен быть включен и префикс для идентификаторов. Например, чтобы использовать шрифт dejavu sans:
./font2openvg /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf DejaVuSans.inc DejaVuSans
и включите сгенерированный код в свою программу:
#include "DejaVuSans.inc"
Fontinfo DejaFont
Функция LoadFont создает пути OpenVG из данных шрифта:
loadfont(DejaVuSans_glyphPoints,
DejaVuSans_glyphPointIndices,
DejaVuSans_glyphInstructions,
DejaVuSans_glyphInstructionIndices,
DejaVuSans_glyphInstructionCounts,
DejaVuSans_glyphAdvances,
DejaVuSans_characterMap,
DejaVuSans_glyphCount);
Функция UnloadFont выпускает информацию о пути:
unloadfont(DejaFont.Glyphs, DejaFont.Count);
Обратите внимание, что местоположение файлов шрифтов может отличаться. (Текущее местоположение для Jessie IS/usr/share/fonts/truetype/ttf-dejavu) Используйте переменную макияжного файла fontlib для настройки этого местоположения.
Обратите внимание, что вам понадобится не менее 64 Мбайт ОЗУ графического процессора : . Вам также понадобятся шрифты Dejavu, а также библиотеки JPEG и Freetype. Инструмент отступления также полезен для форматирования кода. Установите их через:
pi@raspberrypi ~ $ sudo apt-get install libjpeg8-dev indent libfreetype6-dev ttf-dejavu-core
Далее постройте библиотеку и тест:
pi@raspberrypi ~ $ git clone git://github.com/ajstarks/openvg
pi@raspberrypi ~ $ cd openvg
pi@raspberrypi ~/openvg $ make
g++ -I/usr/include/freetype2 fontutil/font2openvg.cpp -o font2openvg -lfreetype
./font2openvg /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf DejaVuSans.inc DejaVuSans
224 glyphs written
./font2openvg /usr/share/fonts/truetype/ttf-dejavu/DejaVuSansMono.ttf DejaVuSansMono.inc DejaVuSansMono
224 glyphs written
./font2openvg /usr/share/fonts/truetype/ttf-dejavu/DejaVuSerif.ttf DejaVuSerif.inc DejaVuSerif
224 glyphs written
gcc -O2 -Wall -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -c libshapes.c
gcc -O2 -Wall -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads -c oglinit.c
pi@raspberrypi ~/openvg/client $ cd client
pi@raspberrypi ~/openvg/client $ make test
cc -Wall -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads -o shapedemo shapedemo.c ../libshapes.o ../oglinit.o -L/opt/vc/lib -lGLESv2 -ljpeg
./shapedemo demo 5
Программа «Formedemo» управляет API высокого уровня, построенный на OpenVG, найденный в libstapes.c.
./shapedemo # show a reference card
./shapedemo raspi # show a self-portrait
./shapedemo image # show four test images
./shapedemo astro # the sun and the earth, to scale
./shapedemo text # show blocks of text in serif, sans, and mono fonts
./shapedemo rand 10 # show 10 random shapes
./shapedemo rotate 10 a # rotated and faded "a"
./shapedemo test "hello, world" # show a test pattern, with "hello, world" at mid-display in sans, serif, and mono.
./shapedemo fontsize # show a range of font sizes (per <https://speakerdeck.com/u/idangazit/p/better-products-through-typography>)
./shapedemo demo 10 # run through the demo, pausing 10 seconds between each one; contemplate the awesome.
Чтобы установить библиотеку форм в качестве общей общей библиотеки
pi@raspberrypi ~/openvg $ make library
pi@raspberrypi ~/openvg $ sudo make install
Библиотека форм OpenVG теперь может использоваться в коде C, включив Shapes.h и Fontinfo.h и связываясь с LibShapes.SO:
#include <shapes.h>
#include <fontinfo.h>
pi@raspberrypi ~ $ gcc -I/opt/vc/include -I/opt/vc/include/interface/vmcs_host/linux -I/opt/vc/include/interface/vcos/pthreads anysource.c -o anysource -lshapes
pi@raspberrypi ~ $ ./anysource
Обертка языка программирования GO для библиотеки находится в openvg.go. Образец клиентов находятся в каталоге Go-Client. API внимательно следит за CAPI C; Вот программа «Привет, мир» в Go:
Go API
package main
import (
"bufio"
"github.com/ajstarks/openvg"
"os"
)
func main() {
width, height := openvg.Init() // OpenGL, etc initialization
w2 := openvg.VGfloat(width / 2)
h2 := openvg.VGfloat(height / 2)
w := openvg.VGfloat(width)
openvg.Start(width, height) // Start the picture
openvg.BackgroundColor("black") // Black background
openvg.FillRGB(44, 77, 232, 1) // Big blue marble
openvg.Circle(w2, 0, w) // The "world"
openvg.FillColor("white") // White text
openvg.TextMid(w2, h2, "hello, world", "serif", width/10) // Greetings
openvg.End() // End the picture
bufio.NewReader(os.Stdin).ReadBytes('n') // Pause until [RETURN]
openvg.Finish() // Graphics cleanup
}
Чтобы построить обертку: (убедитесь, что GoPath установлен)
pi@raspberrypi ~/openvg $ go install .
pi@raspberrypi ~/openvg $ cd go-client/hellovg
pi@raspberrypi ~/openvg/go-client/hellovg $ go build .
pi@raspberrypi ~/openvg/go-client/hellovg $ ./hellovg