Cool. Thanks for the flowers. The thing is apache 2 licensed so you
are free to do with it whatever you want. It's not rocket science
after all :). I'm not such a big fan of lwjgl but the more libraries
there are out there for android the better.

On 13 Mrz., 16:19, MichaelEGR <foun...@egrsoftware.com> wrote:
> Figured I'd repost in this thread and include the variable time kill
> frag test...
>
> Awesome! Got it up and running here. You are my Android dev hero for
> the month if not longer! Where I can I paypal you $50; I'd send more
> if I could right now.. You also got a life long purchaser of all your
> games on the market. Folks... Support Mario and buy his games! I like
> your Newton game by the way! :)
>
> I knew this was a trivial, but perhaps tedious exercise, so thanks for
> stepping up _and_ sharing your work / effort.
>
> I'm also rabble rousing now on the LWJGL community forums to get an ES
> version of LWJGL ported to Android. That would be absolutely fantastic
> as Slick2D plus many other LWJGL games could make it to Android sooner
> rather than later with few changes from their desktop counterparts.
>
> I'm not sure what license you may want to attribute to your work, but
> perhaps MIT or a completely open license that doesn't conflict with
> anything.
>
> If you need any further assistance I have a bunch of Android devices I
> can test on, but things work fine on the Droid / N1!
>
> Again you rock!!! This is fantastic..
>
> The following is a slightly modified test that has a variable time
> kill fragment shader:
> ---------------------------------------------
> package com.badlogic.gdx;
>
> import java.nio.ByteBuffer;
> import java.nio.ByteOrder;
> import java.nio.FloatBuffer;
> import java.nio.IntBuffer;
>
> import javax.microedition.khronos.egl.EGL10;
> import javax.microedition.khronos.egl.EGLConfig;
> import javax.microedition.khronos.egl.EGLContext;
> import javax.microedition.khronos.egl.EGLDisplay;
> import javax.microedition.khronos.opengles.GL10;
>
> import android.view.Menu;
> import android.view.MenuItem;
> import com.badlogic.gdx.backends.android.AndroidGL20;
> import com.badlogic.gdx.backends.android.surfaceview.GLSurfaceView;
> import com.badlogic.gdx.backends.android.surfaceview.GLSurfaceView20;
> import
> com.badlogic.gdx.backends.android.surfaceview.GLSurfaceView.Renderer;
> import com.badlogic.gdx.graphics.GL20;
>
> import android.app.Activity;
> import android.content.Context;
> import android.os.Bundle;
> import android.util.Log;
>
> public class GL2Test extends Activity
> {
>    GLSurfaceView view;
>    int appCutoff1, appCutoff2;
>    long startTime;
>    int equationIndex = 0;
>
>    /**
>     * Called when the activity is first created.
>     */
>   �...@override
>    public void onCreate(Bundle savedInstanceState)
>    {
>       super.onCreate(savedInstanceState);
>
>       if (checkGL20Support(this))
>          view = new GLSurfaceView20(this);
>       else
>          view = new GLSurfaceView(this);
>
>       view.setRenderer(new TestRenderer());
>       setContentView(view);
>    }
>
>    public boolean onCreateOptionsMenu(Menu menu)
>    {
>       Menu menuEquations = menu.addSubMenu(10, 10, 0, "Kill Frag
> Equations (t == time)");
>       menuEquations.add(10, 0, 0, "x: .5 y: cos(t)");
>       menuEquations.add(10, 1, 1, "x: sin(t) y: .2");
>       menuEquations.add(10, 2, 2, "x: sin(t) y: cos(t)");
>       menuEquations.add(10, 3, 3, "x: sin(t)/2 y: cos(t)/2");
>       menuEquations.add(10, 4, 4, "x: .5*sin(3*t+4) y: .5*sin(t)");
>       menuEquations.add(10, 5, 5, "all killed; x&y: -1");
>       menuEquations.add(10, 6, 6, "none killed; x&y: 1");
>       return true;
>    }
>
>    public boolean onOptionsItemSelected(MenuItem item)
>    {
>       if (item.getItemId() <= 6)
>          equationIndex = item.getItemId();
>       return true;
>    }
>
>    protected void onPause()
>    {
>       super.onPause();
>       view.onPause();
>    }
>
>    protected void onResume()
>    {
>       super.onResume();
>       view.onResume();
>    }
>
>    private boolean checkGL20Support(Context context)
>    {
>       EGL10 egl = (EGL10) EGLContext.getEGL();
>       EGLDisplay display =
> egl.eglGetDisplay(EGL10.EGL_DEFAULT_DISPLAY);
>
>       int[] version = new int[2];
>       egl.eglInitialize(display, version);
>
>       int EGL_OPENGL_ES2_BIT = 4;
>       int[] configAttribs =
>               {
>                       EGL10.EGL_RED_SIZE, 4,
>                       EGL10.EGL_GREEN_SIZE, 4,
>                       EGL10.EGL_BLUE_SIZE, 4,
>                       EGL10.EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
>                       EGL10.EGL_NONE
>               };
>
>       EGLConfig[] configs = new EGLConfig[10];
>       int[] num_config = new int[1];
>       egl.eglChooseConfig(display, configAttribs, configs, 10,
> num_config);
>       egl.eglTerminate(display);
>       return num_config[0] > 0;
>    }
>
>    class TestRenderer implements Renderer
>    {
>       AndroidGL20 gl2 = new AndroidGL20();
>       FloatBuffer vertices;
>       int program;
>       int viewportWidth, viewportHeight;
>
>       private float calculate(int cutoff, int equation, float time)
>       {
>          switch (equation)
>          {
>             default:
>             case 0:
>                return cutoff == 0 ? 0.5f : (float) Math.cos(time);
>             case 1:
>                return cutoff == 0 ? (float) Math.sin(time) : 0.2f;
>             case 2:
>                return cutoff == 0 ? (float) Math.sin(time) : (float)
> Math.cos(time);
>             case 3:
>                return cutoff == 0 ? (float) Math.sin(time) / 2f :
> (float) Math.cos(time) / 2f;
>             case 4:
>                return cutoff == 0 ? (float) (0.5 * Math.sin(3 * time +
> 4)) : (float) (0.5 * Math.sin(time));
>             case 5:
>                return cutoff == 0 ? -1f : -1f; // really just needs to
> be 0, but just a bit shows through...
>             case 6:
>                return cutoff == 0 ? 1f : 1f;
>          }
>       }
>
>       public void onDrawFrame(GL10 gl)
>       {
>          gl2.glClearColor(0.7f, 0.7f, 0.7f, 1);
>          gl2.glClear(GL20.GL_COLOR_BUFFER_BIT);
>
>          gl2.glViewport(0, 0, viewportWidth, viewportHeight);
>          gl2.glUseProgram(program);
>
>          float currentTime = (System.currentTimeMillis() -
> startTime) / 1000f;
>
>          gl2.glUniform1f(appCutoff1, calculate(0, equationIndex,
> currentTime));
>          gl2.glUniform1f(appCutoff2, calculate(1, equationIndex,
> currentTime));
>
>          gl2.glVertexAttribPointer(0, 3, GL20.GL_FLOAT, false, 0,
> vertices);
>          gl2.glEnableVertexAttribArray(0);
>
>          gl2.glDrawArrays(GL20.GL_TRIANGLES, 0, 3);
>       }
>
>       public void onSurfaceChanged(GL10 gl, int width, int height)
>       {
>          viewportWidth = width;
>          viewportHeight = height;
>       }
>
>       public void onSurfaceCreated(GL10 gl, EGLConfig config)
>       {
>          startTime = System.currentTimeMillis();
>
>          String vertexShaderSrc =
>           "attribute vec4
> vPosition;                                           \n" +
>           "varying vec3
> Position;                                            \n" +
>           "void
> main()                                                         \n" +
>
> "{                                                                   \n"
> +
>           "   Position =
> vec3(vPosition);                                      \n" +
>           "   gl_Position =
> vPosition;                                         \n" +
>
> "}
> \n";
>
>          String fragmentShaderSrc =
>           "precision mediump
> float;                                            \n" +
>           "varying vec3
> Position;                                             \n" +
>           "uniform float
> appCutoff1;                                           \n" +
>           "uniform float
> appCutoff2;                                           \n" +
>
>           "void
> main()                                                         \n" +
>
> "{                                                                   \n"
> +
>           "    vec3
> ct;                                                       \n" +
>           "    float       ss,
> tt;                                                   \n" +
>
>           "    vec3 pos =
> Position;                                            \n" +
>
>           "    ss = pos.x *
> 7.1;                                               \n" +
>           "    tt = pos.y *
> 7.1;                                               \n" +
>
>           "    ss = fract
> (ss);                                                \n" +
>           "    tt = fract
> (tt);                                                \n" +
>
>           "    if ((ss > appCutoff1) && (tt > appCutoff2))
> discard;            \n" +
>           "    gl_FragColor = vec4 ( 1.0, 0.0, 0.0,
> 1.0 );                     \n" +
>
> "}
> \n";
>
>          int vertexShader = loadShader(GL20.GL_VERTEX_SHADER,
> vertexShaderSrc);
>          int fragmentShader = loadShader(GL20.GL_FRAGMENT_SHADER,
> fragmentShaderSrc);
>          program = gl2.glCreateProgram();
>          if (program == 0)
>             throw new RuntimeException("creating program didn't
> work");
>
>          gl2.glAttachShader(program, vertexShader);
>          gl2.glAttachShader(program, fragmentShader);
>
>          gl2.glBindAttribLocation(program, 0, "vPosition");
>          gl2.glLinkProgram(program);
>
>          ByteBuffer tmp = ByteBuffer.allocateDirect(4);
>          tmp.order(ByteOrder.nativeOrder());
>          IntBuffer intbuf = tmp.asIntBuffer();
>
>          gl2.glGetProgramiv(program, GL20.GL_LINK_STATUS, intbuf);
>          int linked = intbuf.get(0);
>          if (linked == 0)
>          {
>             gl2.glGetProgramiv(program, GL20.GL_INFO_LOG_LENGTH,
> intbuf);
>             int infoLogLength = intbuf.get(0);
>             if (infoLogLength > 1)
>             {
>                Log.d("GL2", "couldn't link program: " +
> gl2.glGetProgramInfoLog(program));
>             }
>
>             throw new RuntimeException("Creating program didn't
> work");
>          }
>
>          appCutoff1 = gl2.glGetUniformLocation(program, "appCutoff1");
>          appCutoff2 = gl2.glGetUniformLocation(program, "appCutoff2");
>
>          float vVertices[] = {0.0f, 0.5f, 0.0f,
>                  -0.5f, -0.5f, 0.0f,
>                  0.5f, -0.5f, 0.0f};
>
>          tmp = ByteBuffer.allocateDirect(3 * 3 * 4);
>          tmp.order(ByteOrder.nativeOrder());
>          vertices = tmp.asFloatBuffer();
>          vertices.put(vVertices);
>          vertices.position(0);
>       }
>
>       private int loadShader(int type, String source)
>       {
>          ByteBuffer tmp = ByteBuffer.allocateDirect(4);
> ...
>
> Erfahren Sie mehr »

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

Reply via email to