Programming Guide. Aaftab Munshi Dan Ginsburg Dave Shreiner. TT r^addison-wesley

Similar documents
OpenGL SUPERBIBLE. Fifth Edition. Comprehensive Tutorial and Reference. Richard S. Wright, Jr. Nicholas Haemel Graham Sellers Benjamin Lipchak

OpenGL. Shading Language. Third Edition

OpenGL ES 2.0. Programming Guide

E.Order of Operations

The Unified Modeling Language User Guide

Free Downloads OpenGL ES 3.0 Programming Guide

Dave Shreiner, ARM March 2009

Module 13C: Using The 3D Graphics APIs OpenGL ES

Lecture 2. Shaders, GLSL and GPGPU

SQL Queries. for. Mere Mortals. Third Edition. A Hands-On Guide to Data Manipulation in SQL. John L. Viescas Michael J. Hernandez

Real - Time Rendering. Pipeline optimization. Michal Červeňanský Juraj Starinský

Real-Time Rendering (Echtzeitgraphik) Michael Wimmer

\ Smart Client 0" Deploymentwith v^ ClickOnce

Introduction to Computer Graphics

Programming in Python 3

1.2.3 The Graphics Hardware Pipeline

MariaDB Crash Course. A Addison-Wesley. Ben Forta. Upper Saddle River, NJ Boston. Indianapolis. Singapore Mexico City. Cape Town Sydney.

Application Programming

Introduction to the OpenGL Shading Language

ECLIPSE RICH CLIENT PLATFORM

OpenGL on Android. Lecture 7. Android and Low-level Optimizations Summer School. 27 July 2015

Evolution of GPUs Chris Seitz

Real - Time Rendering. Graphics pipeline. Michal Červeňanský Juraj Starinský

CS4620/5620: Lecture 14 Pipeline

Pipeline Operations. CS 4620 Lecture Steve Marschner. Cornell CS4620 Spring 2018 Lecture 11

Rendering Objects. Need to transform all geometry then

Rasterization Overview

Quality Code. Software Testing Principles, Practices, and Patterns. Stephen Vance. AAddison-Wesley

Pipeline Operations. CS 4620 Lecture 14

Cloud Computing and SOA Convergence in Your Enterprise

Programming Graphics Hardware

HE COMPLETE OPENGL PROGI FOR WINDOW WIND

Graphics Shaders. Theory and Practice. Second Edition. Mike Bailey. Steve Cunningham. CRC Press. Taylor&FnincIs Croup tootutor London New York

Digital System Design with SystemVerilog

OpenGL Essentials Training

Engineering Real- Time Applications with Wild Magic

The Application Stage. The Game Loop, Resource Management and Renderer Design

ARM. Mali GPU. OpenGL ES Application Optimization Guide. Version: 3.0. Copyright 2011, 2013 ARM. All rights reserved. ARM DUI 0555C (ID102813)

Introduction to Shaders.

PYTHON. p ykos vtawynivis. Second eciitiovl. CO Ve, WESLEY J. CHUN

Ciril Bohak. - INTRODUCTION TO WEBGL

IPHONE FOR PROGRAMMERS: AN APP-DRIVEN APPROACH

Advanced Rendering Techniques

ARM. Mali GPU. OpenGL ES Application Optimization Guide. Version: 2.0. Copyright 2011, 2013 ARM. All rights reserved. ARM DUI 0555B (ID051413)

Refactoring HTML. Improving the Design of Existing Web Applications. Elliotte Rusty Harold. TT rvaddison-wesley

Whiz-Bang Graphics and Media Performance for Java Platform, Micro Edition (JavaME)

CS230 : Computer Graphics Lecture 4. Tamar Shinar Computer Science & Engineering UC Riverside

CHAPTER 1 Graphics Systems and Models 3

CS130 : Computer Graphics. Tamar Shinar Computer Science & Engineering UC Riverside

Graphics Hardware, Graphics APIs, and Computation on GPUs. Mark Segal

GLOBAL EDITION. Interactive Computer Graphics. A Top-Down Approach with WebGL SEVENTH EDITION. Edward Angel Dave Shreiner

Interactive Computer Graphics A TOP-DOWN APPROACH WITH SHADER-BASED OPENGL

PROFESSIONAL. WebGL Programming DEVELOPING 3D GRAPHICS FOR THE WEB. Andreas Anyuru WILEY. John Wiley & Sons, Ltd.

