hallo,
bin gerade dabei openlg für Android zu lernen.
mein Quellcode von tut.:
die main.java
ShaderHelper.java
fragment_shader.glsl
vertex_shadr.glsl
-----------------------
console:
---------------------------
Ich bin genau nach Anleitung vorgegagen, das Einzigste, was komisch war:
laut tut soll ich folgendes verwenden:
String vertexShaderSource = ShaderHelper.readTextFile(context, R.raw.vertex_shader);
dann meinte Eclipse: Er kennt kein readTextFile, ich solle das lieber:
String vertexShaderSource = ShaderHelper.readerTextFile(context, R.raw.vertex_shader);
verwenden. Im Quellcode ist nichts rot oder gleb ?!
bin gerade dabei openlg für Android zu lernen.
mein Quellcode von tut.:
Java:
// GLRenderer.java
package cz.vilio.opengl13;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.FloatBuffer;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
import android.content.Context;
import android.opengl.GLES20;
import android.opengl.GLSurfaceView.Renderer;
public class GLRenderer implements Renderer {
private Context context;
private static final String U_COLOR = "u_Color";
private int uColorLocation;
private static final String A_POSITION = "a_Position";
private int aPositionLocation;
private static final int POSITION_COMPONENT_COUNT = 2;
private int program;
private final int BYTES_PER_FLOAT = 4;
private FloatBuffer vertexData;
public GLRenderer(Context context) {
this.context = context;
float[] rectangle = {
-0.5f, 0.5f,
0.5f, 0.5f,
-0.5f, 0.5f,
0.5f, 0.5f,
0.5f,-0.5f,
-0.5f,-0.5f,
};
vertexData = ByteBuffer
.allocateDirect(rectangle.length * BYTES_PER_FLOAT)
.order(ByteOrder.nativeOrder())
.asFloatBuffer();
vertexData.put(rectangle);
}
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
GLES20.glClearColor(0.4f, 0.2f, 0.2f, 1.0f);
String vertexShaderSource = ShaderHelper.readerTextFile(context, R.raw.vertex_shader);
String fragmentShaderSource = ShaderHelper.readerTextFile(context, R.raw.fragment_shader);
int vertexShader = ShaderHelper.compileVertexShader(vertexShaderSource);
int fragmentShader = ShaderHelper.compileFragmentShadeR(fragmentShaderSource);
program = ShaderHelper.linkProgram(vertexShader, fragmentShader);
GLES20.glUseProgram(program);
uColorLocation = GLES20.glGetUniformLocation(program, U_COLOR);
aPositionLocation = GLES20.glGetAttribLocation(program,A_POSITION);
vertexData.position(0);
GLES20.glVertexAttribPointer(aPositionLocation, POSITION_COMPONENT_COUNT, GLES20.GL_FLOAT, false, 0,vertexData);
GLES20.glEnableVertexAttribArray(aPositionLocation);
}
public void onSurfaceChanged(GL10 gl, int width, int height) {
GLES20.glViewport(0, 0, width, height);
}
public void onDrawFrame(GL10 gl) {
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
GLES20.glUniform4f(uColorLocation, 0.0f, 0.5f, 1.0f, 1.0f);
GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 6);
}
}
die main.java
Java:
package cz.vilio.opengl13;
import android.opengl.GLSurfaceView;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
public class Main extends ActionBarActivity {
GLSurfaceView surfaceView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
surfaceView = new GLSurfaceView(this);
surfaceView.setEGLContextClientVersion(2);
surfaceView.setRenderer(new GLRenderer(this));
setContentView(surfaceView);
}
}
Java:
package cz.vilio.opengl13;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import android.content.Context;
import android.opengl.GLES20;
public class ShaderHelper {
public static int compileVertexShader(String shaderCode) {
return compileShader(GLES20.GL_VERTEX_SHADER, shaderCode);
}
public static int compileFragmentShadeR(String shaderCode) {
return compileShader(GLES20.GL_FRAGMENT_SHADER, shaderCode);
}
private static int compileShader(int type, String shaderCode) {
final int shader = GLES20.glCreateShader(type);
GLES20.glShaderSource(shader, shaderCode);
GLES20.glCompileShader(shader);
return shader;
}
public static int linkProgram(int vertexShaderID, int fragmentShaderID) {
final int program = GLES20.glCreateProgram();
GLES20.glAttachShader(program, vertexShaderID);
GLES20.glAttachShader(program, fragmentShaderID);
GLES20.glLinkProgram(program);
return program;
}
public static String readerTextFile(Context context, int resourceId) {
StringBuilder body = new StringBuilder();
try {
InputStream inputStream = context.getResources().openRawResource(resourceId);
InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String nextLine;
while((nextLine = bufferedReader.readLine()) != null) {
body.append(nextLine);
body.append("\n");
}
} catch (Exception e) {
}
return body.toString();
}
}
fragment_shader.glsl
HTML:
precision mediump float;
uniform vec4 u_Color;
void main() {
gl_FragColor = u_Color;
}
vertex_shadr.glsl
HTML:
attribute vec4 a_Postion;
void main() {
gl_Position = a_Position;
}
-----------------------
console:
HTML:
[2014-06-20 15:46:42 - OpenGL13] ------------------------------
[2014-06-20 15:46:42 - OpenGL13] Android Launch!
[2014-06-20 15:46:42 - OpenGL13] adb is running normally.
[2014-06-20 15:46:42 - OpenGL13] Performing cz.vilio.opengl13.Main activity launch
[2014-06-20 15:46:42 - OpenGL13] Automatic Target Mode: launching new emulator with compatible AVD 'test2'
[2014-06-20 15:46:42 - OpenGL13] Launching a new emulator with Virtual Device 'test2'
[2014-06-20 15:46:46 - Emulator] Failed to create Context 0x3005
[2014-06-20 15:46:46 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 15:46:46 - Emulator] emulator: WARNING: Could not initialize OpenglES emulation, using software renderer.
[2014-06-20 15:46:46 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 15:46:46 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 15:46:46 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 15:46:46 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 15:46:46 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 15:46:46 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 15:46:46 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 15:46:46 - Emulator] emulator: warning: opening audio input failed
[2014-06-20 15:46:46 - Emulator]
[2014-06-20 15:46:46 - OpenGL13] New emulator found: emulator-5554
[2014-06-20 15:46:46 - OpenGL13] Waiting for HOME ('android.process.acore') to be launched...
[2014-06-20 15:47:42 - OpenGL13] HOME is up on device 'emulator-5554'
[2014-06-20 15:47:42 - OpenGL13] Uploading OpenGL13.apk onto device 'emulator-5554'
[2014-06-20 15:47:46 - OpenGL13] Installing OpenGL13.apk...
[2014-06-20 15:48:19 - OpenGL13] Success!
[2014-06-20 15:48:19 - OpenGL13] Starting activity cz.vilio.opengl13.Main on device emulator-5554
[2014-06-20 15:48:21 - OpenGL13] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=cz.vilio.opengl13/.Main }
[2014-06-20 15:48:52 - OpenGL13] ------------------------------
[2014-06-20 15:48:52 - OpenGL13] Android Launch!
[2014-06-20 15:48:52 - OpenGL13] adb is running normally.
[2014-06-20 15:48:52 - OpenGL13] Performing cz.vilio.opengl13.Main activity launch
[2014-06-20 15:48:52 - OpenGL13] Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'test2'
[2014-06-20 15:48:54 - OpenGL13] Application already deployed. No need to reinstall.
[2014-06-20 15:48:54 - OpenGL13] Starting activity cz.vilio.opengl13.Main on device emulator-5554
[2014-06-20 15:48:56 - OpenGL13] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=cz.vilio.opengl13/.Main }
[2014-06-20 15:50:13 - OpenGL13] ------------------------------
[2014-06-20 15:50:13 - OpenGL13] Android Launch!
[2014-06-20 15:50:13 - OpenGL13] adb is running normally.
[2014-06-20 15:50:13 - OpenGL13] Performing cz.vilio.opengl13.Main activity launch
[2014-06-20 15:50:13 - OpenGL13] Automatic Target Mode: using existing emulator 'emulator-5554' running compatible AVD 'test2'
[2014-06-20 15:50:15 - OpenGL13] Application already deployed. No need to reinstall.
[2014-06-20 15:50:15 - OpenGL13] Starting activity cz.vilio.opengl13.Main on device emulator-5554
[2014-06-20 15:50:17 - OpenGL13] ActivityManager: Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=cz.vilio.opengl13/.Main }
[2014-06-20 16:03:18 - OpenGL13] ------------------------------
[2014-06-20 16:03:18 - OpenGL13] Android Launch!
[2014-06-20 16:03:18 - OpenGL13] adb is running normally.
[2014-06-20 16:03:18 - OpenGL13] Performing cz.vilio.opengl13.Main activity launch
[2014-06-20 16:03:18 - OpenGL13] Automatic Target Mode: launching new emulator with compatible AVD 'test2'
[2014-06-20 16:03:18 - OpenGL13] Launching a new emulator with Virtual Device 'test2'
[2014-06-20 16:03:19 - Emulator] Failed to create Context 0x3005
[2014-06-20 16:03:19 - Emulator] emulator: WARNING: Could not initialize OpenglES emulation, using software renderer.
[2014-06-20 16:03:19 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 16:03:19 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 16:03:19 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 16:03:19 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 16:03:19 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 16:03:19 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 16:03:19 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 16:03:19 - Emulator] could not get wglGetExtensionsStringARB
[2014-06-20 16:03:20 - Emulator] emulator: warning: opening audio input failed
[2014-06-20 16:03:20 - Emulator]
[2014-06-20 16:03:20 - OpenGL13] New emulator found: emulator-5554
[2014-06-20 16:03:20 - OpenGL13] Waiting for HOME ('android.process.acore') to be launched...
[2014-06-20 16:04:25 - OpenGL13] HOME is up on device 'emulator-5554'
[2014-06-20 16:04:25 - OpenGL13] Uploading OpenGL13.apk onto device 'emulator-5554'
[2014-06-20 16:04:31 - OpenGL13] Failed to install OpenGL13.apk on device 'emulator-5554': timeout
[2014-06-20 16:04:31 - OpenGL13] Launch canceled!
---------------------------
Ich bin genau nach Anleitung vorgegagen, das Einzigste, was komisch war:
laut tut soll ich folgendes verwenden:
String vertexShaderSource = ShaderHelper.readTextFile(context, R.raw.vertex_shader);
dann meinte Eclipse: Er kennt kein readTextFile, ich solle das lieber:
String vertexShaderSource = ShaderHelper.readerTextFile(context, R.raw.vertex_shader);
verwenden. Im Quellcode ist nichts rot oder gleb ?!