@@ -166,16 +166,13 @@ void main()
166166 we transform the camera-space position to clip-space as normal.</para >
167167 <para >The output <varname >mapping</varname > is a value that is used by the fragment
168168 shader, as we will see below.</para >
169- <para >Since this vertex shader takes no inputs, you might think that you could get away
170- with binding a vertex array object that had no enabled attributes. Alas, this does
171- not work; we must have a dummy attribute enabled and a dummy buffer object to pull
172- data from. We do this in the initialization function of this tutorial.</para >
173- <note >
174- <para >The OpenGL 3.3 core specification is quite clear that it should be possible to
175- render with no enabled attributes. Sadly, certain implementations of OpenGL
176- (*cough*AMD*cough*) incorrectly forbid it, so our tutorial has to work around
177- them.</para >
178- </note >
169+ <para >Since this vertex shader takes no inputs, our vertex array object does not need to
170+ contain anything either. That is, we never call
171+ <function >glEnableVertexAttribArray</function > on the VAO. Since no attribute
172+ arrays are enabled, we also have no need for a buffer object to store vertex array
173+ data. So we never call <function >glVertexAttribPointer</function >. We simply
174+ generate an empty VAO with <function >glGenVertexArrays</function > and use it without
175+ modification.</para >
179176 </section >
180177 <section >
181178 <title >Racketeering Rasterization</title >
@@ -916,6 +913,12 @@ uniform Material
916913 <title >Further Study</title >
917914 <para >Try doing these things with the given programs.</para >
918915 <itemizedlist >
916+ <listitem >
917+ <para >The first version of our impostors was a sphere approximation. It was not
918+ useful for relatively large spheres, but it could be useful for small ones.
919+ However, that approximation did not compute the depth of the fragment
920+ correctly. Make a version of it that does.</para >
921+ </listitem >
919922 <listitem >
920923 <para >Change the geometry impostor tutorial to take another vertex input: the
921924 material to use. The vertex shader should pass it along to the geometry
@@ -939,9 +942,11 @@ uniform Material
939942 <para >There are other impostor-based solutions. Most particle systems (a large and
940943 vibrant topic that you should investigate) use flat-cards to draw pictures that move
941944 through space. These images can animate, changing from one image to another based on
942- time, and large groups of these particle can be used to simulate various phenomena
945+ time, and large groups of these particles can be used to simulate various phenomena
943946 like smoke, fire, and the like.</para >
944- <para >All of these subjects are worthy of your time.</para >
947+ <para >All of these subjects are worthy of your time. Of course, moving pictures through
948+ space requires being able to draw pictures. That means textures, which
949+ coincidentally is the topic for our next section.</para >
945950 </section >
946951 <section >
947952 <title >GLSL Features of Note</title >
0 commit comments