package cmd100.particle;
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.content.Context;
import android.graphics.PixelFormat;
import android.opengl.GLSurfaceView;
import android.util.Log;
public class ParView extends GLSurfaceView
{
private static String TAG = "GL2JNIView";
private static final boolean DEBUG = false;
private Context m_context;
public ParView(Context context)
{
super(context);
m_context = context;
init(false, 0, 0);
this.setKeepScreenOn(true);// 悵厥そ躉都謠
}
public ParView(Context context, boolean translucent, int depth, int stencil)
{
super(context);
init(translucent, depth, stencil);
this.setKeepScreenOn(true);// 悵厥そ躉都謠
}
private void init(boolean translucent, int depth, int stencil)
{
/*
* By default, GLSurfaceView() creates a RGB_565 opaque surface. If we want a translucent one, we should change the surface's format here,
* using PixelFormat.TRANSLUCENT for GL Surfaces is interpreted as any 32-bit surface with alpha by SurfaceFlinger.
*/
if (translucent)
{
this.getHolder().setFormat(PixelFormat.TRANSLUCENT);
}
/*
* Setup the context factory for 2.0 rendering. See ContextFactory class definition below
*/
setEGLContextFactory(new ContextFactory());
/*
* We need to choose an EGLConfig that matches the format of our surface exactly. This is going to be done in our custom config chooser. See
* ConfigChooser class definition below.
*/
setEGLConfigChooser(translucent ? new ConfigChooser(8, 8, 8, 8, depth, stencil) : new ConfigChooser(
5, 6, 5, 0, depth, stencil));
/* Set the renderer responsible for frame rendering */
setRenderer(new Renderer(m_context));
}
private static class ContextFactory implements GLSurfaceView.EGLContextFactory
{
private static int EGL_CONTEXT_CLIENT_VERSION = 0x3098;
public EGLContext createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig)
{
Log.w(TAG, "creating OpenGL ES 2.0 context");
checkEglError("Before eglCreateContext", egl);
int[] attrib_list = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE };
EGLContext context = egl.eglCreateContext(display, eglConfig, EGL10.EGL_NO_CONTEXT, attrib_list);
checkEglError("After eglCreateContext", egl);
return context;
}
public void destroyContext(EGL10 egl, EGLDisplay display, EGLContext context)
{
egl.eglDestroyContext(display, context);
ParLib.uninit();
}
}
private static void checkEglError(String prompt, EGL10 egl)
{
int error;
while ((error = egl.eglGetError()) != EGL10.EGL_SUCCESS)
{
Log.e(TAG, String.format("%s: EGL error: 0x%x", prompt, error));
}
}
private static class ConfigChooser implements GLSurfaceView.EGLConfigChooser
{
public ConfigChooser(int r, int g, int b, int a, int depth, int stencil)
{
mRedSize = r;
mGreenSize = g;
mBlueSize = b;
mAlphaSize = a;
mDepthSize = depth;
mStencilSize = stencil;
}
/*
* This EGL config specification is used to specify 2.0 rendering. We use a minimum size of 4 bits for red/green/blue, but will perform actual
* matching in chooseConfig() below.
*/
private static int EGL_OPENGL_ES2_BIT = 4;
private static int[] s_configAttribs2 = { 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 };
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display)
{
/*
* Get the number of minimally matching EGL configurations
*/
int[] num_config = new int[1];
egl.eglChooseConfig(display, s_configAttribs2, null, 0, num_config);
int numConfigs = num_config[0];
if (numConfigs <= 0)
{
throw new IllegalArgumentException("No configs match configSpec");
}
/*
* Allocate then read the array of minimally matching EGL configs
*/
EGLConfig[] configs = new EGLConfig[numConfigs];
egl.eglChooseConfig(display, s_configAttribs2, configs, numConfigs, num_config);
if (DEBUG)
{
printConfigs(egl, display, configs);
}
/*
* Now return the "best" one
*/
return chooseConfig(egl, display, configs);
}
public EGLConfig chooseConfig(EGL10 egl, EGLDisplay display, EGLConfig[] configs)
{
for (EGLConfig config : configs)
{
int d = findConfigAttrib(egl, display, config, EGL10.EGL_DEPTH_SIZE, 0);
int s = findConfigAttrib(egl, display, config, EGL10.EGL_STENCIL_SIZE, 0);
// We need at least mDepthSize and mStencilSize bits
if (d < mDepthSize || s < mStencilSize)
continue;
// We want an *exact* match for red/green/blue/alpha
int r = findConfigAttrib(egl, display, config, EGL10.EGL_RED_SIZE, 0);
int g = findConfigAttrib(egl, display, config, EGL10.EGL_GREEN_SIZE, 0);
int b = findConfigAttrib(egl, display, config, EGL10.EGL_BLUE_SIZE, 0);
int a = findConfigAttrib(egl, display, config, EGL10.EGL_ALPHA_SIZE, 0);
if (r == mRedSize && g == mGreenSize && b == mBlueSize && a == mAlphaSize)
return config;
}
return null;
}
private int findConfigAttrib(EGL10 egl, EGLDisplay display, EGLConfig config, int attribute,
int defaultValue)
{
if (egl.eglGetConfigAttrib(display, config, attribute, mValue))
{
return mValue[0];
}
return defaultValue;
}
private void printConfigs(EGL10 egl, EGLDisplay display, EGLConfig[] configs)
{
int numConfigs = configs.length;
Log.w(TAG, String.format("%d configurations", numConfigs));
for (int i = 0; i < numConfigs; i++)
{
Log.w(TAG, String.format("Configuration %d:\n", i));
printConfig(egl, display, configs[i]);
}
}
private void printConfig(EGL10 egl, EGLDisplay display, EGLConfig config)
{
int[] attributes = { EGL10.EGL_BUFFER_SIZE, EGL10.EGL_ALPHA_SIZE, EGL10.EGL_BLUE_SIZE,
EGL10.EGL_GREEN_SIZE, EGL10.EGL_RED_SIZE, EGL10.EGL_DEPTH_SIZE, EGL10.EGL_STENCIL_SIZE,
EGL10.EGL_CONFIG_CAVEAT, EGL10.EGL_CONFIG_ID, EGL10.EGL_LEVEL,
EGL10.EGL_MAX_PBUFFER_HEIGHT, EGL10.EGL_MAX_PBUFFER_PIXELS,
EGL10.EGL_MAX_PBUFFER_WIDTH,
EGL10.EGL_NATIVE_RENDERABLE,
EGL10.EGL_NATIVE_VISUAL_ID,
EGL10.EGL_NATIVE_VISUAL_TYPE,
0x3030, // EGL10.EGL_PRESERVED_RESOURCES,
EGL10.EGL_SAMPLES, EGL10.EGL_SAMPLE_BUFFERS, EGL10.EGL_SURFACE_TYPE,
EGL10.EGL_TRANSPARENT_TYPE, EGL10.EGL_TRANSPARENT_RED_VALUE,
EGL10.EGL_TRANSPARENT_GREEN_VALUE, EGL10.EGL_TRANSPARENT_BLUE_VALUE,
0x3039, // EGL10.EGL_BIND_TO_TEXTURE_RGB,
0x303A, // EGL10.EGL_BIND_TO_TEXTURE_RGBA,
0x303B, // EGL10.EGL_MIN_SWAP_INTERVAL,
0x303C, // EGL10.EGL_MAX_SWAP_INTERVAL,
EGL10.EGL_LUMINANCE_SIZE, EGL10.EGL_ALPHA_MASK_SIZE, EGL10.EGL_COLOR_BUFFER_TYPE,
EGL10.EGL_RENDERABLE_TYPE, 0x3042 // EGL10.EGL_CONFORMANT
};
String[] names = { "EGL_BUFFER_SIZE", "EGL_ALPHA_SIZE", "EGL_BLUE_SIZE", "EGL_GREEN_SIZE",
"EGL_RED_SIZE", "EGL_DEPTH_SIZE", "EGL_STENCIL_SIZE", "EGL_CONFIG_CAVEAT",
"EGL_CONFIG_ID", "EGL_LEVEL", "EGL_MAX_PBUFFER_HEIGHT", "EGL_MAX_PBUFFER_PIXELS",
"EGL_MAX_PBUFFER_WIDTH", "EGL_NATIVE_RENDERABLE", "EGL_NATIVE_VISUAL_ID",
"EGL_NATIVE_VISUAL_TYPE", "EGL_PRESERVED_RESOURCES", "EGL_SAMPLES", "EGL_SAMPLE_BUFFERS",
"EGL_SURFACE_TYPE", "EGL_TRANSPARENT_TYPE", "EGL_TRANSPARENT_RED_VALUE",
"EGL_TRANSPARENT_GREEN_VALUE", "EGL_TRANSPARENT_BLUE_VALUE", "EGL_BIND_TO_TEXTURE_RGB",
"EGL_BIND_TO_TEXTURE_RGBA", "EGL_MIN_SWAP_INTERVAL", "EGL_MAX_SWAP_INTERVAL",
"EGL_LUMINANCE_SIZE", "EGL_ALPHA_MASK_SIZE", "EGL_COLOR_BUFFER_TYPE",
"EGL_RENDERABLE_TYPE", "EGL_CONFORMANT" };
i
没有合适的资源?快使用搜索试试~ 我知道了~
Android NDK基础
共217个文件
class:47个
so:22个
xml:18个
5星 · 超过95%的资源 需积分: 9 46 下载量 75 浏览量
2011-07-11
22:46:51
上传
评论
收藏 1.28MB RAR 举报
温馨提示
http://blog.csdn.net/libeifs/article/details/6598712 羽化博客文章出处 代码拿给大家交流学习
资源推荐
资源详情
资源评论
收起资源包目录
Android NDK基础 (217个子文件)
libstdc++.a 8B
libstdc++.a 8B
resources.ap_ 162KB
resources.ap_ 11KB
resources.ap_ 11KB
resources.ap_ 10KB
resources.ap_ 10KB
resources.ap_ 6KB
NDK5.apk 320KB
particletest.apk 21KB
NDK3.apk 19KB
NDK2.apk 16KB
NDK1.apk 15KB
NDK4.apk 10KB
NDK5.c 7KB
NDK2.c 731B
NDK4.c 258B
NDK1.c 207B
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
proguard.cfg 1KB
ParView$ConfigChooser.class 6KB
IBMPhotoPhun.class 3KB
ParView.class 3KB
testToGray$ClickEvent.class 3KB
NDK2.class 3KB
testToGray.class 2KB
ParView$ContextFactory.class 2KB
ParView$Renderer.class 1KB
NDK1.class 1KB
ParticleActivity.class 941B
JniTest.class 679B
R$id.class 548B
R.class 510B
R$id.class 509B
ParLib.class 508B
R.class 503B
NativeLibrary.class 502B
R.class 482B
R.class 477B
R.class 471B
LibFuns.class 454B
R.class 447B
R$id.class 438B
R$drawable.class 426B
R$string.class 421B
R$string.class 418B
R$string.class 418B
R$string.class 415B
R$string.class 406B
R$string.class 406B
R$drawable.class 394B
R$drawable.class 391B
R$drawable.class 388B
R$layout.class 388B
R$layout.class 385B
R$layout.class 385B
R$layout.class 382B
R$drawable.class 379B
R$drawable.class 379B
R$layout.class 373B
R$layout.class 373B
R$attr.class 334B
R$attr.class 331B
R$attr.class 331B
R$attr.class 328B
R$attr.class 319B
R$attr.class 319B
.classpath 280B
.classpath 280B
.classpath 280B
.classpath 280B
.classpath 280B
.classpath 273B
gl_code.cpp 8KB
ShaderHelper.cpp 2KB
NDK3.cpp 1KB
def.cpp 373B
gl_code.o.d 6KB
ShaderHelper.o.d 6KB
NDK4.o.d 4KB
NDK4.o.d 4KB
ImgToGray.o.d 4KB
ImgToGray.o.d 4KB
NDK3.o.d 4KB
def.o.d 2KB
Particle.o.d 2KB
NDK5.o.d 1KB
NDK5.o.d 1KB
NDK1.o.d 901B
NDK1.o.d 900B
NDK2.o.d 339B
classes.dex 10KB
classes.dex 5KB
classes.dex 4KB
classes.dex 4KB
classes.dex 2KB
classes.dex 2KB
共 217 条
- 1
- 2
- 3
资源评论
- guojiuhao2014-12-12资源不错 值得学习
- chen1001aza2013-01-23正学习呢,有用
羽化
- 粉丝: 324
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功