Inilah grafik yang setara dengan "halo, dunia"
// 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);
}
Koordinat adalah nilai vgfloat, dengan asal di kiri bawah, dengan x meningkat ke kanan, dan y meningkat. OpenVG Menentukan warna sebagai array VGFLOAT yang mengandung nilai alfa merah, hijau, biru, mulai dari 0,0 hingga 1,0, tetapi biasanya warna ditentukan sebagai RGBA (0-255 untuk RGB, A dari 0,0 hingga 1,0)
void WindowClear()
WindowClear membersihkan jendela untuk mengatur warna latar belakang sebelumnya
void AreaClear(unsigned int x, unsigned int y, unsigned int w, unsigned int h)
AreaClear membersihkan persegi panjang yang diberikan dalam koordinat jendela
void WindowOpacity(unsigned int a)
Windowopacity mengatur opacity jendela
void WindowPosition(int x, int y)
Windowposition memindahkan jendela ke posisi yang diberikan
void init(int *w, int *h)
Inisialisasi grafik: lebar dan tinggi kanvas dikembalikan. Ini harus dimulai setiap program.
void initWindowSize(int x, int y, unsigned int w, unsigned int h)
Inisialisasi dengan dimensi tertentu
void finish()
Mematikan grafik. Ini harus mengakhiri setiap program.
void Start(int width, int height)
Mulailah gambar, hapus layar dengan putih default, atur stroke dan isi menjadi hitam.
void End()
Akhiri gambar, render ke layar.
void SaveEnd(char *filename)
Akhiri gambar, render ke layar, simpan raster ke file bernama sebagai kata RGBA 4-byte, dengan langkah lebar*4 byte. Program RAW2PNG mengubah raster "mentah" menjadi PNG.
void saveterm(), restoreterm(), rawterm()
Pengaturan terminal, simpan pengaturan saat ini, kembalikan pengaturan, letakkan terminal dalam mode mentah.
void setfill(float color[4])
Atur Warna Isi
void Background(unsigned int r, unsigned int g, unsigned int b)
Isi layar dengan warna latar belakang yang ditentukan dari nilai RGB.
void BackgroundRGB(unsigned int r, unsigned int g, unsigned int b, VGfloat a)
menghapus layar ke warna latar belakang dengan alpha
void StrokeWidth(float width)
Atur lebar stroke.
void RGBA(unsigned int r, unsigned int g, unsigned int b, VGfloat a, VGfloat color[4])
Isi vektor warna dari nilai RGBA.
void RGB(unsigned int r, unsigned int g, unsigned int b, VGfloat color[4])
Isi vektor warna dari nilai RGB.
void Stroke(unsigned int r, unsigned int g, unsigned int b, VGfloat a)
Atur warna stroke menggunakan nilai RGBA.
void Fill(unsigned int r, unsigned int g, unsigned int b, VGfloat a)
Atur warna isi menggunakan nilai RGBA.
void FillLinearGradient(VGfloat x1, VGfloat y1, VGfloat x2, VGfloat y2, VGfloat *stops, int n)
Atur isi ke gradien linier yang dibatasi oleh (x1, y1) dan (x2, y2). Menggunakan offset dan warna yang ditentukan dalam jumlah pemberhentian
void FillRadialGradient(VGfloat cx, VGfloat cy, VGfloat fx VGfloat fy, VGfloat r, VGfloat *stops, int n)
Atur isi ke gradien radial yang berpusat di (cx, cy) dengan jari -jari r, dan titik fokus pada (fx, ry), menggunakan offset dan warna yang ditentukan dalam jumlah berhenti n stop
void Line(VGfloat x1, VGfloat y1, VGfloat x2, VGfloat y2)
Gambar garis antara (x1, y1) dan (x2, y2).
void Rect(VGfloat x, VGfloat y, VGfloat w, VGfloat h)
Gambar persegi panjang dengan asalnya (kiri bawah) di (x, y), dan ukurannya (lebar, tinggi).
void RectOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h)
Versi Diuraikan
void Roundrect(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat rw, VGfloat rh)
Gambarlah persegi panjang bundar dengan asalnya (kiri bawah) di (x, y), dan ukurannya (lebar, tinggi).
Lebar dan tinggi sudut ditentukan dengan (RW, RH).
void RoundrectOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat rw, VGfloat rh)
Versi Diuraikan
void Polygon(VGfloat *x, VGfloat *y, VGint n)
Gambar poligon menggunakan koordinat dalam array yang ditunjukkan oleh X dan Y. Jumlah koordinat adalah n.
void Polyline(VGfloat *x, VGfloat *y, VGint n)
Gambarlah polyline menggunakan koordinat dalam array yang ditunjuk oleh x dan y. Jumlah koordinat adalah n.
void Circle(VGfloat x, VGfloat y, VGfloat d)
Gambarlah lingkaran yang berpusat di (x, y) dengan diameter d.
void CircleOutline(VGfloat x, VGfloat y, VGfloat r)
Versi Diuraikan
void Ellipse(VGfloat x, VGfloat y, VGfloat w, VGfloat h)
Gambar elips yang berpusat di (x, y) dengan jari -jari (w, h).
void EllipseOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h)
Versi Diuraikan
void Qbezier(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat ex, VGfloat ey)
Gambarkan kurva bezier kuadrat yang dimulai pada (sx, sy), menggunakan titik kontrol pada (cx, cy), berakhir pada (ex, ey).
void QbezierOutline(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat ex, VGfloat ey)
Versi Diuraikan
void Cbezier(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat px, VGfloat py, VGfloat ex, VGfloat ey)
Gambarlah kurva bezier kubik yang dimulai pada (SX, SY), menggunakan titik kontrol pada (cx, cy) dan (px, py), berakhir pada (ex, ey).
void CbezierOutline(VGfloat sx, VGfloat sy, VGfloat cx, VGfloat cy, VGfloat px, VGfloat py, VGfloat ex, VGfloat ey)
Versi Diuraikan
void Arc(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat sa, VGfloat aext)
Gambarlah busur elips yang berpusat pada (x, y), dengan lebar dan tinggi pada (w, h). Mulai sudut (derajat) adalah SA, tingkat sudut adalah AEXT.
void ArcOutline(VGfloat x, VGfloat y, VGfloat w, VGfloat h, VGfloat sa, VGfloat aext)
Versi Diuraikan
void Text(VGfloat x, VGfloat y, char* s, Fontinfo f, int pointsize)
Gambarlah teks srtring di lokasi (x, y), menggunakan poin.
void TextMid(VGfloat x, VGfloat y, char* s, Fontinfo f, int pointsize)
Gambarlah teks srtring di berpusat di lokasi (x, y), menggunakan poin.
void TextEnd(VGfloat x, VGfloat y, char* s, Fontinfo f, int pointsize)
Gambarlah srtring teks dengan dengan dipinjamkan ke lokasi (x, y), menggunakan titik poin
VGfloat TextWidth(char *s, Fontinfo f, int pointsize)
Mengembalikan lebar teks
VGfloat TextHeight(Fontinfo f, int pointsize)
Kembalikan tinggi font
TextDepth(Fontinfo f, int pointsize)
Mengembalikan jarak font di luar garis dasar.
void Image(VGfloat x, VGfloat y, int w, int h, char * filename)
Tempatkan gambar jpeg dengan dimensi (w, h) di (x, y).
void Translate(VGfloat x, VGfloat y)
Menerjemahkan sistem koordinat ke (x, y).
void Rotate(VGfloat r)
Putar sistem koordinat di sekitar sudut R (derajat).
void Scale(VGfloat x, VGfloat y)
Skala oleh x, y.
void Shear(VGfloat x, VGfloat y)
Shear oleh sudut x, y.
void ClipRect(VGint x, VGint y, VGint w, VGint h)
Batasi menggambar area gambar ke persegi panjang yang ditentukan, end dengan clipend ()
void ClipEnd()
Mengakhiri area kliping
Juga disertakan adalah program Font2OpenVG, yang mengubah informasi font menjadi sumber C yang dapat Anda ikuti dalam program Anda. Makefile membuat kode font dari file yang ditemukan di/usr/share/font/truetype/ttf-dejavu/. Jika Anda ingin menggunakan font lain, sesuaikan makefile yang sesuai, atau menghasilkan kode font sendiri setelah program Font2OpenVG dibangun.
Font2OpenVG mengambil tiga argumen: file font truetype, file output yang akan dimasukkan dan awalan untuk pengidentifikasi. Misalnya menggunakan font dejavu sans:
./font2openvg /usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf DejaVuSans.inc DejaVuSans
dan sertakan kode yang dihasilkan dalam program Anda:
#include "DejaVuSans.inc"
Fontinfo DejaFont
Fungsi LoadFont membuat jalur OpenVG dari data font:
loadfont(DejaVuSans_glyphPoints,
DejaVuSans_glyphPointIndices,
DejaVuSans_glyphInstructions,
DejaVuSans_glyphInstructionIndices,
DejaVuSans_glyphInstructionCounts,
DejaVuSans_glyphAdvances,
DejaVuSans_characterMap,
DejaVuSans_glyphCount);
Fungsi UploadFont melepaskan informasi jalur:
unloadfont(DejaFont.Glyphs, DejaFont.Count);
Perhatikan bahwa lokasi file font mungkin berbeda. (Lokasi saat ini untuk Jessie adalah/usr/share/font/truetype/ttf-dejavu) Gunakan variabel fontlib makefile untuk menyesuaikan lokasi ini.
Perhatikan bahwa Anda akan membutuhkan setidaknya 64 mbytes GPU RAM : . Anda juga akan membutuhkan font Dejavu, dan perpustakaan JPEG dan Freetype. Alat indentasi juga berguna untuk pemformatan kode. Instal mereka melalui:
pi@raspberrypi ~ $ sudo apt-get install libjpeg8-dev indent libfreetype6-dev ttf-dejavu-core
Selanjutnya, bangun perpustakaan dan tes:
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
Program "Shapedemo" menjalankan API tingkat tinggi yang dibangun di atas OpenVG yang ditemukan di libshapes.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.
Untuk menginstal Perpustakaan Bentuk sebagai perpustakaan bersama di seluruh sistem
pi@raspberrypi ~/openvg $ make library
pi@raspberrypi ~/openvg $ sudo make install
Perpustakaan OpenVG Shapes sekarang dapat digunakan dalam kode C dengan memasukkan bentuk.h dan fontinfo.h dan menghubungkan dengan 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
Pembungkus bahasa pemrograman GO untuk perpustakaan ditemukan di openvg.go. Contoh klien ada di direktori go-klien. API dengan cermat mengikuti API C; Inilah program "halo, dunia" di Go:
API Go
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
}
Untuk membangun pembungkusnya: (pastikan gopath sudah diatur)
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