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