
OpenGL ES 2.0: Shaders Go Mobile Presented by Dan Ginsburg, Staff Engineer Agenda OpenGL ES Overview and History OpenGL ES 2.0 Shaders Overview What’s changed in GLSL? What’s changed from OpenGL 2.0? Writing OpenGL ES 2.0 Games OpenGL ES: Overview and History What is OpenGL ES? OpenGL-based API for embedded systems Removed redundant and expensive functionality Kept as compatible with OpenGL as possible Added features needed for embedded systems Who created OpenGL ES? Over 100 companies creating media authoring and acceleration standards Why is OpenGL ES important? API of choice for 3D handheld games OpenGL ES 2.0 is the path forward for 3D Lean and clean Allows for vendor-specific extensibility Simplified driver implementation OpenGL ES History OpenGL ES 1.0 Basic 3D functionality OpenGL ES 1.1+ Comprehensive set of fixed-function 3D Backwards compatible OpenGL ES 2.0 Shader only Not backwards compatible OpenGL ES 2.0: Shaders Overview OpenGL ES 2.0 Overview ES GLSL forms core of API Shifts some burden to application But puts more power in your hands Convergence of desktop and handheld! OpenGL ES Pipeline Vertex shaders replace Fixed Function Transform and Lighting Triangles/Lines/Points Primitive TransformTransformVertex Primitive ProcessingPrimitive Vertices ShaderVertexandand AssemblyPrimitive RasterizerRasterizer Processing LightingLightingShader Assembly APIAPI VertexVertex BufferBuffer ObjectsObjects TextureTexture FragmentFragmentColourColour Fog EnvironmentEnvironment ShaderShaderSumSum Fog Fragment shaders replace Fixed Function Texture, Color and Fog Alpha Depth ColourColour TestAlpha StencilDepth BufferBuffer DitherDither FrameFrame Buffer Buffer Test Stencil BlendBlend OpenGL ES 2.0 – Vertex Shader UniformsUniforms TexturesTextures AttributeAttribute 0 0 VaryingVarying 0 0 AttributeAttribute 1 1 VaryingVarying 1 1 AttributeAttribute 2 2 VaryingVarying 2 2 AttributeAttribute 3 3 VaryingVarying 3 3 VertexVertex Shader Shader AttributeAttribute 4 4 VaryingVarying 4 4 AttributeAttribute 5 5 VaryingVarying 5 5 AttributeAttribute 6 6 VaryingVarying 6 6 AttributeAttribute 7 7 VaryingVarying 7 7 gl_Positiongl_Position gl_FrontFacinggl_PointSize OpenGL ES 2.0 – Example Vertex Shader attribute vec4 Vertex; attribute vec2 VertexSt; uniform mat4 Transform; varying vec2 TexCoord; invariant gl_Position; void main() { gl_Position = Transform * Vertex; TexCoord = VertexSt; } OpenGL ES 2.0 – Fragment Shader UniformsUniforms TexturesTextures VaryingVarying 0 0 VaryingVarying 1 1 VaryingVarying 2 2 VaryingVarying 3 3 VaryingVarying 4 4 gl_FragColor FragmentFragment Shader Shader gl_FragColor VaryingVarying 5 5 VaryingVarying 6 6 VaryingVarying 7 7 gl_FrontFacinggl_FrontFacing gl_FragCoordgl_Position gl_PointCoord OpenGL ES 2.0 – Example Fragment Shader uniform sampler2D Sampler; varying vec2 TexCoord; void main() { vec4 color = texture2D(Sampler, TexCoord); color *= 0.5; gl_FragColor = color; } OpenGL ES 2.0: What’s changed in GLSL? OpenGL ES 2.0 – GLSL Changes Binary Shaders Allows for off-line shader compiler Vendor-specific opaque format Optional: on-line vs. off-line compiler Removed multiple vertex / fragment shaders Load a binary shader pair OpenGL ES 2.0 – GLSL Changes (continued) All built-in attribute variables removed gl_Vertex, gl_Normal, etc. Generic vertex attributes only All built-in varying variables removed One new varying: gl_PointSize Most built-in uniform variables removed Shifts burden to application OpenGL ES 2.0 – GLSL Changes (continued) Removed 1D and Shadow texture functions noise(), dFdx(), dFdy() optional ftransform() is removed Replaced with invariance qualifier OpenGL ES 2.0 – GLSL Changes (continued) Precision qualifiers added Low, medium, high Vertex shader default: high float Fragment shader default: none Fewer attributes (8) and uniforms (384) User-clipping removed OpenGL ES 2.0: What’s changed from OpenGL 2.0? OpenGL ES 2.0 – What’s new? Vertex and attribute data formats Fixed (16.16) Half float (optional) Compressed texture formats Ericsson Texture Compression (ETC) Floating-point textures 16-bit and 32-bit OpenGL ES 2.0 – What’s new? (continued) Framebuffer Objects Simplified version of EXT_framebuffer_object Shader precision query glGetShaderPrecisionFormatOES Binary shaders glShaderBinaryOES OpenGL ES 2.0 – What’s Gone? Enable/Disable(MULTISAMPLE) Anti-aliased lines Points and anti-aliased points Only point sprites supported Coordinate transforms & matrix stack Occlusion queries OpenGL ES 2.0 – What’s Optional? MapBuffer/UnmapBuffer 3D textures Non-power of 2 textures FP16 vertex attribute data FP16 and FP32 textures OpenGL ES 2.0: Writing OpenGL ES 2.0 Games Fixed-Function is Gone Your game engine must now manage: Matrices: modelview, projection, etc. Setup of frustum projection Storage of constants: Light properties Fog properties Etc. Managing constants One option: implement a fixed-function wrapper Another option: create a custom solution This is what ATI does in our new demo engine Other APIs such as D3D10 are removing fixed-function too Lighting All lighting computations and properties must be shader-based Implement the GL or custom lighting equations Great place to start: 3DLabs ShaderGen – shows you how to generate GLSL shaders from any fixed-function state! developer.3dlabs.com/downloads/shadergen/ Effect file formats Need a file format with more than just shaders Render state Material properties Techniques and render passes Constant bindings Vertex attribute bindings Texture information Effect File Solutions COLLADA FX Extensible file format supporting multiple APIs Custom solution ATI demo team developed its own effect file format Similar to D3D .FX, but cross-API friendly Developing shaders Use the tools that are out there: RenderMonkey provides GLSL support OpenGL ES 2.0 support is planned Various other shader tools available Summary OpenGL ES overview and history OpenGL ES 2.0 technical details How to develop OpenGL ES 2.0 games Conclusions Convergence of desktop and handheld Design shaders into your engine Implement fixed-functionality you need Leverage existing solutions Where to get more info www.khronos.org OpenGL ES 2.0 and ES Shading Language specs Extensive library of presentations The latest OpenGL ES news Questions?.
Details
-
File Typepdf
-
Upload Time-
-
Content LanguagesEnglish
-
Upload UserAnonymous/Not logged-in
-
File Pages36 Page
-
File Size-