draw spinning quad with a texture instead of smoothed colors
This commit is contained in:
parent
d34c51acf9
commit
758435fd63
@ -1,7 +1,8 @@
|
|||||||
|
|
||||||
varying vec3 color_i;
|
varying vec2 tex_coord_i;
|
||||||
|
uniform sampler2D tex;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_FragColor = vec4(color_i, 1);
|
gl_FragColor = texture2D(tex, tex_coord_i);
|
||||||
}
|
}
|
||||||
|
@ -2,11 +2,11 @@
|
|||||||
uniform mat4 projection;
|
uniform mat4 projection;
|
||||||
uniform mat4 modelview;
|
uniform mat4 modelview;
|
||||||
attribute vec3 pos;
|
attribute vec3 pos;
|
||||||
attribute vec3 color;
|
attribute vec2 tex_coord;
|
||||||
varying vec3 color_i;
|
varying vec2 tex_coord_i;
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
{
|
{
|
||||||
gl_Position = projection * modelview * vec4(pos, 1);
|
gl_Position = projection * modelview * vec4(pos, 1);
|
||||||
color_i = color;
|
tex_coord_i = tex_coord;
|
||||||
}
|
}
|
||||||
|
BIN
res/drawable/texture.jpg
Normal file
BIN
res/drawable/texture.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 33 KiB |
@ -3,7 +3,6 @@ package com.homelinux.holtrop.opengltest;
|
|||||||
import android.opengl.GLSurfaceView;
|
import android.opengl.GLSurfaceView;
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.content.res.AssetManager;
|
|
||||||
import android.view.WindowManager;
|
import android.view.WindowManager;
|
||||||
import android.view.Window;
|
import android.view.Window;
|
||||||
|
|
||||||
@ -21,7 +20,7 @@ public class MainOpenGL extends Activity
|
|||||||
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
|
||||||
WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
WindowManager.LayoutParams.FLAG_FULLSCREEN);
|
||||||
|
|
||||||
mGLView = new MyGLSurfaceView(this, getAssets());
|
mGLView = new MyGLSurfaceView(this, getAssets(), getResources());
|
||||||
setContentView(mGLView);
|
setContentView(mGLView);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3,19 +3,21 @@ package com.homelinux.holtrop.opengltest;
|
|||||||
import android.opengl.GLSurfaceView;
|
import android.opengl.GLSurfaceView;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.res.AssetManager;
|
import android.content.res.AssetManager;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
|
||||||
public class MyGLSurfaceView extends GLSurfaceView
|
public class MyGLSurfaceView extends GLSurfaceView
|
||||||
{
|
{
|
||||||
MyRenderer m_renderer;
|
MyRenderer m_renderer;
|
||||||
|
|
||||||
public MyGLSurfaceView(Context context, AssetManager am)
|
public MyGLSurfaceView(Context context, AssetManager am,
|
||||||
|
Resources resources)
|
||||||
{
|
{
|
||||||
super(context);
|
super(context);
|
||||||
|
|
||||||
setEGLContextClientVersion(2);
|
setEGLContextClientVersion(2);
|
||||||
|
|
||||||
m_renderer = new MyRenderer(am);
|
m_renderer = new MyRenderer(am, resources);
|
||||||
setRenderer(m_renderer);
|
setRenderer(m_renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ import java.nio.IntBuffer;
|
|||||||
import java.nio.ByteOrder;
|
import java.nio.ByteOrder;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.content.res.AssetManager;
|
import android.content.res.AssetManager;
|
||||||
|
import android.content.res.Resources;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
@ -17,6 +18,9 @@ import java.io.IOException;
|
|||||||
import android.opengl.Matrix;
|
import android.opengl.Matrix;
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
import android.view.MotionEvent;
|
import android.view.MotionEvent;
|
||||||
|
import android.graphics.BitmapFactory;
|
||||||
|
import android.graphics.Bitmap;
|
||||||
|
import android.opengl.GLUtils;
|
||||||
|
|
||||||
public class MyRenderer implements GLSurfaceView.Renderer
|
public class MyRenderer implements GLSurfaceView.Renderer
|
||||||
{
|
{
|
||||||
@ -24,6 +28,7 @@ public class MyRenderer implements GLSurfaceView.Renderer
|
|||||||
private final String DBGTAG = "JoshsOpenGL";
|
private final String DBGTAG = "JoshsOpenGL";
|
||||||
private FloatBuffer m_quad_attrib_buffer;
|
private FloatBuffer m_quad_attrib_buffer;
|
||||||
private AssetManager m_asset_manager;
|
private AssetManager m_asset_manager;
|
||||||
|
private Resources m_resources;
|
||||||
private float m_proj_matrix[] = new float[16];
|
private float m_proj_matrix[] = new float[16];
|
||||||
private float m_modelview[] = new float[16];
|
private float m_modelview[] = new float[16];
|
||||||
private int m_width;
|
private int m_width;
|
||||||
@ -32,9 +37,10 @@ public class MyRenderer implements GLSurfaceView.Renderer
|
|||||||
private float m_x = 0.0f;
|
private float m_x = 0.0f;
|
||||||
private float m_y = 0.0f;
|
private float m_y = 0.0f;
|
||||||
|
|
||||||
public MyRenderer(AssetManager am)
|
public MyRenderer(AssetManager am, Resources resources)
|
||||||
{
|
{
|
||||||
m_asset_manager = am;
|
m_asset_manager = am;
|
||||||
|
m_resources = resources;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void checkGLError(String glOperation)
|
public void checkGLError(String glOperation)
|
||||||
@ -87,10 +93,10 @@ public class MyRenderer implements GLSurfaceView.Renderer
|
|||||||
public void onSurfaceCreated(GL10 unused, EGLConfig config)
|
public void onSurfaceCreated(GL10 unused, EGLConfig config)
|
||||||
{
|
{
|
||||||
final float attribs[] = {
|
final float attribs[] = {
|
||||||
1, 1, 0, 1, 1, 1,
|
1, 1, 0, 1, 1,
|
||||||
-1, 1, 0, 1, 0, 0,
|
-1, 1, 0, 0, 1,
|
||||||
-1, -1, 0, 0, 1, 0,
|
-1, -1, 0, 0, 0,
|
||||||
1, -1, 0, 0, 0, 1
|
1, -1, 0, 1, 0,
|
||||||
};
|
};
|
||||||
checkGLError("onSurfaceCreated");
|
checkGLError("onSurfaceCreated");
|
||||||
ByteBuffer bb = ByteBuffer.allocateDirect(attribs.length * 4);
|
ByteBuffer bb = ByteBuffer.allocateDirect(attribs.length * 4);
|
||||||
@ -116,6 +122,24 @@ public class MyRenderer implements GLSurfaceView.Renderer
|
|||||||
Log.e(DBGTAG, "Program log: " + info_log);
|
Log.e(DBGTAG, "Program log: " + info_log);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Bitmap texture = BitmapFactory.decodeResource(m_resources,
|
||||||
|
R.drawable.texture);
|
||||||
|
int[] textures = new int[1];
|
||||||
|
GLES20.glGenTextures(1, textures, 0);
|
||||||
|
checkGLError("glGenTextures");
|
||||||
|
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textures[0]);
|
||||||
|
checkGLError("glBindTexture");
|
||||||
|
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
|
||||||
|
GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR_MIPMAP_LINEAR);
|
||||||
|
GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D,
|
||||||
|
GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR);
|
||||||
|
checkGLError("glTexParameterf");
|
||||||
|
GLUtils.texImage2D(GLES20.GL_TEXTURE_2D, 0, texture, 0);
|
||||||
|
checkGLError("GLUtils.texImage2D");
|
||||||
|
GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D);
|
||||||
|
checkGLError("glGenerateMipmap");
|
||||||
|
texture.recycle();
|
||||||
|
|
||||||
GLES20.glClearColor(1.0f, 0.6f, 0.1f, 1.0f);
|
GLES20.glClearColor(1.0f, 0.6f, 0.1f, 1.0f);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -133,21 +157,22 @@ public class MyRenderer implements GLSurfaceView.Renderer
|
|||||||
GLES20.glGetUniformLocation(m_program, "modelview"),
|
GLES20.glGetUniformLocation(m_program, "modelview"),
|
||||||
1, false, m_modelview, 0);
|
1, false, m_modelview, 0);
|
||||||
int attr_pos = GLES20.glGetAttribLocation(m_program, "pos");
|
int attr_pos = GLES20.glGetAttribLocation(m_program, "pos");
|
||||||
int attr_color = GLES20.glGetAttribLocation(m_program, "color");
|
int attr_tex_coord = GLES20.glGetAttribLocation(m_program, "tex_coord");
|
||||||
|
checkGLError("glGetAttribLocation");
|
||||||
GLES20.glEnableVertexAttribArray(attr_pos);
|
GLES20.glEnableVertexAttribArray(attr_pos);
|
||||||
GLES20.glEnableVertexAttribArray(attr_color);
|
GLES20.glEnableVertexAttribArray(attr_tex_coord);
|
||||||
checkGLError("glEnableVertexAttribArray");
|
checkGLError("glEnableVertexAttribArray");
|
||||||
m_quad_attrib_buffer.position(0);
|
m_quad_attrib_buffer.position(0);
|
||||||
GLES20.glVertexAttribPointer(attr_pos, 3, GLES20.GL_FLOAT, false,
|
GLES20.glVertexAttribPointer(attr_pos, 3, GLES20.GL_FLOAT, false,
|
||||||
6 * 4, m_quad_attrib_buffer);
|
5 * 4, m_quad_attrib_buffer);
|
||||||
m_quad_attrib_buffer.position(3);
|
m_quad_attrib_buffer.position(3);
|
||||||
GLES20.glVertexAttribPointer(attr_color, 3, GLES20.GL_FLOAT, false,
|
GLES20.glVertexAttribPointer(attr_tex_coord, 2, GLES20.GL_FLOAT, false,
|
||||||
6 * 4, m_quad_attrib_buffer);
|
5 * 4, m_quad_attrib_buffer);
|
||||||
checkGLError("glVertexAttribPointer");
|
checkGLError("glVertexAttribPointer");
|
||||||
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_FAN, 0, 4);
|
GLES20.glDrawArrays(GLES20.GL_TRIANGLE_FAN, 0, 4);
|
||||||
checkGLError("glDrawArrays");
|
checkGLError("glDrawArrays");
|
||||||
GLES20.glDisableVertexAttribArray(attr_pos);
|
GLES20.glDisableVertexAttribArray(attr_pos);
|
||||||
GLES20.glDisableVertexAttribArray(attr_color);
|
GLES20.glDisableVertexAttribArray(attr_tex_coord);
|
||||||
checkGLError("glDisableVertexAttribArray");
|
checkGLError("glDisableVertexAttribArray");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user