Compare commits
301 Commits
mesa_7_5_r
...
mesa_7_5_2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
18f3afbe88 | ||
|
|
b807d49f18 | ||
|
|
d09941c8cc | ||
|
|
fc613848e6 | ||
|
|
c7d0f0b46c | ||
|
|
c7fddaf612 | ||
|
|
e3a6f57ad6 | ||
|
|
41d0606b7f | ||
|
|
126d62edd1 | ||
|
|
1730b8db12 | ||
|
|
60b152a1b3 | ||
|
|
adfa778c8e | ||
|
|
2acd5de226 | ||
|
|
890f37d4d9 | ||
|
|
ad935c3f47 | ||
|
|
be66ff51ec | ||
|
|
bc75464760 | ||
|
|
52cadf7592 | ||
|
|
e857303305 | ||
|
|
2b83483fb4 | ||
|
|
5a0b29050f | ||
|
|
077e3de989 | ||
|
|
999592745f | ||
|
|
c4ce6f6a7c | ||
|
|
9666529b5a | ||
|
|
08d39251a7 | ||
|
|
cfa1a0a609 | ||
|
|
2921a2555d | ||
|
|
d9ddbc3f47 | ||
|
|
41fff1b9a1 | ||
|
|
6681981fe1 | ||
|
|
3ad108b77f | ||
|
|
f42c66c138 | ||
|
|
81de9d68f7 | ||
|
|
1f309c40b8 | ||
|
|
799631acb1 | ||
|
|
ac3c8e3b53 | ||
|
|
3129b2403e | ||
|
|
b8b774c775 | ||
|
|
1402ea8f39 | ||
|
|
9c8b69302c | ||
|
|
0fa1692f14 | ||
|
|
4d9bbabb83 | ||
|
|
3f4d776199 | ||
|
|
988db64119 | ||
|
|
79a3e298c5 | ||
|
|
2dd3da3a4a | ||
|
|
d27d659043 | ||
|
|
42943a4cf9 | ||
|
|
8de625c7cf | ||
|
|
18bdb6e712 | ||
|
|
bf19638a00 | ||
|
|
b2cba25f9e | ||
|
|
cf820a045f | ||
|
|
2855ee82c6 | ||
|
|
04081a164c | ||
|
|
1d1dfc96c4 | ||
|
|
a9504edee3 | ||
|
|
945d34e88a | ||
|
|
94d3b832cc | ||
|
|
8c764d5c34 | ||
|
|
a0b7850f1d | ||
|
|
3d6c73513c | ||
|
|
83e6c67363 | ||
|
|
f396263651 | ||
|
|
63b3fa2bce | ||
|
|
217af32c2d | ||
|
|
456a16491b | ||
|
|
9eca0e5350 | ||
|
|
7e26bdb849 | ||
|
|
213ac4bb5d | ||
|
|
cab307ce6b | ||
|
|
1960da2e09 | ||
|
|
7d3af894d6 | ||
|
|
32156f3a11 | ||
|
|
1c32caf075 | ||
|
|
67c286d20e | ||
|
|
0b4e835b13 | ||
|
|
08575509e4 | ||
|
|
ccb081414b | ||
|
|
47df7900fd | ||
|
|
c3a0624ef0 | ||
|
|
e79054cc40 | ||
|
|
de343680a3 | ||
|
|
1d7a989b10 | ||
|
|
d9b7d7875b | ||
|
|
3f785080db | ||
|
|
fcf0804c05 | ||
|
|
9f36473a8e | ||
|
|
2241665dc6 | ||
|
|
6bf86681f5 | ||
|
|
f7654faf16 | ||
|
|
a48ee529a2 | ||
|
|
edb1178798 | ||
|
|
9399b9a0e2 | ||
|
|
0d7bed9f89 | ||
|
|
8f4d66c5f8 | ||
|
|
43a064e06d | ||
|
|
32f95f8c17 | ||
|
|
f8ae968d28 | ||
|
|
babb5ba9a9 | ||
|
|
d09d03aa42 | ||
|
|
488b3c4d1b | ||
|
|
f6d34c2058 | ||
|
|
04d170794a | ||
|
|
bf7e4b10cb | ||
|
|
96f7b42242 | ||
|
|
b5ecbbe636 | ||
|
|
b9b04872d5 | ||
|
|
f785b35b47 | ||
|
|
1aba1baa62 | ||
|
|
ce723d8d8b | ||
|
|
4c7c294fff | ||
|
|
5e6d21afa4 | ||
|
|
3097d7dbf8 | ||
|
|
fab17c1216 | ||
|
|
ee0984e299 | ||
|
|
e8957f4800 | ||
|
|
e3bc1fb6bc | ||
|
|
10430f47a4 | ||
|
|
cdf56eb68d | ||
|
|
1574b05189 | ||
|
|
a7ca80ff6a | ||
|
|
467b3d9a6f | ||
|
|
e691b0e533 | ||
|
|
3ffaa11f88 | ||
|
|
1e0f621b50 | ||
|
|
6d55fd705d | ||
|
|
ecb177eaea | ||
|
|
36df6a6e91 | ||
|
|
ad8a6937ae | ||
|
|
f418d18ea6 | ||
|
|
a531a5cf94 | ||
|
|
1ce3f5a806 | ||
|
|
d80b36f64f | ||
|
|
9676ed27fe | ||
|
|
98f00e8eb9 | ||
|
|
24fdf8aadb | ||
|
|
ffb1f9bded | ||
|
|
8c223e8eb6 | ||
|
|
5b3428d745 | ||
|
|
a59579c983 | ||
|
|
dcebe220f4 | ||
|
|
f792137593 | ||
|
|
2cd33afa00 | ||
|
|
727b2d747e | ||
|
|
4f36164024 | ||
|
|
05d393f59f | ||
|
|
854ea483d4 | ||
|
|
3a221a9018 | ||
|
|
61673aebb0 | ||
|
|
f5f8be8bb2 | ||
|
|
2bec909c69 | ||
|
|
f0df08abbe | ||
|
|
9d3929b60c | ||
|
|
9185a61c8a | ||
|
|
0ce73f84e9 | ||
|
|
fb7cf731f9 | ||
|
|
b59eb3b8b1 | ||
|
|
ed6125fe9b | ||
|
|
35e3449ad7 | ||
|
|
7d93f817c9 | ||
|
|
6842829539 | ||
|
|
2420b283b7 | ||
|
|
4d99e14535 | ||
|
|
45f4e8842e | ||
|
|
d090ba9e00 | ||
|
|
82f4dc21cc | ||
|
|
e32b601e7d | ||
|
|
ce0ad53281 | ||
|
|
bc60b88411 | ||
|
|
3dbaf68bdc | ||
|
|
722d136f7b | ||
|
|
a7427b0f7b | ||
|
|
0ad9eba333 | ||
|
|
7e2f26cbbf | ||
|
|
d2f56fe687 | ||
|
|
09ef339b69 | ||
|
|
25e371fb7b | ||
|
|
5276b049b4 | ||
|
|
c57d81ddc9 | ||
|
|
b4ba6a66b7 | ||
|
|
9c4b877519 | ||
|
|
b9e2e32daf | ||
|
|
a6b314150c | ||
|
|
1b445f9673 | ||
|
|
5ed4404005 | ||
|
|
cd10996d4f | ||
|
|
ee0b1bc7d3 | ||
|
|
a77b455af0 | ||
|
|
71b9e10291 | ||
|
|
7fd3674672 | ||
|
|
27587f46e5 | ||
|
|
8c6e81f97d | ||
|
|
2ba98efdf6 | ||
|
|
cf7e8fbc2e | ||
|
|
5807ccb41b | ||
|
|
d4e6df9ab6 | ||
|
|
0c4350790a | ||
|
|
4e1e18a772 | ||
|
|
3ab3209a1f | ||
|
|
6b7b13b5eb | ||
|
|
d970313b66 | ||
|
|
0474b5cb2a | ||
|
|
c68f659be3 | ||
|
|
fdeb778990 | ||
|
|
59de430de7 | ||
|
|
df5f7a6761 | ||
|
|
6c9d8a6f24 | ||
|
|
9aca6769df | ||
|
|
26e58a42b0 | ||
|
|
b0a17581e2 | ||
|
|
a36b9987cd | ||
|
|
6ec955efaf | ||
|
|
7325c1ebc8 | ||
|
|
4ed1de8b84 | ||
|
|
680f7d09b0 | ||
|
|
022e8e582e | ||
|
|
1c1307e7c5 | ||
|
|
cff2126f52 | ||
|
|
a79586ce18 | ||
|
|
f01af4dbd2 | ||
|
|
762c1d11ff | ||
|
|
baa7ff47d5 | ||
|
|
ca1b71b78d | ||
|
|
6ff1a5385e | ||
|
|
cade071d52 | ||
|
|
fcd3572edf | ||
|
|
78af70be37 | ||
|
|
c86b076668 | ||
|
|
abdb0fdcc0 | ||
|
|
36e906aad6 | ||
|
|
4adc9b4a5b | ||
|
|
7b861b9b9e | ||
|
|
71633abafc | ||
|
|
25b492b976 | ||
|
|
96601ec8e0 | ||
|
|
a4d952358d | ||
|
|
7fb4becf98 | ||
|
|
1068c15c61 | ||
|
|
6f4167c8a2 | ||
|
|
5470a67335 | ||
|
|
fc6e02ce62 | ||
|
|
c30f23c123 | ||
|
|
94e1117c9b | ||
|
|
f580494bef | ||
|
|
b928d18398 | ||
|
|
aa98575ebb | ||
|
|
cffe7c8bd0 | ||
|
|
2a2236606f | ||
|
|
588c862571 | ||
|
|
798cd2a98d | ||
|
|
1668a679c4 | ||
|
|
b3e8e1cd4c | ||
|
|
1fa4cde757 | ||
|
|
70ae7ba818 | ||
|
|
c48c01c9e7 | ||
|
|
1ca836f0de | ||
|
|
d6c2347d79 | ||
|
|
09a3a28fc8 | ||
|
|
7e91d035b9 | ||
|
|
2e570be852 | ||
|
|
1730eaa2a2 | ||
|
|
4147bb24d4 | ||
|
|
6af783bea0 | ||
|
|
a9ae89d104 | ||
|
|
6dfb89e4a0 | ||
|
|
cea259f039 | ||
|
|
79047cc1dd | ||
|
|
f6c8ca06f6 | ||
|
|
4c31632817 | ||
|
|
fa5b0364f9 | ||
|
|
52f895df51 | ||
|
|
14a2b5445a | ||
|
|
6e09c1fd08 | ||
|
|
18a6f0f1a7 | ||
|
|
4ffe2844a4 | ||
|
|
578230dbbf | ||
|
|
a4fd94a54a | ||
|
|
ba7f45ac0c | ||
|
|
f2de2d5f37 | ||
|
|
e2a8ef4430 | ||
|
|
6c913411d3 | ||
|
|
1c04731b87 | ||
|
|
e8c4663c11 | ||
|
|
c72261f2a8 | ||
|
|
57955451f8 | ||
|
|
e5cb11adda | ||
|
|
53f8dccd0c | ||
|
|
00438bb94a | ||
|
|
0846c88ec3 | ||
|
|
aa688d1579 | ||
|
|
8d24160a40 | ||
|
|
47173cf67f | ||
|
|
4e43126a59 | ||
|
|
b1f2f92d9b | ||
|
|
9014f475ff | ||
|
|
b799af91d5 | ||
|
|
9a5ee12434 | ||
|
|
bb8f3090ba | ||
|
|
72ad039d19 |
12
Makefile
12
Makefile
@@ -182,7 +182,7 @@ ultrix-gcc:
|
||||
|
||||
# Rules for making release tarballs
|
||||
|
||||
VERSION=7.5-rc4
|
||||
VERSION=7.5.2
|
||||
DIRECTORY = Mesa-$(VERSION)
|
||||
LIB_NAME = MesaLib-$(VERSION)
|
||||
DEMO_NAME = MesaDemos-$(VERSION)
|
||||
@@ -388,7 +388,17 @@ GLW_FILES = \
|
||||
$(DIRECTORY)/src/glw/glw.pc.in \
|
||||
$(DIRECTORY)/src/glw/depend
|
||||
|
||||
GLEW_FILES = \
|
||||
$(DIRECTORY)/include/GL/glew.h \
|
||||
$(DIRECTORY)/include/GL/glxew.h \
|
||||
$(DIRECTORY)/include/GL/wglew.h \
|
||||
$(DIRECTORY)/src/glew/*.c \
|
||||
$(DIRECTORY)/src/glew/Makefile \
|
||||
$(DIRECTORY)/src/glew/SConscript \
|
||||
$(DIRECTORY)/src/glew/LICENSE.txt
|
||||
|
||||
DEMO_FILES = \
|
||||
$(GLEW_FILES) \
|
||||
$(DIRECTORY)/progs/beos/*.cpp \
|
||||
$(DIRECTORY)/progs/beos/Makefile \
|
||||
$(DIRECTORY)/progs/images/*.rgb \
|
||||
|
||||
@@ -971,5 +971,6 @@ esac
|
||||
#
|
||||
if [ ${INSTALLDIR} != "." ] ; then
|
||||
echo "mklib: Installing" ${FINAL_LIBS} "in" ${INSTALLDIR}
|
||||
test -d ${INSTALLDIR} || mkdir -p ${INSTALLDIR}
|
||||
mv ${FINAL_LIBS} ${INSTALLDIR}/
|
||||
fi
|
||||
|
||||
@@ -33,9 +33,9 @@ else:
|
||||
default_machine = _platform.machine()
|
||||
default_machine = _machine_map.get(default_machine, 'generic')
|
||||
|
||||
if default_platform in ('linux', 'freebsd', 'darwin'):
|
||||
if default_platform in ('linux', 'freebsd'):
|
||||
default_dri = 'yes'
|
||||
elif default_platform in ('winddk', 'windows', 'wince'):
|
||||
elif default_platform in ('winddk', 'windows', 'wince', 'darwin'):
|
||||
default_dri = 'no'
|
||||
else:
|
||||
default_dri = 'no'
|
||||
|
||||
@@ -10,7 +10,7 @@ CONFIG_NAME = default
|
||||
# Version info
|
||||
MESA_MAJOR=7
|
||||
MESA_MINOR=5
|
||||
MESA_TINY=0
|
||||
MESA_TINY=2
|
||||
MESA_VERSION = $(MESA_MAJOR).$(MESA_MINOR).$(MESA_TINY)
|
||||
|
||||
# external projects. This should be useless now that we use libdrm.
|
||||
@@ -23,6 +23,7 @@ HOST_CC = $(CC)
|
||||
CFLAGS = -O
|
||||
CXXFLAGS = -O
|
||||
LDFLAGS =
|
||||
HOST_CFLAGS = $(CFLAGS)
|
||||
GLU_CFLAGS =
|
||||
|
||||
# Compiler for building demos/tests/etc
|
||||
|
||||
20
configure.ac
20
configure.ac
@@ -121,6 +121,7 @@ AC_ARG_ENABLE([32-bit],
|
||||
if test "x$enable_32bit" = xyes; then
|
||||
if test "x$GCC" = xyes; then
|
||||
CFLAGS="$CFLAGS -m32"
|
||||
ARCH_FLAGS="$ARCH_FLAGS -m32"
|
||||
fi
|
||||
if test "x$GXX" = xyes; then
|
||||
CXXFLAGS="$CXXFLAGS -m32"
|
||||
@@ -642,7 +643,7 @@ dnl Which drivers to build - default is chosen by platform
|
||||
AC_ARG_WITH([dri-drivers],
|
||||
[AS_HELP_STRING([--with-dri-drivers@<:@=DIRS...@:>@],
|
||||
[comma delimited DRI drivers list, e.g.
|
||||
"swrast,i965,radeon,nouveau" @<:@default=auto@:>@])],
|
||||
"swrast,i965,radeon" @<:@default=auto@:>@])],
|
||||
[with_dri_drivers="$withval"],
|
||||
[with_dri_drivers=yes])
|
||||
if test "x$with_dri_drivers" = x; then
|
||||
@@ -1145,6 +1146,21 @@ AC_ARG_WITH([xorg-driver-dir],
|
||||
[XORG_DRIVER_INSTALL_DIR="${libdir}/xorg/modules/drivers"])
|
||||
AC_SUBST([XORG_DRIVER_INSTALL_DIR])
|
||||
|
||||
AC_ARG_WITH([max-width],
|
||||
[AS_HELP_STRING([--with-max-width=N],
|
||||
[Maximum framebuffer width (4096)])],
|
||||
[DEFINES="${DEFINES} -DMAX_WIDTH=${withval}";
|
||||
AS_IF([test "${withval}" -gt "4096"],
|
||||
[AC_MSG_WARN([Large framebuffer: see s_tritemp.h comments.])])]
|
||||
)
|
||||
AC_ARG_WITH([max-height],
|
||||
[AS_HELP_STRING([--with-max-height=N],
|
||||
[Maximum framebuffer height (4096)])],
|
||||
[DEFINES="${DEFINES} -DMAX_HEIGHT=${withval}";
|
||||
AS_IF([test "${withval}" -gt "4096"],
|
||||
[AC_MSG_WARN([Large framebuffer: see s_tritemp.h comments.])])]
|
||||
)
|
||||
|
||||
dnl
|
||||
dnl Gallium Intel configuration
|
||||
dnl
|
||||
@@ -1172,7 +1188,7 @@ if test "x$enable_gallium_radeon" = xyes; then
|
||||
fi
|
||||
|
||||
dnl
|
||||
dnl Gallium Radeon configuration
|
||||
dnl Gallium Nouveau configuration
|
||||
dnl
|
||||
AC_ARG_ENABLE([gallium-nouveau],
|
||||
[AS_HELP_STRING([--enable-gallium-nouveau],
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
The Mesa
|
||||
<a href="http://en.wikipedia.org/wiki/Cell_%28microprocessor%29" target="_parent">Cell</a>
|
||||
driver is part of the
|
||||
<a href="http://www.tungstengraphics.com/wiki/index.php/Gallium3D" target="_parent">Gallium3D</a>
|
||||
<a href="http://wiki.freedesktop.org/wiki/Software/gallium" target="_parent">Gallium3D</a>
|
||||
architecture.
|
||||
Tungsten Graphics did the original implementation of the Cell driver.
|
||||
</p>
|
||||
|
||||
@@ -39,7 +39,6 @@ a:visited {
|
||||
<ul>
|
||||
<li><a href="download.html" target="MainFrame">Downloading / Unpacking</a>
|
||||
<li><a href="install.html" target="MainFrame">Compiling / Installing</a>
|
||||
<li><a href="glu.html" target="MainFrame">SGI's GLU</a>
|
||||
<li><a href="precompiled.html" target="MainFrame">Precompiled Libraries</a>
|
||||
</ul>
|
||||
|
||||
@@ -68,6 +67,7 @@ a:visited {
|
||||
<li><a href="repository.html" target="MainFrame">Source Code Repository</a>
|
||||
<li><a href="memory.html" target="MainFrame">DRI Memory Management</a>
|
||||
<li><a href="shading.html" target="MainFrame">Shading Language</a>
|
||||
<li><a href="glu.html" target="MainFrame">SGI's GLU</a>
|
||||
<li><a href="utilities.html" target="MainFrame">Utilities</a>
|
||||
<li><a href="helpwanted.html" target="MainFrame">Help Wanted</a>
|
||||
<li><a href="devinfo.html" target="MainFrame">Development Notes</a>
|
||||
|
||||
@@ -9,14 +9,14 @@
|
||||
<H1>Downloading</H1>
|
||||
|
||||
<p>
|
||||
Primary download site:
|
||||
<a href="http://sourceforge.net/project/showfiles.php?group_id=3"
|
||||
target="_parent">SourceForge</a>
|
||||
Primary Mesa download site:
|
||||
<a href="ftp://ftp.freedesktop.org/pub/mesa/"
|
||||
target="_parent">freedesktop.org</a> (FTP)
|
||||
</p>
|
||||
|
||||
<p>
|
||||
When a new release is coming, release candidates (betas) can be found
|
||||
<a href="http://www.mesa3d.org/beta/">here</a>.
|
||||
When a new release is coming, release candidates (betas) may be found
|
||||
<a href="ftp://ftp.freedesktop.org/pub/mesa/beta/" target="_parent">here</a>.
|
||||
</p>
|
||||
|
||||
|
||||
|
||||
@@ -316,6 +316,19 @@ Basically, applying a translation of (0.375, 0.375, 0.0) to your coordinates
|
||||
will fix the problem.
|
||||
</p>
|
||||
|
||||
<h2>3.6 How can I change the maximum framebuffer size in Mesa's
|
||||
<tt>swrast</tt> backend?</h2>
|
||||
<p>
|
||||
These can be overridden by using the <tt>--with-max-width</tt> and
|
||||
<tt>--with-max-height</tt> options. The two need not be equal.
|
||||
</p><p>
|
||||
Do note that Mesa uses these values to size some internal buffers,
|
||||
so increasing these sizes will cause Mesa to require additional
|
||||
memory. Furthermore, increasing these limits beyond <tt>4096</tt>
|
||||
may introduce rasterization artifacts; see the leading comments in
|
||||
<tt>src/mesa/swrast/s_tritemp.h</tt>.
|
||||
</p>
|
||||
|
||||
<br>
|
||||
<br>
|
||||
|
||||
|
||||
@@ -11,6 +11,21 @@
|
||||
<H1>News</H1>
|
||||
|
||||
|
||||
<h2>September 3, 2009</h2>
|
||||
<p>
|
||||
<a href="relnotes-7.5.1.html">Mesa 7.5.1</a> is released.
|
||||
This is a bug-fix release which fixes bugs found in version 7.5.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>July 17, 2009</h2>
|
||||
<p>
|
||||
<a href="relnotes-7.5.html">Mesa 7.5</a> is released.
|
||||
This is a new features release. People especially concerned about
|
||||
stability may want to wait for the follow-on 7.5.1 bug-fix release.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>June 23, 2009</h2>
|
||||
<p>
|
||||
<a href="relnotes-7.4.4.html">Mesa 7.4.4</a> is released.
|
||||
@@ -99,7 +114,7 @@ Added a new page describing the <a href="cell.html">Mesa Cell driver</a>.
|
||||
<p>
|
||||
Gallium3D is the codename for the new Mesa device driver architecture
|
||||
which is currently under development.
|
||||
A <a href="http://www.tungstengraphics.com/wiki/index.php/Gallium3D"
|
||||
A <a href="http://wiki.freedesktop.org/wiki/Software/gallium"
|
||||
target="_parent"> summary</a> of the architecture can be found on the
|
||||
Tungsten Graphics website.
|
||||
</p>
|
||||
|
||||
@@ -9,17 +9,11 @@
|
||||
<H1>Precompiled Libraries</H1>
|
||||
|
||||
<p>
|
||||
In general, precompiled libraries are not available.
|
||||
However, people occasionally prepare packages of precompiled libraries
|
||||
for some systems.
|
||||
In general, precompiled Mesa libraries are not available.
|
||||
</p>
|
||||
|
||||
<H2>Mesa-6.0 for Solaris</H2>
|
||||
|
||||
<p>
|
||||
Steve Christensen has submitted precompiled Mesa-6.0 libraries for
|
||||
Solaris at <a href="http://sunfreeware.com/" target="_parent">
|
||||
sunfreeware.com</a>.
|
||||
However, some Linux distros (such as Ubuntu) seem to closely track
|
||||
Mesa and often have the latest Mesa release available as an update.
|
||||
</p>
|
||||
|
||||
</BODY>
|
||||
|
||||
72
docs/relnotes-7.5.1.html
Normal file
72
docs/relnotes-7.5.1.html
Normal file
@@ -0,0 +1,72 @@
|
||||
<HTML>
|
||||
|
||||
<TITLE>Mesa Release Notes</TITLE>
|
||||
|
||||
<head><link rel="stylesheet" type="text/css" href="mesa.css"></head>
|
||||
|
||||
<BODY>
|
||||
|
||||
<body bgcolor="#eeeeee">
|
||||
|
||||
<H1>Mesa 7.5.1 Release Notes, 3 September 2009</H1>
|
||||
|
||||
<p>
|
||||
Mesa 7.5.1 is a bug-fix release fixing issues found since the 7.5 release.
|
||||
</p>
|
||||
<p>
|
||||
The main new feature of Mesa 7.5.x is the
|
||||
<a href="http://wiki.freedesktop.org/wiki/Software/gallium"
|
||||
target="_parent">Gallium3D</a> infrastructure.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 7.5.1 implements the OpenGL 2.1 API, but the version reported by
|
||||
glGetString(GL_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 2.1.
|
||||
</p>
|
||||
<p>
|
||||
See the <a href="install.html">Compiling/Installing page</a> for prerequisites
|
||||
for DRI hardware acceleration.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>MD5 checksums</h2>
|
||||
<pre>
|
||||
d7269e93bc7484430637d54ced250876 MesaLib-7.5.1.tar.gz
|
||||
877d6a4b24efc2b1d02aa553f262cba8 MesaLib-7.5.1.tar.bz2
|
||||
23f4fb757a05c8396425681234ae20e5 MesaLib-7.5.1.zip
|
||||
5af4bd113652108f5cec5113dad813f2 MesaDemos-7.5.1.tar.gz
|
||||
785402e3b9f0e335538fcc6bf19f6987 MesaDemos-7.5.1.tar.bz2
|
||||
950058cc6d6106e9c7d5876a03789fe9 MesaDemos-7.5.1.zip
|
||||
cb52ce2c93389c2711cbe8d857ec5303 MesaGLUT-7.5.1.tar.gz
|
||||
e3a9892e056d625c5353617a7c5b7e9c MesaGLUT-7.5.1.tar.bz2
|
||||
da1de364df148c94b4994006191a1e69 MesaGLUT-7.5.1.zip
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<ul>
|
||||
<li>Added configure --with-max-width=W, --with-max-height=H options to specify
|
||||
max framebuffer, viewport size.
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
<ul>
|
||||
<li>Added missing GLEW library to MesaDemos tarballs.
|
||||
<li>Fixed swapbuffers jerkiness in Doom3/etc in Intel drivers.
|
||||
<li>Fixed front buffer rendering bug in Intel drivers.
|
||||
<li>Fixed minor GLX memory leaks.
|
||||
<li>Fixed some texture env / fragment program state bugs.
|
||||
<li>Fixed some Gallium glBlitFramebuffer() bugs
|
||||
<li>Empty glBegin/glEnd() pair could cause divide by zero (bug 23489)
|
||||
<li>Fixed Gallium glBitmap() Z position bug
|
||||
<li>Setting arrays of sampler uniforms did not work
|
||||
<li>Selection/Feedback mode didn't handle polygon culling correctly (bug 16866)
|
||||
<li>Fixed 32/64-bit cross compilation issue in gen_matypes.c
|
||||
<li>Fixed glXCreateGLXPixmap() for direct rendering.
|
||||
<li>Fixed Gallium glCopyPixels(GL_STENCIL_INDEX) mispositioned image bug.
|
||||
</ul>
|
||||
|
||||
|
||||
</body>
|
||||
</html>
|
||||
67
docs/relnotes-7.5.2.html
Normal file
67
docs/relnotes-7.5.2.html
Normal file
@@ -0,0 +1,67 @@
|
||||
<HTML>
|
||||
|
||||
<TITLE>Mesa Release Notes</TITLE>
|
||||
|
||||
<head><link rel="stylesheet" type="text/css" href="mesa.css"></head>
|
||||
|
||||
<BODY>
|
||||
|
||||
<body bgcolor="#eeeeee">
|
||||
|
||||
<H1>Mesa 7.5.2 Release Notes, 28 September 2009</H1>
|
||||
|
||||
<p>
|
||||
Mesa 7.5.2 is a bug-fix release fixing issues found since the 7.5.1 release.
|
||||
</p>
|
||||
<p>
|
||||
The main new feature of Mesa 7.5.x is the
|
||||
<a href="http://wiki.freedesktop.org/wiki/Software/gallium"
|
||||
target="_parent">Gallium3D</a> infrastructure.
|
||||
</p>
|
||||
<p>
|
||||
Mesa 7.5.2 implements the OpenGL 2.1 API, but the version reported by
|
||||
glGetString(GL_VERSION) depends on the particular driver being used.
|
||||
Some drivers don't support all the features required in OpenGL 2.1.
|
||||
</p>
|
||||
<p>
|
||||
See the <a href="install.html">Compiling/Installing page</a> for prerequisites
|
||||
for DRI hardware acceleration.
|
||||
</p>
|
||||
|
||||
|
||||
<h2>MD5 checksums</h2>
|
||||
<pre>
|
||||
43a90191dd9f76cd65dcc1ac91f3be70 MesaLib-7.5.2.tar.gz
|
||||
94e47a499f1226803869c2e37a6a8e3a MesaLib-7.5.2.tar.bz2
|
||||
1ecb822b567ad67a0617361d45206b67 MesaLib-7.5.2.zip
|
||||
2718fdce7e075911d6147beb8f27104b MesaDemos-7.5.2.tar.gz
|
||||
4e0f5ccd58afe21eddcd94327d926e86 MesaDemos-7.5.2.tar.bz2
|
||||
f621f8c223b278d7c8e49a012d56ca25 MesaDemos-7.5.2.zip
|
||||
83c16c1d6bcfcc3f97aab5d2fe430b4c MesaGLUT-7.5.2.tar.gz
|
||||
e5d03bedae369ea3705783573bb33813 MesaGLUT-7.5.2.tar.bz2
|
||||
e82ba28e00d653e6f437d32be8ca8481 MesaGLUT-7.5.2.zip
|
||||
</pre>
|
||||
|
||||
|
||||
<h2>New features</h2>
|
||||
<ul>
|
||||
<li>Detect B43 chipset in Intel driver
|
||||
</ul>
|
||||
|
||||
|
||||
<h2>Bug fixes</h2>
|
||||
<ul>
|
||||
<li>Assorted bug fixes for i965/i945 drivers
|
||||
<li>Fixed Gallium glDrawPixels(GL_STENCIL_INDEX) failure.
|
||||
<li>Fixed GLSL linker/preprocessor version directive issue seen in Wine
|
||||
(such as bug 23946)
|
||||
<li>glUseProgram() is now compiled into display lists (bug 23746).
|
||||
<li>glUniform functions are now compiled into display lists
|
||||
<li>Auto mipmap generation didn't work reliably with Gallium.
|
||||
<li>Fixed random number usage in GLX code.
|
||||
<li>Fixed invalid GL_OUT_OF_MEMORY error sometimes raised by glTexSubImage2D
|
||||
when using Gallium.
|
||||
</ul>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
<body bgcolor="#eeeeee">
|
||||
|
||||
<H1>Mesa 7.5 Release Notes / date TBD</H1>
|
||||
<H1>Mesa 7.5 Release Notes / 17 July 2009</H1>
|
||||
|
||||
<p>
|
||||
Mesa 7.5 is a new development release.
|
||||
@@ -17,7 +17,7 @@ with the 7.4.x branch or wait for Mesa 7.5.1.
|
||||
</p>
|
||||
<p>
|
||||
The main new feature of Mesa 7.5 is the
|
||||
<a href="http://www.tungstengraphics.com/wiki/index.php/Gallium3D"
|
||||
<a href="http://wiki.freedesktop.org/wiki/Software/gallium"
|
||||
target="_parent">Gallium3D</a> infrastructure.
|
||||
</p>
|
||||
<p>
|
||||
@@ -40,7 +40,15 @@ If you're especially concerned with stability you should probably look for
|
||||
|
||||
<h2>MD5 checksums</h2>
|
||||
<pre>
|
||||
tbd
|
||||
553fd956e544727f30fbe249619b6286 MesaLib-7.5.tar.gz
|
||||
459f332551f6ebb86f384d21dd15e1f0 MesaLib-7.5.tar.bz2
|
||||
8c02c0e17a9025250d20424ae32f5163 MesaLib-7.5.zip
|
||||
a188da2886fa5496ea0c2cda602b2eeb MesaDemos-7.5.tar.gz
|
||||
398ee8801814a00e47f6c2314e3dfddc MesaDemos-7.5.tar.bz2
|
||||
15a0c8ae013c54335a26335e1a98d609 MesaDemos-7.5.zip
|
||||
81010147def5a644ba14f9bbb7a49a2a MesaGLUT-7.5.tar.gz
|
||||
baa7a1e850b6e39bae58868fd0684004 MesaGLUT-7.5.tar.bz2
|
||||
265228418e4423fa328f2f5b7970cf08 MesaGLUT-7.5.zip
|
||||
</pre>
|
||||
|
||||
|
||||
@@ -70,6 +78,8 @@ including GL_ATI_separate_stencil, GL_EXT_stencil_two_side and OpenGL 2.0
|
||||
<li>Initial support for separate compilation units in GLSL compiler.
|
||||
<li>Increased max number of generic GLSL varying variables to 16 (formerly 8).
|
||||
<li>GLSL linker now detects when too many varying variables are used.
|
||||
<li>Optimize-out redundant glMaterial and glShadeModel calls in display lists
|
||||
<li>Fixed gl_TextureMatrix[i][j] array indexing bug in GLSL compiler.
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
@@ -13,6 +13,8 @@ The release notes summarize what's new or changed in each Mesa release.
|
||||
</p>
|
||||
|
||||
<UL>
|
||||
<LI><A HREF="relnotes-7.5.2.html">7.5.2 release notes</A>
|
||||
<LI><A HREF="relnotes-7.5.1.html">7.5.1 release notes</A>
|
||||
<LI><A HREF="relnotes-7.5.html">7.5 release notes</A>
|
||||
<LI><A HREF="relnotes-7.4.4.html">7.4.4 release notes</A>
|
||||
<LI><A HREF="relnotes-7.4.3.html">7.4.3 release notes</A>
|
||||
|
||||
@@ -69,7 +69,8 @@ typedef HWND NativeWindowType;
|
||||
typedef HBITMAP NativePixmapType;
|
||||
/** END Added for Windows **/
|
||||
|
||||
#elif defined(__gnu_linux__) || defined(__FreeBSD__) || defined(__sun)
|
||||
#elif defined(__gnu_linux__) || defined(__FreeBSD__) || defined(__sun) || defined(__APPLE__)
|
||||
|
||||
|
||||
/** BEGIN Added for X (Mesa) **/
|
||||
#ifndef EGLAPI
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
SConscript([
|
||||
'util/SConscript',
|
||||
'demos/SConscript',
|
||||
'glsl/SConscript',
|
||||
'redbook/SConscript',
|
||||
'samples/SConscript',
|
||||
'tests/SConscript',
|
||||
|
||||
@@ -498,7 +498,7 @@ SetupFunctionPointers(void)
|
||||
* Make FBO to render into given texture.
|
||||
*/
|
||||
static GLuint
|
||||
MakeFBO_RenderTexture(GLuint TexObj)
|
||||
MakeFBO_RenderTexture(GLuint texObj)
|
||||
{
|
||||
GLuint fb;
|
||||
GLint sizeFudge = 0;
|
||||
@@ -507,7 +507,7 @@ MakeFBO_RenderTexture(GLuint TexObj)
|
||||
glBindFramebuffer_func(GL_FRAMEBUFFER_EXT, fb);
|
||||
/* Render color to texture */
|
||||
glFramebufferTexture2D_func(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT,
|
||||
TexTarget, TexObj, TextureLevel);
|
||||
TexTarget, texObj, TextureLevel);
|
||||
|
||||
if (Use_ARB_fbo) {
|
||||
/* use a smaller depth buffer to see what happens */
|
||||
@@ -541,7 +541,7 @@ MakeFBO_RenderTexture(GLuint TexObj)
|
||||
|
||||
/* queries */
|
||||
{
|
||||
GLint bits, w, h;
|
||||
GLint bits, w, h, name;
|
||||
|
||||
glBindRenderbuffer_func(GL_RENDERBUFFER_EXT, DepthRB);
|
||||
glGetRenderbufferParameteriv_func(GL_RENDERBUFFER_EXT,
|
||||
@@ -559,8 +559,28 @@ MakeFBO_RenderTexture(GLuint TexObj)
|
||||
glGetRenderbufferParameteriv_func(GL_RENDERBUFFER_EXT,
|
||||
GL_RENDERBUFFER_STENCIL_SIZE_EXT, &bits);
|
||||
printf("Stencil renderbuffer size = %d bits\n", bits);
|
||||
}
|
||||
|
||||
glGetFramebufferAttachmentParameteriv_func(GL_FRAMEBUFFER_EXT,
|
||||
GL_COLOR_ATTACHMENT0,
|
||||
GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT,
|
||||
&name);
|
||||
printf("Render to texture name: %d\n", texObj);
|
||||
printf("Color attachment[0] name: %d\n", name);
|
||||
assert(texObj == name);
|
||||
|
||||
glGetFramebufferAttachmentParameteriv_func(GL_FRAMEBUFFER_EXT,
|
||||
GL_STENCIL_ATTACHMENT,
|
||||
GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT,
|
||||
&name);
|
||||
printf("Stencil attachment name: %d\n", name);
|
||||
|
||||
glGetFramebufferAttachmentParameteriv_func(GL_FRAMEBUFFER_EXT,
|
||||
GL_DEPTH_ATTACHMENT,
|
||||
GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT,
|
||||
&name);
|
||||
printf("Depth attachment name: %d\n", name);
|
||||
|
||||
}
|
||||
/* bind the regular framebuffer */
|
||||
glBindFramebuffer_func(GL_FRAMEBUFFER_EXT, 0);
|
||||
|
||||
|
||||
@@ -514,12 +514,27 @@ static void draw_surface( unsigned int with_state )
|
||||
break;
|
||||
|
||||
case (GLVERTEX|STRIPS):
|
||||
glBegin( GL_TRIANGLE_STRIP );
|
||||
for (i=0;i<numverts;i++) {
|
||||
glNormal3fv( &data[i][3] );
|
||||
glVertex3fv( &data[i][0] );
|
||||
if (with_state & MATERIALS) {
|
||||
glBegin( GL_TRIANGLE_STRIP );
|
||||
for (i=0;i<numverts;i++) {
|
||||
if (i % 600 == 0 && i != 0) {
|
||||
unsigned j = i / 600;
|
||||
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, col[j]);
|
||||
glMaterialfv(GL_FRONT_AND_BACK, GL_DIFFUSE, col[j]);
|
||||
}
|
||||
glNormal3fv( &data[i][3] );
|
||||
glVertex3fv( &data[i][0] );
|
||||
}
|
||||
glEnd();
|
||||
}
|
||||
else {
|
||||
glBegin( GL_TRIANGLE_STRIP );
|
||||
for (i=0;i<numverts;i++) {
|
||||
glNormal3fv( &data[i][3] );
|
||||
glVertex3fv( &data[i][0] );
|
||||
}
|
||||
glEnd();
|
||||
}
|
||||
glEnd();
|
||||
break;
|
||||
|
||||
default:
|
||||
|
||||
@@ -10,7 +10,7 @@ LIB_DEP = \
|
||||
$(TOP)/$(LIB_DIR)/$(GLU_LIB_NAME) \
|
||||
$(TOP)/$(LIB_DIR)/$(GLUT_LIB_NAME)
|
||||
|
||||
LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLU_LIB) -l$(GL_LIB) $(APP_LIB_DEPS)
|
||||
LIBS = -L$(TOP)/$(LIB_DIR) -l$(GLUT_LIB) -l$(GLEW_LIB) -l$(GLU_LIB) -l$(GL_LIB) $(APP_LIB_DEPS)
|
||||
|
||||
INCLUDE_DIRS = -I$(TOP)/progs/util
|
||||
|
||||
@@ -32,6 +32,7 @@ DEMO_SOURCES = \
|
||||
pointcoord.c \
|
||||
points.c \
|
||||
samplers.c \
|
||||
samplers_array.c \
|
||||
shadow_sampler.c \
|
||||
skinning.c \
|
||||
texaaline.c \
|
||||
@@ -188,7 +189,8 @@ samplers.o: $(UTIL_HEADERS)
|
||||
samplers: samplers.o $(UTIL_OBJS)
|
||||
|
||||
|
||||
samplers_array.o: $(UTIL_HEADERS)
|
||||
samplers_array.o: samplers.c $(UTIL_HEADERS)
|
||||
$(APP_CC) -I$(INCDIR) $(CFLAGS) -DSAMPLERS_ARRAY $< -c -o $@
|
||||
|
||||
samplers_array: samplers_array.o $(UTIL_OBJS)
|
||||
|
||||
|
||||
55
progs/glsl/SConscript
Normal file
55
progs/glsl/SConscript
Normal file
@@ -0,0 +1,55 @@
|
||||
Import('*')
|
||||
|
||||
if not env['GLUT']:
|
||||
Return()
|
||||
|
||||
env = env.Clone()
|
||||
|
||||
env.Prepend(CPPPATH = [
|
||||
'../util',
|
||||
])
|
||||
|
||||
env.Prepend(LIBS = [
|
||||
util,
|
||||
'$GLUT_LIB'
|
||||
])
|
||||
|
||||
if env['platform'] == 'windows':
|
||||
env.Append(CPPDEFINES = ['NOMINMAX'])
|
||||
env.Prepend(LIBS = ['winmm'])
|
||||
|
||||
progs = [
|
||||
'array',
|
||||
'bitmap',
|
||||
'brick',
|
||||
'bump',
|
||||
'convolutions',
|
||||
'deriv',
|
||||
'fragcoord',
|
||||
'identity',
|
||||
'linktest',
|
||||
'mandelbrot',
|
||||
'multinoise',
|
||||
'multitex',
|
||||
'noise',
|
||||
'noise2',
|
||||
'pointcoord',
|
||||
'points',
|
||||
'samplers',
|
||||
'shadow_sampler',
|
||||
'skinning',
|
||||
'texaaline',
|
||||
'texdemo1',
|
||||
'toyball',
|
||||
'trirast',
|
||||
'twoside',
|
||||
'vert-or-frag-only',
|
||||
'vert-tex',
|
||||
]
|
||||
|
||||
for prog in progs:
|
||||
env.Program(
|
||||
target = prog,
|
||||
source = prog + '.c',
|
||||
)
|
||||
|
||||
@@ -9,10 +9,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -144,9 +142,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -219,19 +217,17 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
vertShader = CompileShaderText(GL_VERTEX_SHADER, VertShaderText);
|
||||
fragShader = CompileShaderText(GL_FRAGMENT_SHADER, FragShaderText);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
/* Setup the HeightArray[] uniform */
|
||||
for (i = 0; i < 20; i++)
|
||||
HeightArray[i] = i / 20.0;
|
||||
u = glGetUniformLocation_func(program, "HeightArray");
|
||||
glUniform1fv_func(u, 20, HeightArray);
|
||||
u = glGetUniformLocation(program, "HeightArray");
|
||||
glUniform1fv(u, 20, HeightArray);
|
||||
|
||||
assert(glGetError() == 0);
|
||||
|
||||
@@ -248,6 +244,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(500, 500);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(SpecialKey);
|
||||
|
||||
@@ -9,10 +9,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -78,11 +76,11 @@ Redisplay(void)
|
||||
BitmapText("-X");
|
||||
}
|
||||
else {
|
||||
glUseProgram_func(Program);
|
||||
glUseProgram(Program);
|
||||
|
||||
/* vertex positions (deltas) depend on texture size and window size */
|
||||
if (uScale != -1) {
|
||||
glUniform2f_func(uScale,
|
||||
glUniform2f(uScale,
|
||||
2.0 * TEX_WIDTH / WinWidth,
|
||||
2.0 * TEX_HEIGHT / WinHeight);
|
||||
}
|
||||
@@ -105,7 +103,7 @@ Redisplay(void)
|
||||
glTexCoord2f(0, 1); glVertex3fv(nx);
|
||||
glEnd();
|
||||
|
||||
glUseProgram_func(0);
|
||||
glUseProgram(0);
|
||||
}
|
||||
|
||||
glPopMatrix();
|
||||
@@ -160,9 +158,9 @@ Key(unsigned char key, int x, int y)
|
||||
printf("Using billboard texture\n");
|
||||
break;
|
||||
case 27:
|
||||
glDeleteShader_func(FragShader);
|
||||
glDeleteShader_func(VertShader);
|
||||
glDeleteProgram_func(Program);
|
||||
glDeleteShader(FragShader);
|
||||
glDeleteShader(VertShader);
|
||||
glDeleteProgram(Program);
|
||||
glutDestroyWindow(Win);
|
||||
exit(0);
|
||||
}
|
||||
@@ -277,21 +275,19 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
VertShader = CompileShaderText(GL_VERTEX_SHADER, vertShaderText);
|
||||
FragShader = CompileShaderText(GL_FRAGMENT_SHADER, fragShaderText);
|
||||
Program = LinkShaders(VertShader, FragShader);
|
||||
|
||||
glUseProgram_func(Program);
|
||||
glUseProgram(Program);
|
||||
|
||||
uScale = glGetUniformLocation_func(Program, "scale");
|
||||
uTex = glGetUniformLocation_func(Program, "tex2d");
|
||||
uScale = glGetUniformLocation(Program, "scale");
|
||||
uTex = glGetUniformLocation(Program, "tex2d");
|
||||
if (uTex != -1) {
|
||||
glUniform1i_func(uTex, 0); /* tex unit 0 */
|
||||
glUniform1i(uTex, 0); /* tex unit 0 */
|
||||
}
|
||||
|
||||
glUseProgram_func(0);
|
||||
glUseProgram(0);
|
||||
|
||||
glClearColor(0.3f, 0.3f, 0.3f, 0.0f);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
@@ -309,6 +305,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(WinWidth, WinHeight);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
Win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(SpecialKey);
|
||||
|
||||
@@ -9,10 +9,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -82,9 +80,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -144,13 +142,11 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
vertShader = CompileShaderFile(GL_VERTEX_SHADER, VertProgFile);
|
||||
fragShader = CompileShaderFile(GL_FRAGMENT_SHADER, FragProgFile);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
InitUniforms(program, Uniforms);
|
||||
|
||||
@@ -160,9 +156,9 @@ Init(void)
|
||||
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
|
||||
assert(glIsProgram_func(program));
|
||||
assert(glIsShader_func(fragShader));
|
||||
assert(glIsShader_func(vertShader));
|
||||
assert(glIsProgram(program));
|
||||
assert(glIsShader(fragShader));
|
||||
assert(glIsShader(vertShader));
|
||||
|
||||
glColor3f(1, 0, 0);
|
||||
}
|
||||
@@ -191,6 +187,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(400, 400);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(SpecialKey);
|
||||
|
||||
@@ -9,10 +9,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glu.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -60,7 +58,7 @@ static void
|
||||
Square(GLfloat size)
|
||||
{
|
||||
glNormal3f(0, 0, 1);
|
||||
glVertexAttrib3f_func(tangentAttrib, 1, 0, 0);
|
||||
glVertexAttrib3f(tangentAttrib, 1, 0, 0);
|
||||
glBegin(GL_POLYGON);
|
||||
glTexCoord2f(0, 0); glVertex2f(-size, -size);
|
||||
glTexCoord2f(1, 0); glVertex2f( size, -size);
|
||||
@@ -164,9 +162,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -230,17 +228,15 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
vertShader = CompileShaderFile(GL_VERTEX_SHADER, VertProgFile);
|
||||
fragShader = CompileShaderFile(GL_FRAGMENT_SHADER, FragProgFile);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
assert(glIsProgram_func(program));
|
||||
assert(glIsShader_func(fragShader));
|
||||
assert(glIsShader_func(vertShader));
|
||||
assert(glIsProgram(program));
|
||||
assert(glIsShader(fragShader));
|
||||
assert(glIsShader(vertShader));
|
||||
|
||||
assert(glGetError() == 0);
|
||||
|
||||
@@ -250,7 +246,7 @@ Init(void)
|
||||
|
||||
CheckError(__LINE__);
|
||||
|
||||
tangentAttrib = glGetAttribLocation_func(program, "Tangent");
|
||||
tangentAttrib = glGetAttribLocation(program, "Tangent");
|
||||
printf("Tangent Attrib: %d\n", tangentAttrib);
|
||||
|
||||
assert(tangentAttrib >= 0);
|
||||
@@ -288,6 +284,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(400, 400);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(SpecialKey);
|
||||
|
||||
@@ -5,6 +5,8 @@
|
||||
* Author: Zack Rusin
|
||||
*/
|
||||
|
||||
#include <GL/glew.h>
|
||||
|
||||
#define GL_GLEXT_PROTOTYPES
|
||||
#include "readtex.h"
|
||||
|
||||
@@ -455,6 +457,7 @@ int main(int argc, char **argv)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
glewInit();
|
||||
init();
|
||||
|
||||
glutReshapeFunc(reshape);
|
||||
|
||||
@@ -13,10 +13,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -70,9 +68,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -177,13 +175,11 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
vertShader = CompileShaderText(GL_VERTEX_SHADER, vertShaderText);
|
||||
fragShader = CompileShaderText(GL_FRAGMENT_SHADER, fragShaderText);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
/*assert(glGetError() == 0);*/
|
||||
|
||||
@@ -197,9 +193,9 @@ Init(void)
|
||||
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
|
||||
assert(glIsProgram_func(program));
|
||||
assert(glIsShader_func(fragShader));
|
||||
assert(glIsShader_func(vertShader));
|
||||
assert(glIsProgram(program));
|
||||
assert(glIsShader(fragShader));
|
||||
assert(glIsShader(vertShader));
|
||||
|
||||
glColor3f(1, 0, 0);
|
||||
}
|
||||
@@ -228,6 +224,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(200, 200);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(SpecialKey);
|
||||
|
||||
@@ -12,10 +12,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -85,9 +83,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -129,13 +127,11 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
vertShader = CompileShaderText(GL_VERTEX_SHADER, vertShaderText);
|
||||
fragShader = CompileShaderText(GL_FRAGMENT_SHADER, fragShaderText);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
/*assert(glGetError() == 0);*/
|
||||
|
||||
@@ -143,9 +139,9 @@ Init(void)
|
||||
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
|
||||
assert(glIsProgram_func(program));
|
||||
assert(glIsShader_func(fragShader));
|
||||
assert(glIsShader_func(vertShader));
|
||||
assert(glIsProgram(program));
|
||||
assert(glIsShader(fragShader));
|
||||
assert(glIsShader(vertShader));
|
||||
|
||||
glColor3f(1, 0, 0);
|
||||
}
|
||||
@@ -174,6 +170,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(WinWidth, WinHeight);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Redisplay);
|
||||
|
||||
@@ -9,10 +9,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -69,9 +67,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -141,8 +139,6 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
if (FragProgFile)
|
||||
fragShader = CompileShaderFile(GL_FRAGMENT_SHADER, FragProgFile);
|
||||
else
|
||||
@@ -155,7 +151,7 @@ Init(void)
|
||||
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
/*assert(glGetError() == 0);*/
|
||||
|
||||
@@ -164,9 +160,9 @@ Init(void)
|
||||
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
|
||||
assert(glIsProgram_func(program));
|
||||
assert(glIsShader_func(fragShader));
|
||||
assert(glIsShader_func(vertShader));
|
||||
assert(glIsProgram(program));
|
||||
assert(glIsShader(fragShader));
|
||||
assert(glIsShader(vertShader));
|
||||
|
||||
glColor3f(1, 0, 0);
|
||||
}
|
||||
@@ -195,6 +191,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(200, 200);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(SpecialKey);
|
||||
|
||||
@@ -9,10 +9,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -132,11 +130,11 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(VertShader1);
|
||||
glDeleteShader_func(VertShader2);
|
||||
glDeleteShader_func(FragShader1);
|
||||
glDeleteShader_func(FragShader2);
|
||||
glDeleteProgram_func(Program);
|
||||
glDeleteShader(VertShader1);
|
||||
glDeleteShader(VertShader2);
|
||||
glDeleteShader(FragShader1);
|
||||
glDeleteShader(FragShader2);
|
||||
glDeleteProgram(Program);
|
||||
glutDestroyWindow(Win);
|
||||
}
|
||||
|
||||
@@ -175,11 +173,11 @@ static void
|
||||
CheckLink(GLuint prog)
|
||||
{
|
||||
GLint stat;
|
||||
glGetProgramiv_func(prog, GL_LINK_STATUS, &stat);
|
||||
glGetProgramiv(prog, GL_LINK_STATUS, &stat);
|
||||
if (!stat) {
|
||||
GLchar log[1000];
|
||||
GLsizei len;
|
||||
glGetProgramInfoLog_func(prog, 1000, &len, log);
|
||||
glGetProgramInfoLog(prog, 1000, &len, log);
|
||||
fprintf(stderr, "Linker error:\n%s\n", log);
|
||||
}
|
||||
}
|
||||
@@ -191,8 +189,6 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
|
||||
VertShader1 = CompileShaderText(GL_VERTEX_SHADER, VertShaderSource1);
|
||||
@@ -200,26 +196,26 @@ Init(void)
|
||||
FragShader1 = CompileShaderText(GL_FRAGMENT_SHADER, FragShaderSource1);
|
||||
FragShader2 = CompileShaderText(GL_FRAGMENT_SHADER, FragShaderSource2);
|
||||
|
||||
Program = glCreateProgram_func();
|
||||
glAttachShader_func(Program, VertShader1);
|
||||
glAttachShader_func(Program, VertShader2);
|
||||
glAttachShader_func(Program, FragShader1);
|
||||
glAttachShader_func(Program, FragShader2);
|
||||
Program = glCreateProgram();
|
||||
glAttachShader(Program, VertShader1);
|
||||
glAttachShader(Program, VertShader2);
|
||||
glAttachShader(Program, FragShader1);
|
||||
glAttachShader(Program, FragShader2);
|
||||
|
||||
glLinkProgram_func(Program);
|
||||
glLinkProgram(Program);
|
||||
|
||||
CheckLink(Program);
|
||||
|
||||
glUseProgram_func(Program);
|
||||
glUseProgram(Program);
|
||||
|
||||
uDiffuse = glGetUniformLocation_func(Program, "diffuse");
|
||||
uSpecular = glGetUniformLocation_func(Program, "specular");
|
||||
uTexture = glGetUniformLocation_func(Program, "texture");
|
||||
uDiffuse = glGetUniformLocation(Program, "diffuse");
|
||||
uSpecular = glGetUniformLocation(Program, "specular");
|
||||
uTexture = glGetUniformLocation(Program, "texture");
|
||||
printf("DiffusePos %d SpecularPos %d TexturePos %d\n",
|
||||
uDiffuse, uSpecular, uTexture);
|
||||
|
||||
glUniform4fv_func(uDiffuse, 1, diffuse);
|
||||
glUniform4fv_func(uSpecular, 1, specular);
|
||||
glUniform4fv(uDiffuse, 1, diffuse);
|
||||
glUniform4fv(uSpecular, 1, specular);
|
||||
|
||||
glClearColor(0.3f, 0.3f, 0.3f, 0.0f);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
@@ -228,11 +224,11 @@ Init(void)
|
||||
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
|
||||
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, 10.0f);
|
||||
|
||||
assert(glIsProgram_func(Program));
|
||||
assert(glIsShader_func(VertShader1));
|
||||
assert(glIsShader_func(VertShader2));
|
||||
assert(glIsShader_func(FragShader1));
|
||||
assert(glIsShader_func(FragShader2));
|
||||
assert(glIsProgram(Program));
|
||||
assert(glIsShader(VertShader1));
|
||||
assert(glIsShader(VertShader2));
|
||||
assert(glIsShader(FragShader1));
|
||||
assert(glIsShader(FragShader2));
|
||||
|
||||
glColor3f(1, 0, 0);
|
||||
}
|
||||
@@ -245,6 +241,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(300, 300);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
Win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Redisplay);
|
||||
|
||||
@@ -9,10 +9,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -56,9 +54,9 @@ Redisplay(void)
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
/* set interactive uniform parameters */
|
||||
glUniform1fv_func(uZoom, 1, &zoom);
|
||||
glUniform1fv_func(uXcenter, 1, &xCenter);
|
||||
glUniform1fv_func(uYcenter, 1, &yCenter);
|
||||
glUniform1fv(uZoom, 1, &zoom);
|
||||
glUniform1fv(uXcenter, 1, &xCenter);
|
||||
glUniform1fv(uYcenter, 1, &yCenter);
|
||||
|
||||
glPushMatrix();
|
||||
glRotatef(xRot, 1.0f, 0.0f, 0.0f);
|
||||
@@ -94,9 +92,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -155,19 +153,17 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
vertShader = CompileShaderFile(GL_VERTEX_SHADER, VertProgFile);
|
||||
fragShader = CompileShaderFile(GL_FRAGMENT_SHADER, FragProgFile);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
InitUniforms(program, Uniforms);
|
||||
|
||||
uZoom = glGetUniformLocation_func(program, "Zoom");
|
||||
uXcenter = glGetUniformLocation_func(program, "Xcenter");
|
||||
uYcenter = glGetUniformLocation_func(program, "Ycenter");
|
||||
uZoom = glGetUniformLocation(program, "Zoom");
|
||||
uXcenter = glGetUniformLocation(program, "Xcenter");
|
||||
uYcenter = glGetUniformLocation(program, "Ycenter");
|
||||
|
||||
assert(glGetError() == 0);
|
||||
|
||||
@@ -175,9 +171,9 @@ Init(void)
|
||||
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
|
||||
assert(glIsProgram_func(program));
|
||||
assert(glIsShader_func(fragShader));
|
||||
assert(glIsShader_func(vertShader));
|
||||
assert(glIsProgram(program));
|
||||
assert(glIsShader(fragShader));
|
||||
assert(glIsShader(vertShader));
|
||||
|
||||
glColor3f(1, 0, 0);
|
||||
}
|
||||
@@ -206,6 +202,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(400, 400);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(SpecialKey);
|
||||
|
||||
@@ -8,10 +8,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
|
||||
static const char *VertShaderText =
|
||||
"void main() {\n"
|
||||
@@ -107,10 +105,10 @@ CleanUp(void)
|
||||
{
|
||||
GLint i;
|
||||
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteShader(vertShader);
|
||||
for( i = 0; i < 4; i++ ) {
|
||||
glDeleteShader_func(fragShader[ i ]);
|
||||
glDeleteProgram_func(program[ i ]);
|
||||
glDeleteShader(fragShader[ i ]);
|
||||
glDeleteProgram(program[ i ]);
|
||||
}
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
@@ -143,7 +141,7 @@ Key(unsigned char key, int x, int y)
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
glUseProgram_func(program[ key - '1' ]);
|
||||
glUseProgram(program[ key - '1' ]);
|
||||
break;
|
||||
case 27:
|
||||
CleanUp();
|
||||
@@ -186,15 +184,15 @@ LoadAndCompileShader(GLuint shader, const char *text)
|
||||
{
|
||||
GLint stat;
|
||||
|
||||
glShaderSource_func(shader, 1, (const GLchar **) &text, NULL);
|
||||
glShaderSource(shader, 1, (const GLchar **) &text, NULL);
|
||||
|
||||
glCompileShader_func(shader);
|
||||
glCompileShader(shader);
|
||||
|
||||
glGetShaderiv_func(shader, GL_COMPILE_STATUS, &stat);
|
||||
glGetShaderiv(shader, GL_COMPILE_STATUS, &stat);
|
||||
if (!stat) {
|
||||
GLchar log[1000];
|
||||
GLsizei len;
|
||||
glGetShaderInfoLog_func(shader, 1000, &len, log);
|
||||
glGetShaderInfoLog(shader, 1000, &len, log);
|
||||
fprintf(stderr, "noise: problem compiling shader: %s\n", log);
|
||||
exit(1);
|
||||
}
|
||||
@@ -208,11 +206,11 @@ static void
|
||||
CheckLink(GLuint prog)
|
||||
{
|
||||
GLint stat;
|
||||
glGetProgramiv_func(prog, GL_LINK_STATUS, &stat);
|
||||
glGetProgramiv(prog, GL_LINK_STATUS, &stat);
|
||||
if (!stat) {
|
||||
GLchar log[1000];
|
||||
GLsizei len;
|
||||
glGetProgramInfoLog_func(prog, 1000, &len, log);
|
||||
glGetProgramInfoLog(prog, 1000, &len, log);
|
||||
fprintf(stderr, "Linker error:\n%s\n", log);
|
||||
}
|
||||
else {
|
||||
@@ -233,22 +231,20 @@ Init(void)
|
||||
/*exit(1);*/
|
||||
}
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
vertShader = glCreateShader_func(GL_VERTEX_SHADER);
|
||||
vertShader = glCreateShader(GL_VERTEX_SHADER);
|
||||
LoadAndCompileShader(vertShader, VertShaderText);
|
||||
|
||||
for( i = 0; i < 4; i++ ) {
|
||||
fragShader[ i ] = glCreateShader_func(GL_FRAGMENT_SHADER);
|
||||
fragShader[ i ] = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
LoadAndCompileShader(fragShader[ i ], FragShaderText[ i ]);
|
||||
program[ i ] = glCreateProgram_func();
|
||||
glAttachShader_func(program[ i ], fragShader[ i ]);
|
||||
glAttachShader_func(program[ i ], vertShader);
|
||||
glLinkProgram_func(program[ i ]);
|
||||
program[ i ] = glCreateProgram();
|
||||
glAttachShader(program[ i ], fragShader[ i ]);
|
||||
glAttachShader(program[ i ], vertShader);
|
||||
glLinkProgram(program[ i ]);
|
||||
CheckLink(program[ i ]);
|
||||
}
|
||||
|
||||
glUseProgram_func(program[ 0 ]);
|
||||
glUseProgram(program[ 0 ]);
|
||||
|
||||
assert(glGetError() == 0);
|
||||
|
||||
@@ -270,6 +266,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(400, 400);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(SpecialKey);
|
||||
|
||||
@@ -28,9 +28,9 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <GL/glew.h>
|
||||
#include "GL/glut.h"
|
||||
#include "readtex.h"
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
static const char *Demo = "multitex";
|
||||
@@ -80,22 +80,22 @@ static void
|
||||
DrawPolygonArray(void)
|
||||
{
|
||||
if (VertCoord_attr >= 0) {
|
||||
glVertexAttribPointer_func(VertCoord_attr, 2, GL_FLOAT, GL_FALSE,
|
||||
glVertexAttribPointer(VertCoord_attr, 2, GL_FLOAT, GL_FALSE,
|
||||
0, VertCoords);
|
||||
glEnableVertexAttribArray_func(VertCoord_attr);
|
||||
glEnableVertexAttribArray(VertCoord_attr);
|
||||
}
|
||||
else {
|
||||
glVertexPointer(2, GL_FLOAT, 0, VertCoords);
|
||||
glEnable(GL_VERTEX_ARRAY);
|
||||
}
|
||||
|
||||
glVertexAttribPointer_func(TexCoord0_attr, 2, GL_FLOAT, GL_FALSE,
|
||||
glVertexAttribPointer(TexCoord0_attr, 2, GL_FLOAT, GL_FALSE,
|
||||
0, Tex0Coords);
|
||||
glEnableVertexAttribArray_func(TexCoord0_attr);
|
||||
glEnableVertexAttribArray(TexCoord0_attr);
|
||||
|
||||
glVertexAttribPointer_func(TexCoord1_attr, 2, GL_FLOAT, GL_FALSE,
|
||||
glVertexAttribPointer(TexCoord1_attr, 2, GL_FLOAT, GL_FALSE,
|
||||
0, Tex1Coords);
|
||||
glEnableVertexAttribArray_func(TexCoord1_attr);
|
||||
glEnableVertexAttribArray(TexCoord1_attr);
|
||||
|
||||
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||
}
|
||||
@@ -109,11 +109,11 @@ DrawPolygonVert(void)
|
||||
glBegin(GL_TRIANGLE_FAN);
|
||||
|
||||
for (i = 0; i < 4; i++) {
|
||||
glVertexAttrib2fv_func(TexCoord0_attr, Tex0Coords[i]);
|
||||
glVertexAttrib2fv_func(TexCoord1_attr, Tex1Coords[i]);
|
||||
glVertexAttrib2fv(TexCoord0_attr, Tex0Coords[i]);
|
||||
glVertexAttrib2fv(TexCoord1_attr, Tex1Coords[i]);
|
||||
|
||||
if (VertCoord_attr >= 0)
|
||||
glVertexAttrib2fv_func(VertCoord_attr, VertCoords[i]);
|
||||
glVertexAttrib2fv(VertCoord_attr, VertCoords[i]);
|
||||
else
|
||||
glVertex2fv(VertCoords[i]);
|
||||
}
|
||||
@@ -267,27 +267,27 @@ CreateProgram(const char *vertProgFile, const char *fragProgFile,
|
||||
assert(vertShader);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
InitUniforms(program, uniforms);
|
||||
|
||||
VertCoord_attr = glGetAttribLocation_func(program, "VertCoord");
|
||||
VertCoord_attr = glGetAttribLocation(program, "VertCoord");
|
||||
if (VertCoord_attr > 0) {
|
||||
/* We want the VertCoord attrib to have position zero so that
|
||||
* the call to glVertexAttrib(0, xyz) triggers vertex processing.
|
||||
* Otherwise, if TexCoord0 or TexCoord1 gets position 0 we'd have
|
||||
* to set that attribute last (which is a PITA to manage).
|
||||
*/
|
||||
glBindAttribLocation_func(program, 0, "VertCoord");
|
||||
glBindAttribLocation(program, 0, "VertCoord");
|
||||
/* re-link */
|
||||
glLinkProgram_func(program);
|
||||
glLinkProgram(program);
|
||||
/* VertCoord_attr should be zero now */
|
||||
VertCoord_attr = glGetAttribLocation_func(program, "VertCoord");
|
||||
VertCoord_attr = glGetAttribLocation(program, "VertCoord");
|
||||
assert(VertCoord_attr == 0);
|
||||
}
|
||||
|
||||
TexCoord0_attr = glGetAttribLocation_func(program, "TexCoord0");
|
||||
TexCoord1_attr = glGetAttribLocation_func(program, "TexCoord1");
|
||||
TexCoord0_attr = glGetAttribLocation(program, "TexCoord0");
|
||||
TexCoord1_attr = glGetAttribLocation(program, "TexCoord1");
|
||||
|
||||
printf("TexCoord0_attr = %d\n", TexCoord0_attr);
|
||||
printf("TexCoord1_attr = %d\n", TexCoord1_attr);
|
||||
@@ -315,8 +315,6 @@ InitGL(void)
|
||||
}
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
InitTextures();
|
||||
InitPrograms();
|
||||
|
||||
@@ -334,6 +332,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(500, 400);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
|
||||
glutCreateWindow(Demo);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(key);
|
||||
glutSpecialFunc(specialkey);
|
||||
|
||||
@@ -8,10 +8,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -67,7 +65,7 @@ Redisplay(void)
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
glUniform1fv_func(Uniforms[2].location, 1, &Slice);
|
||||
glUniform1fv(Uniforms[2].location, 1, &Slice);
|
||||
|
||||
glPushMatrix();
|
||||
glRotatef(xRot, 1.0f, 0.0f, 0.0f);
|
||||
@@ -103,9 +101,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -175,13 +173,11 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
vertShader = CompileShaderText(GL_VERTEX_SHADER, VertShaderText);
|
||||
fragShader = CompileShaderText(GL_FRAGMENT_SHADER, FragShaderText);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
InitUniforms(program, Uniforms);
|
||||
|
||||
@@ -191,9 +187,9 @@ Init(void)
|
||||
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
|
||||
assert(glIsProgram_func(program));
|
||||
assert(glIsShader_func(fragShader));
|
||||
assert(glIsShader_func(vertShader));
|
||||
assert(glIsProgram(program));
|
||||
assert(glIsShader(fragShader));
|
||||
assert(glIsShader(vertShader));
|
||||
|
||||
glColor3f(1, 0, 0);
|
||||
}
|
||||
@@ -207,6 +203,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(400, 400);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(SpecialKey);
|
||||
|
||||
@@ -10,10 +10,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -64,9 +62,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -141,18 +139,16 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
vertShader = CompileShaderText(GL_VERTEX_SHADER, vertShaderText);
|
||||
fragShader = CompileShaderText(GL_FRAGMENT_SHADER, fragShaderText);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
tex0 = glGetUniformLocation_func(program, "tex0");
|
||||
tex0 = glGetUniformLocation(program, "tex0");
|
||||
printf("Uniforms: tex0: %d\n", tex0);
|
||||
|
||||
glUniform1i_func(tex0, 0); /* tex unit 0 */
|
||||
glUniform1i(tex0, 0); /* tex unit 0 */
|
||||
|
||||
/*assert(glGetError() == 0);*/
|
||||
|
||||
@@ -160,9 +156,9 @@ Init(void)
|
||||
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
|
||||
assert(glIsProgram_func(program));
|
||||
assert(glIsShader_func(fragShader));
|
||||
assert(glIsShader_func(vertShader));
|
||||
assert(glIsProgram(program));
|
||||
assert(glIsShader(fragShader));
|
||||
assert(glIsShader(vertShader));
|
||||
|
||||
MakeTexture();
|
||||
|
||||
@@ -195,6 +191,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(WinWidth, WinHeight);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Redisplay);
|
||||
|
||||
@@ -10,10 +10,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -99,7 +97,7 @@ Redisplay(void)
|
||||
*/
|
||||
glPushMatrix();
|
||||
glTranslatef(0, 1.2, 0);
|
||||
glUseProgram_func(0);
|
||||
glUseProgram(0);
|
||||
DrawPoints(GL_FALSE);
|
||||
glPopMatrix();
|
||||
|
||||
@@ -108,9 +106,9 @@ Redisplay(void)
|
||||
*/
|
||||
glPushMatrix();
|
||||
glTranslatef(0, -1.2, 0);
|
||||
glUseProgram_func(Program);
|
||||
glUseProgram(Program);
|
||||
if (uViewportInv != -1) {
|
||||
glUniform2f_func(uViewportInv, 1.0 / WinWidth, 1.0 / WinHeight);
|
||||
glUniform2f(uViewportInv, 1.0 / WinWidth, 1.0 / WinHeight);
|
||||
}
|
||||
DrawPoints(GL_TRUE);
|
||||
glPopMatrix();
|
||||
@@ -150,9 +148,9 @@ Key(unsigned char key, int x, int y)
|
||||
Smooth = !Smooth;
|
||||
break;
|
||||
case 27:
|
||||
glDeleteShader_func(FragShader);
|
||||
glDeleteShader_func(VertShader);
|
||||
glDeleteProgram_func(Program);
|
||||
glDeleteShader(FragShader);
|
||||
glDeleteShader(VertShader);
|
||||
glDeleteProgram(Program);
|
||||
glutDestroyWindow(Win);
|
||||
exit(0);
|
||||
}
|
||||
@@ -225,17 +223,15 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
VertShader = CompileShaderText(GL_VERTEX_SHADER, vertShaderText);
|
||||
FragShader = CompileShaderText(GL_FRAGMENT_SHADER, fragShaderText);
|
||||
Program = LinkShaders(VertShader, FragShader);
|
||||
|
||||
glUseProgram_func(Program);
|
||||
glUseProgram(Program);
|
||||
|
||||
uViewportInv = glGetUniformLocation_func(Program, "viewportInv");
|
||||
uViewportInv = glGetUniformLocation(Program, "viewportInv");
|
||||
|
||||
glUseProgram_func(0);
|
||||
glUseProgram(0);
|
||||
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
@@ -248,6 +244,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(WinWidth, WinHeight);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
Win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(SpecialKey);
|
||||
|
||||
@@ -11,6 +11,7 @@ void main()
|
||||
float two_n_dot_u = 2.0 * dot(n, u);
|
||||
vec4 f;
|
||||
f.xyz = u - n * two_n_dot_u;
|
||||
f.w = 1.0;
|
||||
|
||||
// outputs
|
||||
normal = n;
|
||||
|
||||
@@ -39,9 +39,9 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <GL/glew.h>
|
||||
#include "GL/glut.h"
|
||||
#include "readtex.h"
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -211,10 +211,18 @@ InitTextures(void)
|
||||
for (y = 0; y < stripeSize; y++) {
|
||||
for (x = 0; x < size; x++) {
|
||||
GLint k = 4 * ((ypos + y) * size + x);
|
||||
texImage[k + 0] = intensity;
|
||||
texImage[k + 1] = intensity;
|
||||
texImage[k + 2] = 0;
|
||||
texImage[k + 3] = 255;
|
||||
if (x < size / 2) {
|
||||
texImage[k + 0] = intensity;
|
||||
texImage[k + 1] = intensity;
|
||||
texImage[k + 2] = 0;
|
||||
texImage[k + 3] = 255;
|
||||
}
|
||||
else {
|
||||
texImage[k + 0] = 255 - intensity;
|
||||
texImage[k + 1] = 0;
|
||||
texImage[k + 2] = 0;
|
||||
texImage[k + 3] = 255;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -290,7 +298,7 @@ CreateProgram(void)
|
||||
assert(vertShader);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
free(fragShaderText);
|
||||
|
||||
@@ -315,10 +323,10 @@ InitProgram(void)
|
||||
#else
|
||||
sprintf(uname, "tex[%d]", s);
|
||||
#endif
|
||||
loc = glGetUniformLocation_func(Program, uname);
|
||||
loc = glGetUniformLocation(Program, uname);
|
||||
assert(loc >= 0);
|
||||
|
||||
glUniform1i_func(loc, s);
|
||||
glUniform1i(loc, s);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -333,8 +341,6 @@ InitGL(void)
|
||||
|
||||
printf("GL_RENDERER = %s\n", (const char *) glGetString(GL_RENDERER));
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &NumSamplers);
|
||||
if (NumSamplers > MAX_SAMPLERS)
|
||||
NumSamplers = MAX_SAMPLERS;
|
||||
@@ -357,6 +363,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(500, 400);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
|
||||
glutCreateWindow(Demo);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(key);
|
||||
glutSpecialFunc(specialkey);
|
||||
|
||||
@@ -10,10 +10,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
|
||||
|
||||
/** Use GL_RECTANGLE texture (with projective texcoords)? */
|
||||
@@ -66,7 +64,7 @@ Redisplay(void)
|
||||
glPushMatrix();
|
||||
|
||||
CheckError(__LINE__);
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
CheckError(__LINE__);
|
||||
|
||||
glBegin(GL_POLYGON);
|
||||
@@ -86,7 +84,7 @@ Redisplay(void)
|
||||
|
||||
glPopMatrix();
|
||||
|
||||
glUseProgram_func(0);
|
||||
glUseProgram(0);
|
||||
glWindowPos2iARB(80, 20);
|
||||
PrintString("white black white black");
|
||||
|
||||
@@ -110,9 +108,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -178,13 +176,13 @@ static void
|
||||
LoadAndCompileShader(GLuint shader, const char *text)
|
||||
{
|
||||
GLint stat;
|
||||
glShaderSource_func(shader, 1, (const GLchar **) &text, NULL);
|
||||
glCompileShader_func(shader);
|
||||
glGetShaderiv_func(shader, GL_COMPILE_STATUS, &stat);
|
||||
glShaderSource(shader, 1, (const GLchar **) &text, NULL);
|
||||
glCompileShader(shader);
|
||||
glGetShaderiv(shader, GL_COMPILE_STATUS, &stat);
|
||||
if (!stat) {
|
||||
GLchar log[1000];
|
||||
GLsizei len;
|
||||
glGetShaderInfoLog_func(shader, 1000, &len, log);
|
||||
glGetShaderInfoLog(shader, 1000, &len, log);
|
||||
fprintf(stderr, "fslight: problem compiling shader:\n%s\n", log);
|
||||
exit(1);
|
||||
}
|
||||
@@ -222,11 +220,11 @@ static void
|
||||
CheckLink(GLuint prog)
|
||||
{
|
||||
GLint stat;
|
||||
glGetProgramiv_func(prog, GL_LINK_STATUS, &stat);
|
||||
glGetProgramiv(prog, GL_LINK_STATUS, &stat);
|
||||
if (!stat) {
|
||||
GLchar log[1000];
|
||||
GLsizei len;
|
||||
glGetProgramInfoLog_func(prog, 1000, &len, log);
|
||||
glGetProgramInfoLog(prog, 1000, &len, log);
|
||||
fprintf(stderr, "Linker error:\n%s\n", log);
|
||||
}
|
||||
}
|
||||
@@ -266,35 +264,33 @@ Init(void)
|
||||
}
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
fragShader = glCreateShader_func(GL_FRAGMENT_SHADER);
|
||||
fragShader = glCreateShader(GL_FRAGMENT_SHADER);
|
||||
if (FragProgFile)
|
||||
ReadShader(fragShader, FragProgFile);
|
||||
else
|
||||
LoadAndCompileShader(fragShader, fragShaderText);
|
||||
|
||||
vertShader = glCreateShader_func(GL_VERTEX_SHADER);
|
||||
vertShader = glCreateShader(GL_VERTEX_SHADER);
|
||||
if (VertProgFile)
|
||||
ReadShader(vertShader, VertProgFile);
|
||||
else
|
||||
LoadAndCompileShader(vertShader, vertShaderText);
|
||||
|
||||
program = glCreateProgram_func();
|
||||
glAttachShader_func(program, fragShader);
|
||||
glAttachShader_func(program, vertShader);
|
||||
glLinkProgram_func(program);
|
||||
program = glCreateProgram();
|
||||
glAttachShader(program, fragShader);
|
||||
glAttachShader(program, vertShader);
|
||||
glLinkProgram(program);
|
||||
CheckLink(program);
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
uTexture2D = glGetUniformLocation_func(program, "shadowTex2D");
|
||||
uTextureRect = glGetUniformLocation_func(program, "shadowTexRect");
|
||||
uTexture2D = glGetUniformLocation(program, "shadowTex2D");
|
||||
uTextureRect = glGetUniformLocation(program, "shadowTexRect");
|
||||
printf("uTexture2D %d uTextureRect %d\n", uTexture2D, uTextureRect);
|
||||
if (uTexture2D >= 0) {
|
||||
glUniform1i_func(uTexture2D, 0); /* use texture unit 0 */
|
||||
glUniform1i(uTexture2D, 0); /* use texture unit 0 */
|
||||
}
|
||||
if (uTextureRect >= 0) {
|
||||
glUniform1i_func(uTextureRect, 1); /* use texture unit 0 */
|
||||
glUniform1i(uTextureRect, 1); /* use texture unit 0 */
|
||||
}
|
||||
CheckError(__LINE__);
|
||||
|
||||
@@ -329,6 +325,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(400, 300);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Redisplay);
|
||||
|
||||
@@ -12,10 +12,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -64,11 +62,11 @@ Cylinder(GLfloat length, GLfloat radius, GLint slices, GLint stacks)
|
||||
float a = (float) i / (slices - 1) * M_PI * 2.0;
|
||||
float x = radius * cos(a);
|
||||
float y = radius * sin(a);
|
||||
glVertexAttrib1f_func(WeightAttr, w0);
|
||||
glVertexAttrib1f(WeightAttr, w0);
|
||||
glNormal3f(x, y, 0.0);
|
||||
glVertex3f(x, y, z0);
|
||||
|
||||
glVertexAttrib1f_func(WeightAttr, w0 + dw);
|
||||
glVertexAttrib1f(WeightAttr, w0 + dw);
|
||||
glNormal3f(x, y, 0.0);
|
||||
glVertex3f(x, y, z0 + dz);
|
||||
}
|
||||
@@ -106,8 +104,8 @@ Redisplay(void)
|
||||
{
|
||||
UpdateMatrices();
|
||||
|
||||
glUniformMatrix4fv_func(uMat0, 1, GL_FALSE, Matrices[0]);
|
||||
glUniformMatrix4fv_func(uMat1, 1, GL_FALSE, Matrices[1]);
|
||||
glUniformMatrix4fv(uMat0, 1, GL_FALSE, Matrices[0]);
|
||||
glUniformMatrix4fv(uMat1, 1, GL_FALSE, Matrices[1]);
|
||||
|
||||
if (WireFrame)
|
||||
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
|
||||
@@ -148,9 +146,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -221,18 +219,16 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
vertShader = CompileShaderFile(GL_VERTEX_SHADER, VertProgFile);
|
||||
fragShader = CompileShaderFile(GL_FRAGMENT_SHADER, FragProgFile);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
uMat0 = glGetUniformLocation_func(program, "mat0");
|
||||
uMat1 = glGetUniformLocation_func(program, "mat1");
|
||||
uMat0 = glGetUniformLocation(program, "mat0");
|
||||
uMat1 = glGetUniformLocation(program, "mat1");
|
||||
|
||||
WeightAttr = glGetAttribLocation_func(program, "weight");
|
||||
WeightAttr = glGetAttribLocation(program, "weight");
|
||||
|
||||
assert(glGetError() == 0);
|
||||
|
||||
@@ -266,6 +262,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(500, 500);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(SpecialKey);
|
||||
|
||||
@@ -11,10 +11,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
|
||||
|
||||
static GLint WinWidth = 300, WinHeight = 300;
|
||||
@@ -328,8 +326,6 @@ Init(void)
|
||||
exit(1);
|
||||
}
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
glClearColor(0.3f, 0.3f, 0.3f, 0.0f);
|
||||
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
@@ -359,6 +355,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(WinWidth, WinHeight);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Redisplay);
|
||||
|
||||
@@ -28,9 +28,9 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <GL/glew.h>
|
||||
#include "GL/glut.h"
|
||||
#include "readtex.h"
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
static const char *Demo = "texdemo1";
|
||||
@@ -97,7 +97,7 @@ draw(void)
|
||||
/* sphere w/ reflection map */
|
||||
glPushMatrix();
|
||||
glTranslatef(0, 1, 0);
|
||||
glUseProgram_func(Program1);
|
||||
glUseProgram(Program1);
|
||||
|
||||
/* setup texture matrix */
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
@@ -116,7 +116,7 @@ draw(void)
|
||||
glPopMatrix();
|
||||
|
||||
/* ground */
|
||||
glUseProgram_func(Program2);
|
||||
glUseProgram(Program2);
|
||||
glTranslatef(0, -1.0, 0);
|
||||
DrawGround(5);
|
||||
|
||||
@@ -380,7 +380,7 @@ CreateProgram(const char *vertProgFile, const char *fragProgFile,
|
||||
fragShader = CompileShaderFile(GL_FRAGMENT_SHADER, fragProgFile);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
InitUniforms(program, uniforms);
|
||||
|
||||
@@ -407,8 +407,6 @@ Init(GLboolean useImageFiles)
|
||||
}
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
InitTextures(useImageFiles);
|
||||
InitPrograms();
|
||||
|
||||
@@ -426,6 +424,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(500, 400);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
|
||||
win = glutCreateWindow(Demo);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(key);
|
||||
glutSpecialFunc(specialkey);
|
||||
|
||||
@@ -9,10 +9,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -99,9 +97,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -169,13 +167,11 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
vertShader = CompileShaderFile(GL_VERTEX_SHADER, VertProgFile);
|
||||
fragShader = CompileShaderFile(GL_FRAGMENT_SHADER, FragProgFile);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
InitUniforms(program, Uniforms);
|
||||
|
||||
@@ -212,6 +208,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(400, 400);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(SpecialKey);
|
||||
|
||||
@@ -15,10 +15,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -85,9 +83,9 @@ Redisplay(void)
|
||||
RotateVerts(Zrot, 3, TriVerts, v);
|
||||
ComputeBounds(3, v, &xmin, &ymin, &xmax, &ymax);
|
||||
|
||||
glUniform2fv_func(uv0, 1, v[0]);
|
||||
glUniform2fv_func(uv1, 1, v[1]);
|
||||
glUniform2fv_func(uv2, 1, v[2]);
|
||||
glUniform2fv(uv0, 1, v[0]);
|
||||
glUniform2fv(uv1, 1, v[1]);
|
||||
glUniform2fv(uv2, 1, v[2]);
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
@@ -132,9 +130,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -196,17 +194,15 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
vertShader = CompileShaderText(GL_VERTEX_SHADER, vertShaderText);
|
||||
fragShader = CompileShaderText(GL_FRAGMENT_SHADER, fragShaderText);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
uv0 = glGetUniformLocation_func(program, "v0");
|
||||
uv1 = glGetUniformLocation_func(program, "v1");
|
||||
uv2 = glGetUniformLocation_func(program, "v2");
|
||||
uv0 = glGetUniformLocation(program, "v0");
|
||||
uv1 = glGetUniformLocation(program, "v1");
|
||||
uv2 = glGetUniformLocation(program, "v2");
|
||||
printf("Uniforms: %d %d %d\n", uv0, uv1, uv2);
|
||||
|
||||
/*assert(glGetError() == 0);*/
|
||||
@@ -216,9 +212,9 @@ Init(void)
|
||||
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
|
||||
assert(glIsProgram_func(program));
|
||||
assert(glIsShader_func(fragShader));
|
||||
assert(glIsShader_func(vertShader));
|
||||
assert(glIsProgram(program));
|
||||
assert(glIsShader(fragShader));
|
||||
assert(glIsShader(vertShader));
|
||||
|
||||
glColor3f(1, 0, 0);
|
||||
}
|
||||
@@ -247,6 +243,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(WinWidth, WinHeight);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Redisplay);
|
||||
|
||||
@@ -12,10 +12,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -59,11 +57,11 @@ Redisplay(void)
|
||||
glFrontFace(FrontWinding);
|
||||
|
||||
if (DetermineFacingInFragProg) {
|
||||
glUniform1i_func(u_fragface, 1);
|
||||
glUniform1i(u_fragface, 1);
|
||||
glDisable(GL_VERTEX_PROGRAM_TWO_SIDE);
|
||||
}
|
||||
else {
|
||||
glUniform1i_func(u_fragface, 0);
|
||||
glUniform1i(u_fragface, 0);
|
||||
glEnable(GL_VERTEX_PROGRAM_TWO_SIDE);
|
||||
}
|
||||
|
||||
@@ -75,7 +73,7 @@ Redisplay(void)
|
||||
/* Draw a tristrip ring */
|
||||
glBegin(GL_TRIANGLE_STRIP);
|
||||
glColor4fv(Red);
|
||||
glSecondaryColor3fv_func(Green);
|
||||
glSecondaryColor3fv(Green);
|
||||
for (i = 0; i <= sections; i++) {
|
||||
float a = (float) i / (sections) * M_PI * 2.0;
|
||||
float x = radius * cos(a);
|
||||
@@ -125,9 +123,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -229,15 +227,13 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
vertShader = CompileShaderText(GL_VERTEX_SHADER, vertShaderText);
|
||||
fragShader = CompileShaderText(GL_FRAGMENT_SHADER, fragShaderText);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
u_fragface = glGetUniformLocation_func(program, "fragface");
|
||||
u_fragface = glGetUniformLocation(program, "fragface");
|
||||
printf("Uniforms: %d\n", u_fragface);
|
||||
|
||||
/*assert(glGetError() == 0);*/
|
||||
@@ -246,9 +242,9 @@ Init(void)
|
||||
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
|
||||
assert(glIsProgram_func(program));
|
||||
assert(glIsShader_func(fragShader));
|
||||
assert(glIsShader_func(vertShader));
|
||||
assert(glIsProgram(program));
|
||||
assert(glIsShader(fragShader));
|
||||
assert(glIsShader(vertShader));
|
||||
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
|
||||
@@ -293,6 +289,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(WinWidth, WinHeight);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Redisplay);
|
||||
|
||||
@@ -11,10 +11,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -58,14 +56,14 @@ Redisplay(void)
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
|
||||
/* render with vertex shader only */
|
||||
glUseProgram_func(VertProgram);
|
||||
glUseProgram(VertProgram);
|
||||
glPushMatrix();
|
||||
glTranslatef(-1.5, 0, 0);
|
||||
DrawQuadTex();
|
||||
glPopMatrix();
|
||||
|
||||
/* render with fragment shader only */
|
||||
glUseProgram_func(FragProgram);
|
||||
glUseProgram(FragProgram);
|
||||
glPushMatrix();
|
||||
glTranslatef(+1.5, 0, 0);
|
||||
DrawQuadColor();
|
||||
@@ -90,10 +88,10 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(FragShader);
|
||||
glDeleteShader_func(VertShader);
|
||||
glDeleteProgram_func(VertProgram);
|
||||
glDeleteProgram_func(FragProgram);
|
||||
glDeleteShader(FragShader);
|
||||
glDeleteShader(VertShader);
|
||||
glDeleteProgram(VertProgram);
|
||||
glDeleteProgram(FragProgram);
|
||||
glutDestroyWindow(Win);
|
||||
}
|
||||
|
||||
@@ -129,8 +127,6 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
if (FragProgFile)
|
||||
FragShader = CompileShaderFile(GL_FRAGMENT_SHADER, FragProgFile);
|
||||
else
|
||||
@@ -149,10 +145,10 @@ Init(void)
|
||||
|
||||
printf("GL_RENDERER = %s\n",(const char *) glGetString(GL_RENDERER));
|
||||
|
||||
assert(glIsProgram_func(VertProgram));
|
||||
assert(glIsProgram_func(FragProgram));
|
||||
assert(glIsShader_func(FragShader));
|
||||
assert(glIsShader_func(VertShader));
|
||||
assert(glIsProgram(VertProgram));
|
||||
assert(glIsProgram(FragProgram));
|
||||
assert(glIsShader(FragShader));
|
||||
assert(glIsShader(VertShader));
|
||||
|
||||
glColor3f(1, 0, 0);
|
||||
}
|
||||
@@ -181,6 +177,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(400, 200);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
Win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Redisplay);
|
||||
|
||||
@@ -9,10 +9,8 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <math.h>
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include <GL/glext.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -133,9 +131,9 @@ Reshape(int width, int height)
|
||||
static void
|
||||
CleanUp(void)
|
||||
{
|
||||
glDeleteShader_func(fragShader);
|
||||
glDeleteShader_func(vertShader);
|
||||
glDeleteProgram_func(program);
|
||||
glDeleteShader(fragShader);
|
||||
glDeleteShader(vertShader);
|
||||
glDeleteProgram(program);
|
||||
glutDestroyWindow(win);
|
||||
}
|
||||
|
||||
@@ -239,13 +237,11 @@ Init(void)
|
||||
if (!ShadersSupported())
|
||||
exit(1);
|
||||
|
||||
GetExtensionFuncs();
|
||||
|
||||
vertShader = CompileShaderText(GL_VERTEX_SHADER, VertShaderText);
|
||||
fragShader = CompileShaderText(GL_FRAGMENT_SHADER, FragShaderText);
|
||||
program = LinkShaders(vertShader, fragShader);
|
||||
|
||||
glUseProgram_func(program);
|
||||
glUseProgram(program);
|
||||
|
||||
assert(glGetError() == 0);
|
||||
|
||||
@@ -266,6 +262,7 @@ main(int argc, char *argv[])
|
||||
glutInitWindowSize(500, 500);
|
||||
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
|
||||
win = glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutSpecialFunc(SpecialKey);
|
||||
|
||||
6
progs/tests/.gitignore
vendored
6
progs/tests/.gitignore
vendored
@@ -5,6 +5,7 @@ arbfpspec
|
||||
arbfptest1
|
||||
arbfptexture
|
||||
arbfptrig
|
||||
arbgpuprog
|
||||
arbnpot
|
||||
arbnpot-mipmap
|
||||
arbvptest1
|
||||
@@ -38,6 +39,7 @@ fptest1
|
||||
fptexture
|
||||
getprocaddress
|
||||
getproclist.h
|
||||
getteximage
|
||||
glutfx
|
||||
interleave
|
||||
invert
|
||||
@@ -49,12 +51,15 @@ mapvbo
|
||||
minmag
|
||||
mipgen
|
||||
mipmap_comp
|
||||
mipmap_comp_tests
|
||||
mipmap_limits
|
||||
mipmap_view
|
||||
multipal
|
||||
no_s3tc
|
||||
packedpixels
|
||||
persp_hint
|
||||
pbo
|
||||
prim
|
||||
prog_parameter
|
||||
quads
|
||||
random
|
||||
@@ -77,6 +82,7 @@ subtex
|
||||
subtexrate
|
||||
tex1d
|
||||
texcompress2
|
||||
texcompsub
|
||||
texdown
|
||||
texfilt
|
||||
texline
|
||||
|
||||
@@ -59,6 +59,7 @@ SOURCES = \
|
||||
minmag.c \
|
||||
mipgen.c \
|
||||
mipmap_comp.c \
|
||||
mipmap_comp_tests.c \
|
||||
mipmap_limits.c \
|
||||
mipmap_view.c \
|
||||
multipal.c \
|
||||
@@ -83,6 +84,7 @@ SOURCES = \
|
||||
subtexrate.c \
|
||||
tex1d.c \
|
||||
texcompress2.c \
|
||||
texcompsub.c \
|
||||
texdown \
|
||||
texfilt.c \
|
||||
texline.c \
|
||||
|
||||
@@ -82,6 +82,7 @@ progs = [
|
||||
'minmag',
|
||||
'mipgen',
|
||||
'mipmap_comp',
|
||||
'mipmap_comp_tests',
|
||||
'mipmap_limits',
|
||||
'mipmap_view',
|
||||
'multipal',
|
||||
@@ -108,6 +109,7 @@ progs = [
|
||||
'tex1d',
|
||||
'texcmp',
|
||||
'texcompress2',
|
||||
'texcompsub',
|
||||
'texdown',
|
||||
'texfilt',
|
||||
'texgenmix',
|
||||
|
||||
@@ -127,7 +127,7 @@ Init( void )
|
||||
|
||||
if (!glutExtensionSupported("GL_EXT_framebuffer_object")) {
|
||||
printf("GL_EXT_framebuffer_object not found!\n");
|
||||
/*exit(0);*/
|
||||
exit(0);
|
||||
}
|
||||
printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
|
||||
|
||||
|
||||
318
progs/tests/mipmap_comp_tests.c
Normal file
318
progs/tests/mipmap_comp_tests.c
Normal file
@@ -0,0 +1,318 @@
|
||||
/* Copyright (c) Mark J. Kilgard, 1994. */
|
||||
/*
|
||||
* (c) Copyright 1993, Silicon Graphics, Inc.
|
||||
* ALL RIGHTS RESERVED
|
||||
* Permission to use, copy, modify, and distribute this software for
|
||||
* any purpose and without fee is hereby granted, provided that the above
|
||||
* copyright notice appear in all copies and that both the copyright notice
|
||||
* and this permission notice appear in supporting documentation, and that
|
||||
* the name of Silicon Graphics, Inc. not be used in advertising
|
||||
* or publicity pertaining to distribution of the software without specific,
|
||||
* written prior permission.
|
||||
*
|
||||
* THE MATERIAL EMBODIED ON THIS SOFTWARE IS PROVIDED TO YOU "AS-IS"
|
||||
* AND WITHOUT WARRANTY OF ANY KIND, EXPRESS, IMPLIED OR OTHERWISE,
|
||||
* INCLUDING WITHOUT LIMITATION, ANY WARRANTY OF MERCHANTABILITY OR
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
|
||||
* GRAPHICS, INC. BE LIABLE TO YOU OR ANYONE ELSE FOR ANY DIRECT,
|
||||
* SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY
|
||||
* KIND, OR ANY DAMAGES WHATSOEVER, INCLUDING WITHOUT LIMITATION,
|
||||
* LOSS OF PROFIT, LOSS OF USE, SAVINGS OR REVENUE, OR THE CLAIMS OF
|
||||
* THIRD PARTIES, WHETHER OR NOT SILICON GRAPHICS, INC. HAS BEEN
|
||||
* ADVISED OF THE POSSIBILITY OF SUCH LOSS, HOWEVER CAUSED AND ON
|
||||
* ANY THEORY OF LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE
|
||||
* POSSESSION, USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*
|
||||
* US Government Users Restricted Rights
|
||||
* Use, duplication, or disclosure by the Government is subject to
|
||||
* restrictions set forth in FAR 52.227.19(c)(2) or subparagraph
|
||||
* (c)(1)(ii) of the Rights in Technical Data and Computer Software
|
||||
* clause at DFARS 252.227-7013 and/or in similar or successor
|
||||
* clauses in the FAR or the DOD or NASA FAR Supplement.
|
||||
* Unpublished-- rights reserved under the copyright laws of the
|
||||
* United States. Contractor/manufacturer is Silicon Graphics,
|
||||
* Inc., 2011 N. Shoreline Blvd., Mountain View, CA 94039-7311.
|
||||
*
|
||||
* OpenGL(TM) is a trademark of Silicon Graphics, Inc.
|
||||
*/
|
||||
|
||||
/* mipmap_comp
|
||||
* Test compressed texture mipmaps
|
||||
*
|
||||
* Based on mipmap_limits
|
||||
*/
|
||||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
|
||||
#include "readtex.h"
|
||||
|
||||
#define SIZE 16 /* not larger then 16 */
|
||||
|
||||
static GLint BaseLevel = 0, MaxLevel ;
|
||||
static GLfloat MinLod, MaxLod;
|
||||
static GLfloat LodBias;
|
||||
static GLboolean NearestFilter;
|
||||
static GLuint texImage;
|
||||
static GLuint View;
|
||||
|
||||
struct view {
|
||||
GLfloat minLod;
|
||||
GLfloat maxLod;
|
||||
const char *string;
|
||||
};
|
||||
|
||||
static struct view views[] =
|
||||
{
|
||||
{ 0, 0, "Green" },
|
||||
{ 0, 1, "Green, Red" },
|
||||
{ 0, 2, "Green, Red, Blue" },
|
||||
{ 0, 3, "Green, Red, Blue, Black" },
|
||||
{ 0, 4, "Green, Red, Blue, Black, White" },
|
||||
{ 1, 4, "Red, Blue, Black, White" },
|
||||
{ 2, 4, "Blue, Black, White" },
|
||||
{ 3, 4, "Black, White" },
|
||||
{ 4, 4, "White" },
|
||||
{ 3, 3, "Black" },
|
||||
{ 2, 2, "Blue" },
|
||||
{ 1, 1, "Red" },
|
||||
{ 1, 3, "Red, Blue, Black" },
|
||||
{ 1, 2, "Red, Blue" },
|
||||
{ 2, 3, "Blue, Black" },
|
||||
{ 0, 0, NULL },
|
||||
};
|
||||
|
||||
static void
|
||||
initValues(void)
|
||||
{
|
||||
View = 12;
|
||||
BaseLevel = 0;
|
||||
MaxLevel = 9;
|
||||
MinLod = views[View].minLod;
|
||||
MaxLod = views[View].maxLod;
|
||||
LodBias = 5.0;
|
||||
NearestFilter = GL_TRUE;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
changeView(void)
|
||||
{
|
||||
if (views[++View].string == NULL)
|
||||
View = 0;
|
||||
|
||||
MinLod = views[View].minLod;
|
||||
MaxLod = views[View].maxLod;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
makeImage(int level, int width, int height)
|
||||
{
|
||||
GLubyte img[SIZE*SIZE*3];
|
||||
GLubyte color[5][3] = {
|
||||
{ 0, 255, 0 },
|
||||
{ 255, 0, 0 },
|
||||
{ 0, 0, 255 },
|
||||
{ 0, 0, 0 },
|
||||
{ 255, 255, 255 },
|
||||
};
|
||||
int i, j;
|
||||
|
||||
for (i = 0; i < height; i++) {
|
||||
for (j = 0; j < width; j++) {
|
||||
int k = (i * width + j) * 3;
|
||||
img[k + 0] = color[level][0];
|
||||
img[k + 1] = color[level][1];
|
||||
img[k + 2] = color[level][2];
|
||||
}
|
||||
}
|
||||
|
||||
glTexImage2D(GL_TEXTURE_2D, level,
|
||||
GL_COMPRESSED_RGB_S3TC_DXT1_EXT,
|
||||
width, height, 0,
|
||||
GL_RGB, GL_UNSIGNED_BYTE, img);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
makeImages(void)
|
||||
{
|
||||
int i, sz;
|
||||
|
||||
for (i = 0, sz = SIZE; sz >= 1; i++, sz /= 2) {
|
||||
makeImage(i, sz, sz);
|
||||
printf("Level %d size: %d x %d\n", i, sz, sz);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
myInit(void)
|
||||
{
|
||||
|
||||
initValues();
|
||||
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDepthFunc(GL_LESS);
|
||||
glShadeModel(GL_FLAT);
|
||||
|
||||
glTranslatef(0.0, 0.0, -3.6);
|
||||
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
|
||||
glGenTextures(1, &texImage);
|
||||
glBindTexture(GL_TEXTURE_2D, texImage);
|
||||
makeImages();
|
||||
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
|
||||
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
display(void)
|
||||
{
|
||||
GLfloat tcm = 1.0;
|
||||
glBindTexture(GL_TEXTURE_2D, texImage);
|
||||
|
||||
printf("BASE_LEVEL=%d MAX_LEVEL=%d MIN_LOD=%.2g MAX_LOD=%.2g Bias=%.2g Filter=%s\n",
|
||||
BaseLevel, MaxLevel, MinLod, MaxLod, LodBias,
|
||||
NearestFilter ? "NEAREST" : "LINEAR");
|
||||
printf("You should see: %s\n", views[View].string );
|
||||
fflush(stdout);
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, BaseLevel);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, MaxLevel);
|
||||
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_LOD, MinLod);
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_LOD, MaxLod);
|
||||
|
||||
if (NearestFilter) {
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
|
||||
GL_NEAREST_MIPMAP_NEAREST);
|
||||
}
|
||||
else {
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
|
||||
GL_LINEAR_MIPMAP_LINEAR);
|
||||
}
|
||||
|
||||
glTexEnvf(GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, LodBias);
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
glBegin(GL_QUADS);
|
||||
glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0);
|
||||
glTexCoord2f(0.0, tcm); glVertex3f(-2.0, 1.0, 0.0);
|
||||
glTexCoord2f(tcm * 3000.0, tcm); glVertex3f(3000.0, 1.0, -6000.0);
|
||||
glTexCoord2f(tcm * 3000.0, 0.0); glVertex3f(3000.0, -1.0, -6000.0);
|
||||
glEnd();
|
||||
glFlush();
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
myReshape(int w, int h)
|
||||
{
|
||||
glViewport(0, 0, w, h);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
gluPerspective(60.0, 1.0*(GLfloat)w/(GLfloat)h, 1.0, 30000.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glLoadIdentity();
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
key(unsigned char k, int x, int y)
|
||||
{
|
||||
(void) x;
|
||||
(void) y;
|
||||
switch (k) {
|
||||
#if 0
|
||||
case 'b':
|
||||
BaseLevel--;
|
||||
if (BaseLevel < 0)
|
||||
BaseLevel = 0;
|
||||
break;
|
||||
case 'B':
|
||||
BaseLevel++;
|
||||
if (BaseLevel > 10)
|
||||
BaseLevel = 10;
|
||||
break;
|
||||
case 'm':
|
||||
MaxLevel--;
|
||||
if (MaxLevel < 0)
|
||||
MaxLevel = 0;
|
||||
break;
|
||||
case 'M':
|
||||
MaxLevel++;
|
||||
if (MaxLevel > 10)
|
||||
MaxLevel = 10;
|
||||
break;
|
||||
case 'l':
|
||||
LodBias -= 0.25;
|
||||
break;
|
||||
case 'L':
|
||||
LodBias += 0.25;
|
||||
break;
|
||||
case 'n':
|
||||
MinLod -= 0.25;
|
||||
break;
|
||||
case 'N':
|
||||
MinLod += 0.25;
|
||||
break;
|
||||
case 'x':
|
||||
MaxLod -= 0.25;
|
||||
break;
|
||||
case 'X':
|
||||
MaxLod += 0.25;
|
||||
break;
|
||||
case 'f':
|
||||
NearestFilter = !NearestFilter;
|
||||
break;
|
||||
#endif
|
||||
case ' ':
|
||||
initValues();
|
||||
break;
|
||||
case 27: /* Escape */
|
||||
exit(0);
|
||||
break;
|
||||
default:
|
||||
changeView();
|
||||
break;
|
||||
}
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
usage(void)
|
||||
{
|
||||
printf("usage:\n");
|
||||
printf(" Any Change view\n");
|
||||
printf(" SPACE reset values\n");
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main(int argc, char** argv)
|
||||
{
|
||||
glutInit(&argc, argv);
|
||||
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
|
||||
glutInitWindowSize (600, 600);
|
||||
glutCreateWindow (argv[0]);
|
||||
glewInit();
|
||||
myInit();
|
||||
glutReshapeFunc (myReshape);
|
||||
glutDisplayFunc(display);
|
||||
glutKeyboardFunc(key);
|
||||
usage();
|
||||
glutMainLoop();
|
||||
return 0; /* ANSI C requires main to return int. */
|
||||
}
|
||||
4100
progs/tests/texcomp_image.h
Normal file
4100
progs/tests/texcomp_image.h
Normal file
File diff suppressed because it is too large
Load Diff
165
progs/tests/texcompsub.c
Normal file
165
progs/tests/texcompsub.c
Normal file
@@ -0,0 +1,165 @@
|
||||
/*
|
||||
* Test texture compression.
|
||||
*/
|
||||
|
||||
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
|
||||
#include "texcomp_image.h"
|
||||
|
||||
static int ImgWidth = 512;
|
||||
static int ImgHeight = 512;
|
||||
static GLenum CompFormat = GL_COMPRESSED_RGBA_S3TC_DXT1_EXT;
|
||||
static GLfloat EyeDist = 5.0;
|
||||
static GLfloat Rot = 0.0;
|
||||
const GLenum Target = GL_TEXTURE_2D;
|
||||
|
||||
|
||||
static void
|
||||
CheckError(int line)
|
||||
{
|
||||
GLenum err = glGetError();
|
||||
if (err) {
|
||||
printf("GL Error %d at line %d\n", (int) err, line);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
LoadCompressedImage(void)
|
||||
{
|
||||
const GLenum filter = GL_LINEAR;
|
||||
glTexImage2D(Target, 0, CompFormat, ImgWidth, ImgHeight, 0,
|
||||
GL_RGB, GL_UNSIGNED_BYTE, NULL);
|
||||
|
||||
/* bottom half */
|
||||
glCompressedTexSubImage2DARB(Target, 0,
|
||||
0, 0, /* pos */
|
||||
ImgWidth, ImgHeight / 2,
|
||||
CompFormat, ImgSize / 2, ImgData + ImgSize / 2);
|
||||
/* top half */
|
||||
glCompressedTexSubImage2DARB(Target, 0,
|
||||
0, ImgHeight / 2, /* pos */
|
||||
ImgWidth, ImgHeight / 2,
|
||||
CompFormat, ImgSize / 2, ImgData);
|
||||
|
||||
glTexParameteri(Target, GL_TEXTURE_MIN_FILTER, filter);
|
||||
glTexParameteri(Target, GL_TEXTURE_MAG_FILTER, filter);
|
||||
}
|
||||
|
||||
static void
|
||||
Init()
|
||||
{
|
||||
GLint numFormats, formats[100];
|
||||
GLint p;
|
||||
|
||||
if (!glutExtensionSupported("GL_ARB_texture_compression")) {
|
||||
printf("Sorry, GL_ARB_texture_compression is required.\n");
|
||||
exit(1);
|
||||
}
|
||||
if (!glutExtensionSupported("GL_EXT_texture_compression_s3tc")) {
|
||||
printf("Sorry, GL_EXT_texture_compression_s3tc is required.\n");
|
||||
exit(1);
|
||||
}
|
||||
|
||||
printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
|
||||
printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
|
||||
|
||||
glGetIntegerv(GL_NUM_COMPRESSED_TEXTURE_FORMATS_ARB, &numFormats);
|
||||
glGetIntegerv(GL_COMPRESSED_TEXTURE_FORMATS_ARB, formats);
|
||||
printf("%d supported compression formats: ", numFormats);
|
||||
for (p = 0; p < numFormats; p++)
|
||||
printf("0x%x ", formats[p]);
|
||||
printf("\n");
|
||||
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
|
||||
LoadCompressedImage();
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
Reshape( int width, int height )
|
||||
{
|
||||
glViewport( 0, 0, width, height );
|
||||
glMatrixMode( GL_PROJECTION );
|
||||
glLoadIdentity();
|
||||
glFrustum(-1, 1, -1, 1, 4, 100);
|
||||
glMatrixMode( GL_MODELVIEW );
|
||||
glLoadIdentity();
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
Key( unsigned char key, int x, int y )
|
||||
{
|
||||
(void) x;
|
||||
(void) y;
|
||||
switch (key) {
|
||||
case 'd':
|
||||
EyeDist -= 1.0;
|
||||
if (EyeDist < 4.0)
|
||||
EyeDist = 4.0;
|
||||
break;
|
||||
case 'D':
|
||||
EyeDist += 1.0;
|
||||
break;
|
||||
case 'z':
|
||||
Rot += 5.0;
|
||||
break;
|
||||
case 'Z':
|
||||
Rot -= 5.0;
|
||||
break;
|
||||
case 27:
|
||||
exit(0);
|
||||
break;
|
||||
}
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
Draw( void )
|
||||
{
|
||||
glClearColor(0.3, 0.3, .8, 0);
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
CheckError(__LINE__);
|
||||
glPushMatrix();
|
||||
glTranslatef(0, 0, -(EyeDist+0.01));
|
||||
glRotatef(Rot, 0, 0, 1);
|
||||
glBegin(GL_POLYGON);
|
||||
glTexCoord2f(0, 0); glVertex2f(-1, -1);
|
||||
glTexCoord2f(1, 0); glVertex2f( 1, -1);
|
||||
glTexCoord2f(1, 1); glVertex2f( 1, 1);
|
||||
glTexCoord2f(0, 1); glVertex2f(-1, 1);
|
||||
glEnd();
|
||||
glPopMatrix();
|
||||
|
||||
glutSwapBuffers();
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main( int argc, char *argv[] )
|
||||
{
|
||||
glutInit( &argc, argv );
|
||||
glutInitWindowSize( 600, 600 );
|
||||
|
||||
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE);
|
||||
|
||||
glutCreateWindow(argv[0]);
|
||||
glewInit();
|
||||
|
||||
glutReshapeFunc( Reshape );
|
||||
glutKeyboardFunc( Key );
|
||||
glutDisplayFunc( Draw );
|
||||
|
||||
Init();
|
||||
|
||||
glutMainLoop();
|
||||
return 0;
|
||||
}
|
||||
@@ -258,8 +258,26 @@ static void Init( void )
|
||||
}
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, BORDER_TEXTURE);
|
||||
#ifdef TEST_PBO_DLIST
|
||||
/* test fetching teximage from PBO in display list */
|
||||
{
|
||||
GLuint b = 42, l = 10;
|
||||
|
||||
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER, b);
|
||||
glBufferDataARB(GL_PIXEL_UNPACK_BUFFER, sizeof(BorderImage),
|
||||
BorderImage, GL_STREAM_DRAW);
|
||||
|
||||
glNewList(l, GL_COMPILE);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, SIZE+2, SIZE+2, 1,
|
||||
GL_RGBA, GL_UNSIGNED_BYTE, (void *) 0/* BorderImage*/);
|
||||
glEndList();
|
||||
glCallList(l);
|
||||
glBindBufferARB(GL_PIXEL_UNPACK_BUFFER, 0);
|
||||
}
|
||||
#else
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, SIZE+2, SIZE+2, 1,
|
||||
GL_RGBA, GL_UNSIGNED_BYTE, (void *) BorderImage);
|
||||
#endif
|
||||
|
||||
for (i = 0; i < SIZE; i++) {
|
||||
for (j = 0; j < SIZE; j++) {
|
||||
|
||||
15
progs/trivial/.gitignore
vendored
15
progs/trivial/.gitignore
vendored
@@ -5,10 +5,17 @@ clear-random
|
||||
clear-repeat
|
||||
clear-scissor
|
||||
clear-undefined
|
||||
createwin
|
||||
dlist-begin-call-end
|
||||
dlist-dangling
|
||||
dlist-degenerate
|
||||
dlist-edgeflag
|
||||
dlist-edgeflag-dangling
|
||||
dlist-flat-tri
|
||||
dlist-mat-tri
|
||||
dlist-recursive-call
|
||||
dlist-tri-flat-tri
|
||||
dlist-tri-mat-tri
|
||||
draw2arrays
|
||||
drawarrays
|
||||
drawelements
|
||||
@@ -30,6 +37,7 @@ lineloop
|
||||
lineloop-clip
|
||||
lineloop-elts
|
||||
linestrip
|
||||
linestrip-clip
|
||||
linestrip-flat-stipple
|
||||
linestrip-stipple
|
||||
linestrip-stipple-wide
|
||||
@@ -70,8 +78,10 @@ quadstrip-cont
|
||||
quadstrip-flat
|
||||
readtex.c
|
||||
readtex.h
|
||||
readpixels
|
||||
tri
|
||||
tri-alpha
|
||||
tri-alpha-tex
|
||||
tri-array-interleaved
|
||||
tri-blend
|
||||
tri-blend-color
|
||||
@@ -79,6 +89,7 @@ tri-blend-max
|
||||
tri-blend-min
|
||||
tri-blend-revsub
|
||||
tri-blend-sub
|
||||
tri-clear
|
||||
tri-clip
|
||||
tri-cull
|
||||
tri-cull-both
|
||||
@@ -93,6 +104,7 @@ tri-fog
|
||||
tri-fp
|
||||
tri-fp-const-imm
|
||||
tri-lit
|
||||
tri-lit-material
|
||||
tri-logicop-none
|
||||
tri-logicop-xor
|
||||
tri-mask-tri
|
||||
@@ -101,6 +113,7 @@ tri-orig
|
||||
tri-query
|
||||
tri-repeat
|
||||
tri-scissor-tri
|
||||
tri-square
|
||||
tri-stencil
|
||||
tri-stipple
|
||||
tri-tex
|
||||
@@ -110,6 +123,7 @@ tri-unfilled
|
||||
tri-unfilled-clip
|
||||
tri-unfilled-edgeflag
|
||||
tri-unfilled-fog
|
||||
tri-unfilled-point
|
||||
tri-unfilled-smooth
|
||||
tri-unfilled-tri
|
||||
tri-unfilled-tri-lit
|
||||
@@ -118,6 +132,7 @@ tri-unfilled-userclip-stip
|
||||
tri-userclip
|
||||
tri-viewport
|
||||
tri-z
|
||||
tri-z-9
|
||||
tri-z-eq
|
||||
trifan
|
||||
trifan-flat
|
||||
|
||||
@@ -18,7 +18,14 @@ SOURCES = \
|
||||
clear-repeat.c \
|
||||
clear-random.c \
|
||||
clear.c \
|
||||
createwin.c \
|
||||
dlist-dangling.c \
|
||||
dlist-flat-tri.c \
|
||||
dlist-mat-tri.c \
|
||||
dlist-tri-flat-tri.c \
|
||||
dlist-tri-mat-tri.c \
|
||||
dlist-recursive-call.c \
|
||||
dlist-begin-call-end.c \
|
||||
dlist-edgeflag-dangling.c \
|
||||
dlist-edgeflag.c \
|
||||
dlist-degenerate.c \
|
||||
@@ -42,6 +49,7 @@ SOURCES = \
|
||||
lineloop-clip.c \
|
||||
lineloop-elts.c \
|
||||
lineloop.c \
|
||||
linestrip-clip.c \
|
||||
linestrip-flat-stipple.c \
|
||||
linestrip-stipple-wide.c \
|
||||
linestrip-stipple.c \
|
||||
@@ -81,7 +89,9 @@ SOURCES = \
|
||||
quadstrip-cont.c \
|
||||
quadstrip-flat.c \
|
||||
quadstrip.c \
|
||||
readpixels.c \
|
||||
tri-alpha.c \
|
||||
tri-alpha-tex.c \
|
||||
tri-array-interleaved.c \
|
||||
tri-blend-color.c \
|
||||
tri-blend-max.c \
|
||||
@@ -89,6 +99,7 @@ SOURCES = \
|
||||
tri-blend-revsub.c \
|
||||
tri-blend-sub.c \
|
||||
tri-blend.c \
|
||||
tri-clear.c \
|
||||
tri-clip.c \
|
||||
tri-cull-both.c \
|
||||
tri-cull.c \
|
||||
@@ -105,11 +116,13 @@ SOURCES = \
|
||||
tri-fp.c \
|
||||
tri-fp-const-imm.c \
|
||||
tri-lit.c \
|
||||
tri-lit-material.c \
|
||||
tri-mask-tri.c \
|
||||
tri-orig.c \
|
||||
tri-query.c \
|
||||
tri-repeat.c \
|
||||
tri-scissor-tri.c \
|
||||
tri-square.c \
|
||||
tri-stencil.c \
|
||||
tri-stipple.c \
|
||||
tri-multitex-vbo.c \
|
||||
@@ -119,6 +132,7 @@ SOURCES = \
|
||||
tri-unfilled-fog.c \
|
||||
tri-unfilled-edgeflag.c \
|
||||
tri-unfilled-clip.c \
|
||||
tri-unfilled-point.c \
|
||||
tri-unfilled-smooth.c \
|
||||
tri-unfilled-tri.c \
|
||||
tri-unfilled-tri-lit.c \
|
||||
@@ -127,6 +141,7 @@ SOURCES = \
|
||||
tri-unfilled.c \
|
||||
tri-userclip.c \
|
||||
tri-viewport.c \
|
||||
tri-z-9.c \
|
||||
tri-z-eq.c \
|
||||
tri-z.c \
|
||||
tri.c \
|
||||
|
||||
159
progs/trivial/dlist-begin-call-end.c
Normal file
159
progs/trivial/dlist-begin-call-end.c
Normal file
@@ -0,0 +1,159 @@
|
||||
/*
|
||||
* Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and
|
||||
* its documentation for any purpose is hereby granted without fee, provided
|
||||
* that (i) the above copyright notices and this permission notice appear in
|
||||
* all copies of the software and related documentation, and (ii) the name of
|
||||
* Silicon Graphics may not be used in any advertising or
|
||||
* publicity relating to the software without the specific, prior written
|
||||
* permission of Silicon Graphics.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF
|
||||
* ANY KIND,
|
||||
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
||||
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR
|
||||
* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
|
||||
* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
|
||||
* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||
* OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <GL/glut.h>
|
||||
|
||||
|
||||
#define CI_OFFSET_1 16
|
||||
#define CI_OFFSET_2 32
|
||||
|
||||
|
||||
GLenum doubleBuffer;
|
||||
GLint first_list, list;
|
||||
|
||||
static void Init(void)
|
||||
{
|
||||
fprintf(stderr, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
|
||||
fprintf(stderr, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
|
||||
fprintf(stderr, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
|
||||
fflush(stderr);
|
||||
|
||||
glClearColor(0.0, 0.0, 1.0, 0.0);
|
||||
|
||||
/* First list will disrupt state which might potentially be
|
||||
* short-circuited in calling list:
|
||||
*/
|
||||
first_list = glGenLists(1);
|
||||
glNewList(first_list, GL_COMPILE);
|
||||
// glColor3f(0,1,0);
|
||||
glEndList();
|
||||
|
||||
|
||||
/* List that looks like it might have redundant state:
|
||||
*/
|
||||
list = glGenLists(1);
|
||||
glNewList(list, GL_COMPILE);
|
||||
|
||||
glShadeModel(GL_FLAT);
|
||||
glBegin(GL_TRIANGLES);
|
||||
glColor3f(1,0,0);
|
||||
glVertex3f( -0.9, 0.9, -30.0);
|
||||
glVertex3f( -0.9, -0.9, -30.0);
|
||||
glCallList( first_list );
|
||||
glVertex3f( 0.9, 0.0, -30.0);
|
||||
glEnd();
|
||||
glEndList();
|
||||
}
|
||||
|
||||
static void Reshape(int width, int height)
|
||||
{
|
||||
|
||||
glViewport(0, 0, (GLint)width, (GLint)height);
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
}
|
||||
|
||||
static void Key(unsigned char key, int x, int y)
|
||||
{
|
||||
|
||||
switch (key) {
|
||||
case 27:
|
||||
exit(1);
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void Draw(void)
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
glShadeModel( GL_SMOOTH );
|
||||
glCallList(list);
|
||||
|
||||
glFlush();
|
||||
|
||||
if (doubleBuffer) {
|
||||
glutSwapBuffers();
|
||||
}
|
||||
}
|
||||
|
||||
static GLenum Args(int argc, char **argv)
|
||||
{
|
||||
GLint i;
|
||||
|
||||
doubleBuffer = GL_FALSE;
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (strcmp(argv[i], "-sb") == 0) {
|
||||
doubleBuffer = GL_FALSE;
|
||||
} else if (strcmp(argv[i], "-db") == 0) {
|
||||
doubleBuffer = GL_TRUE;
|
||||
} else {
|
||||
fprintf(stderr, "%s (Bad option).\n", argv[i]);
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
GLenum type;
|
||||
|
||||
glutInit(&argc, argv);
|
||||
|
||||
if (Args(argc, argv) == GL_FALSE) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250);
|
||||
|
||||
type = GLUT_RGB | GLUT_ALPHA;
|
||||
type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
|
||||
glutInitDisplayMode(type);
|
||||
|
||||
if (glutCreateWindow(*argv) == GL_FALSE) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Init();
|
||||
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Draw);
|
||||
glutMainLoop();
|
||||
return 0;
|
||||
}
|
||||
171
progs/trivial/dlist-flat-tri.c
Normal file
171
progs/trivial/dlist-flat-tri.c
Normal file
@@ -0,0 +1,171 @@
|
||||
/*
|
||||
* Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and
|
||||
* its documentation for any purpose is hereby granted without fee, provided
|
||||
* that (i) the above copyright notices and this permission notice appear in
|
||||
* all copies of the software and related documentation, and (ii) the name of
|
||||
* Silicon Graphics may not be used in any advertising or
|
||||
* publicity relating to the software without the specific, prior written
|
||||
* permission of Silicon Graphics.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF
|
||||
* ANY KIND,
|
||||
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
||||
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR
|
||||
* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
|
||||
* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
|
||||
* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||
* OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <GL/glut.h>
|
||||
|
||||
|
||||
#define CI_OFFSET_1 16
|
||||
#define CI_OFFSET_2 32
|
||||
|
||||
|
||||
GLenum doubleBuffer;
|
||||
GLint list;
|
||||
|
||||
static void Init(void)
|
||||
{
|
||||
fprintf(stderr, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
|
||||
fprintf(stderr, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
|
||||
fprintf(stderr, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
|
||||
fflush(stderr);
|
||||
|
||||
glClearColor(0.0, 0.0, 1.0, 0.0);
|
||||
|
||||
list = glGenLists(1);
|
||||
glNewList(list, GL_COMPILE);
|
||||
|
||||
/* XXX: this state-change will only be executed if list is called
|
||||
* from outside a begin/end pair:
|
||||
*/
|
||||
glShadeModel( GL_FLAT );
|
||||
glBegin(GL_TRIANGLES);
|
||||
glColor3f(0,0,.7);
|
||||
glVertex3f( -0.9, 0.9, -30.0);
|
||||
glColor3f(0,.9,0);
|
||||
glVertex3f( -0.9, -0.9, -30.0);
|
||||
glColor3f(.8,0,0);
|
||||
glVertex3f( 0.9, 0.0, -30.0);
|
||||
glEnd();
|
||||
|
||||
/* This statechange is potentially NOT redundant:
|
||||
*/
|
||||
glShadeModel( GL_FLAT );
|
||||
glBegin(GL_TRIANGLES);
|
||||
glColor3f(0,1,0);
|
||||
glVertex3f( -0.5, 0.5, -30.0);
|
||||
glColor3f(0,0,1);
|
||||
glVertex3f( -0.5, -0.5, -30.0);
|
||||
glColor3f(1,0,0);
|
||||
glVertex3f( 0.5, 0.0, -30.0);
|
||||
glEnd();
|
||||
|
||||
glEndList();
|
||||
}
|
||||
|
||||
static void Reshape(int width, int height)
|
||||
{
|
||||
|
||||
glViewport(0, 0, (GLint)width, (GLint)height);
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
}
|
||||
|
||||
static void Key(unsigned char key, int x, int y)
|
||||
{
|
||||
|
||||
switch (key) {
|
||||
case 27:
|
||||
exit(1);
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void Draw(void)
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
glShadeModel( GL_SMOOTH );
|
||||
|
||||
glBegin(GL_TRIANGLES);
|
||||
|
||||
/* Note: call the list from inside a begin/end pair. The end is
|
||||
* provided by the display list...
|
||||
*/
|
||||
glCallList(list);
|
||||
|
||||
glFlush();
|
||||
|
||||
if (doubleBuffer) {
|
||||
glutSwapBuffers();
|
||||
}
|
||||
}
|
||||
|
||||
static GLenum Args(int argc, char **argv)
|
||||
{
|
||||
GLint i;
|
||||
|
||||
doubleBuffer = GL_FALSE;
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (strcmp(argv[i], "-sb") == 0) {
|
||||
doubleBuffer = GL_FALSE;
|
||||
} else if (strcmp(argv[i], "-db") == 0) {
|
||||
doubleBuffer = GL_TRUE;
|
||||
} else {
|
||||
fprintf(stderr, "%s (Bad option).\n", argv[i]);
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
GLenum type;
|
||||
|
||||
glutInit(&argc, argv);
|
||||
|
||||
if (Args(argc, argv) == GL_FALSE) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250);
|
||||
|
||||
type = GLUT_RGB | GLUT_ALPHA;
|
||||
type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
|
||||
glutInitDisplayMode(type);
|
||||
|
||||
if (glutCreateWindow(*argv) == GL_FALSE) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Init();
|
||||
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Draw);
|
||||
glutMainLoop();
|
||||
return 0;
|
||||
}
|
||||
182
progs/trivial/dlist-mat-tri.c
Normal file
182
progs/trivial/dlist-mat-tri.c
Normal file
@@ -0,0 +1,182 @@
|
||||
/*
|
||||
* Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and
|
||||
* its documentation for any purpose is hereby granted without fee, provided
|
||||
* that (i) the above copyright notices and this permission notice appear in
|
||||
* all copies of the software and related documentation, and (ii) the name of
|
||||
* Silicon Graphics may not be used in any advertising or
|
||||
* publicity relating to the software without the specific, prior written
|
||||
* permission of Silicon Graphics.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF
|
||||
* ANY KIND,
|
||||
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
||||
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR
|
||||
* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
|
||||
* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
|
||||
* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||
* OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <GL/glut.h>
|
||||
|
||||
|
||||
#define CI_OFFSET_1 16
|
||||
#define CI_OFFSET_2 32
|
||||
|
||||
|
||||
GLenum doubleBuffer;
|
||||
GLint list;
|
||||
|
||||
static GLfloat red[4] = {0.8, 0.1, 0.0, 1.0};
|
||||
static GLfloat green[4] = {0.0, 0.8, 0.2, 1.0};
|
||||
/*static GLfloat blue[4] = {0.2, 0.2, .7, 1.0};*/
|
||||
|
||||
static void Init(void)
|
||||
{
|
||||
fprintf(stderr, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
|
||||
fprintf(stderr, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
|
||||
fprintf(stderr, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
|
||||
fflush(stderr);
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
glEnable(GL_LIGHTING);
|
||||
glEnable(GL_LIGHT0);
|
||||
|
||||
glClearColor(0.0, 0.0, 1.0, 0.0);
|
||||
|
||||
list = glGenLists(1);
|
||||
glNewList(list, GL_COMPILE);
|
||||
|
||||
/* XXX: this state-change will be executed regardless of whether
|
||||
* the list is called from outside a begin/end pair:
|
||||
*/
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT, red);
|
||||
glBegin(GL_TRIANGLES);
|
||||
glVertex3f( -0.9, 0.9, -30.0);
|
||||
glVertex3f( -0.9, -0.9, -30.0);
|
||||
glVertex3f( 0.9, 0.0, -30.0);
|
||||
glEnd();
|
||||
|
||||
glMaterialfv(GL_FRONT, GL_DIFFUSE, red);
|
||||
glBegin(GL_TRIANGLES);
|
||||
glVertex3f( -0.7, 0.7, -30.0);
|
||||
glVertex3f( -0.7, -0.7, -30.0);
|
||||
glVertex3f( 0.7, 0.0, -30.0);
|
||||
glEnd();
|
||||
|
||||
/* This statechange is redundant:
|
||||
*/
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
|
||||
glBegin(GL_TRIANGLES);
|
||||
glVertex3f( -0.5, 0.5, -30.0);
|
||||
glVertex3f( -0.5, -0.5, -30.0);
|
||||
glVertex3f( 0.5, 0.0, -30.0);
|
||||
glEnd();
|
||||
|
||||
glEndList();
|
||||
}
|
||||
|
||||
static void Reshape(int width, int height)
|
||||
{
|
||||
|
||||
glViewport(0, 0, (GLint)width, (GLint)height);
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
}
|
||||
|
||||
static void Key(unsigned char key, int x, int y)
|
||||
{
|
||||
|
||||
switch (key) {
|
||||
case 27:
|
||||
exit(1);
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void Draw(void)
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
glShadeModel( GL_SMOOTH );
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
|
||||
|
||||
glBegin(GL_TRIANGLES);
|
||||
|
||||
/* Note: call the list from inside a begin/end pair. The end is
|
||||
* provided by the display list...
|
||||
*/
|
||||
glCallList(list);
|
||||
|
||||
glFlush();
|
||||
|
||||
if (doubleBuffer) {
|
||||
glutSwapBuffers();
|
||||
}
|
||||
}
|
||||
|
||||
static GLenum Args(int argc, char **argv)
|
||||
{
|
||||
GLint i;
|
||||
|
||||
doubleBuffer = GL_FALSE;
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (strcmp(argv[i], "-sb") == 0) {
|
||||
doubleBuffer = GL_FALSE;
|
||||
} else if (strcmp(argv[i], "-db") == 0) {
|
||||
doubleBuffer = GL_TRUE;
|
||||
} else {
|
||||
fprintf(stderr, "%s (Bad option).\n", argv[i]);
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
GLenum type;
|
||||
|
||||
glutInit(&argc, argv);
|
||||
|
||||
if (Args(argc, argv) == GL_FALSE) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250);
|
||||
|
||||
type = GLUT_RGB | GLUT_ALPHA;
|
||||
type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
|
||||
glutInitDisplayMode(type);
|
||||
|
||||
if (glutCreateWindow(*argv) == GL_FALSE) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Init();
|
||||
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Draw);
|
||||
glutMainLoop();
|
||||
return 0;
|
||||
}
|
||||
190
progs/trivial/dlist-recursive-call.c
Normal file
190
progs/trivial/dlist-recursive-call.c
Normal file
@@ -0,0 +1,190 @@
|
||||
/*
|
||||
* Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and
|
||||
* its documentation for any purpose is hereby granted without fee, provided
|
||||
* that (i) the above copyright notices and this permission notice appear in
|
||||
* all copies of the software and related documentation, and (ii) the name of
|
||||
* Silicon Graphics may not be used in any advertising or
|
||||
* publicity relating to the software without the specific, prior written
|
||||
* permission of Silicon Graphics.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF
|
||||
* ANY KIND,
|
||||
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
||||
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR
|
||||
* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
|
||||
* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
|
||||
* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||
* OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <GL/glut.h>
|
||||
|
||||
|
||||
#define CI_OFFSET_1 16
|
||||
#define CI_OFFSET_2 32
|
||||
|
||||
|
||||
GLenum doubleBuffer;
|
||||
GLint first_list, list;
|
||||
|
||||
static void Init(void)
|
||||
{
|
||||
fprintf(stderr, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
|
||||
fprintf(stderr, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
|
||||
fprintf(stderr, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
|
||||
fflush(stderr);
|
||||
|
||||
glClearColor(0.0, 0.0, 1.0, 0.0);
|
||||
|
||||
/* First list will disrupt state which might potentially be
|
||||
* short-circuited in calling list:
|
||||
*/
|
||||
first_list = glGenLists(1);
|
||||
glNewList(first_list, GL_COMPILE);
|
||||
glShadeModel( GL_SMOOTH );
|
||||
glEndList();
|
||||
|
||||
|
||||
/* List that looks like it might have redundant state:
|
||||
*/
|
||||
list = glGenLists(1);
|
||||
glNewList(list, GL_COMPILE);
|
||||
|
||||
glBegin(GL_TRIANGLES);
|
||||
glColor3f(0,0,.7);
|
||||
glVertex3f( 0.9, -0.9, -30.0);
|
||||
glColor3f(.8,0,0);
|
||||
glVertex3f( 0.9, 0.9, -30.0);
|
||||
glColor3f(0,.9,0);
|
||||
glVertex3f(-0.9, 0.0, -30.0);
|
||||
glEnd();
|
||||
|
||||
glShadeModel( GL_FLAT );
|
||||
glBegin(GL_TRIANGLES);
|
||||
glColor3f(0,0,.7);
|
||||
glVertex3f( -0.9, 0.9, -30.0);
|
||||
glColor3f(0,.9,0);
|
||||
glVertex3f( -0.9, -0.9, -30.0);
|
||||
glColor3f(.8,0,0);
|
||||
glVertex3f( 0.9, 0.0, -30.0);
|
||||
glEnd();
|
||||
|
||||
glCallList( first_list );
|
||||
|
||||
/* Do a quick begin/end to ensure we are not inside a dangling
|
||||
* primitive from the called list:
|
||||
*/
|
||||
glBegin( GL_POINTS );
|
||||
glEnd();
|
||||
|
||||
/* This statechange is NOT redundant:
|
||||
*/
|
||||
glShadeModel( GL_FLAT );
|
||||
glBegin(GL_TRIANGLES);
|
||||
glColor3f(1,0,0);
|
||||
glVertex3f( -0.5, 0.5, -30.0);
|
||||
glColor3f(0,1,0);
|
||||
glVertex3f( -0.5, -0.5, -30.0);
|
||||
glColor3f(0,0,1);
|
||||
glVertex3f( 0.5, 0.0, -30.0);
|
||||
glEnd();
|
||||
|
||||
glEndList();
|
||||
}
|
||||
|
||||
static void Reshape(int width, int height)
|
||||
{
|
||||
|
||||
glViewport(0, 0, (GLint)width, (GLint)height);
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
}
|
||||
|
||||
static void Key(unsigned char key, int x, int y)
|
||||
{
|
||||
|
||||
switch (key) {
|
||||
case 27:
|
||||
exit(1);
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void Draw(void)
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
glShadeModel( GL_SMOOTH );
|
||||
glCallList(list);
|
||||
|
||||
glFlush();
|
||||
|
||||
if (doubleBuffer) {
|
||||
glutSwapBuffers();
|
||||
}
|
||||
}
|
||||
|
||||
static GLenum Args(int argc, char **argv)
|
||||
{
|
||||
GLint i;
|
||||
|
||||
doubleBuffer = GL_FALSE;
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (strcmp(argv[i], "-sb") == 0) {
|
||||
doubleBuffer = GL_FALSE;
|
||||
} else if (strcmp(argv[i], "-db") == 0) {
|
||||
doubleBuffer = GL_TRUE;
|
||||
} else {
|
||||
fprintf(stderr, "%s (Bad option).\n", argv[i]);
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
GLenum type;
|
||||
|
||||
glutInit(&argc, argv);
|
||||
|
||||
if (Args(argc, argv) == GL_FALSE) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250);
|
||||
|
||||
type = GLUT_RGB | GLUT_ALPHA;
|
||||
type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
|
||||
glutInitDisplayMode(type);
|
||||
|
||||
if (glutCreateWindow(*argv) == GL_FALSE) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Init();
|
||||
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Draw);
|
||||
glutMainLoop();
|
||||
return 0;
|
||||
}
|
||||
171
progs/trivial/dlist-tri-flat-tri.c
Normal file
171
progs/trivial/dlist-tri-flat-tri.c
Normal file
@@ -0,0 +1,171 @@
|
||||
/*
|
||||
* Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and
|
||||
* its documentation for any purpose is hereby granted without fee, provided
|
||||
* that (i) the above copyright notices and this permission notice appear in
|
||||
* all copies of the software and related documentation, and (ii) the name of
|
||||
* Silicon Graphics may not be used in any advertising or
|
||||
* publicity relating to the software without the specific, prior written
|
||||
* permission of Silicon Graphics.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF
|
||||
* ANY KIND,
|
||||
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
||||
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR
|
||||
* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
|
||||
* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
|
||||
* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||
* OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <GL/glut.h>
|
||||
|
||||
|
||||
#define CI_OFFSET_1 16
|
||||
#define CI_OFFSET_2 32
|
||||
|
||||
|
||||
GLenum doubleBuffer;
|
||||
GLint list;
|
||||
|
||||
static void Init(void)
|
||||
{
|
||||
fprintf(stderr, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
|
||||
fprintf(stderr, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
|
||||
fprintf(stderr, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
|
||||
fflush(stderr);
|
||||
|
||||
glClearColor(0.0, 0.0, 1.0, 0.0);
|
||||
|
||||
list = glGenLists(1);
|
||||
glNewList(list, GL_COMPILE);
|
||||
|
||||
glBegin(GL_TRIANGLES);
|
||||
glColor3f(0,0,.7);
|
||||
glVertex3f( 0.9, -0.9, -30.0);
|
||||
glColor3f(.8,0,0);
|
||||
glVertex3f( 0.9, 0.9, -30.0);
|
||||
glColor3f(0,.9,0);
|
||||
glVertex3f(-0.9, 0.0, -30.0);
|
||||
glEnd();
|
||||
|
||||
glShadeModel( GL_FLAT );
|
||||
glBegin(GL_TRIANGLES);
|
||||
glColor3f(0,0,.7);
|
||||
glVertex3f( -0.9, 0.9, -30.0);
|
||||
glColor3f(0,.9,0);
|
||||
glVertex3f( -0.9, -0.9, -30.0);
|
||||
glColor3f(.8,0,0);
|
||||
glVertex3f( 0.9, 0.0, -30.0);
|
||||
glEnd();
|
||||
|
||||
/* This statechange is redundant:
|
||||
*/
|
||||
glShadeModel( GL_FLAT );
|
||||
glBegin(GL_TRIANGLES);
|
||||
glColor3f(1,0,0);
|
||||
glVertex3f( -0.5, 0.5, -30.0);
|
||||
glColor3f(0,1,0);
|
||||
glVertex3f( -0.5, -0.5, -30.0);
|
||||
glColor3f(0,0,1);
|
||||
glVertex3f( 0.5, 0.0, -30.0);
|
||||
glEnd();
|
||||
|
||||
glEndList();
|
||||
}
|
||||
|
||||
static void Reshape(int width, int height)
|
||||
{
|
||||
|
||||
glViewport(0, 0, (GLint)width, (GLint)height);
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
}
|
||||
|
||||
static void Key(unsigned char key, int x, int y)
|
||||
{
|
||||
|
||||
switch (key) {
|
||||
case 27:
|
||||
exit(1);
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void Draw(void)
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
glShadeModel( GL_SMOOTH );
|
||||
glCallList(list);
|
||||
|
||||
glFlush();
|
||||
|
||||
if (doubleBuffer) {
|
||||
glutSwapBuffers();
|
||||
}
|
||||
}
|
||||
|
||||
static GLenum Args(int argc, char **argv)
|
||||
{
|
||||
GLint i;
|
||||
|
||||
doubleBuffer = GL_FALSE;
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (strcmp(argv[i], "-sb") == 0) {
|
||||
doubleBuffer = GL_FALSE;
|
||||
} else if (strcmp(argv[i], "-db") == 0) {
|
||||
doubleBuffer = GL_TRUE;
|
||||
} else {
|
||||
fprintf(stderr, "%s (Bad option).\n", argv[i]);
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
GLenum type;
|
||||
|
||||
glutInit(&argc, argv);
|
||||
|
||||
if (Args(argc, argv) == GL_FALSE) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250);
|
||||
|
||||
type = GLUT_RGB | GLUT_ALPHA;
|
||||
type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
|
||||
glutInitDisplayMode(type);
|
||||
|
||||
if (glutCreateWindow(*argv) == GL_FALSE) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Init();
|
||||
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Draw);
|
||||
glutMainLoop();
|
||||
return 0;
|
||||
}
|
||||
174
progs/trivial/dlist-tri-mat-tri.c
Normal file
174
progs/trivial/dlist-tri-mat-tri.c
Normal file
@@ -0,0 +1,174 @@
|
||||
/*
|
||||
* Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and
|
||||
* its documentation for any purpose is hereby granted without fee, provided
|
||||
* that (i) the above copyright notices and this permission notice appear in
|
||||
* all copies of the software and related documentation, and (ii) the name of
|
||||
* Silicon Graphics may not be used in any advertising or
|
||||
* publicity relating to the software without the specific, prior written
|
||||
* permission of Silicon Graphics.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF
|
||||
* ANY KIND,
|
||||
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
||||
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR
|
||||
* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
|
||||
* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
|
||||
* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||
* OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <GL/glut.h>
|
||||
|
||||
|
||||
#define CI_OFFSET_1 16
|
||||
#define CI_OFFSET_2 32
|
||||
|
||||
|
||||
GLenum doubleBuffer;
|
||||
GLint list;
|
||||
|
||||
static GLfloat red[4] = {0.8, 0.1, 0.0, 1.0};
|
||||
static GLfloat green[4] = {0.0, 0.8, 0.2, 1.0};
|
||||
static GLfloat blue[4] = {0.2, 0.2, .9, 1.0};
|
||||
|
||||
static void Init(void)
|
||||
{
|
||||
fprintf(stderr, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
|
||||
fprintf(stderr, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
|
||||
fprintf(stderr, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
|
||||
fflush(stderr);
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
glEnable(GL_LIGHTING);
|
||||
glEnable(GL_LIGHT0);
|
||||
|
||||
glClearColor(0.0, 0.0, 1.0, 0.0);
|
||||
|
||||
list = glGenLists(1);
|
||||
glNewList(list, GL_COMPILE);
|
||||
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
|
||||
|
||||
glBegin(GL_TRIANGLES);
|
||||
glNormal3f(0,0,.7);
|
||||
glVertex3f( 0.9, -0.9, -30.0);
|
||||
glVertex3f( 0.9, 0.9, -30.0);
|
||||
glVertex3f(-0.9, 0.0, -30.0);
|
||||
glEnd();
|
||||
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
|
||||
|
||||
glBegin(GL_TRIANGLES);
|
||||
glVertex3f( -0.9, 0.9, -30.0);
|
||||
glVertex3f( -0.9, -0.9, -30.0);
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
|
||||
glVertex3f( 0.9, 0.0, -30.0);
|
||||
glEnd();
|
||||
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
|
||||
glBegin(GL_TRIANGLES);
|
||||
glVertex3f( -0.5, 0.5, -30.0);
|
||||
glVertex3f( -0.5, -0.5, -30.0);
|
||||
glVertex3f( 0.5, 0.0, -30.0);
|
||||
glEnd();
|
||||
|
||||
glEndList();
|
||||
}
|
||||
|
||||
static void Reshape(int width, int height)
|
||||
{
|
||||
|
||||
glViewport(0, 0, (GLint)width, (GLint)height);
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
}
|
||||
|
||||
static void Key(unsigned char key, int x, int y)
|
||||
{
|
||||
|
||||
switch (key) {
|
||||
case 27:
|
||||
exit(1);
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
static void Draw(void)
|
||||
{
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
glShadeModel( GL_SMOOTH );
|
||||
glCallList(list);
|
||||
|
||||
glFlush();
|
||||
|
||||
if (doubleBuffer) {
|
||||
glutSwapBuffers();
|
||||
}
|
||||
}
|
||||
|
||||
static GLenum Args(int argc, char **argv)
|
||||
{
|
||||
GLint i;
|
||||
|
||||
doubleBuffer = GL_FALSE;
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (strcmp(argv[i], "-sb") == 0) {
|
||||
doubleBuffer = GL_FALSE;
|
||||
} else if (strcmp(argv[i], "-db") == 0) {
|
||||
doubleBuffer = GL_TRUE;
|
||||
} else {
|
||||
fprintf(stderr, "%s (Bad option).\n", argv[i]);
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
GLenum type;
|
||||
|
||||
glutInit(&argc, argv);
|
||||
|
||||
if (Args(argc, argv) == GL_FALSE) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250);
|
||||
|
||||
type = GLUT_RGB | GLUT_ALPHA;
|
||||
type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
|
||||
glutInitDisplayMode(type);
|
||||
|
||||
if (glutCreateWindow(*argv) == GL_FALSE) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Init();
|
||||
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Draw);
|
||||
glutMainLoop();
|
||||
return 0;
|
||||
}
|
||||
149
progs/trivial/tri-lit-material.c
Normal file
149
progs/trivial/tri-lit-material.c
Normal file
@@ -0,0 +1,149 @@
|
||||
/*
|
||||
* Copyright (c) 1991, 1992, 1993 Silicon Graphics, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this software and
|
||||
* its documentation for any purpose is hereby granted without fee, provided
|
||||
* that (i) the above copyright notices and this permission notice appear in
|
||||
* all copies of the software and related documentation, and (ii) the name of
|
||||
* Silicon Graphics may not be used in any advertising or
|
||||
* publicity relating to the software without the specific, prior written
|
||||
* permission of Silicon Graphics.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF
|
||||
* ANY KIND,
|
||||
* EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
|
||||
* WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* IN NO EVENT SHALL SILICON GRAPHICS BE LIABLE FOR
|
||||
* ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
|
||||
* OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
|
||||
* WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
|
||||
* LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
|
||||
* OF THIS SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <GL/glut.h>
|
||||
|
||||
|
||||
#define CI_OFFSET_1 16
|
||||
#define CI_OFFSET_2 32
|
||||
|
||||
|
||||
GLenum doubleBuffer;
|
||||
|
||||
static void Init(void)
|
||||
{
|
||||
fprintf(stderr, "GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));
|
||||
fprintf(stderr, "GL_VERSION = %s\n", (char *) glGetString(GL_VERSION));
|
||||
fprintf(stderr, "GL_VENDOR = %s\n", (char *) glGetString(GL_VENDOR));
|
||||
fflush(stderr);
|
||||
|
||||
glEnable(GL_LIGHTING);
|
||||
glEnable(GL_LIGHT0);
|
||||
|
||||
glClearColor(0.0, 0.0, 1.0, 0.0);
|
||||
}
|
||||
|
||||
static void Reshape(int width, int height)
|
||||
{
|
||||
|
||||
glViewport(0, 0, (GLint)width, (GLint)height);
|
||||
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
/* glOrtho(-1.0, 1.0, -1.0, 1.0, -0.5, 1000.0); */
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
}
|
||||
|
||||
static void Key(unsigned char key, int x, int y)
|
||||
{
|
||||
|
||||
switch (key) {
|
||||
case 27:
|
||||
exit(1);
|
||||
default:
|
||||
return;
|
||||
}
|
||||
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
static void Draw(void)
|
||||
{
|
||||
static GLfloat red[4] = {0.8, 0.1, 0.0, 1.0};
|
||||
static GLfloat green[4] = {0.0, 0.8, 0.2, 1.0};
|
||||
static GLfloat blue[4] = {0.2, 0.2, .9, 1.0};
|
||||
|
||||
glClear(GL_COLOR_BUFFER_BIT);
|
||||
|
||||
glBegin(GL_TRIANGLES);
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, blue);
|
||||
glNormal3f(0,0,.7);
|
||||
glVertex3f( 0.9, -0.9, -0.0);
|
||||
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, green);
|
||||
glNormal3f(0,0,.8);
|
||||
glVertex3f( 0.9, 0.9, -0.0);
|
||||
|
||||
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, red);
|
||||
glNormal3f(0,0,.9);
|
||||
glVertex3f(-0.9, 0.0, -0.0);
|
||||
glEnd();
|
||||
|
||||
glFlush();
|
||||
|
||||
if (doubleBuffer) {
|
||||
glutSwapBuffers();
|
||||
}
|
||||
}
|
||||
|
||||
static GLenum Args(int argc, char **argv)
|
||||
{
|
||||
GLint i;
|
||||
|
||||
doubleBuffer = GL_FALSE;
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
if (strcmp(argv[i], "-sb") == 0) {
|
||||
doubleBuffer = GL_FALSE;
|
||||
} else if (strcmp(argv[i], "-db") == 0) {
|
||||
doubleBuffer = GL_TRUE;
|
||||
} else {
|
||||
fprintf(stderr, "%s (Bad option).\n", argv[i]);
|
||||
return GL_FALSE;
|
||||
}
|
||||
}
|
||||
return GL_TRUE;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
GLenum type;
|
||||
|
||||
glutInit(&argc, argv);
|
||||
|
||||
if (Args(argc, argv) == GL_FALSE) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
glutInitWindowPosition(0, 0); glutInitWindowSize( 250, 250);
|
||||
|
||||
type = GLUT_RGB | GLUT_ALPHA;
|
||||
type |= (doubleBuffer) ? GLUT_DOUBLE : GLUT_SINGLE;
|
||||
glutInitDisplayMode(type);
|
||||
|
||||
if (glutCreateWindow(*argv) == GL_FALSE) {
|
||||
exit(1);
|
||||
}
|
||||
|
||||
Init();
|
||||
|
||||
glutReshapeFunc(Reshape);
|
||||
glutKeyboardFunc(Key);
|
||||
glutDisplayFunc(Draw);
|
||||
glutMainLoop();
|
||||
return 0;
|
||||
}
|
||||
@@ -9,8 +9,8 @@
|
||||
#include <assert.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <GL/glew.h>
|
||||
#include <GL/glut.h>
|
||||
#include "extfuncs.h"
|
||||
#include "shaderutil.h"
|
||||
|
||||
|
||||
@@ -19,7 +19,6 @@ Init(void)
|
||||
{
|
||||
static GLboolean firstCall = GL_TRUE;
|
||||
if (firstCall) {
|
||||
GetExtensionFuncs();
|
||||
firstCall = GL_FALSE;
|
||||
}
|
||||
}
|
||||
@@ -50,14 +49,14 @@ CompileShaderText(GLenum shaderType, const char *text)
|
||||
|
||||
Init();
|
||||
|
||||
shader = glCreateShader_func(shaderType);
|
||||
glShaderSource_func(shader, 1, (const GLchar **) &text, NULL);
|
||||
glCompileShader_func(shader);
|
||||
glGetShaderiv_func(shader, GL_COMPILE_STATUS, &stat);
|
||||
shader = glCreateShader(shaderType);
|
||||
glShaderSource(shader, 1, (const GLchar **) &text, NULL);
|
||||
glCompileShader(shader);
|
||||
glGetShaderiv(shader, GL_COMPILE_STATUS, &stat);
|
||||
if (!stat) {
|
||||
GLchar log[1000];
|
||||
GLsizei len;
|
||||
glGetShaderInfoLog_func(shader, 1000, &len, log);
|
||||
glGetShaderInfoLog(shader, 1000, &len, log);
|
||||
fprintf(stderr, "Error: problem compiling shader: %s\n", log);
|
||||
exit(1);
|
||||
}
|
||||
@@ -78,8 +77,12 @@ CompileShaderFile(GLenum shaderType, const char *filename)
|
||||
int n;
|
||||
char *buffer = (char*) malloc(max);
|
||||
GLuint shader;
|
||||
FILE *f;
|
||||
|
||||
FILE *f = fopen(filename, "r");
|
||||
Init();
|
||||
|
||||
|
||||
f = fopen(filename, "r");
|
||||
if (!f) {
|
||||
fprintf(stderr, "Unable to open shader file %s\n", filename);
|
||||
return 0;
|
||||
@@ -105,24 +108,24 @@ CompileShaderFile(GLenum shaderType, const char *filename)
|
||||
GLuint
|
||||
LinkShaders(GLuint vertShader, GLuint fragShader)
|
||||
{
|
||||
GLuint program = glCreateProgram_func();
|
||||
GLuint program = glCreateProgram();
|
||||
|
||||
assert(vertShader || fragShader);
|
||||
|
||||
if (fragShader)
|
||||
glAttachShader_func(program, fragShader);
|
||||
glAttachShader(program, fragShader);
|
||||
if (vertShader)
|
||||
glAttachShader_func(program, vertShader);
|
||||
glLinkProgram_func(program);
|
||||
glAttachShader(program, vertShader);
|
||||
glLinkProgram(program);
|
||||
|
||||
/* check link */
|
||||
{
|
||||
GLint stat;
|
||||
glGetProgramiv_func(program, GL_LINK_STATUS, &stat);
|
||||
glGetProgramiv(program, GL_LINK_STATUS, &stat);
|
||||
if (!stat) {
|
||||
GLchar log[1000];
|
||||
GLsizei len;
|
||||
glGetProgramInfoLog_func(program, 1000, &len, log);
|
||||
glGetProgramInfoLog(program, 1000, &len, log);
|
||||
fprintf(stderr, "Shader link error:\n%s\n", log);
|
||||
return 0;
|
||||
}
|
||||
@@ -139,7 +142,7 @@ InitUniforms(GLuint program, struct uniform_info uniforms[])
|
||||
|
||||
for (i = 0; uniforms[i].name; i++) {
|
||||
uniforms[i].location
|
||||
= glGetUniformLocation_func(program, uniforms[i].name);
|
||||
= glGetUniformLocation(program, uniforms[i].name);
|
||||
|
||||
printf("Uniform %s location: %d\n", uniforms[i].name,
|
||||
uniforms[i].location);
|
||||
@@ -147,19 +150,19 @@ InitUniforms(GLuint program, struct uniform_info uniforms[])
|
||||
switch (uniforms[i].size) {
|
||||
case 1:
|
||||
if (uniforms[i].type == GL_INT)
|
||||
glUniform1i_func(uniforms[i].location,
|
||||
glUniform1i(uniforms[i].location,
|
||||
(GLint) uniforms[i].value[0]);
|
||||
else
|
||||
glUniform1fv_func(uniforms[i].location, 1, uniforms[i].value);
|
||||
glUniform1fv(uniforms[i].location, 1, uniforms[i].value);
|
||||
break;
|
||||
case 2:
|
||||
glUniform2fv_func(uniforms[i].location, 1, uniforms[i].value);
|
||||
glUniform2fv(uniforms[i].location, 1, uniforms[i].value);
|
||||
break;
|
||||
case 3:
|
||||
glUniform3fv_func(uniforms[i].location, 1, uniforms[i].value);
|
||||
glUniform3fv(uniforms[i].location, 1, uniforms[i].value);
|
||||
break;
|
||||
case 4:
|
||||
glUniform4fv_func(uniforms[i].location, 1, uniforms[i].value);
|
||||
glUniform4fv(uniforms[i].location, 1, uniforms[i].value);
|
||||
break;
|
||||
default:
|
||||
abort();
|
||||
|
||||
@@ -119,6 +119,12 @@ static void Init( void )
|
||||
glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prognum);
|
||||
glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
|
||||
sz, (const GLubyte *) buf);
|
||||
if (glGetError()) {
|
||||
printf("Program failed to compile:\n%s\n", buf);
|
||||
printf("Error: %s\n",
|
||||
(char *) glGetString(GL_PROGRAM_ERROR_STRING_ARB));
|
||||
exit(1);
|
||||
}
|
||||
assert(glIsProgramARB(prognum));
|
||||
}
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
* -p Open a display connection for each thread
|
||||
* -l Enable application-side locking
|
||||
* -n <num threads> Number of threads to create (default is 2)
|
||||
* -display <display name> Specify X display (default is :0.0)
|
||||
* -display <display name> Specify X display (default is $DISPLAY)
|
||||
* -t Use texture mapping
|
||||
*
|
||||
* Brian Paul 20 July 2000
|
||||
@@ -573,7 +573,7 @@ usage(void)
|
||||
int
|
||||
main(int argc, char *argv[])
|
||||
{
|
||||
char *displayName = ":0.0";
|
||||
char *displayName = NULL;
|
||||
int numThreads = 2;
|
||||
Display *dpy = NULL;
|
||||
int i;
|
||||
|
||||
@@ -378,6 +378,9 @@ make_window( Display *dpy, const char *name,
|
||||
scrnum = DefaultScreen( dpy );
|
||||
root = RootWindow( dpy, scrnum );
|
||||
|
||||
if (visinfo)
|
||||
XFree(visinfo);
|
||||
|
||||
visinfo = glXChooseVisual( dpy, scrnum, attribs );
|
||||
if (!visinfo) {
|
||||
printf("Error: couldn't get an RGB, Double-buffered visual\n");
|
||||
|
||||
@@ -39,6 +39,12 @@
|
||||
#include <GL/gl.h>
|
||||
#include <GL/glx.h>
|
||||
|
||||
#ifndef GLX_MESA_swap_control
|
||||
#define GLX_MESA_swap_control 1
|
||||
typedef int (*PFNGLXGETSWAPINTERVALMESAPROC)(void);
|
||||
#endif
|
||||
|
||||
|
||||
static int is_glx_extension_supported(Display *dpy, const char *query);
|
||||
|
||||
static void query_vsync(Display *dpy);
|
||||
@@ -592,31 +598,22 @@ query_vsync(Display *dpy)
|
||||
int interval = 0;
|
||||
|
||||
|
||||
#ifdef GLX_MESA_swap_control
|
||||
if ((interval <= 0)
|
||||
&& is_glx_extension_supported(dpy, "GLX_MESA_swap_control")) {
|
||||
if (is_glx_extension_supported(dpy, "GLX_MESA_swap_control")) {
|
||||
PFNGLXGETSWAPINTERVALMESAPROC pglXGetSwapIntervalMESA =
|
||||
(PFNGLXGETSWAPINTERVALMESAPROC)
|
||||
glXGetProcAddressARB((const GLubyte *) "glXGetSwapIntervalMESA");
|
||||
|
||||
interval = (*pglXGetSwapIntervalMESA)();
|
||||
} else if (is_glx_extension_supported(dpy, "GLX_SGI_swap_control")) {
|
||||
/* The default swap interval with this extension is 1. Assume that it
|
||||
* is set to the default.
|
||||
*
|
||||
* Many Mesa-based drivers default to 0, but all of these drivers also
|
||||
* export GLX_MESA_swap_control. In that case, this branch will never
|
||||
* be taken, and the correct result should be reported.
|
||||
*/
|
||||
interval = 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef GLX_SGI_video_sync
|
||||
if ((interval <= 0)
|
||||
&& is_glx_extension_supported(dpy, "GLX_SGI_video_sync")) {
|
||||
PFNGLXGETVIDEOSYNCSGIPROC pglXGetVideoSyncSGI =
|
||||
(PFNGLXGETVIDEOSYNCSGIPROC)
|
||||
glXGetProcAddressARB((const GLubyte *) "glXGetVideoSyncSGI");
|
||||
unsigned count;
|
||||
|
||||
if ((*pglXGetVideoSyncSGI)(& count) == 0) {
|
||||
interval = (int) count;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
if (interval > 0) {
|
||||
|
||||
@@ -267,7 +267,8 @@ main(int argc, char *argv[])
|
||||
printf(" glxheads xdisplayname ...\n");
|
||||
printf("Example:\n");
|
||||
printf(" glxheads :0 mars:0 venus:1\n");
|
||||
h = AddHead(":0");
|
||||
|
||||
h = AddHead(XDisplayName(NULL));
|
||||
if (h)
|
||||
PrintInfo(h);
|
||||
}
|
||||
|
||||
@@ -587,6 +587,9 @@ event_loop(Display *dpy, Window win)
|
||||
angle += 2.0;
|
||||
|
||||
draw();
|
||||
|
||||
glXSwapBuffers(dpy, win);
|
||||
|
||||
if ( get_frame_usage != NULL ) {
|
||||
GLfloat temp;
|
||||
|
||||
@@ -594,8 +597,6 @@ event_loop(Display *dpy, Window win)
|
||||
frame_usage += temp;
|
||||
}
|
||||
|
||||
glXSwapBuffers(dpy, win);
|
||||
|
||||
/* calc framerate */
|
||||
{
|
||||
static int t0 = -1;
|
||||
@@ -759,7 +760,7 @@ main(int argc, char *argv[])
|
||||
Display *dpy;
|
||||
Window win;
|
||||
GLXContext ctx;
|
||||
char *dpyName = ":0";
|
||||
char *dpyName = NULL;
|
||||
int swap_interval = 1;
|
||||
GLboolean do_swap_interval = GL_FALSE;
|
||||
GLboolean force_get_rate = GL_FALSE;
|
||||
|
||||
@@ -158,7 +158,7 @@ main(int argc, char *argv[])
|
||||
Display *dpy;
|
||||
Window win;
|
||||
GLXContext ctx;
|
||||
char *dpyName = ":0";
|
||||
char *dpyName = NULL;
|
||||
int i;
|
||||
|
||||
for (i = 1; i < argc; i++) {
|
||||
|
||||
@@ -40,10 +40,11 @@ def get_dxsdk_root(env):
|
||||
except KeyError:
|
||||
return None
|
||||
|
||||
def get_dxsdk_paths(env):
|
||||
def generate(env):
|
||||
dxsdk_root = get_dxsdk_root(env)
|
||||
if dxsdk_root is None:
|
||||
raise SCons.Errors.InternalError, "DirectX SDK not found"
|
||||
# DirectX SDK not found
|
||||
return
|
||||
|
||||
if env['machine'] in ('generic', 'x86'):
|
||||
target_cpu = 'x86'
|
||||
@@ -57,9 +58,6 @@ def get_dxsdk_paths(env):
|
||||
env.Prepend(CPPPATH = [os.path.join(dxsdk_root, 'Include')])
|
||||
env.Prepend(LIBPATH = [os.path.join(dxsdk_root, 'Lib', target_cpu)])
|
||||
|
||||
def generate(env):
|
||||
get_dxsdk_paths(env)
|
||||
|
||||
def exists(env):
|
||||
return get_dxsdk_root(env) is not None
|
||||
|
||||
|
||||
27
scons/fixes.py
Normal file
27
scons/fixes.py
Normal file
@@ -0,0 +1,27 @@
|
||||
import sys
|
||||
|
||||
# Monkey patch os.spawnve on windows to become thread safe
|
||||
if sys.platform == 'win32':
|
||||
import os
|
||||
import threading
|
||||
from os import spawnve as old_spawnve
|
||||
|
||||
spawn_lock = threading.Lock()
|
||||
|
||||
def new_spawnve(mode, file, args, env):
|
||||
spawn_lock.acquire()
|
||||
try:
|
||||
if mode == os.P_WAIT:
|
||||
ret = old_spawnve(os.P_NOWAIT, file, args, env)
|
||||
else:
|
||||
ret = old_spawnve(mode, file, args, env)
|
||||
finally:
|
||||
spawn_lock.release()
|
||||
if mode == os.P_WAIT:
|
||||
pid, status = os.waitpid(ret, 0)
|
||||
ret = status >> 8
|
||||
return ret
|
||||
|
||||
os.spawnve = new_spawnve
|
||||
|
||||
|
||||
@@ -38,6 +38,8 @@ import SCons.Action
|
||||
import SCons.Builder
|
||||
import SCons.Scanner
|
||||
|
||||
import fixes
|
||||
|
||||
|
||||
def quietCommandLines(env):
|
||||
# Quiet command lines
|
||||
@@ -324,8 +326,10 @@ def generate(env):
|
||||
if gcc:
|
||||
if debug:
|
||||
ccflags += ['-O0', '-g3']
|
||||
elif env['toolchain'] == 'crossmingw':
|
||||
ccflags += ['-O0', '-g3'] # mingw 4.2.1 optimizer is broken
|
||||
elif env['CCVERSION'].startswith('4.2.'):
|
||||
# gcc 4.2.x optimizer is broken
|
||||
print "warning: gcc 4.2.x optimizer is broken -- disabling optimizations"
|
||||
ccflags += ['-O0', '-g3']
|
||||
else:
|
||||
ccflags += ['-O3', '-g3']
|
||||
if env['profile']:
|
||||
@@ -448,11 +452,15 @@ def generate(env):
|
||||
|
||||
# Linker options
|
||||
linkflags = []
|
||||
shlinkflags = []
|
||||
if gcc:
|
||||
if env['machine'] == 'x86':
|
||||
linkflags += ['-m32']
|
||||
if env['machine'] == 'x86_64':
|
||||
linkflags += ['-m64']
|
||||
shlinkflags += [
|
||||
'-Wl,-Bsymbolic',
|
||||
]
|
||||
if platform == 'windows' and msvc:
|
||||
# See also:
|
||||
# - http://msdn2.microsoft.com/en-us/library/y0zzbyt4.aspx
|
||||
@@ -500,6 +508,7 @@ def generate(env):
|
||||
'/entry:_DllMainCRTStartup',
|
||||
]
|
||||
env.Append(LINKFLAGS = linkflags)
|
||||
env.Append(SHLINKFLAGS = shlinkflags)
|
||||
|
||||
# Default libs
|
||||
env.Append(LIBS = [])
|
||||
|
||||
@@ -4,7 +4,7 @@ TOP = ../../../..
|
||||
include $(TOP)/configs/current
|
||||
|
||||
|
||||
INCLUDE_DIRS = -I$(TOP)/include -I$(TOP)/src/egl/main
|
||||
INCLUDE_DIRS = -I$(TOP)/include -I$(TOP)/src/egl/main $(X11_INCLUDES)
|
||||
|
||||
|
||||
SOURCES = demo.c
|
||||
|
||||
@@ -4,7 +4,7 @@ TOP = ../../..
|
||||
include $(TOP)/configs/current
|
||||
|
||||
|
||||
INCLUDE_DIRS = -I$(TOP)/include -I$(TOP)/src/mesa/glapi
|
||||
INCLUDE_DIRS = -I$(TOP)/include -I$(TOP)/src/mesa/glapi $(X11_INCLUDES)
|
||||
|
||||
HEADERS = \
|
||||
eglconfig.h \
|
||||
|
||||
@@ -158,6 +158,60 @@ static void do_triangle( struct draw_context *draw,
|
||||
|
||||
|
||||
|
||||
#define QUAD(i0,i1,i2,i3) \
|
||||
do_triangle( draw, \
|
||||
( DRAW_PIPE_RESET_STIPPLE | \
|
||||
DRAW_PIPE_EDGE_FLAG_0 | \
|
||||
DRAW_PIPE_EDGE_FLAG_2 ), \
|
||||
verts + stride * elts[i0], \
|
||||
verts + stride * elts[i1], \
|
||||
verts + stride * elts[i3]); \
|
||||
do_triangle( draw, \
|
||||
( DRAW_PIPE_EDGE_FLAG_0 | \
|
||||
DRAW_PIPE_EDGE_FLAG_1 ), \
|
||||
verts + stride * elts[i1], \
|
||||
verts + stride * elts[i2], \
|
||||
verts + stride * elts[i3])
|
||||
|
||||
#define TRIANGLE(flags,i0,i1,i2) \
|
||||
do_triangle( draw, \
|
||||
elts[i0], /* flags */ \
|
||||
verts + stride * (elts[i0] & ~DRAW_PIPE_FLAG_MASK), \
|
||||
verts + stride * elts[i1], \
|
||||
verts + stride * elts[i2])
|
||||
|
||||
#define LINE(flags,i0,i1) \
|
||||
do_line( draw, \
|
||||
elts[i0], \
|
||||
verts + stride * (elts[i0] & ~DRAW_PIPE_FLAG_MASK), \
|
||||
verts + stride * elts[i1])
|
||||
|
||||
#define POINT(i0) \
|
||||
do_point( draw, \
|
||||
verts + stride * elts[i0] )
|
||||
|
||||
#define FUNC pipe_run
|
||||
#define ARGS \
|
||||
struct draw_context *draw, \
|
||||
unsigned prim, \
|
||||
struct vertex_header *vertices, \
|
||||
unsigned stride, \
|
||||
const ushort *elts
|
||||
|
||||
#define LOCAL_VARS \
|
||||
char *verts = (char *)vertices; \
|
||||
boolean flatfirst = (draw->rasterizer->flatshade && \
|
||||
draw->rasterizer->flatshade_first); \
|
||||
unsigned i; \
|
||||
ushort flags
|
||||
|
||||
#define FLUSH
|
||||
|
||||
#include "draw_pt_decompose.h"
|
||||
#undef ARGS
|
||||
#undef LOCAL_VARS
|
||||
|
||||
|
||||
|
||||
/* Code to run the pipeline on a fairly arbitary collection of vertices.
|
||||
*
|
||||
@@ -178,34 +232,12 @@ void draw_pipeline_run( struct draw_context *draw,
|
||||
unsigned count )
|
||||
{
|
||||
char *verts = (char *)vertices;
|
||||
unsigned i;
|
||||
|
||||
draw->pipeline.verts = verts;
|
||||
draw->pipeline.vertex_stride = stride;
|
||||
draw->pipeline.vertex_count = vertex_count;
|
||||
|
||||
switch (prim) {
|
||||
case PIPE_PRIM_POINTS:
|
||||
for (i = 0; i < count; i++)
|
||||
do_point( draw,
|
||||
verts + stride * elts[i] );
|
||||
break;
|
||||
case PIPE_PRIM_LINES:
|
||||
for (i = 0; i+1 < count; i += 2)
|
||||
do_line( draw,
|
||||
elts[i+0], /* flags */
|
||||
verts + stride * (elts[i+0] & ~DRAW_PIPE_FLAG_MASK),
|
||||
verts + stride * elts[i+1]);
|
||||
break;
|
||||
case PIPE_PRIM_TRIANGLES:
|
||||
for (i = 0; i+2 < count; i += 3)
|
||||
do_triangle( draw,
|
||||
elts[i+0], /* flags */
|
||||
verts + stride * (elts[i+0] & ~DRAW_PIPE_FLAG_MASK),
|
||||
verts + stride * elts[i+1],
|
||||
verts + stride * elts[i+2]);
|
||||
break;
|
||||
}
|
||||
pipe_run(draw, prim, vertices, stride, elts, count);
|
||||
|
||||
draw->pipeline.verts = NULL;
|
||||
draw->pipeline.vertex_count = 0;
|
||||
|
||||
@@ -139,8 +139,8 @@ tgsi_build_declaration(
|
||||
{
|
||||
struct tgsi_declaration declaration;
|
||||
|
||||
assert( file <= TGSI_FILE_IMMEDIATE );
|
||||
assert( interpolate <= TGSI_INTERPOLATE_PERSPECTIVE );
|
||||
assert( file < TGSI_FILE_COUNT );
|
||||
assert( interpolate < TGSI_INTERPOLATE_COUNT );
|
||||
|
||||
declaration = tgsi_default_declaration();
|
||||
declaration.File = file;
|
||||
@@ -477,6 +477,8 @@ tgsi_default_full_instruction( void )
|
||||
full_instruction.FullSrcRegisters[i] = tgsi_default_full_src_register();
|
||||
}
|
||||
|
||||
full_instruction.Flags = 0x0;
|
||||
|
||||
return full_instruction;
|
||||
}
|
||||
|
||||
@@ -584,6 +586,7 @@ tgsi_build_full_instruction(
|
||||
*dst_register = tgsi_build_dst_register(
|
||||
reg->DstRegister.File,
|
||||
reg->DstRegister.WriteMask,
|
||||
reg->DstRegister.Indirect,
|
||||
reg->DstRegister.Index,
|
||||
instruction,
|
||||
header );
|
||||
@@ -631,6 +634,28 @@ tgsi_build_full_instruction(
|
||||
header );
|
||||
prev_token = (struct tgsi_token *) dst_register_ext_modulate;
|
||||
}
|
||||
|
||||
if( reg->DstRegister.Indirect ) {
|
||||
struct tgsi_src_register *ind;
|
||||
|
||||
if( maxsize <= size )
|
||||
return 0;
|
||||
ind = (struct tgsi_src_register *) &tokens[size];
|
||||
size++;
|
||||
|
||||
*ind = tgsi_build_src_register(
|
||||
reg->DstRegisterInd.File,
|
||||
reg->DstRegisterInd.SwizzleX,
|
||||
reg->DstRegisterInd.SwizzleY,
|
||||
reg->DstRegisterInd.SwizzleZ,
|
||||
reg->DstRegisterInd.SwizzleW,
|
||||
reg->DstRegisterInd.Negate,
|
||||
reg->DstRegisterInd.Indirect,
|
||||
reg->DstRegisterInd.Dimension,
|
||||
reg->DstRegisterInd.Index,
|
||||
instruction,
|
||||
header );
|
||||
}
|
||||
}
|
||||
|
||||
for( i = 0; i < full_inst->Instruction.NumSrcRegs; i++ ) {
|
||||
@@ -973,7 +998,7 @@ tgsi_build_src_register(
|
||||
{
|
||||
struct tgsi_src_register src_register;
|
||||
|
||||
assert( file <= TGSI_FILE_IMMEDIATE );
|
||||
assert( file < TGSI_FILE_COUNT );
|
||||
assert( swizzle_x <= TGSI_SWIZZLE_W );
|
||||
assert( swizzle_y <= TGSI_SWIZZLE_W );
|
||||
assert( swizzle_z <= TGSI_SWIZZLE_W );
|
||||
@@ -1194,13 +1219,14 @@ struct tgsi_dst_register
|
||||
tgsi_build_dst_register(
|
||||
unsigned file,
|
||||
unsigned mask,
|
||||
unsigned indirect,
|
||||
int index,
|
||||
struct tgsi_instruction *instruction,
|
||||
struct tgsi_header *header )
|
||||
{
|
||||
struct tgsi_dst_register dst_register;
|
||||
|
||||
assert( file <= TGSI_FILE_IMMEDIATE );
|
||||
assert( file < TGSI_FILE_COUNT );
|
||||
assert( mask <= TGSI_WRITEMASK_XYZW );
|
||||
assert( index >= -32768 && index <= 32767 );
|
||||
|
||||
@@ -1208,6 +1234,7 @@ tgsi_build_dst_register(
|
||||
dst_register.File = file;
|
||||
dst_register.WriteMask = mask;
|
||||
dst_register.Index = index;
|
||||
dst_register.Indirect = indirect;
|
||||
|
||||
instruction_grow( instruction, header );
|
||||
|
||||
@@ -1220,6 +1247,7 @@ tgsi_default_full_dst_register( void )
|
||||
struct tgsi_full_dst_register full_dst_register;
|
||||
|
||||
full_dst_register.DstRegister = tgsi_default_dst_register();
|
||||
full_dst_register.DstRegisterInd = tgsi_default_src_register();
|
||||
full_dst_register.DstRegisterExtConcode =
|
||||
tgsi_default_dst_register_ext_concode();
|
||||
full_dst_register.DstRegisterExtModulate =
|
||||
|
||||
@@ -289,6 +289,7 @@ struct tgsi_dst_register
|
||||
tgsi_build_dst_register(
|
||||
unsigned file,
|
||||
unsigned mask,
|
||||
unsigned indirect,
|
||||
int index,
|
||||
struct tgsi_instruction *instruction,
|
||||
struct tgsi_header *header );
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
#include "util/u_debug.h"
|
||||
#include "util/u_string.h"
|
||||
#include "util/u_math.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "tgsi_dump.h"
|
||||
#include "tgsi_info.h"
|
||||
#include "tgsi_iterate.h"
|
||||
@@ -108,7 +109,8 @@ static const char *semantic_names[] =
|
||||
"FOG",
|
||||
"PSIZE",
|
||||
"GENERIC",
|
||||
"NORMAL"
|
||||
"NORMAL",
|
||||
"FACE"
|
||||
};
|
||||
|
||||
static const char *immediate_type_names[] =
|
||||
@@ -224,6 +226,9 @@ iter_declaration(
|
||||
{
|
||||
struct dump_ctx *ctx = (struct dump_ctx *)iter;
|
||||
|
||||
assert(Elements(semantic_names) == TGSI_SEMANTIC_COUNT);
|
||||
assert(Elements(interpolate_names) == TGSI_INTERPOLATE_COUNT);
|
||||
|
||||
TXT( "DCL " );
|
||||
|
||||
_dump_register(
|
||||
@@ -355,11 +360,22 @@ iter_instruction(
|
||||
CHR( ',' );
|
||||
CHR( ' ' );
|
||||
|
||||
_dump_register(
|
||||
ctx,
|
||||
dst->DstRegister.File,
|
||||
dst->DstRegister.Index,
|
||||
dst->DstRegister.Index );
|
||||
if (dst->DstRegister.Indirect) {
|
||||
_dump_register_ind(
|
||||
ctx,
|
||||
dst->DstRegister.File,
|
||||
dst->DstRegister.Index,
|
||||
dst->DstRegisterInd.File,
|
||||
dst->DstRegisterInd.Index,
|
||||
dst->DstRegisterInd.SwizzleX );
|
||||
}
|
||||
else {
|
||||
_dump_register(
|
||||
ctx,
|
||||
dst->DstRegister.File,
|
||||
dst->DstRegister.Index,
|
||||
dst->DstRegister.Index );
|
||||
}
|
||||
ENM( dst->DstRegisterExtModulate.Modulate, modulate_names );
|
||||
_dump_writemask( ctx, dst->DstRegister.WriteMask );
|
||||
|
||||
|
||||
@@ -62,6 +62,9 @@
|
||||
|
||||
#define FAST_MATH 1
|
||||
|
||||
/** for tgsi_full_instruction::Flags */
|
||||
#define SOA_DEPENDENCY_FLAG 0x1
|
||||
|
||||
#define TILE_TOP_LEFT 0
|
||||
#define TILE_TOP_RIGHT 1
|
||||
#define TILE_BOTTOM_LEFT 2
|
||||
@@ -182,7 +185,7 @@ print_temp(const struct tgsi_exec_machine *mach, uint index)
|
||||
* MOV t3, t2;
|
||||
* The second instruction will have the wrong value for t0 if executed as-is.
|
||||
*/
|
||||
static boolean
|
||||
boolean
|
||||
tgsi_check_soa_dependencies(const struct tgsi_full_instruction *inst)
|
||||
{
|
||||
uint i, chan;
|
||||
@@ -328,20 +331,25 @@ tgsi_exec_machine_bind_shader(
|
||||
* sizeof(struct tgsi_full_instruction));
|
||||
maxInstructions += 10;
|
||||
}
|
||||
|
||||
if (tgsi_check_soa_dependencies(&parse.FullToken.FullInstruction)) {
|
||||
uint opcode = parse.FullToken.FullInstruction.Instruction.Opcode;
|
||||
parse.FullToken.FullInstruction.Flags = SOA_DEPENDENCY_FLAG;
|
||||
/* XXX we only handle SOA dependencies properly for MOV/SWZ
|
||||
* at this time!
|
||||
*/
|
||||
if (opcode != TGSI_OPCODE_MOV && opcode != TGSI_OPCODE_SWZ) {
|
||||
debug_printf("Warning: SOA dependency in instruction"
|
||||
" is not handled:\n");
|
||||
tgsi_dump_instruction(&parse.FullToken.FullInstruction,
|
||||
numInstructions);
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(instructions + numInstructions,
|
||||
&parse.FullToken.FullInstruction,
|
||||
sizeof(instructions[0]));
|
||||
|
||||
#if 0
|
||||
if (tgsi_check_soa_dependencies(&parse.FullToken.FullInstruction)) {
|
||||
debug_printf("SOA dependency in instruction:\n");
|
||||
tgsi_dump_instruction(&parse.FullToken.FullInstruction,
|
||||
numInstructions);
|
||||
}
|
||||
#else
|
||||
(void) tgsi_check_soa_dependencies;
|
||||
#endif
|
||||
|
||||
numInstructions++;
|
||||
break;
|
||||
|
||||
@@ -1395,28 +1403,69 @@ store_dest(
|
||||
union tgsi_exec_channel null;
|
||||
union tgsi_exec_channel *dst;
|
||||
uint execmask = mach->ExecMask;
|
||||
int offset = 0; /* indirection offset */
|
||||
int index;
|
||||
|
||||
#ifdef DEBUG
|
||||
check_inf_or_nan(chan);
|
||||
#endif
|
||||
|
||||
/* There is an extra source register that indirectly subscripts
|
||||
* a register file. The direct index now becomes an offset
|
||||
* that is being added to the indirect register.
|
||||
*
|
||||
* file[ind[2].x+1],
|
||||
* where:
|
||||
* ind = DstRegisterInd.File
|
||||
* [2] = DstRegisterInd.Index
|
||||
* .x = DstRegisterInd.SwizzleX
|
||||
*/
|
||||
if (reg->DstRegister.Indirect) {
|
||||
union tgsi_exec_channel index;
|
||||
union tgsi_exec_channel indir_index;
|
||||
uint swizzle;
|
||||
|
||||
/* which address register (always zero for now) */
|
||||
index.i[0] =
|
||||
index.i[1] =
|
||||
index.i[2] =
|
||||
index.i[3] = reg->DstRegisterInd.Index;
|
||||
|
||||
/* get current value of address register[swizzle] */
|
||||
swizzle = tgsi_util_get_src_register_swizzle( ®->DstRegisterInd, CHAN_X );
|
||||
|
||||
/* fetch values from the address/indirection register */
|
||||
fetch_src_file_channel(
|
||||
mach,
|
||||
reg->DstRegisterInd.File,
|
||||
swizzle,
|
||||
&index,
|
||||
&indir_index );
|
||||
|
||||
/* save indirection offset */
|
||||
offset = (int) indir_index.f[0];
|
||||
}
|
||||
|
||||
switch (reg->DstRegister.File) {
|
||||
case TGSI_FILE_NULL:
|
||||
dst = &null;
|
||||
break;
|
||||
|
||||
case TGSI_FILE_OUTPUT:
|
||||
dst = &mach->Outputs[mach->Temps[TEMP_OUTPUT_I].xyzw[TEMP_OUTPUT_C].u[0]
|
||||
+ reg->DstRegister.Index].xyzw[chan_index];
|
||||
index = mach->Temps[TEMP_OUTPUT_I].xyzw[TEMP_OUTPUT_C].u[0]
|
||||
+ reg->DstRegister.Index;
|
||||
dst = &mach->Outputs[offset + index].xyzw[chan_index];
|
||||
break;
|
||||
|
||||
case TGSI_FILE_TEMPORARY:
|
||||
assert( reg->DstRegister.Index < TGSI_EXEC_NUM_TEMPS );
|
||||
dst = &mach->Temps[reg->DstRegister.Index].xyzw[chan_index];
|
||||
index = reg->DstRegister.Index;
|
||||
assert( index < TGSI_EXEC_NUM_TEMPS );
|
||||
dst = &mach->Temps[offset + index].xyzw[chan_index];
|
||||
break;
|
||||
|
||||
case TGSI_FILE_ADDRESS:
|
||||
dst = &mach->Addrs[reg->DstRegister.Index].xyzw[chan_index];
|
||||
index = reg->DstRegister.Index;
|
||||
dst = &mach->Addrs[index].xyzw[chan_index];
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -1977,9 +2026,23 @@ exec_instruction(
|
||||
|
||||
case TGSI_OPCODE_MOV:
|
||||
case TGSI_OPCODE_SWZ:
|
||||
FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
|
||||
FETCH( &r[0], 0, chan_index );
|
||||
STORE( &r[0], 0, chan_index );
|
||||
if (inst->Flags & SOA_DEPENDENCY_FLAG) {
|
||||
/* Do all fetches into temp regs, then do all stores to avoid
|
||||
* intermediate/accidental clobbering. This could be done all the
|
||||
* time for MOV but for other instructions we'll need more temps...
|
||||
*/
|
||||
FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
|
||||
FETCH( &r[chan_index], 0, chan_index );
|
||||
}
|
||||
FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
|
||||
STORE( &r[chan_index], 0, chan_index );
|
||||
}
|
||||
}
|
||||
else {
|
||||
FOR_EACH_ENABLED_CHANNEL( *inst, chan_index ) {
|
||||
FETCH( &r[0], 0, chan_index );
|
||||
STORE( &r[0], 0, chan_index );
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
|
||||
@@ -272,6 +272,10 @@ void
|
||||
tgsi_exec_machine_free_data(struct tgsi_exec_machine *mach);
|
||||
|
||||
|
||||
boolean
|
||||
tgsi_check_soa_dependencies(const struct tgsi_full_instruction *inst);
|
||||
|
||||
|
||||
static INLINE void
|
||||
tgsi_set_kill_mask(struct tgsi_exec_machine *mach, unsigned mask)
|
||||
{
|
||||
|
||||
@@ -219,7 +219,6 @@ tgsi_parse_token(
|
||||
/*
|
||||
* No support for indirect or multi-dimensional addressing.
|
||||
*/
|
||||
assert( !inst->FullDstRegisters[i].DstRegister.Indirect );
|
||||
assert( !inst->FullDstRegisters[i].DstRegister.Dimension );
|
||||
|
||||
extended = inst->FullDstRegisters[i].DstRegister.Extended;
|
||||
@@ -246,6 +245,17 @@ tgsi_parse_token(
|
||||
|
||||
extended = token.Extended;
|
||||
}
|
||||
|
||||
if( inst->FullDstRegisters[i].DstRegister.Indirect ) {
|
||||
next_token( ctx, &inst->FullDstRegisters[i].DstRegisterInd );
|
||||
|
||||
/*
|
||||
* No support for indirect or multi-dimensional addressing.
|
||||
*/
|
||||
assert( !inst->FullDstRegisters[i].DstRegisterInd.Indirect );
|
||||
assert( !inst->FullDstRegisters[i].DstRegisterInd.Dimension );
|
||||
assert( !inst->FullDstRegisters[i].DstRegisterInd.Extended );
|
||||
}
|
||||
}
|
||||
|
||||
assert( inst->Instruction.NumSrcRegs <= TGSI_FULL_MAX_SRC_REGISTERS );
|
||||
|
||||
@@ -48,6 +48,7 @@ struct tgsi_full_header
|
||||
struct tgsi_full_dst_register
|
||||
{
|
||||
struct tgsi_dst_register DstRegister;
|
||||
struct tgsi_src_register DstRegisterInd;
|
||||
struct tgsi_dst_register_ext_concode DstRegisterExtConcode;
|
||||
struct tgsi_dst_register_ext_modulate DstRegisterExtModulate;
|
||||
};
|
||||
@@ -90,6 +91,7 @@ struct tgsi_full_instruction
|
||||
struct tgsi_instruction_ext_texture InstructionExtTexture;
|
||||
struct tgsi_full_dst_register FullDstRegisters[TGSI_FULL_MAX_DST_REGISTERS];
|
||||
struct tgsi_full_src_register FullSrcRegisters[TGSI_FULL_MAX_SRC_REGISTERS];
|
||||
uint Flags; /**< user-defined usage */
|
||||
};
|
||||
|
||||
union tgsi_full_token
|
||||
|
||||
@@ -1107,6 +1107,15 @@ static int
|
||||
emit_instruction(struct gen_context *gen,
|
||||
struct tgsi_full_instruction *inst)
|
||||
{
|
||||
|
||||
/* we don't handle saturation/clamping yet */
|
||||
if (inst->Instruction.Saturate != TGSI_SAT_NONE)
|
||||
return 0;
|
||||
|
||||
/* need to use extra temps to fix SOA dependencies : */
|
||||
if (tgsi_check_soa_dependencies(inst))
|
||||
return FALSE;
|
||||
|
||||
switch (inst->Instruction.Opcode) {
|
||||
case TGSI_OPCODE_MOV:
|
||||
case TGSI_OPCODE_SWZ:
|
||||
|
||||
@@ -1502,6 +1502,14 @@ emit_instruction(
|
||||
if (indirect_temp_reference(inst))
|
||||
return FALSE;
|
||||
|
||||
/* we don't handle saturation/clamping yet */
|
||||
if (inst->Instruction.Saturate != TGSI_SAT_NONE)
|
||||
return FALSE;
|
||||
|
||||
/* need to use extra temps to fix SOA dependencies : */
|
||||
if (tgsi_check_soa_dependencies(inst))
|
||||
return FALSE;
|
||||
|
||||
switch (inst->Instruction.Opcode) {
|
||||
case TGSI_OPCODE_ARL:
|
||||
FOR_EACH_DST0_ENABLED_CHANNEL( *inst, chan_index ) {
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
**************************************************************************/
|
||||
|
||||
#include "util/u_debug.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "tgsi_text.h"
|
||||
#include "tgsi_build.h"
|
||||
#include "tgsi_info.h"
|
||||
@@ -927,7 +928,8 @@ static const char *semantic_names[TGSI_SEMANTIC_COUNT] =
|
||||
"FOG",
|
||||
"PSIZE",
|
||||
"GENERIC",
|
||||
"NORMAL"
|
||||
"NORMAL",
|
||||
"FACE"
|
||||
};
|
||||
|
||||
static const char *interpolate_names[TGSI_INTERPOLATE_COUNT] =
|
||||
@@ -947,6 +949,9 @@ static boolean parse_declaration( struct translate_ctx *ctx )
|
||||
const char *cur;
|
||||
uint advance;
|
||||
|
||||
assert(Elements(semantic_names) == TGSI_SEMANTIC_COUNT);
|
||||
assert(Elements(interpolate_names) == TGSI_INTERPOLATE_COUNT);
|
||||
|
||||
if (!eat_white( &ctx->cur )) {
|
||||
report_error( ctx, "Syntax error" );
|
||||
return FALSE;
|
||||
|
||||
@@ -45,6 +45,7 @@
|
||||
#include "util/u_math.h"
|
||||
#include "util/u_memory.h"
|
||||
#include "util/u_simple_shaders.h"
|
||||
#include "util/u_surface.h"
|
||||
|
||||
#include "cso_cache/cso_context.h"
|
||||
|
||||
@@ -61,7 +62,7 @@ struct blit_state
|
||||
struct pipe_viewport_state viewport;
|
||||
|
||||
void *vs;
|
||||
void *fs;
|
||||
void *fs[TGSI_WRITEMASK_XYZW + 1];
|
||||
|
||||
struct pipe_buffer *vbuf; /**< quad vertices */
|
||||
unsigned vbuf_slot;
|
||||
@@ -124,7 +125,7 @@ util_create_blit(struct pipe_context *pipe, struct cso_context *cso)
|
||||
}
|
||||
|
||||
/* fragment shader */
|
||||
ctx->fs = util_make_fragment_tex_shader(pipe);
|
||||
ctx->fs[TGSI_WRITEMASK_XYZW] = util_make_fragment_tex_shader(pipe);
|
||||
ctx->vbuf = NULL;
|
||||
|
||||
/* init vertex data that doesn't change */
|
||||
@@ -145,9 +146,13 @@ void
|
||||
util_destroy_blit(struct blit_state *ctx)
|
||||
{
|
||||
struct pipe_context *pipe = ctx->pipe;
|
||||
unsigned i;
|
||||
|
||||
pipe->delete_vs_state(pipe, ctx->vs);
|
||||
pipe->delete_fs_state(pipe, ctx->fs);
|
||||
|
||||
for (i = 0; i < Elements(ctx->fs); i++)
|
||||
if (ctx->fs[i])
|
||||
pipe->delete_fs_state(pipe, ctx->fs[i]);
|
||||
|
||||
pipe_buffer_reference(&ctx->vbuf, NULL);
|
||||
|
||||
@@ -155,7 +160,11 @@ util_destroy_blit(struct blit_state *ctx)
|
||||
}
|
||||
|
||||
|
||||
static unsigned get_next_slot( struct blit_state *ctx )
|
||||
/**
|
||||
* Get offset of next free slot in vertex buffer for quad vertices.
|
||||
*/
|
||||
static unsigned
|
||||
get_next_slot( struct blit_state *ctx )
|
||||
{
|
||||
const unsigned max_slots = 4096 / sizeof ctx->vertices;
|
||||
|
||||
@@ -173,7 +182,6 @@ static unsigned get_next_slot( struct blit_state *ctx )
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Setup vertex data for the textured quad we'll draw.
|
||||
* Note: y=0=top
|
||||
@@ -260,20 +268,50 @@ setup_vertex_data_tex(struct blit_state *ctx,
|
||||
|
||||
return offset;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* \return TRUE if two regions overlap, FALSE otherwise
|
||||
*/
|
||||
static boolean
|
||||
regions_overlap(int srcX0, int srcY0,
|
||||
int srcX1, int srcY1,
|
||||
int dstX0, int dstY0,
|
||||
int dstX1, int dstY1)
|
||||
{
|
||||
if (MAX2(srcX0, srcX1) < MIN2(dstX0, dstX1))
|
||||
return FALSE; /* src completely left of dst */
|
||||
|
||||
if (MAX2(dstX0, dstX1) < MIN2(srcX0, srcX1))
|
||||
return FALSE; /* dst completely left of src */
|
||||
|
||||
if (MAX2(srcY0, srcY1) < MIN2(dstY0, dstY1))
|
||||
return FALSE; /* src completely above dst */
|
||||
|
||||
if (MAX2(dstY0, dstY1) < MIN2(srcY0, srcY1))
|
||||
return FALSE; /* dst completely above src */
|
||||
|
||||
return TRUE; /* some overlap */
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Copy pixel block from src surface to dst surface.
|
||||
* Overlapping regions are acceptable.
|
||||
* Flipping and stretching are supported.
|
||||
* XXX what about clipping???
|
||||
* XXX need some control over blitting Z and/or stencil.
|
||||
*/
|
||||
void
|
||||
util_blit_pixels(struct blit_state *ctx,
|
||||
struct pipe_surface *src,
|
||||
int srcX0, int srcY0,
|
||||
int srcX1, int srcY1,
|
||||
struct pipe_surface *dst,
|
||||
int dstX0, int dstY0,
|
||||
int dstX1, int dstY1,
|
||||
float z, uint filter)
|
||||
util_blit_pixels_writemask(struct blit_state *ctx,
|
||||
struct pipe_surface *src,
|
||||
int srcX0, int srcY0,
|
||||
int srcX1, int srcY1,
|
||||
struct pipe_surface *dst,
|
||||
int dstX0, int dstY0,
|
||||
int dstX1, int dstY1,
|
||||
float z, uint filter,
|
||||
uint writemask)
|
||||
{
|
||||
struct pipe_context *pipe = ctx->pipe;
|
||||
struct pipe_screen *screen = pipe->screen;
|
||||
@@ -285,10 +323,41 @@ util_blit_pixels(struct blit_state *ctx,
|
||||
const int srcLeft = MIN2(srcX0, srcX1);
|
||||
const int srcTop = MIN2(srcY0, srcY1);
|
||||
unsigned offset;
|
||||
boolean overlap;
|
||||
|
||||
assert(filter == PIPE_TEX_MIPFILTER_NEAREST ||
|
||||
filter == PIPE_TEX_MIPFILTER_LINEAR);
|
||||
|
||||
assert(screen->is_format_supported(screen, src->format, PIPE_TEXTURE_2D,
|
||||
PIPE_TEXTURE_USAGE_SAMPLER, 0));
|
||||
assert(screen->is_format_supported(screen, dst->format, PIPE_TEXTURE_2D,
|
||||
PIPE_TEXTURE_USAGE_RENDER_TARGET, 0));
|
||||
|
||||
/* do the regions overlap? */
|
||||
overlap = util_same_surface(src, dst) &&
|
||||
regions_overlap(srcX0, srcY0, srcX1, srcY1,
|
||||
dstX0, dstY0, dstX1, dstY1);
|
||||
|
||||
/*
|
||||
* Check for simple case: no format conversion, no flipping, no stretching,
|
||||
* no overlapping.
|
||||
* Filter mode should not matter since there's no stretching.
|
||||
*/
|
||||
if (dst->format == src->format &&
|
||||
srcX0 < srcX1 &&
|
||||
dstX0 < dstX1 &&
|
||||
srcY0 < srcY1 &&
|
||||
dstY0 < dstY1 &&
|
||||
(dstX1 - dstX0) == (srcX1 - srcX0) &&
|
||||
(dstY1 - dstY0) == (srcY1 - srcY0) &&
|
||||
!overlap) {
|
||||
pipe->surface_copy(pipe,
|
||||
dst, dstX0, dstY0, /* dest */
|
||||
src, srcX0, srcY0, /* src */
|
||||
srcW, srcH); /* size */
|
||||
return;
|
||||
}
|
||||
|
||||
if (srcLeft != srcX0) {
|
||||
/* left-right flip */
|
||||
int tmp = dstX0;
|
||||
@@ -303,20 +372,6 @@ util_blit_pixels(struct blit_state *ctx,
|
||||
dstY1 = tmp;
|
||||
}
|
||||
|
||||
assert(screen->is_format_supported(screen, src->format, PIPE_TEXTURE_2D,
|
||||
PIPE_TEXTURE_USAGE_SAMPLER, 0));
|
||||
assert(screen->is_format_supported(screen, dst->format, PIPE_TEXTURE_2D,
|
||||
PIPE_TEXTURE_USAGE_SAMPLER, 0));
|
||||
|
||||
if(dst->format == src->format && (dstX1 - dstX0) == srcW && (dstY1 - dstY0) == srcH) {
|
||||
/* FIXME: this will most surely fail for overlapping rectangles */
|
||||
pipe->surface_copy(pipe,
|
||||
dst, dstX0, dstY0, /* dest */
|
||||
src, srcX0, srcY0, /* src */
|
||||
srcW, srcH); /* size */
|
||||
return;
|
||||
}
|
||||
|
||||
assert(screen->is_format_supported(screen, dst->format, PIPE_TEXTURE_2D,
|
||||
PIPE_TEXTURE_USAGE_RENDER_TARGET, 0));
|
||||
|
||||
@@ -376,8 +431,11 @@ util_blit_pixels(struct blit_state *ctx,
|
||||
/* texture */
|
||||
cso_set_sampler_textures(ctx->cso, 1, &tex);
|
||||
|
||||
if (ctx->fs[writemask] == NULL)
|
||||
ctx->fs[writemask] = util_make_fragment_tex_shader_writemask(pipe, writemask);
|
||||
|
||||
/* shaders */
|
||||
cso_set_fragment_shader_handle(ctx->cso, ctx->fs);
|
||||
cso_set_fragment_shader_handle(ctx->cso, ctx->fs[writemask]);
|
||||
cso_set_vertex_shader_handle(ctx->cso, ctx->vs);
|
||||
|
||||
/* drawing dest */
|
||||
@@ -412,6 +470,27 @@ util_blit_pixels(struct blit_state *ctx,
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
util_blit_pixels(struct blit_state *ctx,
|
||||
struct pipe_surface *src,
|
||||
int srcX0, int srcY0,
|
||||
int srcX1, int srcY1,
|
||||
struct pipe_surface *dst,
|
||||
int dstX0, int dstY0,
|
||||
int dstX1, int dstY1,
|
||||
float z, uint filter )
|
||||
{
|
||||
util_blit_pixels_writemask( ctx, src,
|
||||
srcX0, srcY0,
|
||||
srcX1, srcY1,
|
||||
dst,
|
||||
dstX0, dstY0,
|
||||
dstX1, dstY1,
|
||||
z, filter,
|
||||
TGSI_WRITEMASK_XYZW );
|
||||
}
|
||||
|
||||
|
||||
/* Release vertex buffer at end of frame to avoid synchronous
|
||||
* rendering.
|
||||
*/
|
||||
@@ -485,7 +564,7 @@ util_blit_pixels_tex(struct blit_state *ctx,
|
||||
cso_set_sampler_textures(ctx->cso, 1, &tex);
|
||||
|
||||
/* shaders */
|
||||
cso_set_fragment_shader_handle(ctx->cso, ctx->fs);
|
||||
cso_set_fragment_shader_handle(ctx->cso, ctx->fs[TGSI_WRITEMASK_XYZW]);
|
||||
cso_set_vertex_shader_handle(ctx->cso, ctx->vs);
|
||||
|
||||
/* drawing dest */
|
||||
|
||||
@@ -60,6 +60,17 @@ util_blit_pixels(struct blit_state *ctx,
|
||||
int dstX1, int dstY1,
|
||||
float z, uint filter);
|
||||
|
||||
void
|
||||
util_blit_pixels_writemask(struct blit_state *ctx,
|
||||
struct pipe_surface *src,
|
||||
int srcX0, int srcY0,
|
||||
int srcX1, int srcY1,
|
||||
struct pipe_surface *dst,
|
||||
int dstX0, int dstY0,
|
||||
int dstX1, int dstY1,
|
||||
float z, uint filter,
|
||||
uint writemask);
|
||||
|
||||
extern void
|
||||
util_blit_pixels_tex(struct blit_state *ctx,
|
||||
struct pipe_texture *tex,
|
||||
|
||||
@@ -97,10 +97,8 @@ void _debug_vprintf(const char *format, va_list ap)
|
||||
buf[0] = '\0';
|
||||
}
|
||||
#elif defined(PIPE_SUBSYSTEM_WINDOWS_USER)
|
||||
/* EngDebugPrint does not handle float point arguments, so we need to use
|
||||
* our own vsnprintf implementation. It is also very slow, so buffer until
|
||||
* we find a newline. */
|
||||
static char buf[512 + 1] = {'\0'};
|
||||
/* OutputDebugStringA can be very slow, so buffer until we find a newline. */
|
||||
static char buf[4096] = {'\0'};
|
||||
size_t len = strlen(buf);
|
||||
int ret = util_vsnprintf(buf + len, sizeof(buf) - len, format, ap);
|
||||
if(ret > (int)(sizeof(buf) - len - 1) || util_strchr(buf + len, '\n')) {
|
||||
@@ -145,11 +143,9 @@ void _debug_vprintf(const char *format, va_list ap)
|
||||
#elif defined(PIPE_SUBSYSTEM_WINDOWS_MINIPORT)
|
||||
/* TODO */
|
||||
#else /* !PIPE_SUBSYSTEM_WINDOWS */
|
||||
#ifdef DEBUG
|
||||
fflush(stdout);
|
||||
vfprintf(stderr, format, ap);
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -921,11 +921,19 @@ static void
|
||||
format_to_type_comps(enum pipe_format pformat,
|
||||
enum dtype *datatype, uint *comps)
|
||||
{
|
||||
/* XXX I think this could be implemented in terms of the pf_*() functions */
|
||||
switch (pformat) {
|
||||
case PIPE_FORMAT_A8R8G8B8_UNORM:
|
||||
case PIPE_FORMAT_X8R8G8B8_UNORM:
|
||||
case PIPE_FORMAT_B8G8R8A8_UNORM:
|
||||
case PIPE_FORMAT_B8G8R8X8_UNORM:
|
||||
case PIPE_FORMAT_R8G8B8A8_SRGB:
|
||||
case PIPE_FORMAT_R8G8B8X8_SRGB:
|
||||
case PIPE_FORMAT_A8R8G8B8_SRGB:
|
||||
case PIPE_FORMAT_X8R8G8B8_SRGB:
|
||||
case PIPE_FORMAT_B8G8R8A8_SRGB:
|
||||
case PIPE_FORMAT_B8G8R8X8_SRGB:
|
||||
case PIPE_FORMAT_R8G8B8_SRGB:
|
||||
*datatype = DTYPE_UBYTE;
|
||||
*comps = 4;
|
||||
return;
|
||||
@@ -942,12 +950,14 @@ format_to_type_comps(enum pipe_format pformat,
|
||||
*comps = 3;
|
||||
return;
|
||||
case PIPE_FORMAT_L8_UNORM:
|
||||
case PIPE_FORMAT_L8_SRGB:
|
||||
case PIPE_FORMAT_A8_UNORM:
|
||||
case PIPE_FORMAT_I8_UNORM:
|
||||
*datatype = DTYPE_UBYTE;
|
||||
*comps = 1;
|
||||
return;
|
||||
case PIPE_FORMAT_A8L8_UNORM:
|
||||
case PIPE_FORMAT_A8L8_SRGB:
|
||||
*datatype = DTYPE_UBYTE;
|
||||
*comps = 2;
|
||||
return;
|
||||
@@ -1509,6 +1519,17 @@ util_gen_mipmap(struct gen_mipmap_state *ctx,
|
||||
uint zslice = 0;
|
||||
uint offset;
|
||||
|
||||
/* The texture object should have room for the levels which we're
|
||||
* about to generate.
|
||||
*/
|
||||
assert(lastLevel <= pt->last_level);
|
||||
|
||||
/* If this fails, why are we here? */
|
||||
assert(lastLevel > baseLevel);
|
||||
|
||||
assert(filter == PIPE_TEX_FILTER_LINEAR ||
|
||||
filter == PIPE_TEX_FILTER_NEAREST);
|
||||
|
||||
/* check if we can render in the texture's format */
|
||||
if (!screen->is_format_supported(screen, pt->format, PIPE_TEXTURE_2D,
|
||||
PIPE_TEXTURE_USAGE_RENDER_TARGET, 0)) {
|
||||
|
||||
@@ -152,11 +152,14 @@ util_make_vertex_passthrough_shader(struct pipe_context *pipe,
|
||||
|
||||
/**
|
||||
* Make simple fragment texture shader:
|
||||
* TEX OUT[0], IN[0], SAMP[0], 2D;
|
||||
* IMM {0,0,0,1} // (if writemask != 0xf)
|
||||
* MOV OUT[0], IMM[0] // (if writemask != 0xf)
|
||||
* TEX OUT[0].writemask, IN[0], SAMP[0], 2D;
|
||||
* END;
|
||||
*/
|
||||
void *
|
||||
util_make_fragment_tex_shader(struct pipe_context *pipe)
|
||||
util_make_fragment_tex_shader_writemask(struct pipe_context *pipe,
|
||||
unsigned writemask )
|
||||
{
|
||||
struct pipe_shader_state shader;
|
||||
struct tgsi_token tokens[100];
|
||||
@@ -217,12 +220,43 @@ util_make_fragment_tex_shader(struct pipe_context *pipe)
|
||||
header,
|
||||
Elements(tokens) - ti);
|
||||
|
||||
|
||||
if (writemask != TGSI_WRITEMASK_XYZW) {
|
||||
struct tgsi_full_immediate imm;
|
||||
static const float value[4] = { 0, 0, 0, 1 };
|
||||
|
||||
imm = tgsi_default_full_immediate();
|
||||
imm.Immediate.NrTokens += 4;
|
||||
imm.Immediate.DataType = TGSI_IMM_FLOAT32;
|
||||
imm.u.Pointer = value;
|
||||
|
||||
ti += tgsi_build_full_immediate(&imm,
|
||||
&tokens[ti],
|
||||
header,
|
||||
Elements(tokens) - ti );
|
||||
|
||||
/* MOV instruction */
|
||||
inst = tgsi_default_full_instruction();
|
||||
inst.Instruction.Opcode = TGSI_OPCODE_MOV;
|
||||
inst.Instruction.NumDstRegs = 1;
|
||||
inst.FullDstRegisters[0].DstRegister.File = TGSI_FILE_OUTPUT;
|
||||
inst.FullDstRegisters[0].DstRegister.Index = 0;
|
||||
inst.Instruction.NumSrcRegs = 1;
|
||||
inst.FullSrcRegisters[0].SrcRegister.File = TGSI_FILE_IMMEDIATE;
|
||||
inst.FullSrcRegisters[0].SrcRegister.Index = 0;
|
||||
ti += tgsi_build_full_instruction(&inst,
|
||||
&tokens[ti],
|
||||
header,
|
||||
Elements(tokens) - ti );
|
||||
}
|
||||
|
||||
/* TEX instruction */
|
||||
inst = tgsi_default_full_instruction();
|
||||
inst.Instruction.Opcode = TGSI_OPCODE_TEX;
|
||||
inst.Instruction.NumDstRegs = 1;
|
||||
inst.FullDstRegisters[0].DstRegister.File = TGSI_FILE_OUTPUT;
|
||||
inst.FullDstRegisters[0].DstRegister.Index = 0;
|
||||
inst.FullDstRegisters[0].DstRegister.WriteMask = writemask;
|
||||
inst.Instruction.NumSrcRegs = 2;
|
||||
inst.InstructionExtTexture.Texture = TGSI_TEXTURE_2D;
|
||||
inst.FullSrcRegisters[0].SrcRegister.File = TGSI_FILE_INPUT;
|
||||
@@ -253,6 +287,13 @@ util_make_fragment_tex_shader(struct pipe_context *pipe)
|
||||
return pipe->create_fs_state(pipe, &shader);
|
||||
}
|
||||
|
||||
void *
|
||||
util_make_fragment_tex_shader(struct pipe_context *pipe )
|
||||
{
|
||||
return util_make_fragment_tex_shader_writemask( pipe,
|
||||
TGSI_WRITEMASK_XYZW );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -49,6 +49,10 @@ util_make_vertex_passthrough_shader(struct pipe_context *pipe,
|
||||
const uint *semantic_indexes);
|
||||
|
||||
|
||||
extern void *
|
||||
util_make_fragment_tex_shader_writemask(struct pipe_context *pipe,
|
||||
unsigned writemask );
|
||||
|
||||
extern void *
|
||||
util_make_fragment_tex_shader(struct pipe_context *pipe);
|
||||
|
||||
|
||||
@@ -37,6 +37,23 @@ struct pipe_texture;
|
||||
struct pipe_surface;
|
||||
|
||||
|
||||
/**
|
||||
* Are s1 and s2 the same surface?
|
||||
* Surfaces are basically views into textures so check if the two surfaces
|
||||
* name the same part of the same texture.
|
||||
*/
|
||||
static INLINE boolean
|
||||
util_same_surface(const struct pipe_surface *s1, const struct pipe_surface *s2)
|
||||
{
|
||||
return (s1->texture == s2->texture &&
|
||||
s1->face == s2->face &&
|
||||
s1->level == s2->level &&
|
||||
s1->zslice == s2->zslice);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
extern boolean
|
||||
util_create_rgba_surface(struct pipe_screen *screen,
|
||||
uint width, uint height,
|
||||
|
||||
@@ -153,7 +153,7 @@ a8r8g8b8_put_tile_rgba(unsigned *dst,
|
||||
}
|
||||
|
||||
|
||||
/*** PIPE_FORMAT_A8R8G8B8_UNORM ***/
|
||||
/*** PIPE_FORMAT_X8R8G8B8_UNORM ***/
|
||||
|
||||
static void
|
||||
x8r8g8b8_get_tile_rgba(const unsigned *src,
|
||||
@@ -596,6 +596,184 @@ r16g16b16a16_put_tile_rgba(short *dst,
|
||||
}
|
||||
|
||||
|
||||
/*** PIPE_FORMAT_R8G8B8A8_SRGB ***/
|
||||
|
||||
/**
|
||||
* Convert an 8-bit sRGB value from non-linear space to a
|
||||
* linear RGB value in [0, 1].
|
||||
* Implemented with a 256-entry lookup table.
|
||||
*/
|
||||
static INLINE float
|
||||
srgb_to_linear(ubyte cs8)
|
||||
{
|
||||
static float table[256];
|
||||
static boolean tableReady = FALSE;
|
||||
if (!tableReady) {
|
||||
/* compute lookup table now */
|
||||
uint i;
|
||||
for (i = 0; i < 256; i++) {
|
||||
const float cs = ubyte_to_float(i);
|
||||
if (cs <= 0.04045) {
|
||||
table[i] = cs / 12.92f;
|
||||
}
|
||||
else {
|
||||
table[i] = (float) powf((cs + 0.055) / 1.055, 2.4);
|
||||
}
|
||||
}
|
||||
tableReady = TRUE;
|
||||
}
|
||||
return table[cs8];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Convert linear float in [0,1] to an srgb ubyte value in [0,255].
|
||||
* XXX this hasn't been tested (render to srgb surface).
|
||||
* XXX this needs optimization.
|
||||
*/
|
||||
static INLINE ubyte
|
||||
linear_to_srgb(float cl)
|
||||
{
|
||||
if (cl >= 1.0F)
|
||||
return 255;
|
||||
else if (cl >= 0.0031308F)
|
||||
return float_to_ubyte(1.055F * powf(cl, 0.41666F) - 0.055F);
|
||||
else if (cl > 0.0F)
|
||||
return float_to_ubyte(12.92F * cl);
|
||||
else
|
||||
return 0.0;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
a8r8g8b8_srgb_get_tile_rgba(const unsigned *src,
|
||||
unsigned w, unsigned h,
|
||||
float *p,
|
||||
unsigned dst_stride)
|
||||
{
|
||||
unsigned i, j;
|
||||
|
||||
for (i = 0; i < h; i++) {
|
||||
float *pRow = p;
|
||||
for (j = 0; j < w; j++, pRow += 4) {
|
||||
const unsigned pixel = *src++;
|
||||
pRow[0] = srgb_to_linear((pixel >> 16) & 0xff);
|
||||
pRow[1] = srgb_to_linear((pixel >> 8) & 0xff);
|
||||
pRow[2] = srgb_to_linear((pixel >> 0) & 0xff);
|
||||
pRow[3] = ubyte_to_float((pixel >> 24) & 0xff);
|
||||
}
|
||||
p += dst_stride;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
a8r8g8b8_srgb_put_tile_rgba(unsigned *dst,
|
||||
unsigned w, unsigned h,
|
||||
const float *p,
|
||||
unsigned src_stride)
|
||||
{
|
||||
unsigned i, j;
|
||||
|
||||
for (i = 0; i < h; i++) {
|
||||
const float *pRow = p;
|
||||
for (j = 0; j < w; j++, pRow += 4) {
|
||||
unsigned r, g, b, a;
|
||||
r = linear_to_srgb(pRow[0]);
|
||||
g = linear_to_srgb(pRow[1]);
|
||||
b = linear_to_srgb(pRow[2]);
|
||||
a = float_to_ubyte(pRow[3]);
|
||||
*dst++ = (a << 24) | (r << 16) | (g << 8) | b;
|
||||
}
|
||||
p += src_stride;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*** PIPE_FORMAT_A8L8_SRGB ***/
|
||||
|
||||
static void
|
||||
a8l8_srgb_get_tile_rgba(const ushort *src,
|
||||
unsigned w, unsigned h,
|
||||
float *p,
|
||||
unsigned dst_stride)
|
||||
{
|
||||
unsigned i, j;
|
||||
|
||||
for (i = 0; i < h; i++) {
|
||||
float *pRow = p;
|
||||
for (j = 0; j < w; j++, pRow += 4) {
|
||||
ushort p = *src++;
|
||||
pRow[0] =
|
||||
pRow[1] =
|
||||
pRow[2] = srgb_to_linear(p & 0xff);
|
||||
pRow[3] = ubyte_to_float(p >> 8);
|
||||
}
|
||||
p += dst_stride;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
a8l8_srgb_put_tile_rgba(ushort *dst,
|
||||
unsigned w, unsigned h,
|
||||
const float *p,
|
||||
unsigned src_stride)
|
||||
{
|
||||
unsigned i, j;
|
||||
|
||||
for (i = 0; i < h; i++) {
|
||||
const float *pRow = p;
|
||||
for (j = 0; j < w; j++, pRow += 4) {
|
||||
unsigned r, a;
|
||||
r = linear_to_srgb(pRow[0]);
|
||||
a = float_to_ubyte(pRow[3]);
|
||||
*dst++ = (a << 8) | r;
|
||||
}
|
||||
p += src_stride;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*** PIPE_FORMAT_L8_SRGB ***/
|
||||
|
||||
static void
|
||||
l8_srgb_get_tile_rgba(const ubyte *src,
|
||||
unsigned w, unsigned h,
|
||||
float *p,
|
||||
unsigned dst_stride)
|
||||
{
|
||||
unsigned i, j;
|
||||
|
||||
for (i = 0; i < h; i++) {
|
||||
float *pRow = p;
|
||||
for (j = 0; j < w; j++, src++, pRow += 4) {
|
||||
pRow[0] =
|
||||
pRow[1] =
|
||||
pRow[2] = srgb_to_linear(*src);
|
||||
pRow[3] = 1.0;
|
||||
}
|
||||
p += dst_stride;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
l8_srgb_put_tile_rgba(ubyte *dst,
|
||||
unsigned w, unsigned h,
|
||||
const float *p,
|
||||
unsigned src_stride)
|
||||
{
|
||||
unsigned i, j;
|
||||
|
||||
for (i = 0; i < h; i++) {
|
||||
const float *pRow = p;
|
||||
for (j = 0; j < w; j++, pRow += 4) {
|
||||
unsigned r;
|
||||
r = linear_to_srgb(pRow[0]);
|
||||
*dst++ = (ubyte) r;
|
||||
}
|
||||
p += src_stride;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*** PIPE_FORMAT_I8_UNORM ***/
|
||||
|
||||
@@ -946,6 +1124,15 @@ pipe_tile_raw_to_rgba(enum pipe_format format,
|
||||
case PIPE_FORMAT_R16G16B16A16_SNORM:
|
||||
r16g16b16a16_get_tile_rgba((short *) src, w, h, dst, dst_stride);
|
||||
break;
|
||||
case PIPE_FORMAT_A8R8G8B8_SRGB:
|
||||
a8r8g8b8_srgb_get_tile_rgba((unsigned *) src, w, h, dst, dst_stride);
|
||||
break;
|
||||
case PIPE_FORMAT_A8L8_SRGB:
|
||||
a8l8_srgb_get_tile_rgba((ushort *) src, w, h, dst, dst_stride);
|
||||
break;
|
||||
case PIPE_FORMAT_L8_SRGB:
|
||||
l8_srgb_get_tile_rgba((ubyte *) src, w, h, dst, dst_stride);
|
||||
break;
|
||||
case PIPE_FORMAT_Z16_UNORM:
|
||||
z16_get_tile_rgba((ushort *) src, w, h, dst, dst_stride);
|
||||
break;
|
||||
@@ -1059,6 +1246,15 @@ pipe_put_tile_rgba(struct pipe_transfer *pt,
|
||||
case PIPE_FORMAT_R16G16B16A16_SNORM:
|
||||
r16g16b16a16_put_tile_rgba((short *) packed, w, h, p, src_stride);
|
||||
break;
|
||||
case PIPE_FORMAT_A8R8G8B8_SRGB:
|
||||
a8r8g8b8_srgb_put_tile_rgba((unsigned *) packed, w, h, p, src_stride);
|
||||
break;
|
||||
case PIPE_FORMAT_A8L8_SRGB:
|
||||
a8l8_srgb_put_tile_rgba((ushort *) packed, w, h, p, src_stride);
|
||||
break;
|
||||
case PIPE_FORMAT_L8_SRGB:
|
||||
l8_srgb_put_tile_rgba((ubyte *) packed, w, h, p, src_stride);
|
||||
break;
|
||||
case PIPE_FORMAT_Z16_UNORM:
|
||||
/*z16_put_tile_rgba((ushort *) packed, w, h, p, src_stride);*/
|
||||
break;
|
||||
@@ -1202,6 +1398,19 @@ pipe_put_tile_z(struct pipe_transfer *pt,
|
||||
}
|
||||
break;
|
||||
case PIPE_FORMAT_S8Z24_UNORM:
|
||||
{
|
||||
uint *pDest = (uint *) (map + y * pt->stride + x*4);
|
||||
assert(pt->usage == PIPE_TRANSFER_READ_WRITE);
|
||||
for (i = 0; i < h; i++) {
|
||||
for (j = 0; j < w; j++) {
|
||||
/* convert 32-bit Z to 24-bit Z, preserve stencil */
|
||||
pDest[j] = (pDest[j] & 0xff000000) | ptrc[j] >> 8;
|
||||
}
|
||||
pDest += pt->stride/4;
|
||||
ptrc += srcStride;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case PIPE_FORMAT_X8Z24_UNORM:
|
||||
{
|
||||
uint *pDest = (uint *) (map + y * pt->stride + x*4);
|
||||
@@ -1216,13 +1425,26 @@ pipe_put_tile_z(struct pipe_transfer *pt,
|
||||
}
|
||||
break;
|
||||
case PIPE_FORMAT_Z24S8_UNORM:
|
||||
{
|
||||
uint *pDest = (uint *) (map + y * pt->stride + x*4);
|
||||
assert(pt->usage == PIPE_TRANSFER_READ_WRITE);
|
||||
for (i = 0; i < h; i++) {
|
||||
for (j = 0; j < w; j++) {
|
||||
/* convert 32-bit Z to 24-bit Z, preserve stencil */
|
||||
pDest[j] = (pDest[j] & 0xff) | (ptrc[j] & 0xffffff00);
|
||||
}
|
||||
pDest += pt->stride/4;
|
||||
ptrc += srcStride;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case PIPE_FORMAT_Z24X8_UNORM:
|
||||
{
|
||||
uint *pDest = (uint *) (map + y * pt->stride + x*4);
|
||||
for (i = 0; i < h; i++) {
|
||||
for (j = 0; j < w; j++) {
|
||||
/* convert 32-bit Z to 24-bit Z (0 stencil) */
|
||||
pDest[j] = ptrc[j] << 8;
|
||||
pDest[j] = ptrc[j] & 0xffffff00;
|
||||
}
|
||||
pDest += pt->stride/4;
|
||||
ptrc += srcStride;
|
||||
|
||||
@@ -83,7 +83,9 @@ my_buffer_write(struct pipe_screen *screen,
|
||||
assert(dirty_size >= size);
|
||||
assert(size);
|
||||
|
||||
map = pipe_buffer_map_range(screen, buf, offset, size, PIPE_BUFFER_USAGE_CPU_WRITE);
|
||||
map = pipe_buffer_map_range(screen, buf, offset, size,
|
||||
PIPE_BUFFER_USAGE_CPU_WRITE |
|
||||
PIPE_BUFFER_USAGE_FLUSH_EXPLICIT);
|
||||
if (map == NULL)
|
||||
return PIPE_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
@@ -121,21 +123,25 @@ static enum pipe_error
|
||||
u_upload_alloc_buffer( struct u_upload_mgr *upload,
|
||||
unsigned min_size )
|
||||
{
|
||||
unsigned size;
|
||||
|
||||
/* Release old buffer, if present:
|
||||
*/
|
||||
u_upload_flush( upload );
|
||||
|
||||
/* Allocate a new one:
|
||||
*/
|
||||
upload->size = align(MAX2(upload->default_size, min_size), 4096);
|
||||
size = align(MAX2(upload->default_size, min_size), 4096);
|
||||
|
||||
upload->buffer = pipe_buffer_create( upload->screen,
|
||||
upload->alignment,
|
||||
upload->usage | PIPE_BUFFER_USAGE_CPU_WRITE,
|
||||
upload->size );
|
||||
size );
|
||||
if (upload->buffer == NULL)
|
||||
goto fail;
|
||||
|
||||
upload->size = size;
|
||||
|
||||
upload->offset = 0;
|
||||
return 0;
|
||||
|
||||
|
||||
@@ -85,5 +85,7 @@ softpipe_clear(struct pipe_context *pipe, unsigned buffers, const float *rgba,
|
||||
/* non-cached surface */
|
||||
pipe->surface_fill(pipe, ps, 0, 0, ps->width, ps->height, cv);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
softpipe->dirty_render_cache = TRUE;
|
||||
}
|
||||
|
||||
@@ -72,6 +72,24 @@ do { \
|
||||
R[3] = A[3] - B[3]; \
|
||||
} while (0)
|
||||
|
||||
/** Add and limit result to ceiling of 1.0 */
|
||||
#define VEC4_ADD_SAT(R, A, B) \
|
||||
do { \
|
||||
R[0] = A[0] + B[0]; if (R[0] > 1.0f) R[0] = 1.0f; \
|
||||
R[1] = A[1] + B[1]; if (R[1] > 1.0f) R[1] = 1.0f; \
|
||||
R[2] = A[2] + B[2]; if (R[2] > 1.0f) R[2] = 1.0f; \
|
||||
R[3] = A[3] + B[3]; if (R[3] > 1.0f) R[3] = 1.0f; \
|
||||
} while (0)
|
||||
|
||||
/** Subtract and limit result to floor of 0.0 */
|
||||
#define VEC4_SUB_SAT(R, A, B) \
|
||||
do { \
|
||||
R[0] = A[0] - B[0]; if (R[0] < 0.0f) R[0] = 0.0f; \
|
||||
R[1] = A[1] - B[1]; if (R[1] < 0.0f) R[1] = 0.0f; \
|
||||
R[2] = A[2] - B[2]; if (R[2] < 0.0f) R[2] = 0.0f; \
|
||||
R[3] = A[3] - B[3]; if (R[3] < 0.0f) R[3] = 0.0f; \
|
||||
} while (0)
|
||||
|
||||
#define VEC4_MUL(R, A, B) \
|
||||
do { \
|
||||
R[0] = A[0] * B[0]; \
|
||||
@@ -676,19 +694,19 @@ blend_quad(struct quad_stage *qs, struct quad_header *quad)
|
||||
*/
|
||||
switch (softpipe->blend->rgb_func) {
|
||||
case PIPE_BLEND_ADD:
|
||||
VEC4_ADD(quadColor[0], source[0], dest[0]); /* R */
|
||||
VEC4_ADD(quadColor[1], source[1], dest[1]); /* G */
|
||||
VEC4_ADD(quadColor[2], source[2], dest[2]); /* B */
|
||||
VEC4_ADD_SAT(quadColor[0], source[0], dest[0]); /* R */
|
||||
VEC4_ADD_SAT(quadColor[1], source[1], dest[1]); /* G */
|
||||
VEC4_ADD_SAT(quadColor[2], source[2], dest[2]); /* B */
|
||||
break;
|
||||
case PIPE_BLEND_SUBTRACT:
|
||||
VEC4_SUB(quadColor[0], source[0], dest[0]); /* R */
|
||||
VEC4_SUB(quadColor[1], source[1], dest[1]); /* G */
|
||||
VEC4_SUB(quadColor[2], source[2], dest[2]); /* B */
|
||||
VEC4_SUB_SAT(quadColor[0], source[0], dest[0]); /* R */
|
||||
VEC4_SUB_SAT(quadColor[1], source[1], dest[1]); /* G */
|
||||
VEC4_SUB_SAT(quadColor[2], source[2], dest[2]); /* B */
|
||||
break;
|
||||
case PIPE_BLEND_REVERSE_SUBTRACT:
|
||||
VEC4_SUB(quadColor[0], dest[0], source[0]); /* R */
|
||||
VEC4_SUB(quadColor[1], dest[1], source[1]); /* G */
|
||||
VEC4_SUB(quadColor[2], dest[2], source[2]); /* B */
|
||||
VEC4_SUB_SAT(quadColor[0], dest[0], source[0]); /* R */
|
||||
VEC4_SUB_SAT(quadColor[1], dest[1], source[1]); /* G */
|
||||
VEC4_SUB_SAT(quadColor[2], dest[2], source[2]); /* B */
|
||||
break;
|
||||
case PIPE_BLEND_MIN:
|
||||
VEC4_MIN(quadColor[0], source[0], dest[0]); /* R */
|
||||
@@ -709,13 +727,13 @@ blend_quad(struct quad_stage *qs, struct quad_header *quad)
|
||||
*/
|
||||
switch (softpipe->blend->alpha_func) {
|
||||
case PIPE_BLEND_ADD:
|
||||
VEC4_ADD(quadColor[3], source[3], dest[3]); /* A */
|
||||
VEC4_ADD_SAT(quadColor[3], source[3], dest[3]); /* A */
|
||||
break;
|
||||
case PIPE_BLEND_SUBTRACT:
|
||||
VEC4_SUB(quadColor[3], source[3], dest[3]); /* A */
|
||||
VEC4_SUB_SAT(quadColor[3], source[3], dest[3]); /* A */
|
||||
break;
|
||||
case PIPE_BLEND_REVERSE_SUBTRACT:
|
||||
VEC4_SUB(quadColor[3], dest[3], source[3]); /* A */
|
||||
VEC4_SUB_SAT(quadColor[3], dest[3], source[3]); /* A */
|
||||
break;
|
||||
case PIPE_BLEND_MIN:
|
||||
VEC4_MIN(quadColor[3], source[3], dest[3]); /* A */
|
||||
|
||||
@@ -84,7 +84,7 @@ softpipe_get_param(struct pipe_screen *screen, int param)
|
||||
case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
|
||||
return 12; /* max 2Kx2K */
|
||||
case PIPE_CAP_MAX_TEXTURE_3D_LEVELS:
|
||||
return 8; /* max 128x128x128 */
|
||||
return 9; /* max 256x256x256 */
|
||||
case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
|
||||
return 12; /* max 2Kx2K */
|
||||
case PIPE_CAP_TGSI_CONT_SUPPORTED:
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user