Hi,

OpenGL ES 2.0 (GLES2) is completely based on writting your own vertex
and fragment shaders. Both types serve a specific purpose.

Vertex shaders in their most basic form are responsible for
transforming the incoming vertex position. This includes moving them
from object to world space, from world space to camera or view space
and finally projecting the camera/view space positions.
Transformations and projections are achieved via matrices which you
usually pass to your shader as so called uniforms. A vertex shader
outputs the final vertex position and potentially other information
for the fragment shader, like interpolated texture coordinates and
normals. A vertex shader thus has to perform the equivalent of the
fixed function pipeline transformation and lighting stage (with the
later often being implemented in the fragment shader instead to get
per pixel lighting).

A fragment shader is responsible for outputting a fragments color
based on various conditions. You might want to fetch a texel from a
texture as the color, apply phong shading based on interpolated
normals you receive from the vertex shader and so on.

As you can see there's various types of parameters and arguments
involved when programming shaders. In GLES2 there's 3 main types
(there are other less frequently used types as well): attributes,
uniforms and varyings. Attributes and uniforms are specified by you
via calls to glVertexAttrib, glVertexAttribPointer or glUniform.
Attributes represent vertex attributes like position, texture
coordintates, per vertex colors or normals. Uniforms are normally used
to pass in things like transformation and projection matrices that you
calculate outside the shaders in your program. Varyings are generated
within the vertex shader and passed to the fragment shader. Popular
examples would be interpolated texture coordinates or normals for
phong shading.

So what does all this mean for your scenario? First, you will need to
calculate the proper transformation and projection matrices yourself,
keep track of them yourself and pass them in as uniforms to your
vertex shader which then uses them to transform and project your
vertices.

There is no Android specific GLES2 reference as GLES2 is a standard
developed by Khronos which keep the API the same for all platforms.
The only difference between platforms is how to setup the GLES2
context and buffers. Usually this is done via EGL, another standard by
Khronos. On Android you can use the GLSurfaceView from the hello-gl2
example for that purpose and not worry about it.

To get information on the compilation process you can use the
functions glGetShaderInfoLog (http://www.opengl.org/sdk/docs/man/xhtml/
glGetShaderInfoLog.xml) and glGetProgramInfoLog (http://www.opengl.org/
sdk/docs/man/xhtml/glGetProgramInfoLog.xml). You usually use the first
one after you compiled a vertex or fragment shader and the second one
after you linked together a vertex/fragment shader pair to a program.
This will give you any errors or warnings the compiler produces. Note
that the output is not standardized and will differ for different GPUs
and their drivers.

My advice would be to get the OpenGL ES 2.0 Programming Guide, a nice
little book by the writers of the GLES2 standard which will guide you
through all the features and standard procedures of GLES2. The basic
concepts of GLES1 are still there in GLES2, however, you have a
greater flexibility by providing your own implementation for various
stages of the fixed function pipeline, including for example the
transform and lighting stage.

hth,
Mario


On 16 Apr., 06:20, HaMMeReD <[email protected]> wrote:
> Working with NDK here.
>
> How are perspective correct projection supposed to occur in es 2.0. I
> can currently draw my geometry to the screen, but it is not getting
> transformed to 2d.
>
> Is there some sort of way of getting meaningful compiler errors out of
> the shader compiler?
>
> Is there a android specific reference to glsl support on it?
>
> Am I even supposed to be doing projections in my glsl?
>
> I was using "hello-gl2" as a baseline, and then modified it to load
> additional geometry, which is rendering correctly although flat,
> without any translation or projection. Any advice on translation/
> projection is appreciated too, since it seems that all of that has
> disappeared from es2.0.
>
> I've got a opengl 1.1 live screensaver that I've developed that I want
> to work on porting critical sections to NDK and es2.0, so any advice
> on porting gl11 to gl20 is appreciated.
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group 
> athttp://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to