Dan Ginsburg, Budirijanto Purnomo, Dave Shreiner
OpenGL Es 3.0 Programming Guide
Mitarbeit:Munshi, Aaftab; Shreiner, Dave
Dan Ginsburg, Budirijanto Purnomo, Dave Shreiner
OpenGL Es 3.0 Programming Guide
Mitarbeit:Munshi, Aaftab; Shreiner, Dave
- Broschiertes Buch
- Merkliste
- Auf die Merkliste
- Bewerten Bewerten
- Teilen
- Produkt teilen
- Produkterinnerung
- Produkterinnerung
Revised edition of: The OpenGL ES 2.0 programming guide / Aaftab Munshi, Dan Ginsburg, Dave Shreiner. 2009.
Andere Kunden interessierten sich auch für
- Lisa FridsmaAdobe After Effects Classroom in a Book (2021 Release)64,99 €
- Olga BobrowskaChinese Animated Film and Ideology, 1940s-1970s66,99 €
- Russell ChunAdobe Animate Classroom in a Book 2024 Release77,99 €
- Chance ThomasMaking it HUGE in Video Games72,99 €
- Renee StevensDesigning Immersive 3D Experiences49,99 €
- Ben GoldsmithAdobe Premiere Pro: A Complete Course and Compendium of Features43,99 €
- Marie-Josée Saint-PierreWomen and Film Animation48,99 €
-
-
-
Revised edition of: The OpenGL ES 2.0 programming guide / Aaftab Munshi, Dan Ginsburg, Dave Shreiner. 2009.
Produktdetails
- Produktdetails
- OpenGL
- Verlag: Addison-Wesley Longman, Amsterdam
- 2nd, rev. ed
- Seitenzahl: 560
- Erscheinungstermin: 28. Februar 2014
- Englisch
- Abmessung: 231mm x 179mm x 32mm
- Gewicht: 870g
- ISBN-13: 9780321933881
- ISBN-10: 0321933885
- Artikelnr.: 39354810
- OpenGL
- Verlag: Addison-Wesley Longman, Amsterdam
- 2nd, rev. ed
- Seitenzahl: 560
- Erscheinungstermin: 28. Februar 2014
- Englisch
- Abmessung: 231mm x 179mm x 32mm
- Gewicht: 870g
- ISBN-13: 9780321933881
- ISBN-10: 0321933885
- Artikelnr.: 39354810
Dan Ginsburg is founder of Upsample Software, LLC, a software consultancy specializing in 3D graphics and GPU computing. In previous roles he has worked on developing OpenGL drivers, desktop and handheld 3D demos, GPU developer tools, 3D medical visualization and games. He coauthored the OpenCL Programming Guide (Addison-Wesley, 2012). Budi Purnomo is a senior software architect at Advanced Micro Devices, Inc. where he collaborates with many AMD architects to develop software infrastructure across multiple software stacks and to define future hardware architectures for debugging and profiling GPU applications. Dave Shreiner is one of the World’s foremost authorities on OpenGL. He is the series editor for the Addison-Wesley OpenGL Series. Aatab Munshi is the spec editor for the OpenGL ES 1.1 and 2.0 specifications.
List of Figures xvii
List of Examples xxi
List of Tables xxv
Foreword xxix
Preface xxxi
Intended Audience xxxi
Organization of This Book xxxii
Example Code and Shaders xxxvi
Errata xxxvi
Acknowledgments xxxvii
About the Authors xxxix
Chapter 1: Introduction to OpenGL ES 3.0 1
OpenGL ES 3.0 3
What’s New in OpenGL ES 3.0 11
OpenGL ES 3.0 and Backward Compatibility 17
EGL 19
EGL Command Syntax 20
OpenGL ES Command Syntax 21
Error Handling 22
Basic State Management 23
Further Reading 25
Chapter 2: Hello Triangle: An OpenGL ES 3.0 Example 27
Code Framework 28
Where to Download the Examples 28
Hello Triangle Example 29
Using the OpenGL ES 3.0 Framework 34
Creating a Simple Vertex and Fragment Shader 35
Compiling and Loading the Shaders 36
Creating a Program Object and Linking the Shaders 38
Setting the Viewport and Clearing the Color Buffer 39
Loading the Geometry and Drawing a Primitive 40
Displaying the Back Buffer 41
Summary 42
Chapter 3: An Introduction to EGL 43
Communicating with the Windowing System 44
Checking for Errors 45
Initializing EGL 46
Determining the Available Surface Configurations 46
Querying EGLConfig Attributes 48
Letting EGL Choose the Configuration 51
Creating an On-Screen Rendering Area: The EGL Window 53
Creating an Off-Screen Rendering Area: EGL Pbuffers 56
Creating a Rendering Context 60
Making an EGLContext Current 62
Putting All Our EGL Knowledge Together 63
Synchronizing Rendering 66
Summary 67
Chapter 4: Shaders and Programs 69
Shaders and Programs 69
Uniforms and Attributes 80
Shader Compiler 93
Program Binaries 94
Summary 95
Chapter 5: OpenGL ES Shading Language 97
OpenGL ES Shading Language Basics 98
Shader Version Specification 98
Variables and Variable Types 99
Variable Constructors 100
Vector and Matrix Components 101
Constants 102
Structures 103
Arrays 104
Operators 104
Functions 106
Built-In Functions 107
Control Flow Statements 107
Uniforms 108
Uniform Blocks 109
Vertex and Fragment Shader Inputs/Outputs 111
Interpolation Qualifiers 114
Preprocessor and Directives 115
Uniform and Interpolator Packing 117
Precision Qualifiers 119
Invariance 121
Summary 123
Chapter 6: Vertex Attributes, Vertex Arrays, and Buffer Objects 125
Specifying Vertex Attribute Data 126
Declaring Vertex Attribute Variables in a Vertex Shader 135
Vertex Buffer Objects 140
Vertex Array Objects 150
Mapping Buffer Objects 154
Copying Buffer Objects 159
Summary 160
Chapter 7: Primitive Assembly and Rasterization 161
Primitives 161
Drawing Primitives 165
Primitive Assembly 174
Rasterization 179
Occlusion Queries 183
Summary 185
Chapter 8: Vertex Shaders 187
Vertex Shader Overview 188
Vertex Shader Examples 196
Generating Texture Coordinates 205
Vertex Skinning 207
Transform Feedback 211
Vertex Textures 214
OpenGL ES 1.1 Vertex Pipeline as an ES 3.0 Vertex Shader 215
Summary 223
Chapter 9: Texturing 225
Texturing Basics 226
Compressed Textures 262
Texture Subimage Specification 266
Copying Texture Data from the Color Buffer 269
Sampler Objects 273
Immutable Textures 276
Pixel Unpack Buffer Objects 277
Summary 278
Chapter 10: Fragment Shaders 279
Fixed-Function Fragment Shaders 280
Fragment Shader Overview 282
Implementing Fixed-Function Techniques Using Shaders 286
Summary 295
Chapter 11: Fragment Operations 297
Buffers 298
Fragment Tests and Operations 303
Blending 311
Dithering 314
Multisampled Anti-Aliasing 314
Reading and Writing Pixels to the Framebuffer 316
Multiple Render Targets 320
Summary 324
Chapter12: Framebuffer Objects 325
Why Framebuffer Objects? 325
Framebuffer and Renderbuffer Objects 327
Creating Framebuffer and Renderbuffer Objects 329
Using Renderbuffer Objects 330
Using Framebuffer Objects 335
Framebuffer Blits 342
Framebuffer Invalidation 344
Deleting Framebuffer and Renderbuffer Objects 346
Examples 348
Performance Tips and Tricks 354
Summary 355
Chapter 13: Sync Objects and Fences 357
Flush and Finish 357
Why Use a Sync Object? 358
Creating and Deleting a Sync Object 358
Waiting for and Signaling a Sync Object 359
Example 360
Summary 361
Chapter 14: Advanced Programming with OpenGL ES 3.0 363
Per-Fragment Lighting 363
Environment Mapping 370
Particle System Using Transform Feedback 380
Image Postprocessing 387
Projective Texturing 390
Noise Using a 3D Texture 397
Procedural Texturing 404
Rendering Terrain with Vertex Texture Fetch 410
Shadows Using a Depth Texture 414
Summary 420
Chapter 15: State Queries 421
OpenGL ES 3.0 Implementation String Queries 421
Querying Implementation-Dependent Limits 423
Querying OpenGL ES State 429
Hints 435
Entity Name Queries 436
Nonprogrammable Operations Control and Queries 436
Shader and Program State Queries 438
Vertex Attribute Queries 440
Texture State Queries 441
Sampler Queries 442
Asynchronous Object Queries 442
Sync Object Queries 443
Vertex Buffer Queries 444
Renderbuffer and Framebuffer State Queries 445
Summary 446
Chapter 16: OpenGL ES Platforms 447
Building for Microsoft Windows with Visual Studio 447
Building for Ubuntu Linux 449
Building for Android 4.3+ NDK (C++) 450
Building for Android 4.3+ SDK (Java) 452
Building for iOS 7 453
Summary 455
Appendix A: GL_HALF_FLOAT 457
16-Bit Floating-Point Number 458
Converting a Float to a Half-Float 459
Appendix B: Built-In Functions 463
Angle and Trigonometry Functions 465
Exponential Functions 466
Common Functions 467
Floating-Point Pack and Unpack Functions 471
Geometric Functions 472
Matrix Functions 474
Vector Relational Functions 475
Texture Lookup Functions 476
Fragment Processing Functions 483
Appendix C: ES Framework API 485
Framework Core Functions 485
Transformation Functions 490
Index 495
List of Examples xxi
List of Tables xxv
Foreword xxix
Preface xxxi
Intended Audience xxxi
Organization of This Book xxxii
Example Code and Shaders xxxvi
Errata xxxvi
Acknowledgments xxxvii
About the Authors xxxix
Chapter 1: Introduction to OpenGL ES 3.0 1
OpenGL ES 3.0 3
What’s New in OpenGL ES 3.0 11
OpenGL ES 3.0 and Backward Compatibility 17
EGL 19
EGL Command Syntax 20
OpenGL ES Command Syntax 21
Error Handling 22
Basic State Management 23
Further Reading 25
Chapter 2: Hello Triangle: An OpenGL ES 3.0 Example 27
Code Framework 28
Where to Download the Examples 28
Hello Triangle Example 29
Using the OpenGL ES 3.0 Framework 34
Creating a Simple Vertex and Fragment Shader 35
Compiling and Loading the Shaders 36
Creating a Program Object and Linking the Shaders 38
Setting the Viewport and Clearing the Color Buffer 39
Loading the Geometry and Drawing a Primitive 40
Displaying the Back Buffer 41
Summary 42
Chapter 3: An Introduction to EGL 43
Communicating with the Windowing System 44
Checking for Errors 45
Initializing EGL 46
Determining the Available Surface Configurations 46
Querying EGLConfig Attributes 48
Letting EGL Choose the Configuration 51
Creating an On-Screen Rendering Area: The EGL Window 53
Creating an Off-Screen Rendering Area: EGL Pbuffers 56
Creating a Rendering Context 60
Making an EGLContext Current 62
Putting All Our EGL Knowledge Together 63
Synchronizing Rendering 66
Summary 67
Chapter 4: Shaders and Programs 69
Shaders and Programs 69
Uniforms and Attributes 80
Shader Compiler 93
Program Binaries 94
Summary 95
Chapter 5: OpenGL ES Shading Language 97
OpenGL ES Shading Language Basics 98
Shader Version Specification 98
Variables and Variable Types 99
Variable Constructors 100
Vector and Matrix Components 101
Constants 102
Structures 103
Arrays 104
Operators 104
Functions 106
Built-In Functions 107
Control Flow Statements 107
Uniforms 108
Uniform Blocks 109
Vertex and Fragment Shader Inputs/Outputs 111
Interpolation Qualifiers 114
Preprocessor and Directives 115
Uniform and Interpolator Packing 117
Precision Qualifiers 119
Invariance 121
Summary 123
Chapter 6: Vertex Attributes, Vertex Arrays, and Buffer Objects 125
Specifying Vertex Attribute Data 126
Declaring Vertex Attribute Variables in a Vertex Shader 135
Vertex Buffer Objects 140
Vertex Array Objects 150
Mapping Buffer Objects 154
Copying Buffer Objects 159
Summary 160
Chapter 7: Primitive Assembly and Rasterization 161
Primitives 161
Drawing Primitives 165
Primitive Assembly 174
Rasterization 179
Occlusion Queries 183
Summary 185
Chapter 8: Vertex Shaders 187
Vertex Shader Overview 188
Vertex Shader Examples 196
Generating Texture Coordinates 205
Vertex Skinning 207
Transform Feedback 211
Vertex Textures 214
OpenGL ES 1.1 Vertex Pipeline as an ES 3.0 Vertex Shader 215
Summary 223
Chapter 9: Texturing 225
Texturing Basics 226
Compressed Textures 262
Texture Subimage Specification 266
Copying Texture Data from the Color Buffer 269
Sampler Objects 273
Immutable Textures 276
Pixel Unpack Buffer Objects 277
Summary 278
Chapter 10: Fragment Shaders 279
Fixed-Function Fragment Shaders 280
Fragment Shader Overview 282
Implementing Fixed-Function Techniques Using Shaders 286
Summary 295
Chapter 11: Fragment Operations 297
Buffers 298
Fragment Tests and Operations 303
Blending 311
Dithering 314
Multisampled Anti-Aliasing 314
Reading and Writing Pixels to the Framebuffer 316
Multiple Render Targets 320
Summary 324
Chapter12: Framebuffer Objects 325
Why Framebuffer Objects? 325
Framebuffer and Renderbuffer Objects 327
Creating Framebuffer and Renderbuffer Objects 329
Using Renderbuffer Objects 330
Using Framebuffer Objects 335
Framebuffer Blits 342
Framebuffer Invalidation 344
Deleting Framebuffer and Renderbuffer Objects 346
Examples 348
Performance Tips and Tricks 354
Summary 355
Chapter 13: Sync Objects and Fences 357
Flush and Finish 357
Why Use a Sync Object? 358
Creating and Deleting a Sync Object 358
Waiting for and Signaling a Sync Object 359
Example 360
Summary 361
Chapter 14: Advanced Programming with OpenGL ES 3.0 363
Per-Fragment Lighting 363
Environment Mapping 370
Particle System Using Transform Feedback 380
Image Postprocessing 387
Projective Texturing 390
Noise Using a 3D Texture 397
Procedural Texturing 404
Rendering Terrain with Vertex Texture Fetch 410
Shadows Using a Depth Texture 414
Summary 420
Chapter 15: State Queries 421
OpenGL ES 3.0 Implementation String Queries 421
Querying Implementation-Dependent Limits 423
Querying OpenGL ES State 429
Hints 435
Entity Name Queries 436
Nonprogrammable Operations Control and Queries 436
Shader and Program State Queries 438
Vertex Attribute Queries 440
Texture State Queries 441
Sampler Queries 442
Asynchronous Object Queries 442
Sync Object Queries 443
Vertex Buffer Queries 444
Renderbuffer and Framebuffer State Queries 445
Summary 446
Chapter 16: OpenGL ES Platforms 447
Building for Microsoft Windows with Visual Studio 447
Building for Ubuntu Linux 449
Building for Android 4.3+ NDK (C++) 450
Building for Android 4.3+ SDK (Java) 452
Building for iOS 7 453
Summary 455
Appendix A: GL_HALF_FLOAT 457
16-Bit Floating-Point Number 458
Converting a Float to a Half-Float 459
Appendix B: Built-In Functions 463
Angle and Trigonometry Functions 465
Exponential Functions 466
Common Functions 467
Floating-Point Pack and Unpack Functions 471
Geometric Functions 472
Matrix Functions 474
Vector Relational Functions 475
Texture Lookup Functions 476
Fragment Processing Functions 483
Appendix C: ES Framework API 485
Framework Core Functions 485
Transformation Functions 490
Index 495
List of Figures xvii
List of Examples xxi
List of Tables xxv
Foreword xxix
Preface xxxi
Intended Audience xxxi
Organization of This Book xxxii
Example Code and Shaders xxxvi
Errata xxxvi
Acknowledgments xxxvii
About the Authors xxxix
Chapter 1: Introduction to OpenGL ES 3.0 1
OpenGL ES 3.0 3
What’s New in OpenGL ES 3.0 11
OpenGL ES 3.0 and Backward Compatibility 17
EGL 19
EGL Command Syntax 20
OpenGL ES Command Syntax 21
Error Handling 22
Basic State Management 23
Further Reading 25
Chapter 2: Hello Triangle: An OpenGL ES 3.0 Example 27
Code Framework 28
Where to Download the Examples 28
Hello Triangle Example 29
Using the OpenGL ES 3.0 Framework 34
Creating a Simple Vertex and Fragment Shader 35
Compiling and Loading the Shaders 36
Creating a Program Object and Linking the Shaders 38
Setting the Viewport and Clearing the Color Buffer 39
Loading the Geometry and Drawing a Primitive 40
Displaying the Back Buffer 41
Summary 42
Chapter 3: An Introduction to EGL 43
Communicating with the Windowing System 44
Checking for Errors 45
Initializing EGL 46
Determining the Available Surface Configurations 46
Querying EGLConfig Attributes 48
Letting EGL Choose the Configuration 51
Creating an On-Screen Rendering Area: The EGL Window 53
Creating an Off-Screen Rendering Area: EGL Pbuffers 56
Creating a Rendering Context 60
Making an EGLContext Current 62
Putting All Our EGL Knowledge Together 63
Synchronizing Rendering 66
Summary 67
Chapter 4: Shaders and Programs 69
Shaders and Programs 69
Uniforms and Attributes 80
Shader Compiler 93
Program Binaries 94
Summary 95
Chapter 5: OpenGL ES Shading Language 97
OpenGL ES Shading Language Basics 98
Shader Version Specification 98
Variables and Variable Types 99
Variable Constructors 100
Vector and Matrix Components 101
Constants 102
Structures 103
Arrays 104
Operators 104
Functions 106
Built-In Functions 107
Control Flow Statements 107
Uniforms 108
Uniform Blocks 109
Vertex and Fragment Shader Inputs/Outputs 111
Interpolation Qualifiers 114
Preprocessor and Directives 115
Uniform and Interpolator Packing 117
Precision Qualifiers 119
Invariance 121
Summary 123
Chapter 6: Vertex Attributes, Vertex Arrays, and Buffer Objects 125
Specifying Vertex Attribute Data 126
Declaring Vertex Attribute Variables in a Vertex Shader 135
Vertex Buffer Objects 140
Vertex Array Objects 150
Mapping Buffer Objects 154
Copying Buffer Objects 159
Summary 160
Chapter 7: Primitive Assembly and Rasterization 161
Primitives 161
Drawing Primitives 165
Primitive Assembly 174
Rasterization 179
Occlusion Queries 183
Summary 185
Chapter 8: Vertex Shaders 187
Vertex Shader Overview 188
Vertex Shader Examples 196
Generating Texture Coordinates 205
Vertex Skinning 207
Transform Feedback 211
Vertex Textures 214
OpenGL ES 1.1 Vertex Pipeline as an ES 3.0 Vertex Shader 215
Summary 223
Chapter 9: Texturing 225
Texturing Basics 226
Compressed Textures 262
Texture Subimage Specification 266
Copying Texture Data from the Color Buffer 269
Sampler Objects 273
Immutable Textures 276
Pixel Unpack Buffer Objects 277
Summary 278
Chapter 10: Fragment Shaders 279
Fixed-Function Fragment Shaders 280
Fragment Shader Overview 282
Implementing Fixed-Function Techniques Using Shaders 286
Summary 295
Chapter 11: Fragment Operations 297
Buffers 298
Fragment Tests and Operations 303
Blending 311
Dithering 314
Multisampled Anti-Aliasing 314
Reading and Writing Pixels to the Framebuffer 316
Multiple Render Targets 320
Summary 324
Chapter12: Framebuffer Objects 325
Why Framebuffer Objects? 325
Framebuffer and Renderbuffer Objects 327
Creating Framebuffer and Renderbuffer Objects 329
Using Renderbuffer Objects 330
Using Framebuffer Objects 335
Framebuffer Blits 342
Framebuffer Invalidation 344
Deleting Framebuffer and Renderbuffer Objects 346
Examples 348
Performance Tips and Tricks 354
Summary 355
Chapter 13: Sync Objects and Fences 357
Flush and Finish 357
Why Use a Sync Object? 358
Creating and Deleting a Sync Object 358
Waiting for and Signaling a Sync Object 359
Example 360
Summary 361
Chapter 14: Advanced Programming with OpenGL ES 3.0 363
Per-Fragment Lighting 363
Environment Mapping 370
Particle System Using Transform Feedback 380
Image Postprocessing 387
Projective Texturing 390
Noise Using a 3D Texture 397
Procedural Texturing 404
Rendering Terrain with Vertex Texture Fetch 410
Shadows Using a Depth Texture 414
Summary 420
Chapter 15: State Queries 421
OpenGL ES 3.0 Implementation String Queries 421
Querying Implementation-Dependent Limits 423
Querying OpenGL ES State 429
Hints 435
Entity Name Queries 436
Nonprogrammable Operations Control and Queries 436
Shader and Program State Queries 438
Vertex Attribute Queries 440
Texture State Queries 441
Sampler Queries 442
Asynchronous Object Queries 442
Sync Object Queries 443
Vertex Buffer Queries 444
Renderbuffer and Framebuffer State Queries 445
Summary 446
Chapter 16: OpenGL ES Platforms 447
Building for Microsoft Windows with Visual Studio 447
Building for Ubuntu Linux 449
Building for Android 4.3+ NDK (C++) 450
Building for Android 4.3+ SDK (Java) 452
Building for iOS 7 453
Summary 455
Appendix A: GL_HALF_FLOAT 457
16-Bit Floating-Point Number 458
Converting a Float to a Half-Float 459
Appendix B: Built-In Functions 463
Angle and Trigonometry Functions 465
Exponential Functions 466
Common Functions 467
Floating-Point Pack and Unpack Functions 471
Geometric Functions 472
Matrix Functions 474
Vector Relational Functions 475
Texture Lookup Functions 476
Fragment Processing Functions 483
Appendix C: ES Framework API 485
Framework Core Functions 485
Transformation Functions 490
Index 495
List of Examples xxi
List of Tables xxv
Foreword xxix
Preface xxxi
Intended Audience xxxi
Organization of This Book xxxii
Example Code and Shaders xxxvi
Errata xxxvi
Acknowledgments xxxvii
About the Authors xxxix
Chapter 1: Introduction to OpenGL ES 3.0 1
OpenGL ES 3.0 3
What’s New in OpenGL ES 3.0 11
OpenGL ES 3.0 and Backward Compatibility 17
EGL 19
EGL Command Syntax 20
OpenGL ES Command Syntax 21
Error Handling 22
Basic State Management 23
Further Reading 25
Chapter 2: Hello Triangle: An OpenGL ES 3.0 Example 27
Code Framework 28
Where to Download the Examples 28
Hello Triangle Example 29
Using the OpenGL ES 3.0 Framework 34
Creating a Simple Vertex and Fragment Shader 35
Compiling and Loading the Shaders 36
Creating a Program Object and Linking the Shaders 38
Setting the Viewport and Clearing the Color Buffer 39
Loading the Geometry and Drawing a Primitive 40
Displaying the Back Buffer 41
Summary 42
Chapter 3: An Introduction to EGL 43
Communicating with the Windowing System 44
Checking for Errors 45
Initializing EGL 46
Determining the Available Surface Configurations 46
Querying EGLConfig Attributes 48
Letting EGL Choose the Configuration 51
Creating an On-Screen Rendering Area: The EGL Window 53
Creating an Off-Screen Rendering Area: EGL Pbuffers 56
Creating a Rendering Context 60
Making an EGLContext Current 62
Putting All Our EGL Knowledge Together 63
Synchronizing Rendering 66
Summary 67
Chapter 4: Shaders and Programs 69
Shaders and Programs 69
Uniforms and Attributes 80
Shader Compiler 93
Program Binaries 94
Summary 95
Chapter 5: OpenGL ES Shading Language 97
OpenGL ES Shading Language Basics 98
Shader Version Specification 98
Variables and Variable Types 99
Variable Constructors 100
Vector and Matrix Components 101
Constants 102
Structures 103
Arrays 104
Operators 104
Functions 106
Built-In Functions 107
Control Flow Statements 107
Uniforms 108
Uniform Blocks 109
Vertex and Fragment Shader Inputs/Outputs 111
Interpolation Qualifiers 114
Preprocessor and Directives 115
Uniform and Interpolator Packing 117
Precision Qualifiers 119
Invariance 121
Summary 123
Chapter 6: Vertex Attributes, Vertex Arrays, and Buffer Objects 125
Specifying Vertex Attribute Data 126
Declaring Vertex Attribute Variables in a Vertex Shader 135
Vertex Buffer Objects 140
Vertex Array Objects 150
Mapping Buffer Objects 154
Copying Buffer Objects 159
Summary 160
Chapter 7: Primitive Assembly and Rasterization 161
Primitives 161
Drawing Primitives 165
Primitive Assembly 174
Rasterization 179
Occlusion Queries 183
Summary 185
Chapter 8: Vertex Shaders 187
Vertex Shader Overview 188
Vertex Shader Examples 196
Generating Texture Coordinates 205
Vertex Skinning 207
Transform Feedback 211
Vertex Textures 214
OpenGL ES 1.1 Vertex Pipeline as an ES 3.0 Vertex Shader 215
Summary 223
Chapter 9: Texturing 225
Texturing Basics 226
Compressed Textures 262
Texture Subimage Specification 266
Copying Texture Data from the Color Buffer 269
Sampler Objects 273
Immutable Textures 276
Pixel Unpack Buffer Objects 277
Summary 278
Chapter 10: Fragment Shaders 279
Fixed-Function Fragment Shaders 280
Fragment Shader Overview 282
Implementing Fixed-Function Techniques Using Shaders 286
Summary 295
Chapter 11: Fragment Operations 297
Buffers 298
Fragment Tests and Operations 303
Blending 311
Dithering 314
Multisampled Anti-Aliasing 314
Reading and Writing Pixels to the Framebuffer 316
Multiple Render Targets 320
Summary 324
Chapter12: Framebuffer Objects 325
Why Framebuffer Objects? 325
Framebuffer and Renderbuffer Objects 327
Creating Framebuffer and Renderbuffer Objects 329
Using Renderbuffer Objects 330
Using Framebuffer Objects 335
Framebuffer Blits 342
Framebuffer Invalidation 344
Deleting Framebuffer and Renderbuffer Objects 346
Examples 348
Performance Tips and Tricks 354
Summary 355
Chapter 13: Sync Objects and Fences 357
Flush and Finish 357
Why Use a Sync Object? 358
Creating and Deleting a Sync Object 358
Waiting for and Signaling a Sync Object 359
Example 360
Summary 361
Chapter 14: Advanced Programming with OpenGL ES 3.0 363
Per-Fragment Lighting 363
Environment Mapping 370
Particle System Using Transform Feedback 380
Image Postprocessing 387
Projective Texturing 390
Noise Using a 3D Texture 397
Procedural Texturing 404
Rendering Terrain with Vertex Texture Fetch 410
Shadows Using a Depth Texture 414
Summary 420
Chapter 15: State Queries 421
OpenGL ES 3.0 Implementation String Queries 421
Querying Implementation-Dependent Limits 423
Querying OpenGL ES State 429
Hints 435
Entity Name Queries 436
Nonprogrammable Operations Control and Queries 436
Shader and Program State Queries 438
Vertex Attribute Queries 440
Texture State Queries 441
Sampler Queries 442
Asynchronous Object Queries 442
Sync Object Queries 443
Vertex Buffer Queries 444
Renderbuffer and Framebuffer State Queries 445
Summary 446
Chapter 16: OpenGL ES Platforms 447
Building for Microsoft Windows with Visual Studio 447
Building for Ubuntu Linux 449
Building for Android 4.3+ NDK (C++) 450
Building for Android 4.3+ SDK (Java) 452
Building for iOS 7 453
Summary 455
Appendix A: GL_HALF_FLOAT 457
16-Bit Floating-Point Number 458
Converting a Float to a Half-Float 459
Appendix B: Built-In Functions 463
Angle and Trigonometry Functions 465
Exponential Functions 466
Common Functions 467
Floating-Point Pack and Unpack Functions 471
Geometric Functions 472
Matrix Functions 474
Vector Relational Functions 475
Texture Lookup Functions 476
Fragment Processing Functions 483
Appendix C: ES Framework API 485
Framework Core Functions 485
Transformation Functions 490
Index 495