X. GPU Programming. Jacobs University Visualization and Computer Graphics Lab : Advanced Graphics - Chapter X 1

Graphics Pipeline & APIs

CS452/552; EE465/505. Clipping & Scan Conversion

Secure Coding in C and C++

OpenGL ES 2.0 : Start Developing Now. Dan Ginsburg Advanced Micro Devices, Inc.

Graphics Performance Optimisation. John Spitzer Director of European Developer Technology

What was removed? (1) OpenGL ES vs. OpenGL

CS GPU and GPGPU Programming Lecture 2: Introduction; GPU Architecture 1. Markus Hadwiger, KAUST

CS 130 Final. Fall 2015

INF3320 Computer Graphics and Discrete Geometry

Water Simulation on WebGL and Three.js

Deferred Rendering Due: Wednesday November 15 at 10pm

Shaders. Slide credit to Prof. Zwicker

Working with Metal Overview

Introduction. What s New in This Edition

LATEX. Leslie Lamport. Digital Equipment Corporation. Illustrations by Duane Bibby. v ADDISON-WESLEY

WebGL (Web Graphics Library) is the new standard for 3D graphics on the Web, designed for rendering 2D graphics and interactive 3D graphics.

Building scalable 3D applications. Ville Miettinen Hybrid Graphics

Fit for Developing Software

Real-Time Rendering. Tomas Möller Eric Haines. A K Peters Natick, Massachusetts

DEFERRED RENDERING STEFAN MÜLLER ARISONA, ETH ZURICH SMA/

Supplement to Lecture 22

The Graphics Pipeline

Today. Rendering - III. Outline. Texturing: The 10,000m View. Texture Coordinates. Specifying Texture Coordinates in GL

CS770/870 Spring 2017 Open GL Shader Language GLSL

CS770/870 Spring 2017 Open GL Shader Language GLSL

Graphics Pipeline & APIs

OpenGL R SC Version (Full Specification) (April 19, 2016) Editors (version 2.0): Aidan Fabius, Steve Viggers

DB2 SQL Tuning Tips for z/os Developers

COMP371 COMPUTER GRAPHICS

Graphics Processing Unit Architecture (GPU Arch)

OpenGL Status - November 2013 G-Truc Creation

Computer Graphics: Programming, Problem Solving, and Visual Communication

CS 381 Computer Graphics, Fall 2008 Midterm Exam Solutions. The Midterm Exam was given in class on Thursday, October 23, 2008.

Understanding M3G 2.0 and its Effect on Producing Exceptional 3D Java-Based Graphics. Sean Ellis Consultant Graphics Engineer ARM, Maidenhead

Grafica Computazionale: Lezione 30. Grafica Computazionale. Hiding complexity... ;) Introduction to OpenGL. lezione30 Introduction to OpenGL

The OpenGL R Graphics System: A Specification (Version 1.3)

Optimizing Games for ATI s IMAGEON Aaftab Munshi. 3D Architect ATI Research

Framework Design Guidelines

Foundations of 3D Graphics Programming

GPU Memory Model. Adapted from:

Rendering approaches. 1.image-oriented. 2.object-oriented. foreach pixel... 3D rendering pipeline. foreach object...

Developer's HTML5. Cookbook. AAddison-Wesley. Chuck Hudson. Tom Leadbetter. Upper Saddle River, NJ Boston Indianapolis San Francisco

GPU Shader Library. Mali. User Guide. Version: 1.0. Copyright 2009 ARM. All rights reserved. ARM DUI 0510A (ID101409)

Graphics Pipeline 2D Geometric Transformations

Programming. Principles and Practice Using C++ Bjarne Stroustrup. / Addison-Wesley. Second Edition

TDA362/DIT223 Computer Graphics EXAM (Same exam for both CTH- and GU students)

Transcription:

OpenGUES 2.0 Programming Guide Aaftab Munshi Dan Ginsburg Dave Shreiner TT r^addison-wesley Upper Saddle River, NJ Boston Indianapolis San Francisco New York Toronto Montreal London Munich Paris Madrid Capetown Sydney Tokyo Singapore Mexico City

