设为首页 加入收藏

TOP

Android NDK处理用户交互事件(一)
2015-03-06 01:05:18 来源: 作者: 【 】 浏览:91
Tags:Android NDK 处理 用户 交互 事件

函数介绍:


AMotionEvent_getX():以屏幕左上角为原点,是绝对坐标


AMotionEvent_getY():以屏幕左上角为原点,是绝对坐标



AMotionEvent_getPointerCount();多点触摸函数,返回触摸的点数量,跟硬件有关系


#include
#include
#include
#include



#include
#include
#include
#include
#include
#include
#include
#include


#define LOGI(...) ((void)__android_log_print(ANDROID_LOG_ERROR, "native-activity", __VA_ARGS__))
#define LOGW(...) ((void)__android_log_print(ANDROID_LOG_WARN, "native-activity", __VA_ARGS__))


/**
?* Our saved state data.
?*/
struct saved_state {
? ? float angle;
? ? int32_t x;
? ? int32_t y;
};


/**
?* Shared state for our app.
?*/
struct engine {
? ? struct android_app* app;


? ? ASensorManager* sensorManager;
? ? const ASensor* accelerometerSensor;
? ? ASensorEventQueue* sensorEventQueue;


? ? int? ? ? ? animating;
? ? EGLDisplay? ? display;
? ? EGLSurface? ? surface;
? ? EGLContext? ? context;
? ? int32_t? ? width;
? ? int32_t? ? height;
? ? struct saved_state state;
};


class float3
{
public:
? ? float x,y,z;
};
std::vector g_arVertex;
/**
?* Initialize an EGL context for the current display.
?*/
static int engine_init_display(struct engine* engine) {
? ? // initialize OpenGL ES and EGL


? ? /*
? ? * Here specify the attributes of the desired configuration.
? ? * Below, we select an EGLConfig with at least 8 bits per color
? ? * component compatible with on-screen windows
? ? */
? ? const EGLint attribs[] =
? ? {
? ? ? ? ? ? EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
? ? ? ? ? ? EGL_BLUE_SIZE, 8,
? ? ? ? ? ? EGL_GREEN_SIZE, 8,
? ? ? ? ? ? EGL_RED_SIZE, 8,
? ? ? ? ? ? EGL_NONE
? ? };
? ? EGLint w, h, dummy, format;
? ? EGLint? ? ? ? numConfigs;
? ? EGLConfig? ? config;
? ? EGLSurface? ? surface;
? ? EGLContext? ? context;


? ? EGLDisplay? ? display = eglGetDisplay(EGL_DEFAULT_DISPLAY);


? ? eglInitialize(display, 0, 0);


? ? /* Here, the application chooses the configuration it desires. In this
? ? * sample, we have a very simplified selection process, where we pick
? ? * the first EGLConfig that matches our criteria */
? ? eglChooseConfig(display, attribs, &config, 1, &numConfigs);


? ? /* EGL_NATIVE_VISUAL_ID is an attribute of the EGLConfig that is
? ? * guaranteed to be accepted by ANativeWindow_setBuffersGeometry().
? ? * As soon as we picked a EGLConfig, we can safely reconfigure the
? ? * ANativeWindow buffers to match, using EGL_NATIVE_VISUAL_ID. */
? ? eglGetConfigAttrib(display, config, EGL_NATIVE_VISUAL_ID, &format);


? ? ANativeWindow_setBuffersGeometry(engine->app->window, 0, 0, format);


? ? surface = eglCreateWindowSurface(display, config, engine->app->window, NULL);
? ? context = eglCreateContext(display, config, NULL, NULL);


? ? if (eglMakeCurrent(display, surface, surface, context) == EGL_FALSE) {
? ? ? ? LOGW("Unable to eglMakeCurrent");
? ? ? ? return -1;
? ? }


? ? eglQuerySurface(display, surface, EGL_WIDTH, &w);
? ? eglQuerySurface(display, surface, EGL_HEIGHT, &h);


? ? engine->display? ? = display;
? ? engine->context? ? = context;
? ? engine->surface? ? = surface;
? ? engine->width? ? ? ? = w;
? ? engine->height? ? ? ? = h;
? ? engine->state.angle = 0;


? ? // Initialize GL state.
? ? glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
? ? glEnable(GL_CULL_FACE);
? ? glShadeModel(GL_SMOOTH);
? ? glDisable(GL_DEPTH_TEST);
? ? glViewport(0,0,w,h);
? ? glOrthof(0,w,h,0,-100,100);


? ? return 0;
}


/**
?* Just the current frame in the display.
?*/
static void engine_draw_frame(struct engine* engine) {
? ? if (engine->display == NULL) {
? ? ? ? // No display.
? ? ? ? return;
? ? }


? ? // Just fill the screen with a color.
? ? glClearColor(((float)engine->state

首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇二叉树遍历的非递归实现 下一篇Java文件获取路径方式

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: