OpenGL R Programming on Mac OS R X Architecture Performance and Integration 1st Edition Robert P. Kuehne pdf download
OpenGL R Programming on Mac OS R X Architecture Performance and Integration 1st Edition Robert P. Kuehne pdf download
https://ebookgate.com/product/opengl-r-programming-on-mac-os-r-x-
architecture-performance-and-integration-1st-edition-robert-p-
kuehne/
https://ebookgate.com/product/mac-os-x-snow-leopard-pocket-guide-the-
ultimate-quick-guide-to-mac-os-x-1st-edition-chris-seibold/
ebookgate.com
https://ebookgate.com/product/mac-os-x-bible-sam-a-litt/
ebookgate.com
https://ebookgate.com/product/mac-os-x-snow-leopardportable-genius-
dwight-spivey/
ebookgate.com
https://ebookgate.com/product/macworld-mac-os-x-bible-1st-edition-lon-
poole/
ebookgate.com
MAC OS X and the Digital Lifestyle 1st Edition Brad Miser
https://ebookgate.com/product/mac-os-x-and-the-digital-lifestyle-1st-
edition-brad-miser/
ebookgate.com
https://ebookgate.com/product/mac-os-x-the-missing-manual-second-
edition-david-pogue/
ebookgate.com
https://ebookgate.com/product/mac-os-x-lion-the-missing-manual-1st-
edition-david-pogue/
ebookgate.com
https://ebookgate.com/product/mac-os-x-snow-leopard-digital-
classroom-1st-edition-chad-chelius/
ebookgate.com
https://ebookgate.com/product/learning-unix-for-mac-os-x-tiger-1st-
edition-dave-taylor/
ebookgate.com
OpenGL
®
Programming
on Mac OS X
®
This page intentionally left blank
OpenGL
®
Programming
on Mac OS X
®
Architecture, Performance,
and Integration
Robert P. Kuehne
J. D. Sullivan
For my family
—John
In memory of democracy
This page intentionally left blank
Contents
List of Figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xv
List of Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xix
List of Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxi
Preface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxv
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxix
About the Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xxxi
vii
Bus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
Video Memory: VRAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
RAM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .32
viii Contents
Context Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
Renderer Information . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Sharing OpenGL Objects Across CGL Contexts . . . . . . . . . . . . . . . . . . . 76
Drawables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
Pixel Buffers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
Off-Screen Drawables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Full-Screen Drawables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
Virtual Screen Management . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
Global CGL State Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
Using CGL Macros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
Summary. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .86
Contents ix
Display Capture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Alternative Rendering Destinations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 152
Framebuffer Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153
Copy-to-Texture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Pbuffer, Off-Screen, and Other Intermediate Targets . . . . . . . . . . . . . 161
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
x Contents
The OpenGL Multithreaded Engine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
Minimizing Function Call Overhead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Minimize CPU and GPU Idle Time by Using
Asynchronous Calls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
Share Data Across Contexts When Possible . . . . . . . . . . . . . . . . . . . . . . 207
Metrics. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .207
Frame Rate . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Throughput . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
Efficient Data Management Using Mac OpenGL . . . . . . . . . . . . . . . 209
Efficient Handling of Vertex Data. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .210
A Brief History of the Evolution of Submitting Vertices
in OpenGL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
Which Methods Should You Use to Submit Vertices
for Drawing?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .213
Apple’s Methods of Vertex Submission, Past and Present. . . . . . . . .214
Efficient Handling of Texture Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Formats and Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Pixel Pipeline and Imaging Subset State . . . . . . . . . . . . . . . . . . . . . . . . . 223
Alignment Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
Textures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Compressed Textures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Alignment Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225
Shaders . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
System Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
Graphics Tools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
OpenGL Profiler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228
OpenGL Driver Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Pixie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Putting It All Together . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
About Please Tune Me. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .237
Please Tune Me 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
Please Tune Me 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Please Tune Me 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Please Tune Me 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Please Tune Me 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Please Tune Me 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Contents xi
Chapter 12. Mac Platform Compatibility 245
Mac OS Versions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
10.0 through 10.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
10.2 (Jaguar) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
10.3 (Panther) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
10.4 (Tiger) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .246
10.5 and Beyond . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
OpenGL Platform Identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248
Mac OS Version Identification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
xii Contents
Additional Topics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300
Manipulating Images and Pixels in OpenGL . . . . . . . . . . . . . . . . . . . . . 300
Context Sharing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
Full-Screen Surfaces. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .308
Display Capture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Event Handling . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 310
Alternative Rendering Destinations . . . . . . . . . . . . . . . . . . . . . . . . . . . . 312
Framebuffer Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 313
Copy-to-Texture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318
Pbuffer, Off-Screen, and Other Intermediate Targets . . . . . . . . . . . . . 321
Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 322
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 325
Contents xiii
This page intentionally left blank
Figures
xv
Figure 8-13 Context Sharing: Two Custom NSOpenGLViews
in XCode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
Figure 8-14 Context Sharing: Set Visible on Launch for
Second Window . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
Figure 8-15 Context Sharing: Two Windows Demonstrating
Common Shared Data and Unshared (Clear Color)
Context Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
Figure 8-16 Results of Rendering to an FBO and Texturing a Quad
with That Result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
Figure 9-1 GLUT API and Framework in the Overall OpenGL
Infrastructure on the Mac. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .164
Figure 9-2 New Project Creation for GLUT Application . . . . . . . . . . . . . . . . 165
Figure 9-3 Adding a Framework to This Project . . . . . . . . . . . . . . . . . . . . . . . 166
Figure 9-4 Resultant GLUT Project Showing Framework and
Sample Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Figure 9-5 GLUT Project Results Showing Visual Selection
and Rendered Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
Figure 9-6 GLUT Project Results Showing Visual Selection
and Rendered Object for Anti-Aliased Pixel Format . . . . . . . . . 171
Figure 10-1 NSImage Rendered Before setFlipped (left),
and After setFlipped (right). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Figure 10-2 First Frame of the Movie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
Figure 10-3 Subsequent Frames of the Movie . . . . . . . . . . . . . . . . . . . . . . . . . . . 190
Figure 10-4 Subsequent Frames of the Movie . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
Figure 11-1 Vertex Submission Example Application . . . . . . . . . . . . . . . . . . . 222
Figure 11-2 OpenGL Profiler Main Window with Launch
Settings Open . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
Figure 11-3 OpenGL Profiler Breakpoints View . . . . . . . . . . . . . . . . . . . . . . . . . 230
Figure 11-4 OpenGL Profiler Statistics View . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Figure 11-5 OpenGL Profiler Trace View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232
Figure 11-6 OpenGL Profiler Resources View . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
Figure 11-7 OpenGL Pixel Format View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234
Figure 11-8 OpenGL Profiler Buffer View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Figure 11-9 OpenGL Profiler Scripts View . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
Figure 11-10 OpenGL Driver Monitor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
Figure 11-11 Pixie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
Figure 11-12 Performance-Tuning Exercise Application: Please
Tune Me . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
xvi Figures
Figure 11-13 ptm1 OpenGL Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Figure 11-14 ptm2 OpenGL Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
Figure 11-15 ptm3 OpenGL Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
Figure 11-16 ptm4 OpenGL Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
Figure 11-17 ptm5 OpenGL Statistics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
Figure 13-1 Shader Extension Application Results if Successful . . . . . . . . . 263
Figure 13-2 Shader Extension Application Results if Unsuccessful . . . . . . 264
Figure C-1 AppKit API and Framework in Overall OpenGL
Infrastructure on the Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
Figure C-2 Window and NIB Ready to be Edited in Leopard
Interface Builder. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
Figure C-3 Selection, Layout, and Specialization of a CustomView
in Interface Builder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286
Figure C-4 Create and Bind an Instance of our CustomView . . . . . . . . . . . . 287
Figure C-5 Custom View Derivation and Project Files in XCode 3.0 . . . . . 287
Figure C-6 Teapot Rendered with NSOpenGLView with Subclass . . . . . . . 294
Figure C-7 Two Views, Contexts Shared . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Figure C-8 Final Two Window XCode Contents . . . . . . . . . . . . . . . . . . . . . . . . 304
Figure C-9 Visible at Launch Enabled . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 304
Figure C-10 Context Sharing: Two Windows Demonstrating
Common Shared Data and Unshared (Clear Color)
Context Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 308
Figure C-11 Results of Rendering to an FBO and Texturing a
Quad with That Result . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 317
Figures xvii
This page intentionally left blank
Tables
xix
This page intentionally left blank
Examples
xxi
Example 8-9 Custom Controller Event-Handling Loop in a
Full-Screen Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Example 8-10 Custom View Header for FBO Example Code . . . . . . . . . . . . 154
Example 8-11 OpenGL Setup for FBO Rendering . . . . . . . . . . . . . . . . . . . . . . . 155
Example 8-12 Cocoa drawRect Routine for FBOs . . . . . . . . . . . . . . . . . . . . . . 156
Example 8-13 Cocoa Draw Methods for Contents of the FBO and the
Final Render . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 156
Example 8-14 Custom View Header for Copy-to-Texture
Example Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Example 8-15 OpenGL Setup for Copy-to-Texture Rendering . . . . . . . . . . . 159
Example 8-16 Cocoa drawRect Routine for Copy-to-Texture
Rendering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
Example 9-1 GLUT Header Inclusion on the Mac . . . . . . . . . . . . . . . . . . . . . . 167
Example 9-2 Basic GLUT Sample Application . . . . . . . . . . . . . . . . . . . . . . . . . 168
Example 9-3 Initializing a GLUT Visual Using a String . . . . . . . . . . . . . . . . 171
Example 10-1 Two Sample NSImage Initialization Methods . . . . . . . . . . . . 174
Example 10-2 Initialize NSImages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Example 10-3 Resizing an NSImage to a Power of Two . . . . . . . . . . . . . . . . . 177
Example 10-4 Extracting a Bitmap from an NSImage . . . . . . . . . . . . . . . . . . . 179
Example 10-5 Initialization and Creation of an NSImage . . . . . . . . . . . . . . . 179
Example 10-6 Downloading an NSImage as an OpenGL Texture . . . . . . . 180
Example 10-7 Capturing OpenGL Data as an NSImage . . . . . . . . . . . . . . . . . 182
Example 10-8 Converting a Bitmap to an NSImage . . . . . . . . . . . . . . . . . . . . . 183
Example 10-9 Initialize QTMovie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Example 10-10 Draw Rectangle Method Applying Movie Frames . . . . . . . . 187
Example 11-1 Querying Shader Limits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Example 11-2 Enabling or Disabling the Multithreaded GL Engine . . . . . 204
Example 11-3 Partial Buffer Object Flushing . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206
Example 11-4 Immediate Mode Vertex Submission: Begin/End . . . . . . . . . 210
Example 11-5 Immediate Mode Vertex Submission: Vertex Arrays . . . . . . 211
Example 11-6 Immediate Mode Vertex Submission: Vertex
Buffer Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 212
Example 11-7 Inefficiencies of Not Using Vertex Array Objects . . . . . . . . . 214
Example 11-8 Using Vertex Array Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Example 11-9 Using Vertex Array Range . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Example 11-10 Apple Fence Extension . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Example 11-11 Double-Buffering Vertex Data Using the
APPLE vertex array range Extension . . . . . . . . . . . . . . . . 217
xxii Examples
Example 12-1 Unpack the OS X Version Number . . . . . . . . . . . . . . . . . . . . . . . 249
Example 13-1 Querying for Extensions in a Valid OpenGL Context . . . . . 261
Example 13-2 Querying the OpenGL Version Number . . . . . . . . . . . . . . . . . . 262
Example 13-3 Querying for OpenGL Shader Extensions . . . . . . . . . . . . . . . . 263
Example 13-4 Creating a Dictionary of All Extensions . . . . . . . . . . . . . . . . . . 264
Example 13-5 Storage for the Discovered Symbols . . . . . . . . . . . . . . . . . . . . . . 266
Example 13-6 Opening a Segment for Symbol Lookup . . . . . . . . . . . . . . . . . . 267
Example 13-7 Looking Up Symbols . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 267
Example 13-8 Our Application’s OpenGL Initialization Code . . . . . . . . . . . 267
Example 13-9 GLEW Headers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Example 13-10 Our Application’s OpenGL Initialization Code
Using GLEW . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271
Example 13-11 Query for Shader Extensions Using GLEW . . . . . . . . . . . . . . . 273
Example 13-12 Query for OpenGL Version Information Using GLUT . . . . 274
Example 13-13 Query for Shader Extensions Using GLUT . . . . . . . . . . . . . . . 274
Example C-1 Configuration of an OpenGL View in initWithFrame . . 288
Example C-2 Cocoa drawRect Rendering Method with Sample
OpenGL Content . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293
Example C-3 MyView.h Final Header . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Example C-4 MyView.m Final Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 296
Example C-5 Singleton Class Declaration for Managing
a Shared Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 303
Example C-6 Singleton Class Implementation for Managing a
Shared Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
Example C-7 Initialization of an OpenGL View with a Shared Context . 306
Example C-8 Capturing and Releasing the Display . . . . . . . . . . . . . . . . . . . . 310
Example C-9 Custom Controller Event-Handling Loop in a
Full-Screen Context . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 311
Example C-10 Custom View Header for FBO Example Code . . . . . . . . . . . . 314
Example C-11 OpenGL Setup for FBO Rendering . . . . . . . . . . . . . . . . . . . . . . . 315
Example C-12 Cocoa drawRect Routine for FBOs . . . . . . . . . . . . . . . . . . . . . 316
Example C-13 Cocoa Draw Methods for Contents of the FBO and the
Final Render . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 316
Example C-14 Custom View Header for Copy-to-Texture
Example Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 319
Example C-15 OpenGL Setup for Copy-to-Texture Rendering. . . . . . . . . . .319
Example C-16 Cocoa drawRect Routine for Copy-to-Texture
Rendering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320
Examples xxiii
This page intentionally left blank
Preface
The Mac is a computing platform that virtually defines ease of use, consistency,
and effortless computing. The story of OpenGL on the Mac has been, shall
we say, a bit more complex. With the arrival of OS X, the Mac platform sup-
ports even more ways of constructing OpenGL applications for the Mac. While
there has been an apparent proliferation of OpenGL interfaces for the Mac, the
platform itself has stabilized architecturally and programmatically and now
offers the best developer and user experience in the industry for develop-
ment of graphics applications. This is not just a statement of preference but
an observation that, in many ways, the Mac is an OpenGL platform with-
out peer. The Mac is a fun and efficient platform on which to develop appli-
cations, thanks to the set of OpenGL drivers at its core that support a rich
and deep feature set, great performance, and deep integration in OS X. The
Mac has excellent and usable tools for quickly monitoring OpenGL behavior,
rapidly prototyping shaders, and digging deep to analyze OpenGL behavior
in the application and driver. The Mac makes OpenGL development efficient
and fun.
Although the development tools and environment are powerful and helpful,
many corners of OpenGL on the Mac remain under-documented. A developer
must choose among several development languages, user interface (UI) tool-
kits, window managers, and additional Mac APIs such as QuickTime and Core
Image, yet still ensure that his or her software runs well on a variety of target
Mac platforms. All of these factors can make using OpenGL on the Mac a chal-
lenging task even for developers who have been writing OpenGL applications
on other platforms for years.
This book was put together with an eye toward simplifying and clarifying the
ways in which OpenGL can be used on the Mac. It is our hope that by codifying
all the information available about OpenGL on the Mac in one place and by
presenting each interface with clarity and depth, developers will have a one-
stop reference for all things OpenGL on the Mac.
xxv
who are new to OpenGL on the Mac and those who want to explore the specific
benefits of writing OpenGL programs on the Mac.
For those who are new to OpenGL on the Mac—either existing Mac developers
or those coming from other platforms—we provide advice on cross-platform
issues, portable interfaces, and ideas about choosing native interfaces for the
Mac. Existing Mac developers will find a single-source reference guide to all
OpenGL interfaces on the Mac. For developers wishing to explore the power
and richness of the Mac, we provide complete details on Mac-specific OpenGL
extensions and ways of integrating other Mac APIs (such as QuickTime and
Core Image) into applications.
Organization
This text is intended to be useful as both a programming guide and a reference
manual. The text contains several chapters focused on OpenGL on the Mac and
other chapters that cover related graphics information. A few appendices are in-
cluded to cover supplemental information in detail. The chapters are organized
as follows:
Architecture Chapters 1 through 4 describe the hardware and software archi-
tectures of the Mac. This part of the book also presents an introduction to
performance considerations as they relate to architecture.
Configuration and Integration Chapter 5 explores the interfaces to OpenGL on
the Mac in detail. Those new to OpenGL on the Mac should begin here.
CGL, AGL, Cocoa, GLUT Chapters 6 through 9 explore details behind the in-
dividual APIs. Each API is covered in detail in its own chapter, and the APIs
are compared and contrasted in each chapter. These chapters form the core
of this book.
Interoperability Chapter 10 collects a variety of interesting OpenGL and other
Mac API integration ideas. This chapter describes how to incorporate video
in an application with QuickTime, perform image effects on textures or
scenes with Core Image, and process CoreVideo data in an application.
Performance Chapters 11 and 12 describe the basics of analyzing performance
of OpenGL applications and offer tips about where common problems may
surface and how they might be resolved. Analysis, tools, architecture, data
types, and solutions are covered.
Extensions Chapter 13 presents a guide to detecting, integrating, and using
OpenGL extensions. This chapter introduces extension management princi-
ples and tools and provides details on how to perform such management
specifically on the Mac.
xxvi Preface
Additional Resources
As both OpenGL and the Mac platform evolve, so must developers’ appli-
cations. At our website, www.macopenglbook.com, we provide our example
OpenGL code as well as other OpenGL-related resources. Additionally, we track
and provide corrections for any errata and typos. Although we aspire to Knuth-
like greatness, we are open to the idea that bugs may yet lurk within these pages.
Should you find a possible gaffe, please bring it to our attention through our
website.
This book has been a project long in the making, and rumblings of Leopard,
Mac OS X 10.5, have been part of our plan since the beginning. However, due to
information embargoes, the paucity of information available to the public, and
publishing timelines, our best efforts at incorporating final, released Leopard-
specific details are thwarted. Although we’ve accounted for most major changes
to OpenGL programming for Leopard in this book, there was still some de-
gree of flux for Leopard features at the time this book was published. Never
fear, we’ve put together a detailed Leopard change synopsis for OpenGL, and
accounted for the flux in Leopard on our website in an extra chapter. You’ll find
this bonus chapter at our website: www.macopenglbook.com.
A few words on Leopard that we can say at this time with authority: First, Leop-
ard will provide OpenGL 2.0 and OpenGL ES support. OpenGL 2.0 is a great
baseline for OpenGL developers, providing the most modern of OpenGL foun-
dations upon which to develop. Also of interest is the inclusion of OpenGL ES
in this release. ES stands for embedded system, and is a nice, stripped-down ver-
sion of OpenGL, largely targeting handheld devices. At this time, if writing an
application for a desktop system, it would still be most sensible to target
OpenGL 2.0. However, if you’re building and testing a cross-platform device
that might be used for handheld devices, OpenGL ES would be a good OpenGL
SDK to develop against. Second, Apple’s tools for development and debugging
are a lot more comprehensive in Leopard. XRay, in particular, integrates a vari-
ety of debugging tools in one information view, making it much easier to target
certain types of bottlenecks, specifically those involving data transfer. Finally,
Leopard brings a lot of bug-fixes and feature enhancements. We’ve got informa-
tion on bits and pieces of the Leopard OpenGL throughout the book. But you’ll
have to read about the final and released version in our Leopard chapter on
the website.
So, once you have this book in your hands, please go to the website and get the
addendum. We think you’ll be pleased with the detail and additional informa-
tion it offers on the released version of Leopard. We consider it the definitive
source of independent information for OpenGL on Leopard, Mac OSX 10.5. Get
it by going to: www.macopenglbook.com.
Preface xxvii
This page intentionally left blank
Acknowledgments
The first edition of this book owes many thanks to many people, beginning
with Bob’s good friend, Dave Shreiner. Dave and Bob have taught numerous
SIGGRAPH courses together over the years and worked together at SGI. Dave
encouraged Bob to take on this project with Addison-Wesley and was instru-
mental in getting it off the ground and providing advice, reviews, and encour-
agement along the way.
The reviewers of the book performed heroic feats of editing and have made
this book much better for their efforts. Many thanks go to Dave Shreiner,
Paul Martz, Thomas True, Terry Welsh, Alan Commike, Michel Castejon, and
Jeremy Sandmel.
Thanks, too, to the many other friends and relatives who contributed ideas, en-
couragement, and support. Finally, the authors would like to individually thank
a few people.
J. D.’s Acknowledgments
I cannot fully express my gratitude for the support of my wife Samantha.
She has been with me for the duration of this challenging project and always
responded to the rough patches with compassion and a smile.
I also wanted to extend a special thanks to my friend Alex Eddy who reviewed
this material with unmatched expertise on the subject matter of the current
OS X OpenGL implementation, its history, and its incarnations.
Finally, I wanted to thank my parents Andrew and Sue, who never wavered in
their support of my education and career. From their visionary gift in 1979 of
a Timex Sinclair computer that started me down the road to software develop-
ment to the present day, they have always been at my side.
Bob’s Acknowledgments
Thanks very much to my wife, Kim, for her support, encouragement, and love.
She’s been my muse and a voice of reason throughout the often arduous pro-
cess of shepherding a book from inception to publishing. I’d also like to thank
my parents for getting me raised well, and without major injury, and for main-
taining their encouragement throughout my life. Finally, thanks to my cats for
keeping me warm, grounded, and focused on the essentials of life: food, sleep,
and play.
xxix
This page intentionally left blank
About the Authors
xxxi
on medical and GIS imaging. He was one of the original four designers and
implementers of SGI’s Volumizer API, and he earned a design patent for high
performance modulation of 3D textures. He then moved to SGI’s Consumer
Products Division, where he worked as part of the OpenGL software team dur-
ing the bring-up of both the Cobalt and Krypton graphics chipsets.
Since SGI, J. D. has worked on the Mac as his primary development platform.
He has been an OpenGL driver engineer for more than five years and serves on
the OpenGL Architecture Review board.
Mac OpenGL
Introduction
1
Whatever type of developer you are, whatever the age of your code, and no
matter how you arrived at this title, we welcome you and hope you find our
book useful.
Why OpenGL?
If you’re reading this book, chances are that you already know why you are us-
ing OpenGL. But if you’re reading this book and trying to make some decisions
about which 3D API to use, we’ll say a few words on why you should consider
OpenGL.
The reasons are very similar to those as to why you’d choose the Mac platform.
To reiterate, ease of development, ease of use, and solid, stylish tools make the
Mac development process easy. OpenGL is no exception.
OpenGL has a long history, like the Mac. Although the history of OpenGL is
covered in more detail later in the book, here’s an abbreviated version. OpenGL
was developed from the experience and foundation of IrisGL, an API for 3D
graphics first developed by SGI. OpenGL was developed to bring a fresh set
of eyes to the task of creating a clean, modern, and portable graphics API. The
designers of OpenGL did an excellent job with an API that is nicely orthogonal
in function, high performance in execution, and extensible in design.
It should be mentioned, too, that OpenGL is the only graphics API that exists on
virtually every hardware platform you might want to develop, from cell phone
to supercomputer. OpenGL exists on operating systems from Symbian to Mac
OS X, and many others. No other graphics API has that sort of ubiquity, so if
1. We’re not blind to the problems, mind you, but Apple is very responsive on the bug-fix side of
things. And no, the Mac platform is not perfect: There are plenty of legacy APIs to be had. However,
if you decide to write a modern Mac application, the development experience is hands-down better
than on any other platform. It’s quite simply a lot of fun.
Why OpenGL? 3
you have visions of developing for multiple platforms, OpenGL is really your
only option. Don’t feel too bad about that mandate, though, because once you
start working with OpenGL, you’ll see that its performance is as good as any
API out there.
In fact, from your perspective as a developer, one of the key strengths of
OpenGL is the way in which you can learn core techniques once and then reap-
ply them many times. For example, the way that you create and modify indi-
vidual and batched graphics primitives is something that you can learn once
and then apply to vertices, textures, shaders, and more. In many ways, OpenGL
is a great match for the Mac, because both allow you to learn techniques once
and reapply those same techniques repeatedly to many different object-types.
Consistency of technique is a key aspect of why it is so easy to be productive on
the Mac, and of why OpenGL is a great API to use.
Using an open standard graphics API like OpenGL means that its design today
and in the future will incorporate all of the rich and diversified design consid-
erations from various industry interests that only open standards can. Indeed,
these diversified corporate and educational interests contributions are the very
reason OpenGL runs on the widest array of devices. Furthermore, because de-
sign decisions are better decoupled from proprietary interests, the result is quite
simply a better and more generalized design.
If you’re new to the base OpenGL API, we won’t be much help to you in this
book because we’re focused on Mac-specific infrastructure. However, there are
other great books and resources on the subject out there. The canonical refer-
ence, the so-called Red Book [22], and the OpenGL website [2] provide a good
foundation for OpenGL developers. There are also other, more compact guides,
such as the recent OpenGL R
Distilled [19]. The bibliography lists a few other ref-
erence books of note, including those describing in detail how to use OpenGL
on other platforms [15, 18]. This book is a companion to those resources, focus-
ing on the infrastructure, performance, and integration of OpenGL on the Mac.
The Book
What we describe in this book is the essence of OpenGL usage and integration
on the Mac. We won’t try to motivate you to choose the Mac or OpenGL fur-
ther, but will rely on you to make your own informed decision after reading our
text. We will describe in detail the rendering architecture used by Mac OS X and
note how OpenGL integrates into it. We will explore in depth each of the major
OpenGL interface APIs on the Mac, showing how to use each in a sample appli-
cation and how to customize those applications for your specific needs. We will
also explore the surrounding OpenGL infrastructure on the Mac, from tools to
secondary APIs used to get data into OpenGL. Finally, we will attempt to bring
The Book 5
This page intentionally left blank
Chapter 2
OpenGL Architecture
on OS X
Overview
The Mac hardware platform has historically varied widely with regard to CPU,
I/O devices, data busses, and graphics cards. The transition to Intel processors
brings yet another step in this evolution to developers, who now have ano-
ther Mac platform to consider with many different specifications. Despite the
fact that the underlying hardware on the Mac differs so widely, the software
architecture of OpenGL provides programmatic consistency for graphical ap-
plications across these varied configurations. OpenGL provides an abstraction
layer that insulates application developers from having to develop specific logic
for the unending array of systems and graphics devices.
At present, the Mac OS OpenGL implementation supports graphics devices
from four vendors: ATI, Intel, NVIDIA, and VillageTronic. And, of course, the
graphics drivers support either PowerPC or Intel CPUs feeding these devices.
The Mac also supports a virtual graphics device that processes OpenGL ren-
dering commands on the CPU of the system. This virtual device is canonically
known as the “software renderer.”
In this chapter, we’ll explore the software architecture of the OpenGL on the
Mac, including the history of OpenGL itself and the way in which the Mac
software architecture supports flexible graphics application development using
this API.
About OpenGL
To understand OpenGL on the Mac, let’s begin by looking back at the evolu-
tion of OpenGL itself. Silicon Graphics (SGI) began development on OpenGL
in 1990, with version 1.0 of the software being released in 1992. OpenGL was
7
a logical evolution from its predecessor, IrisGL—named in accordance with the
graphics hardware for which it was built. IrisGL was initially released by SGI in
1983. It included all of the necessary API entry points that, unlike OpenGL, han-
dled windowing system tasks unrelated to actual graphics pipeline rendering.
SGI soon realized that to grow its graphics workstation market share, the com-
pany needed to use a graphics API that was an industry standard. Ultimately,
the applications that independent software vendors (ISVs) were producing were
what sold the hardware they were building. By making IrisGL into an open
standard (OpenGL), SGI could greatly help lower the ISVs’ development costs
to reach multiple platforms, which in turn would encourage them to adopt the
use of the OpenGL API.
To make OpenGL an open standard, SGI formed the OpenGL Architecture
Review Board (ARB) in 1991 to oversee and develop the specification with a
broad range of industry interests in mind. The ARB includes both software- and
hardware-focused vendors in the graphics industry with an interest in further-
ing an open graphics API standard.
In its simplest form, OpenGL is a specification document. To develop the
OpenGL standard, a formal process has been established by which new func-
tionality may be added to the OpenGL specification. But where do these exten-
sions come from? Who decides they want one, and how do those new extensions
get put into the standard?
New extensions to OpenGL are typically created by individual companies or
organizations that are interested in including the new extension in the ver-
sion of OpenGL they ship. These extensions are known as vendor extensions.
They are specific to the company that created them and are named accordingly.
For instance, an extension unique to Apple is the GL APPLE texture range
extension. Other extensions are named for the companies that formulated and
specified them—for example, SGI, 3DLABS, or ATI.
Often ARB member companies will create parallel extensions—that is, two ex-
tensions with essentially the same functional purpose, but different interfaces.
If these companies wish to collaborate on consolidating these similar specifi-
cations into a single unified proposal, they will often create a working group
within the ARB so as to select the best aspects of each proposal and merge them
into one. When an extension is supported by more than one ARB member, it is
called an EXT extension. The GL EXT framebuffer object extension, which
is defined to do off-screen rendering, is an example of such an extension.
If a vendor or an EXT extension gains enough favor with the voting ARB mem-
bers, it can be put to a vote to approve it as an ARB extension. With the approval
of a two-thirds majority of the voting ARB members, the extension can gain ARB
status. Often, vendor extensions go through a process of gaining acceptance
OpenGL 1.0
OpenGL 1.1
OpenGL 1.2
OpenGL 1.3
OpenGL 1.4
OpenGL 1.5
OpenGL 2.0
OpenGL 2.1
1983 1992 1995 1998 2001 2002 2003 2004 2007
About OpenGL 9
Table 2-1 Versions of OpenGL in Which Extensions Were Promoted to Core
OpenGL (Continued)
OpenGL Version Extension
Texture objects
GL EXT texture object
Vertex arrays
GL EXT vertex array
1.2.1 ARB extensions introduced to promotion process
1.3 BGRA pixel format
GL EXT bgra
Range-bounded vertex draw elements
GL EXT draw range elements
Multisampling
GL ARB multisample
Multitexturing
GL ARB multitexture
Texture environment modes: Add, Combine, Dot3
GL ARB texture env {add|combine|dot3}
Texture border clamp
GL ARB texture border clamp
Transpose matrix
GL ARB transpose matrix
1.4 Automatic mipmap generation
GL SGIS generate mipmap
Blend squaring
GL NV blend square
Depth textures
GL ARB depth texture
Fog coordinates
GL EXT fog coord
Multiple draw arrays
GL EXT multi draw arrays
Point parameters
GL ARB point parameters
Secondary color
GL EXT secondary color
Separate blend functions
GL EXT blend func separate
Shadows
GL ARB shadow
Stencil wrap
GL EXT stencil wrap
About OpenGL 11
Table 2-2 Mac OS Hardware Renderer Support for Versions of OpenGL
De eik, die, gelijk bekend is, meer larven van Vlinders voedt dan eenige andere plant,
wordt in sommige streken geteisterd door een zeer merkwaardige en zonderlinge rups,
die meer aanspraak heeft op den naam van giftig te zijn dan eenige andere. Hare lange,
in een witte spits eindigende haren, die, naar het microscoop leert, van boven van takjes
voorzien zijn, bevatten mierenzuur, dat zelfs op een weinig gevoelige huid een hevig
brandend gevoel en jeuk teweeg kan brengen. Het ontbreekt niet aan voorbeelden, dat zij
in het spijskanaal van menschen of dieren een hevige ontsteking van de slijmvliezen
veroorzaakt hebben, die soms den dood ten gevolge had; Runderen gedroegen zich in
zulk een geval als dol. De rupsen, die deze gevaarlijke brandharen dragen, hebben de
zonderlinge gewoonte van gezamenlijk in een bepaalde orde uit te rukken naar de plaats
waar zij haar voedsel vinden en van hier in dezelfde orde naar het nest terug te keeren;
men noemt haar daarom p r o c e s s i e r u p s e n . Zij komen in Mei uit de eieren, die in
den vorigen zomer in hoopjes van 150 à 300 stuks aan de schors van een eikenstam
vastgekleefd werden, gemengd met de grijsbruine haren uit het viltachtige uiteinde van ’t
achterlijf van ’t wijfje. Reeds in den avond van haar geboortedag trekken zij uit—achter
elkander aan, wanneer zij in gering aantal voorkomen, in wigvormige orde, wanneer zij
talrijker zijn: één aan de spits, de volgende bij paren, bij drieën, bij vieren, enz.—naar de
kroon van den boom, om zich te verzadigen met de bladen, waarvan zij aanvankelijk
alleen de bovenzijde afvreten, gelijk alle zeer jonge rupsen doen. Evenals zij hier op
rijen gerangschikt eten, vormen zij na den maaltijd een soortgelijke “processie” om terug
te keeren naar een beschutte plaats van den stam, bij voorkeur naar een takgaffel of
tamelijk dicht bij den grond. Hier richten zij zich huiselijk in, zitten dicht
opeengedrongen, niet slechts naast, maar, als zij grooter geworden zijn, ook op elkander
en spinnen een los weefsel over zich heen. Aanvankelijk verwisselen zij vaak van
standplaats, later daarentegen behouden zij dezelfde. Daar in het spinsel de afgeworpen
huiden en voor een deel ook de uitwerpselen blijven hangen, wordt het voortdurend
dichter; van eenigen afstand ziet het er uit als een blaasvormige opzwelling van den
stam. Uit deze nesten worden de bij iedere vervelling afgeworpen brandharen door den
wind opgenomen en verstrooid, vallen neer op het gras, dat door het vee wordt
afgegraasd, of geraken, in de lucht zwevend, in de maag van de houthakkers, die hun
ontbijt of een ander maal gebruiken in de buurt van boomen, die door processierupsen
bewoond worden. “Ik herinner mij,” schrijft Dr. J. Th. Oudemans, “dat, ik meen in het
jaar 1878, de weg tusschen Nijmegen en Hees voor mensen noch dier straffeloos
begaanbaar was en zooveel mogelijk gemeden werd, aangezien de soort daar toen in
massa aanwezig was en de lucht met de fijne haren vervulde, waardoor het verkeeren op
dien weg inderdaad ernstige gevolgen had.” In ons oog doordringend, veroorzaken de
haren een pijnlijke ontsteking. Zoodra het donker wordt, verlaten de rupsen haar nest,
waarin men van onderen een opening opmerkt, om zich naar boven te begeven; zij doen
dit iederen avond, behalve op de beide ziektedagen, die met iedere vervelling gepaard
gaan. Soms ziet men over dag een “processie” op den grond; misschien zijn de rupsen
dan door gebrek aan voedsel genoodzaakt om haar boom en het hier aanwezige nest te
verlaten. Deze optocht levert een merkwaardig schouwspel op: als een donkeren band,
als een Slang, kronkelt zij zich en komt slecht langzaam vooruit. De volwassen rups
heeft een grooten, bruinzwarten kop en is 29 à 52 mM. lang, op den rug donker
blauwgrijs à blauwzwart, op de zijden en op den buik grijsachtig of groenachtig wit. Alle
ringen hebben een dwarsrij van roodbruine, lang behaarde wratten; de beide middelste
rugwratten zijn echter op de ringen 4 tot 11 vervangen door een groote, aan den omtrek
lange borstels dragende, roodbruine, plek (spiegel), die dicht bezet is met duizenden
korte, zeer gemakkelijk loslatende brandharen. De lange borstels, die zelf echte
brandharen zijn en zich voorover buigen, als de rups verontrust wordt, schuieren de korte
brandharen van het voorafgaande segment los en richten zich vervolgens weer op,
waardoor de giftige wapens zich door de lucht verspreiden. Om zich te verpoppen,
begeven alle rupsen zich op den bodem van het nest en maken hier reeksen van cocons,
die ieder weldra een donker roodbruine pop bevatten, welker buikringen scherpe randen
hebben. In Juli en Augustus komt hieruit de E i k e n p r o c e s s i e r u p s v l i n d e r
(Cnethocampa processionea), wiens effen, bruinachtig grijs kleed op de voorvleugels
eenige donkerder dwarslijnen vertoont, die duidelijker zichtbaar zijn bij het donkerder en
scherper geteekende mannetje dan bij het wijfje; de geelachtig witte achtervleugel heeft
een onduidelijke dwarsstreep. De “processierups”, schrijft Ritzema Bos, “werd tot
heden zoo goed als uitsluitend in Limburg, Brabant en Gelderland aangetroffen en wel in
de meeste jaren in gering aantal; enkele keeren echter trad zij in groote massa’s op. Dit
was o.a. in de jaren 1874 tot 1878 het geval in verschillende streken van Gelderland en
Noordbrabant. In den zomer van 1875 kwamen zij in de omstreken van Nijmegen in
groote menigte voor; zij vraten daar niet alleen de eikenboomen, maar ook al ’t andere
loofhout en de ooftboomen kaal en lieten zelfs de gewassen op den akker niet
onaangeroerd. In 1877 vertoonden zij zich in de nabijheid van Wageningen, waar zij
echter—zeker grootendeels ten gevolge van ’t vernielen harer nesten—later niet dan in
een gering aantal werden wedergezien.”
Tot dezelfde onderfamilie (Notodontina) rekent men nog eenige Vlinders, die vooral in
den larvetoestand de aandacht trekken, daar bij hare rupsen de plaats van de naschuivers
wordt ingenomen door 2 bovenwaarts gerichte, draadvormige aanhangsels. Uit elk harer
“gaffelspitsen” kunnen de bedoelde t w e e s t a a r t r u p s e n een nog langeren, dunnen
draad te voorschijn doen komen, die, als het koord van een zweep aan den steel, naar
beneden hangt. Zij toonen de “zweep”, gelijk de rups van den Koninginne-page den
nekgaffel, alleen wanneer zij echter verontrust worden. In rust nemen deze dieren een
hoogst zonderlinge houding aan op het blad van den door hen bewoonden struik of
boom.—Een van deze rupsen met verdacht uiterlijk is die van den G r o o t e n
H e r m e l ij n v l i n d e r (Harpyia vinula); men vindt haar vooral in Juli en Augustus op
wilgen of populieren. Zij is lichtgroen en heeft over den geheelen rug een violette
zadelvlek, die op den 7en ring aan weerszijden tot aan het ademgat afdaalt en door een
zuiver witten rand omgeven is. In Mei verlaat de Vlinder de huid van de overwinterende
pop; over dag zit hij zeer traag op stammen, palen en planken; zijn kleur is wit, op de
vleugels met gele aders, voor een deel uitvloeiende zigzaglijnen en vlekken (die
aanleiding gaven tot den Nederlandschen naam) op de vleugels.
De vreemdsoortigste van alle inheemsche rupsen is die van den bij ons zeldzamen
E e k h o o r n (Stauropus fagi); de Vlinder vliegt in denzelfden tijd van ’t jaar als de
vorige en komt met dezen in vorm overeen, doch heeft een bruinachtig grijze kleur.
Wegens de houding, die de lederkleurig, bruine, onbehaarde rups in den toestand van
rust aanneemt, draagt de soort den naam van Eekhoorn; het achter de buikpooten
gelegen deel van ’t lichaam is sterk gezwollen, naar boven en naar voren gekromd; het
wordt met den pluimstaart van het genoemde Zoogdier vergeleken. Ofschoon in
hoofdzaken met de vorige overeenstemmend, vertoont zij echter eenige afwijkingen, die
haar een ander voorkomen verschaffen. De twee vrij lange “staartstiften” aan het laatste
segment missen den uitstulpbaren draad, hoewel zij opgericht kunnen worden; de 6
buitengewoon sterk verlengde borstpooten herinneren sterk aan spinnepooten. Als de
rups verontrust wordt, gooit zij haar kop achterover, strekt de borstpooten en brengt ze in
trillende beweging. Men vindt haar in den herfst op beuken en eiken. De bruinzwarte
pop houdt verblijf in een vliezig spinsel tusschen twee afgevallen bladen en overwintert.
De muisgrijze Vlinder heeft 50 à 60 mM. vlucht en vliegt in Juli en Augustus.
Men kent ongeveer 2500 soorten van Uilen, die over de geheele aarde verstrooid zijn.
Dat hierbij 1000 Europeesche soorten voorkomen, leidt tot de gevolgtrekking, dat ons
werelddeel in dit opzicht het nauwkeurigst onderzocht werd.
Tot de S p i n n e r a c h t i g e U i l e n (Bombycoidea) behoort de K r a k e l i n g (Diloba
coeruleocephala, fig. 3), zooals blijkt uit de sterk kamvormige sprieten van het mannetje
en het dikke, wollig behaarde lichaam van het wijfje. De chocolade-kleurige, in het
zoomveld lichtere voorvleugels vertoonen 2 zeer hoekige, aan den binnenrand zeer dicht
bijeenkomende, zwarte dwarslijnen. Door het ineenvloeien van de 2 groenachtig gele
voorste vlekken (waardoor de tapvlek, die een rond figuurtje vormt, met de ronde vlek
samenhangt), ontstaat een groote, lichte plek, die zich soms in 2 aan een bril of een
krakeling herinnerende vlekken verdeelt. De achtervleugels zijn witachtig grijs, aan den
binnenhoek donker gevlekt. Deze Vlinder begint in September te vliegen, en behoort dus
tot de “Herfstuilen”; over dag zit hij tegen boomstammen of schuttingen. Hij heeft 36 à
39 mM. vlucht. In het voorjaar verschijnen de dikke, blauwachtig witte rupsen, die gele
strepen en zwarte wratten vertoonen; zij hebben een blauwen kop en ontleenen hieraan
den soortnaam; haar voedsel bestaat uit bladen van pruimeboomen en sleedoornen. Als
de rups volwassen is, lijmt zij houtspaantjes, de kalk van een muur, enz. aaneen tot een
hulsel, dat aan onbeweeglijke voorwerpen bevestigd is en de stomp eindigende,
roodbruine pop nauw omsluit.
De tot dusver behandelde Uilen en hunne verwanten zijn gedurende den rupstoestand in
den regel duidelijk behaard en leven bijna zonder uitzondering op houtige planten,
zonder zich te verbergen. De meeste naakte rupsen van de Uilen der tweede groep—de
E c h t e U i l e n (Noctuae genuinae)—krijgt men alleen te zien, wanneer men hare
schuilplaatsen weet op te sporen. Zij voeden zich bij voorkeur met grassen en andere
kruiden, hebben 16 pooten en kruipen in den grond om zich te verpoppen. Ook de
Vlinders leven verborgen en gaan in de duisternis honig en dauw lekken op bloemen,
bloeiende aren van graansoorten en andere grassen, zoo ook op boomen, struiken en
andere planten, waarop de Bladluizen hare zoete excrementen hebben achtergelaten. De
meeste komen ons niet onder de oogen, tenzij er een in onze woning verdwaalt, door het
licht aangelokt of met het doel om een veilige rustplaats voor den dag te zoeken. Hoewel
de rupsen verborgen leven, richten sommige toch eene niet onbelangrijke schade aan op
gekweekte planten.
*
Merkwaardig door de levenswijze hunner rupsen zijn de R i e t u i l e n (Nonagria), effen
grijsgele, in kleur met droog riet overeenkomende Vlinders, die zich door een
vooruitstekende voorhoofdspluim, door den bollen, glad wollig behaarden rug van het
borststuk en het achterlijf onderscheiden. Zij vliegen van Augustus tot October,
uitsluitend in de nabijheid van hun geboorteplaats en hebben een uitgestrekt
verbreidingsgebied. Hunne rupsen leven borend in de stengels van riet en andere
eenzaadlobbige moerasplanten (welker bladen hierdoor aan de spits geel worden) en
hebben, daar zij aan den invloed van ’t licht onttrokken zijn, een bleeke kleur en een
madevormig uiterlijk. Zij verpoppen zich in haar nauwe woning, maar knagen vooraf
een gat, waardoor de Vlinder uitvliegen kan, wanneer hij slechts de opperhuid van den
stengel verbreekt of de prop knaagsel wegduwt, die de opening verstopt.
Als tegen het einde van Maart de zon verscheidene dagen achtereen warm geschenen
heeft, ontwijkt de D e n n e n u i l , waarvan de G e s t r e e p t e D e n n e n r u p s de larve
is, reeds in deze maand, anders stellig in de volgende maand uit de in den grond
overwinterende pop. Zij is een van de bontste Uilen, zit met daksgewijs afhellende
vleugels op de stammen of tusschen de naalden der dennen en zwerft ook over dag door
haar gebied om bloeiende wilgenkatjes op te zoeken. De voorvleugels en het ruige, niet
van haarpluimen voorziene borststuk zijn roodachtig kaneelkleurig met bijmenging van
geelgrijs; aan de binnenrand is de golflijn roodbruin geschaduwd; de beide groote
vlekken zijn wit. Het achterlijf en de achtervleugels zijn effen donker grijsbruin. In Mei
legt het wijfje reeksen van 6 à 8 eieren op de naalden.
Dat er rupsen zijn, die andere rupsen opvreten, weet alleen de verzamelaar en kweeker
van zulk gedierte. Deze moordenaars heeft hij te vreezen; als er een zich bevindt in de
doos, waarin hij ook andere rupsen naar huis draagt, kan hij er zeker van zijn, dat een
deel van den met moeite verzamelden buit onderweg bedorven wordt. Zulk een
“moordenaar” is de rups van de IJ p e n - h y e n a - u i l [Cosmia (Calymnia) diffinis, fig.
1], die zich in Mei op ijpen vertoont. Zij heeft geen onaardig uiterlijk: met uitzondering
van den zwartbruinen kop en het glanzig bruine nekschild, is zij op geelachtig groenen
grond met 5 witte, overlangsche streepen geteekend, die gelijke tusschenruimten
overlaten, welke bezet zijn met bruin behaarde, door een wit vlekje omringde wratjes.
Een lichtgekleurde, gaffelvormige teekening op het voorhoofd en bruine ademgaten
behooren mede tot haar tooi. Niet minder sierlijk is de gladde, glanzig kastanjebruine,
vooral aan den binnenrand van den voorvleugel roodgrijs genuanceerde Vlinder; de
geelachtig grijze voorrand vertoont twee groote vlekken, beginsels van dwarslijnen,
waarvan de achterste sterk gebroken is.
Vele leden van het soortenrijke geslacht der A k k e r u i l e n (Agrotis) zien er vuil en
onooglijk uit, grijs als de bodem, waarop zij, onder bladen verborgen, bij voorkeur
verblijf houden; andere hebben het in haar familie zeldzame voorrecht van bont
gekleurde achtervleugels te bezitten: geel, met een zwarte streep bij den zoom. Het
lichaam is krachtig gebouwd; de kop en het borststuk zijn met aanliggende haren
bekleed; het ongekuifde achterlijf is dikwijls van boven naar beneden afgeplat. Zij
hebben de gewoonte zich over dag te verbergen en bij verstoring van hun rust de
horizontaal gerichte, elkander bedekkende vleugels trillend heen en weer te bewegen,
voordat zij opvliegen, om zich een eind verder nogmaals op den grond te verschuilen.
De onbehaarde, rolronde rupsen leiden een verborgen leven, eten uitsluitend gras of
kruiden, overwinteren en verpoppen zich in den grond.
1) IJ p e n - h y e n a - u i l (Cosmia diffinis) met rups—2) D e n n e n u i l (Trachea piniperda) met rups.
Ware grootte.
*
Het R o o d e W e e s k i n d (Catocala nupta) met rups. Ware grootte.
De grootste Uilen en tevens die, welke aan eigenaardigheden van hunne achtervleugels
kenbaar zijn en hun grootste bekoorlijkheid ontleenen, worden W e e s k i n d e r e n
(Catocala) genoemd; men onderscheidt ze in B l a u w e , R o o d e en G e l e . Van de
vier inheemsche soorten behoort één tot de eerstgenoemde afdeeling, terwijl de 3 overige
in de tweede een plaats verdienen. De derde is in Nederland niet vertegenwoordigd.
Dezelfde levenswijze als de genoemde Vlinders hebben alle overige leden van hun
geslacht. In Europa vindt men er 25; Noord-Amerika is niet minder goed bedeeld.
Daar de familiën der Vlinders in alle richtingen door overgangsvormen verbonden zijn,
die een scherpe begrenzing niet toelaten, is het moeielijk een van deze groepen met
weinige woorden te kenschetsen. In een beknopt algemeen overzicht kan men dan ook
geen volledige bepaling van deze familiën verwachten. Hier worden daarom slechts
eenige van de belangrijkste eigenaardigheden opgenoemd, waardoor de S p a n n e r s
(Phalaenidae), die men ook wel met de namen L a n d m e t e r s (Geometridae),
M e t e r s of K r a m m e t j e s aangeduid vindt, overeenstemmen. Hoewel al deze 5
benamingen, met uitzondering van de tweede, aan de houding van de larve ontleend zijn,
beginnen wij met de bespreking van het geslachtsrijpe Insect. Vóór den kleinen kop, die
op de kruin g e e n bijoogen draagt, steken de tasters slechts weinig uit; de zuiger
daarentegen vertoont in deze familie de meest verschillende graden van volkomenheid.
In den voorvleugel vindt men 11 of 12 aders, waarbij slechts één binnenrandsader. De
breede achtervleugels hebben een korte franje, een vleugelhaakje, h o o g s t e n s 2
binnenrandsaders en bovendien nog 6 of 7 andere vleugeladers. De meeste Spanners
houden in rust hunne teere vleugels een weinig uitgespreid, doch niet zoover als die,
welke in de verzamelingen voorkomen; sommige richten ze half gesloten omhoog;
andere houden ze als een dak boven hun achterlijf. Vele vliegen over dag of maken
althans spoedig van hunne vleugels gebruik, wanneer zij hun rustplaats tusschen gras of
struiken niet meer veilig achten; des nachts toonen de meeste echter een grootere neiging
om zich te bewegen dan over dag.
De B e r k e n s p a n n e r
(Amphidasis betularia) nadert in
sommige opzichten tot de Spinners
en behoort wegens de langwerpige
gedaante zijner voorvleugels tot de
grootste inheemsche soorten (50 à
55 mM. vlucht). Twee kegelvormige
verhevenheden op den kop van de
rups hebben aanleiding gegeven tot
den naam M e t e r - t o r e n k o p ,
die een der eerste beschrijvers dezer
soort haar gegeven heeft. De witte
grondkleur van den Vlinder is overal
B e r k e n s p a n n e r (Amphidasis betularia): Wijfje, rupsen bruinzwart besprenkeld. Vele
en pop. Ware grootte. stipvormige vlekjes vloeien hier en
daar, doch vooral aan den voorrand
der voorvleugels tot vlekken en lijnen ineen. Het aanmerkelijk kleinere mannetje
onderscheidt zich van het wijfje door den slankeren vorm van het lichaam en de dubbel-
kamvormige sprieten. De rups is verschillend van kleur, meestal groenachtig grijs,
minder dikwijls bruinachtig of geelachtig; dit verschil schijnt in verband te staan met de
soort van planten, waarmede zij zich voedt. Hoewel zij ook op berken, lijsterbessen en
andere breedgebladerde boomen voorkomt, geeft zij, naar ’t schijnt, aan den eik de
voorkeur. In Mei of Juni verschijnt de Vlinder; deze ziet men nooit over dag vliegen;
wegens zijn grootte en lichte kleur zal men hem niet licht over ’t hoofd zien, terwijl hij
met half geopende vleugels in het bosch op een boomstam zit.
De G r o o t e W i n t e r v l i n d e r (Hibernia defoliaria, fign. 1–3) vertoont zich in
October en November. Wanneer de meeste andere insecten reeds hunne winterkwartieren
hebben opgezocht en voor een deel reeds in verstijfden toestand verkeeren, vliegt deze
trage Spanner in de koude nachtlucht zonder overhaasting rond. Het mannetje (fig. 1)
heeft groote, teere en zwak geschubde vleugels van licht okergele kleur met fijne,
donkere stipjes bezaaid en met een groote, donkere stip in ’t midden; de voorvleugels
hebben bovendien nog het middelveld begrensd door breede, gezaagde, roestbruine
dwarsbanden. Het ongevleugelde, geel en zwart gevlekte, 10 mM. lange wijfje (fig. 2)
kruipt tegen den avond bij de boomstammen omhoog en legt de eieren afzonderlijk of tot
kleine groepjes vereenigd op de knoppen. De rupsjes komen reeds in het midden van
April voor den dag en beginnen onmiddellijk hun vernielingswerk, voordat de knoppen
zich hebben kunnen ontwikkelen. Het best merkt men ze aan de vruchtboomen op,
welker eigenaar soms een belangrijke schade lijdt door hun vraatzucht; minder duidelijk
openbaart zich hun werkzaamheid in de bosschen. De volwassen rups (fig. 3) is aan de
rugzijde bruinrood, aan de buikzijde zwavelgeel, met roodbruine strepen op ieder
segment. In ’t begin van Juni laat zij zich aan een draad naar den grond afzakken om hier
op zeer geringe diepte in den poptoestand over te gaan.
Een vleeschkleurige rups, welker kop, halsschild en borstpooten glanzig zwart zijn en
die in volwassen toestand 12 mM. lang is, bewoont van half Mei tot half Juni (dus in den
hooitijd) de bloeiwijze van den wijnstok en is daarom onder den naam van
h o o i w o r m berucht. Een tweede generatie van dezelfde soort van rupsen trekt nog
meer de aandacht; zij leeft van ’t einde van Augustus tot in September in de onrijpe
druiven, die hierdoor zuur blijven en wordt daarom door de Duitsche wijnboeren
z u u r w o r m genoemd. Zij verpopt zich in October en overwintert onder de schubben
van de schors van den wijnstok, aan den paal, die hem tot steun dient, of in den
strooband, waarmede hij is vastgebonden. Uit de pop ontwikkelt zich in April een
Vlinder van 14 mM. vlucht—de E é n m a a l G e s t r e e p t e
D r u i v e n b l a d r o l l e r (Conchylis ambiguella)—, wiens glanzig stroogele
voorvleugels in ’t midden een breede, donkerbruine dwarsstreep vertoonen, die bij den
binnenrand smaller wordt; de achtervleugels zijn grijsbruin, bij het mannetje meer
witachtig. In Juni en Juli vliegt de zomergeneratie.
De G r o e n e E i k e n b l a d r o l l e r
(Tortrix viridana) is gemakkelijk te
herkennen aan de lichtgroene kleur van het
voorste deel van ’t lichaam en van de
voorvleugels; het achterlijf en de
achtervleugels zijn zilvergrijs. Reeds in
Mei, als de knoppen van den winter- en den
zomereik zich beginnen te ontwikkelen, kan
men tusschen de knopschubben rupsjes
vinden, voortgekomen uit eieren, die hier
G r o e n e E i k e n b l a d r o l l e r (Tortrix sedert den vorigen herfst gelegen hebben.
viridana) met rups en pop. Ware grootte. Zij dringen in de knoppen door, vreten deze
uit en leven later vrij op de bladen, die zij
met eenige draden omspinnen en ook een
weinig doen omkrullen. Vooral tegen den tijd, waarin zij tusschen de overblijfselen van
bladen in den poptoestand overgaan, hangen een menigte van deze draden als spinrag
aan de boomen. Bij de geelachtig groene, 14 mM. lange rups zijn de kop, de achterrand
van het halsschild, een vlek op het laatste segment en de bruinachtig behaarde wratjes
zwart. De Vlinder, die omstreeks den langsten dag verschijnt, is 8 mM. lang en heeft 23
mM. vlucht.
Niet minder verschillend dan het uitwendig maaksel der Vlinders is de levenswijze der
14- à 16-pootige rupsen. Sommige leven gezellig in een groot spinsel, dat geheele takken
en kleine struiken als ’t ware met een sluier omgeeft; andere rollen bladen of een blad
samen en bewegen zich in de dus gevormde, aan beide einden geopende buis even snel
vooruit als achteruit. De zelfgemaakte kokertjes, die de leden van andere soorten
bewonen en voortdurend medesleepen, bestaan uit stukjes, die zij van haar voedsel
hebben afgeknaagd. Zeer vele rupsen leven als “mijngravers” in gangen, die zij in het
bladmoes, tusschen de bovenste en de onderste opperhuid van het blad, maken; andere
boren eenvoudig gangen in allerlei plantendeelen.
Bij het geslacht Tinea komen zeer ontwikkelde, ver vooruitstekende, 6- à 7-ledige
bijtasters voor; het tweede lid van den liptaster is aan het einde met borstels bezet, de
zuiger voor het gebruik ongeschikt, de kop van een haarkuif voorzien. De
borstelvormige sprieten zijn korter dan de voorvleugel.
De K o r e n m o t (Tinea granella, fig. 1) heeft 13 mM. vlucht en richt als rups schade
aan in graanpakhuizen. Hier ziet men het Vlindertje in Juni des daags tegen muren,
balken, enz. zitten. De vleugels bedekken in rust daksgewijs het lichaam; de
voorvleugels, die van achteren door de franje verbreed zijn, hebben een zilverwitte kleur
en donkerbruine à zwarte marmervlekken. De franje en de randen zijn donker gevlekt;
tamelijk standvastig strekt de grootste vlek zich van het midden van den voorrand
streepsgewijs tot aan den binnenhoek uit. De achtervleugels zijn, evenals het achterlijf,
glanzig witachtig grijs. Het wijfje legt bij voorkeur in graanpakhuizen eieren: 1 of 2 op
elke korrel. Na 10 à 14 dagen worden de rupsjes geboren. In de laatste week van Juli
openbaart hun aanwezigheid zich reeds door de kleine hoopjes drek, die aan de
aangetaste graankorrels hangen; deze zijn bij 3, 4 of meer stuks aaneengesponnen. De
“witte korenwormen” bepalen zich niet tot één korrel, maar snoepen van verscheidene en
verbinden deze door een weefsel; hieronder verborgen beknagen zij het graan van
buiten. De geelachtig witte rups verpopt zich in de uitgeholde graankorrel, in een naad
van den vloer, of in een spleet van een balk. De woning, die zij van het knaagsel uit haar
omgeving en van haar spinsel vervaardigt, bevat tot in de lente een rups, die dan eerst
verandert in een bruinachtige pop.
De A p p e l b o o m - s p i n s e l m o t of A p p e l b o o m - s t i p p e l m o t (Hyponomeuta
matinella) heeft 19 mM. vlucht en is grootendeels wit met zijdeachtigen glans. Op de
langwerpige voorvleugels bevinden zich 3 overlangsche rijen van zwarte stipjes (zwart
gestippeld zijn ook de rug en de schouderdeksels); de donkergrijze, aan den wortel
witachtige achtervleugels hebben een effen lichtgrijze franje. Van het einde van Juni tot
in het begin van Augustus kan men dezen weinig in ’t oog vallenden Vlinder over dag op
appelboomen zien loopen of zitten en ’s avonds in hun nabijheid rondvliegen, voor zoo
ver zich op deze boomen tusschen de takken floersachtige spinsels bevinden en reeds
vroeger aanwezig waren. Hier is n.l. de woonplaats van zijn bruinachtig grijze, met
zwarte wratjes bezette rups. Daar deze rupsen gezellig leven en er niet zelden een
vereeniging plaats vindt van verscheidene gezelschappen, kan het voorkomen, dat
geheele takken van den appelboom met een sluier omgeven zijn en dat het groen binnen
dit nest hoe langer hoe meer afneemt, daar van de bladen ten slotte alleen de nerven en
een der opperhuidlagen overblijven. Wanneer zij een tak hebben leeggevreten, trekken
zij verder en tasten een andere aan; hieraan ontleenen zij waarschijnlijk den naam van
T r e k m a d e n , dien men haar in Gelderland geeft, waar zij soms in de
appelboomgaarden groote schade aanrichten (Ritzema Bos). Zoodra zij volwassen zijn,
verpoppen zij zich ieder afzonderlijk in een kleverigen, haverkorrelvormigen cocon, die
de korte en dikke, roodachtig gele pop niet geheel aan ’t oog onttrekt. Ieder nest bevat
groote kluiten van dergelijke cocons.
Op stille avonden van Juli tot September vliegt Pterophorus pendadactylus langzaam in
droge tuinen rond, reeds op een afstand kenbaar aan zijn sneeuwwitte kleur (vlucht 28 à
30 mM.). Zijn groene rups leeft op winden (Convolvulus sepium en C. arvensis).
De vleugels, waarop dikwijls duidelijk zichtbare, doch vaker microscopisch fijne haren
voorkomen, zijn bij sommige soorten glashelder, bij andere in meerdere of mindere mate
ondoorzichtig, bij nog andere op sierlijke wijze bont gevlekt. Daar de Tweevleugeligen
in andere opzichten zeer gelijkvormig zijn, spelen de vleugels door de eigenaardigheden
van hun aderstelsel een belangrijke rol bij de onderscheiding der groepen en vereischen
daarom een (zij het ook korte) beschrijving. De overlangsche aderen hebben de
overhand, daarom zijn de meeste cellen langwerpig. Wanneer men de vleugeladers met
eenigen aandacht beschouwt, merkt men, hoeveel verschil haar vertakking ook aanbiedt,
t w e e hoofdstammen op, die zelfstandig van den wortel uitgaan en, althans in de
nabijheid van hun oorsprong, een meer of minder breede tusschenruimte overlaten.
Altijd zijn deze beide hoofdstammen door een dwarsader (x) verbonden. In de nabijheid
van den binnenrand ziet men, meestal onduidelijk, soms echter zonder moeite, een
derden, zelfstandig uit den vleugelwortel ontspringenden stam (g). De voorrand zelf
vormt de r a n d a d e r (costa), die bij de nadere aanduiding der overlangsche aders
n i e t m e d e g e t e l d wordt. Men heeft hierbij in het oog te houden, dat d r i e van
deze aders tot den voorsten, d r i e tot den achtersten hoofdstam behooren, zoodat in ’t
geheel slechts 6 overlangsche aders een rangnummer krijgen; het is tusschen de derde (c)
en de vierde (d), dat de vroeger genoemde verbinding der beide hoofdstammen door de
zoogenaamde k l e i n e of v o o r s t e d w a r s a d e r , ook wel eenvoudig
d w a r s a d e r genoemd (x) tot stand komt. De e e r s t e o v e r l a n g s c h e a d e r (a)
ontspringt uit den vleugelwortel en splitst zich dikwijls op korten afstand van daar in
twee takken. De eene, de m e d i a s t i n a a l a d e r , is naar boven gericht en eindigt altijd
in den voorrand op een plaats, die men ook wel de r a n d v l e k noemt. De andere tak,
die meer bepaaldelijk e e r s t e o v e r l a n g s c h e a d e r (s u b c o s t a a l - of
o n d e r r a n d a d e r ) heet, mondt eveneens in de costa uit, maar kan zich ook naar de
volgende of t w e e d e o v e r l a n g s c h e a d e r (de r a d i a a l a d e r , b) wenden, die
uit de eerste ontspruit en in den voorrand, dikwijls ook in de eerste overlangsche ader
eindigt. De d e r d e o v e r l a n g s c h e a d e r (c u b i t a a l a d e r , c) gaat altijd van de
tweede uit, of indien deze ontbreekt, van de eerste. De v i e r d e o v e r l a n g s c h e
a d e r (d i s c o ï d a a l - of m i d d e l a d e r , d) is de bovenste tak van den tweeden
hoofdstam; soms buigt zij zich bovenwaarts naar de derde overlangsche ader en heet dan
t o p d w a r s a d e r . De v ij f d e o v e r l a n g s c h e a d e r (p o s t i c a a l a d e r , e)
komt direct uit den vleugelwortel; zij ontbreekt n o o i t en is als dikste tak van den
tweeden hoofdstam de voornaamste steun van de achterste helft van den vleugel. Zij
mondt uit in den achterrand of in de z e s d e o v e r l a n g s c h e a d e r (de
a n a a l a d e r , f), die uit haar ontspringt. Wanneer verder achterwaarts nog een
overlangsche ader gevonden wordt, komt deze uit den wortel voort, behoort tot den
derden stam en heet o k s e l a d e r (g). Wanneer, zooals in den vleugel van de Mug, een
m i d d e l - of d i s c o ï d a a l c e l (5) aanwezig is, gaan hiervan een aantal overlangsche
aders uit, die niet op dezelfde wijze als de overige gesteld worden, maar eenvoudig als
“uit de middelcel ontspringende aders” worden aangeduid. Bovendien kunnen in den
vleugel, behalve de beide reeds genoemde, nog eenige andere dwarsaders voorkomen,
n.l. de a c h t e r s t e of g r o o t e d w a r s a d e r (d), die in de nabijheid van den
achterrand de vierde met de vijfde overlangsche ader verbindt, de v o o r s t e
w o r t e l d w a r s a d e r (y), die in andere gevallen tusschen dezelfde aders een brug
vormt, doch zeer dicht bij den wortel gelegen is, waar ook de a c h t e r s t e
w o r t e l d w a r s a d e r zich bevindt, die de beide volgende overlangsche aders
vereenigt; de s c h o u d e r d w a r s a d e r (h u m e r a a l a d e r , s) eindelijk brengt de
eerste overlangsche ader met den voorrand in gemeenschap.
Vleugel van een Mug.
a) Eerste, b) tweede, c) derde, d) vierde, e) vijfde, f) zesde overlangsche ader. x) Kleine dwarsader. y)
Voorste worteldwarsader. s) Schouderdwarsader. a) Vleugellapje.
1) Voorste wortelcel of basaalcel. 2) Eerste achterrandcel, waarop in de vleugel van de Mug nog
verscheidene achterrandcellen volgen. 3) Anaalcel. 4) Achterste wortelcel. 5) Middelcel of discoïdaalcel. 6)
Okselcel. 7) Lapcel. 8) Onderrandcel. 9 en 10) Randcellen. 11) Voorrandcel.
Bij vele familiën vindt men achter den vleugel nog een meer of minder groot,
enkelvoudig of dubbel v l e u g e l s c h u b j e , waardoor de k o l f j e s (h a l t e r e n )
geheel of gedeeltelijk bedekt worden. Deze op een steel rustende knopjes, die licht in ’t
oog vallen, wanneer zij, zooals bij de Muggen, “onbedekt” zijn, komen uitsluitend bij de
Tweevleugeligen voor (slechts bij een paar soorten ontbreken zij). Over de beteekenis
der kolfjes zijn zeer verschillende meeningen uitgesproken. Zeker is het, dat zij
overblijfselen zijn van de bij andere Insecten tot vliegwerktuigen ontwikkelde
achtervleugels. Volgens de nieuwste onderzoekingen dienen zij als stuurorganen bij het
vliegen. Anderen zijn van oordeel, dat zij in de eerste plaats noodig zijn voor de
beweging der “bromringen,” dus tot het voortbrengen van de stem, en eerst hierdoor
invloed oefenen op de ademhaling en de geschiktheid voor het vliegen. Het geluid, dat
de Tweevleugeligen maken, komt tot stand, deels door de trillingen der vleugels, deels
door wrijving van de achterlijfsringen en van den kop, deels door de 4 ademgaten van
het borststuk (2 aan het voorste, 2 aan het achterste segment). Bij de Vliegen en Muggen
zijn de ademgaten van het borststuk in stemorganen veranderd, bij sommige alle 4, bij
andere slechts 2: alleen de voorste of alleen de achterste. Iedere bromtoestel heeft
ongeveer de volgende inrichting: de talrijke luchtbuizen van het borststuk vereenigen
zich allengs, totdat zij in de nabijheid van ieder ademgat een enkele buis vormen. Deze
verwijdt zich aan het einde tot een halfbolvormige blaas, welker buitenste opening
tevens de rand van het ademgat is en welker talrijke, door chitine verharde plooien
gezamenlijk gesteund worden door den “bromring”, die onmiddellijk onder het ademgat
gelegen is. Door de lucht, welke de tracheeën uitwerpen of in zich opnemen, worden de
chitineplaatjes van de “bromholte” in trilling gebracht. Daar het dus gevormde geluid
met de ademhalingswerktuigen wordt voortgebracht, mag men het “stem” noemen.
Meestal wordt het grootste deel van den kop ingenomen door de oogen, die soms naakt,
soms behaard zijn, bij vele mannetjes op de kruin elkander raken, daarentegen bij het
wijfje steeds gescheiden blijven, zij het dan ook slechts door de smalle
v o o r h o o f d s s t r i e m . In den regel zijn drie bijoogen aanwezig.
De monddeelen werden reeds besproken en (in fig. 11) afgebeeld. Bij de bloedzuigende
soorten zijn zij hoornachtig, bij de andere weeker; de verschillende organen, die bij
andere Insecten voor ’t bijten of kauwen dienen, vormen bij gene een s t e e k s n u i t , bij
deze een s c h e p - of z u i g s n u i t .
Het deel van den kop, dat tusschen de sprieten, den binnenrand der oogen en den
mondrand gelegen is, wordt a a n g e z i c h t (epistoma) genoemd; de baardvormige
beharing, die soms hierop voorkomt, heet k n e v e l (mystax), in tegenstelling met de
b a k k e b a a r d (barba), die het onder de oogen gelegen deel van den kop, de
“wangen”, soms bedekt en ook wel aan den onderrand van den mond gevonden wordt.
De alleenstaande haren, die de z ij d e n van het ondergezicht insluiten, heeten
k n e v e l b o r s t e l s . Niet zelden onderscheiden enkele van de borstelige haren van het
lichaam, vooral van het achterlijf, zich door dikte en lengte; men noemt ze g r o o t e
b o r s t e l s (m a c r o c h e t e n ), als zij een bijzondere vermelding verdienen.
Bij de meeste Tweevleugeligen begint de ontwikkeling der larven, evenals bij de tot
dusver genoemde Insecten, eerst na het leggen der eieren. Bij sommige soorten, o.a. bij
de bekende Vleeschvliegen en vele Rupsenvliegen, nemen de bedoelde verschijnselen
reeds vroeger een aanvang en zijn, voordat het ei ter wereld komt, zoover
voortgeschreden, dat de larve onmiddellijk daarna de dunne eischaal verlaat. Zulke
Insecten noemt men o v o v i v i p a a r . Bij de “p u p i p a r e ” Luisvliegen blijft de larve
in de afvoerbuis van de eieren-voortbrengende organen en voedt zich met het vocht, dat
door een soort van “melkklieren” voor haar afgescheiden en in deze buis uitgestort
wordt, totdat zij rijp is om in den poptoestand over te gaan, hetgeen onmiddellijk na de
geboorte geschiedt.
ebookgate.com