List of Figures List of Examples List of Tables Foreword Preface Intended Audience Organization of the Book Example Code and Shaders Errata Acknowledgments About the Authors xiii xv...xix xxi xxiii xxiii xxiv xxviii xxviii xxix xxxi 1. Introduction to OpenGL ES 2.0 1 What Is OpenGL ES? 1 OpenGL ES 2.0 3 Vertex Shader 4 Primitive Assembly 6 Rasterization 7 Fragment Shader 7 Per-Fragment Operations 9

OpenGL ES 2.0 and OpenGL ES 1.x Backward Compatibility 11 EGL 12 Programming with OpenGL ES 2.0 13 Libraries and Include Files 13 EGL Command Syntax 14 OpenGL ES Command Syntax 14 Error Handling 15 Flush and Finish 16 Basic State Management 17 Further Reading 18 2. Hello Triangle: An OpenGL ES 2.0 Example 19 Code Framework 20 Where to Download the Examples 20 Hello Triangle Example 21 Building and Running the Examples 25 Using the OpenGL ES 2.0 Framework 26 Creating a Simple Vertex and Fragment Shader 27 Compiling and Loading the Shaders 29 Creating a Program Object and Linking the Shaders : 30 Setting the Viewport and Clearing the Color Buffer 32 Loading the Geometry and Drawing a Primitive 33 Displaying the Back Buffer 33 3. An Introduction to EGL 35 Communicating with the Windowing System 36 Checking for Errors 37 Initializing EGL 37 Determining the Available Surface Configurations 38 Querying EGLConfig Attributes 39 Letting EGL Choose the Config 39 Creating an On-Screen Rendering Area: The EGL Window 43 Creating an Off-Screen Rendering Area: EGL Pbuffers 46 Creating a Rendering Context 50 Making an EGLContext Current 52 Putting All Our EGL Knowledge Together 52 Synchronizing Rendering 54 vi

4. Shaders and Programs 57 Shaders and Programs 57 Creating and Compiling a Shader 58 Creating and Linking a Program 62 Uniforms and Attributes 67 Getting and Setting Uniforms 67 Getting and Setting Attributes 72 Shader Compiler and Shader Binaries 72 5. OpenGL ES Shading Language 77 OpenGL ES Shading Language Basics 78 Variables and Variable Types 78 Variable Constructors, 79 Vector and Matrix Components 81 Constants 82 Structures 82 Arrays 83 Operators 84 Functions.85 Built-in Functions 86 Control Flow Statements 87 Uniforms.-. 88 Attributes 89 Varyings 90 Preprocessor and Directives 92 Uniform and Varying Packing 94 Precision Qualifiers 96 Invariance 97 6. Vertex Attributes, Vertex Arrays, and Buffer Objects 101 Specifying Vertex Attribute Data 102 Constant Vertex Attribute 102 Vertex Arrays 103 Declaring Vertex Attribute Variables in a Vertex Shader 110 Binding Vertex Attributes to Attribute Variables in a Vertex Shader 113 vii

Vertex Buffer Objects 115 Mapping Buffer Objects 124 Performance Tip 125 7. Primitive Assembly and Rasterization 127 Primitives 127 Triangles 128 Lines 129 Point Sprites 130 Drawing Primitives 131 Performance Tips 134 Primitive Assembly 136 Coordinate Systems 137 Clipping 138 Perspective Division 139 Viewport Transformation 140 Rasterization 141 Culling 142 Polygon Offset 143 8. Vertex Shaders 147 Vertex Shader Overview 148 Vertex Shader Built-in Variables 149 Precision Qualifiers : 152 ES 2.0 Vertex Shader Limitations 152 Vertex Shader Examples 159 A Simple Vertex Shader 160 Lighting in a Vertex Shader 160 Generating Texture Coordinates 167 Vertex Skinning 168 OpenGL ES 1.1 Vertex Pipeline as an ES 2.0 Vertex Shader 173 9. Texturing 181 Texturing Basics 181 2D Textures 182 Cubemap Textures 183 viii

