Getting started with open gl es 2

22
So Cal Code Camp Summer ’12 Getting Started With OpenGL ES 2.0 By Matt Galaviz

description

Presentation for So Cal Code Camp 2012 session.

Transcript of Getting started with open gl es 2

Page 1: Getting started with open gl es 2

So Cal Code Camp Summer ’12

Getting Started With OpenGL ES 2.0By Matt Galaviz

Page 2: Getting started with open gl es 2

About Me…• Currently part-time DBA (SQL Server)• Deep interest in game development• Started with Core Animation• Moved to OpenGL ES 1.1• Meetup conversation inspired/challenged to

learn OpenGL ES 2.0• Never wanted to be a Graphics Programmer ;)• Currently on 2nd or 3rd version of

graphics/game engine, iOS and android

Page 3: Getting started with open gl es 2

History

• OpenGL Website: http://www.opengl.org• Introduced in 1992• 2D/3D graphics API• Available on many different platforms• Windows, Unix, Linux, OS X, etc.

Page 4: Getting started with open gl es 2

History Continued

• OpenGL ES Website: http://www.khronos.org/opengles/

• OpenGL ES 1.1 similar to OpenGL 1.5• 1.1 = Fixed Function Pipeline• OpenGL ES 2.0 released circa 2008• 2.0 = Programmable Pipeline

Page 5: Getting started with open gl es 2
Page 6: Getting started with open gl es 2
Page 7: Getting started with open gl es 2

Programmable means more…

• Control – do what you want with shaders• Responsibility – shaders need data and

programming• Complexity – shader source, compilation,

VBO’s, MVP matrices, etc.• Discipline – maintaining shader data,

switching shaders and other things can cause code to run SLOWER. Best practice adherence is a must!

Page 8: Getting started with open gl es 2

Differences between 1.1 and 2.0

• Model/View/Projection (MVP)– 1.1: Can call built in functions (glMatrixMode,

glIdentity, glPushMatrix, glPopMatrix, etc.)

Taken from android

Page 9: Getting started with open gl es 2

MVP Differences Continued

– 2.0: Pass MVP matrices to shaders• Side note: Matrix libraries may not be available on all

platforms and may vary in use

Taken from android

Page 10: Getting started with open gl es 2

Shaders

• The programmable piece• Write in GLSL ES, similar functionality of C• Vertex Shader: handles vertex data• Fragment Shader: handles pixel data• Comprised of attributes, uniforms and varying

with types and variable precision• See specification for more details (approx. 200

pages)

Page 11: Getting started with open gl es 2

Sample ShadersVertex

Fragment

Page 12: Getting started with open gl es 2

Shader Creation

• Create Program• Create Vertex and Fragment shaders• Attach Vertex and Fragment shaders• Compile• Hope for the best!

Page 13: Getting started with open gl es 2

Shader Creation Example

Taken from iOS

Page 14: Getting started with open gl es 2

Shader Usage

• Use Program• Enable VBO’s– Pass Data• Attributes• Uniforms

– Draw Objects– Repeat data/drawing as needed

• Disable VBO’s

Page 15: Getting started with open gl es 2

Shader Usage Example

Taken from android

Page 16: Getting started with open gl es 2

OpenGL ES 2.0 Availability

• Android: 2.2• iOS: 3.0• WebGL: 1.0• Others

Page 17: Getting started with open gl es 2

Getting Started

• Identify goals– Support ES 1.1 and 2.0• Rewrite code to support provider/consumer model• Provider submits only primatives to consumer• Consumer determines how to handle primatives• Consumer = ES 1.1 or 2.0

Page 18: Getting started with open gl es 2

Getting Started Continued

– Multi Platform• Many differences between android/iOS• Java more similar to C++ in style and look than

Objective-C• NDK on android possibly even more similar

– Adds another layer of complexity

• Even same platform can vary– iOS 5 GLKit

• Keep shader source as separate files• Structure classes as similar as possible

Page 19: Getting started with open gl es 2

Poll

• Do you currently use OpenGL ES?• Another graphics API?• What platform do you use?• Are you planning to support multiple

platforms?• Preferred platform?

Page 20: Getting started with open gl es 2

My Resources/References

• Delicious: http://www.delicious.com/mattgalaviz

• Github:• http://www.github.com/geminileft

Page 21: Getting started with open gl es 2

Other Resources/References

• OpenGL ES 2.0 Specification http://www.khronos.org/registry/gles/specs/2.0/es_cm_spec_2.0.24.pdf

• GLSL ES Specification http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf

• PowerVR developers http://www.imgtec.com/powervr/insider/powervr-insider.asp

Page 22: Getting started with open gl es 2

The End

• Questions/Comments• Contact me @ [email protected]