Getting started with open gl es 2

Post on 10-May-2015

1.011 views 4 download

Tags:

description

Presentation for So Cal Code Camp 2012 session.

Transcript of Getting started with open gl es 2

So Cal Code Camp Summer ’12

Getting Started With OpenGL ES 2.0By Matt Galaviz

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

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.

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

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!

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

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

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)

Sample ShadersVertex

Fragment

Shader Creation

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

Shader Creation Example

Taken from iOS

Shader Usage

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

– Draw Objects– Repeat data/drawing as needed

• Disable VBO’s

Shader Usage Example

Taken from android

OpenGL ES 2.0 Availability

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

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

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

Poll

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

platforms?• Preferred platform?

My Resources/References

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

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

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

The End

• Questions/Comments• Contact me @ matthew.galaviz@gmail.com