Texture Objects and Loading Textures 184 Texture Filtering and Mipmapping 188 Automatic Mipmap Generation 193 Texture Coordinate Wrapping 194 Using Textures in the Fragment Shader 196 Example of Using a Cubemap Texture 198 Compressed Textures 201 Texture Subimage Specification 202 Copying Texture Data from the Color Buffer 204 Optional Extensions 207 3D Textures 207 Ericsson Texture Compression (ETC) 213 Floating-Point Textures... 213 Non-Power-of-Two Textures 214 10. Fragment Shaders 215 Fixed Function Fragment Shaders 216 Fragment Shader Overview 218 Built-in Special Variables 219 Built-in Constants 220 Precision Qualifiers 221 ES 2.0 Fragment Shader Limitations 221 Implementing Fixed Function Techniques Using Shaders 222 Multitexturing 222 Fog, 224. Alpha Test (Using Discard) 227 User Clip Planes 229 11. Fragment Operations 233 Buffers 234 Requesting Additional Buffers 235 Clearing Buffers 235 Using Masks to Control Writing to Framebuffers 236 Fragment Tests and Operations 238 Using the Scissor Test 239 Stencil Buffer Testing 240 ix

Depth Buffer Testing 245 Blending 246 Dithering 249 Multisampled Antialiasing 249 Reading and Writing Pixels to the Framebuffer 250 12. Framebuffer Objects 253 Why Framebuffer Objects? 253 Framebuffer and Renderbuffer Objects 255 Choosing a Renderbuffer Versus a Texture as a Framebuffer Attachment 256 Framebuffer Objects Versus EGL Surfaces 257 Creating Framebuffer and Renderbuffer Objects 258 Using Renderbuffer Objects 259 Using Framebuffer Objects 262 Attaching a Renderbuffer as a Framebuffer Attachment 263 Attaching a 2D Texture as a Framebuffer Attachment 264 Attaching an Image of a 3D Texture as a Framebuffer Attachment 266 Checking for Framebuffer Completeness 267 Deleting Framebuffer and Renderbuffer Objects 269 Deleting Renderbuffer Objects That Are Used as Framebuffer Attachments 270 Reading Pixels and Framebuffer Objects 270 Examples 271 Performance Tips and Tricks 277 13. Advanced Programming with OpenGL ES 2.0 279 Per-Fragment Lighting 279 Lighting with a Normal Map 280 Lighting Shaders 281 Lighting Equations 285 Environment Mapping 286 Particle System with Point Sprites 290 Particle System Setup 290 Particle System Vertex Shader 291 Particle System Fragment Shader 293

Image Postprocessing : 296 Render-to-Texture Setup 297 Blur Fragment Shader 297 Light Bloom 298 Projective Texturing 300 Projective Texturing Basics 301 Matrices for Projective Texturing 303 Projective Spotlight Shaders. 304 Noise Using a 3D Texture 307 Generating Noise 308 Using Noise 313 Procedural Texturing '. 315 A Procedural Texture Example 316 Antialiasing of Procedural Textures 319 Further Reading on Procedural Textures 322 14. State Queries 323 OpenGL ES 2.0 Implementation String Queries 323 Querying Implementation-Dependent Limits 324 Querying OpenGL ES State 327 Hints.'. 330 Entity Name Queries 331 Nonprogrammable Operations Control and Queries 332 Shader and Program State Queries 333 Vertex Attribute Queries 335 Texture State Queries 336 Vertex Buffer Queries 337 Renderbuffer and Framebuffer State Queries 337 15. OpenGL ES and EGL on Handheld Platforms 339 Handheld Platforms Overview 339 Online Resources 340 C++Portability 341 OpenKODE 343 Platform-Specific Shader Binaries 350 Targeting Extensions 351 xi

A. GL_HALF_FLOAT_OES 353 16-Bit Floating-Point Number 354 Converting Float to Half-Float 355 B. Built-in Functions 357 Angle and Trigonometry Functions 358 Exponential Functions 360 Common Functions 361 Geometric Functions 364 Matrix Functions 366 Vector Relational Functions 367 Texture Lookup Functions 369 Derivative Functions 371 C. Shading Language Grammar 375 D. ES Framework API 385 Framework Core Functions 385 Transformation Functions 390 E. OpenGL ES 2.0 on the iphone 3GS 395 Getting Started with the iphone SDK 3.0 396 Getting the Sample Code for the iphone 396 Building the Sample Code Using Xcode 397 Porting the Sample Code to the iphone 399 Objective C 399 Creating an OpenGL ES 2.0 Rendering Surface 400 Using a Framebuffer Object for Rendering 401 Discussion of a Complete Example 401 EAGLView.h Header File 401 EAGLView.m Source File 403 Transitioning from OpenGL ES 1.1 to OpenGL ES 2.0 411 Conclusion 412 Index 413 xii