Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/share/examples/libvgl/demo.c
39481 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 1991-1997 Søren Schmidt
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer
12
* in this position and unchanged.
13
* 2. Redistributions in binary form must reproduce the above copyright
14
* notice, this list of conditions and the following disclaimer in the
15
* documentation and/or other materials provided with the distribution.
16
* 3. The name of the author may not be used to endorse or promote products
17
* derived from this software without specific prior written permission
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29
*/
30
31
#include <sys/types.h>
32
#include <sys/fbio.h>
33
#include <sys/kbio.h>
34
#include <sys/consio.h>
35
#include <vgl.h>
36
37
int
38
main(int argc, char **argv)
39
{
40
int y, xsize, ysize, i,j;
41
VGLBitmap *tmp;
42
43
// set graphics mode, here 320x240 256 colors
44
// supported modes are (from <sys/consio.h>):
45
// SW_VGA_CG320: std VGA 320x200 256 colors
46
// SW_VGA_MODEX: Modex VGA 320x240 256 colors
47
// SW_VGA_VG640: std VGA 640x480 16 colors
48
VGLInit(SW_VGA_MODEX);
49
50
// initialize mouse and show pointer
51
VGLMouseInit(VGL_MOUSESHOW);
52
53
// VGLDisplay is a ptr to a struct Bitmap defined and initialized by
54
// libvgl. The Bitmap points directly to screen memory etc.
55
xsize=VGLDisplay->Xsize;
56
ysize=VGLDisplay->Ysize;
57
58
// alloc a new bitmap
59
tmp = VGLBitmapCreate(MEMBUF, 256, 256, NULL);
60
VGLBitmapAllocateBits(tmp);
61
VGLClear(tmp, 0);
62
63
// fill the screen with colored lines
64
for (y=0; y<ysize; y++)
65
VGLLine(VGLDisplay, 0, y, xsize-1, y, y/2 % 256);
66
67
// draw some lines and circles just to show off
68
VGLLine(VGLDisplay, 0, 0, xsize-1, ysize-1, 63);
69
VGLLine(VGLDisplay, 0, ysize-1, xsize-1, 0, 63);
70
VGLLine(VGLDisplay, 0, 0, 0, ysize-1, 63);
71
VGLLine(VGLDisplay, xsize-1, 0, xsize-1, ysize-1, 63);
72
VGLEllipse(VGLDisplay, 256, 0, 256, 256, 63);
73
VGLEllipse(VGLDisplay, 0, 256, 256, 256, 0);
74
75
// some text is also useful
76
VGLBitmapString(VGLDisplay, 100,100,
77
"This is text", 63, 0, 0, VGL_DIR_RIGHT);
78
sleep(2);
79
VGLBitmapString(VGLDisplay, 100,100,
80
"This is text", 63, 0, 0, VGL_DIR_UP);
81
sleep(2);
82
VGLBitmapString(VGLDisplay, 100,100,
83
"This is text", 63, 0, 0, VGL_DIR_LEFT);
84
sleep(2);
85
VGLBitmapString(VGLDisplay, 100,100,
86
"This is text", 63, 0, 0, VGL_DIR_DOWN);
87
sleep(2);
88
89
// now show some simple bitblit
90
for (i=0; i<256; i++)
91
for (j=0; j<256; j++)
92
tmp->Bitmap[i+256*j] = i%16;
93
VGLBitmapCopy(tmp, 0, 0, VGLDisplay, 0, 0, 128, 128);
94
for (i=0; i<256; i++)
95
for (j=0; j<256; j++)
96
tmp->Bitmap[i+256*j] = j%16;
97
VGLBitmapCopy(tmp, 0, 0, VGLDisplay, 3, 128, 128, 128);
98
sleep(2);
99
VGLBitmapCopy(VGLDisplay, 237, 311, tmp, 64, 64, 128, 128);
100
VGLBitmapCopy(tmp, 32, 32, VGLDisplay, 400, 128, 128, 128);
101
sleep(2);
102
VGLBitmapCopy(VGLDisplay, 300, 300, VGLDisplay, 500, 128, 128, 128);
103
sleep(5);
104
i=0;
105
106
// loop around drawing and copying
107
while (++i) {
108
VGLBitmapCopy(VGLDisplay, rand()%xsize, rand()%ysize,
109
VGLDisplay, rand()%xsize, rand()%ysize,
110
rand()%xsize, rand()%ysize);
111
VGLLine(VGLDisplay, rand()%xsize, rand()%ysize,
112
rand()%xsize, rand()%ysize, rand()%256);
113
VGLEllipse(VGLDisplay, rand()%xsize, rand()%ysize,
114
rand()%xsize/2, rand()%ysize/2, rand()%256);
115
rand();
116
if (i > 1000) break;
117
}
118
119
// restore screen to its original mode
120
VGLEnd();
121
return 0;
122
}
123
124