- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我调整了 native Activity NDK 示例以合并 hello-gl2 示例中的 OpenGL 代码。我处理 APP_CMD_INIT_WINDOW
消息,然后尝试创建着色器。着色器创建失败,我尝试通过 getShaderInfoiv 获取信息,但同样失败。
所以我的问题是 - 如何在纯原生 Android 应用程序中创建 OpenGL ES 2.0 着色器?
附言我知道如果您使用 Java GLSurfaceView 并且没有在正确的线程中创建它们,着色器创建可能会失败,但是查看 native Activity 示例,它似乎只有一个线程!
最佳答案
当然可以在原生 Android 应用程序中创建 OpenGL ES 2.0 着色器。关键是使用正确的 OpenGL ES 2.0 上下文。我在我的应用程序中做了类似的事情,即在 native 部分初始化 EGL 上下文,然后仅在 native 代码中创建(和使用)着色器。根据我设法做到的,我认为您想要做的也是完全可能的。
由于我在 Java 代码中有一个入口点(没有使用 NativeAcvity 机制),我还必须将 native 窗口句柄 (EGLNativeWindowType
) 从 java 传递到 C++,以便在 native 代码中创建 EGL 表面.但是,由于您想简单地修改 NativeActivity 示例,因此您可以使用 engine->app->window
创建 EGL 表面,如 NativeActivity main.c
示例中所示。
好的,如何在 native 代码中创建适当的 OpenGL ES 2.0 上下文?我刚刚对 NativeActivity 示例中的 main.c
文件进行了两项更改并检查了它是否有效。
首先,使用了下面的EGL属性
const EGLint attribs[] = {
EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT, //important
EGL_BLUE_SIZE, 8,
EGL_GREEN_SIZE, 8,
EGL_RED_SIZE, 8,
EGL_NONE
};
在 eglChooseConfig(display, attribs, &config, 1, &numConfigs);
中。
其次,稍后在创建上下文中使用
const EGLint attrib_list [] = {EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE};
在 context = eglCreateContext(display, config, NULL, attrib_list);
我保留了其余代码不变。我打印了一些信息以确保正在使用 OpenGL ES 2.0:
I/native-activity( 955): Details: [Version: OpenGL ES 2.0 1403843], [Vendor: Qualcomm], [Renderer: Adreno 205], [Extensions: GL_AMD_compressed_3DC_texture GL_AMD_compressed_ATC_texture ... ]
希望对您有所帮助!
关于android - 在 NativeActivity 中创建 OpenGL 着色器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8764454/
我有一个单独运行的 NativeActivity,我尝试添加一些 SDK(更准确地说是 Admob/Chartboost/Facebook)。 另一方面,只有当我们在参数中传递一个 Activity
Android NDK刚刚得到显着扩展,包括支持完全使用 native C/C++ 代码编写 Android 应用程序。现在可以使用 native 代码捕获键盘和触摸屏上的输入事件,还可以使用新的 N
在我的 Android 设备(使用 JellyBean 4.1.2)上有一个错误: 当我启动特定的 NativeActivity(从我的应用程序加载游戏的 libretroarch-activity)
有什么方法可以从 Execute 中看到 NativeActivity 的父事件的类型?方法 ? 最佳答案 是的,您可以执行以下代码块,它会返回内部的值 Parent属性(property)——这将是
我从 JavaActivity 调用 NativeActivity。我的 NativeActivity 的入口点是 android_main(struct android_app* state) 最
要使用 gdb 在 android 应用程序中调试 native 代码,首先我需要启动基于 sdk 的应用程序并在使用 native 代码加载库之前将其停止在断点处,之后我需要启动 gdb,依此类推.
我有一个原生android应用,那么入口main就是android_main。我的问题:是否可以使用 NativeActivity 生成另一个 Activity ?我必须只插入代码 java con
我正在将纯 C++ 游戏移植到 Android,由于我的目标是 Android 3.0+ 平板电脑,因此我选择使用 NativeActivity 以完全避免使用 Java。但是,我看不到任何允许我写入
环境…… 我有一个全新的 Visual Studio 2015 Android NDK 解决方案。这包含 2 个项目(由 visual studio 生成的默认模板代码): 原生 Activity 。
我正在 NativeActivity 上开发应用程序(仅限 C/C++)。 我想禁用屏幕超时。 你知道怎么做吗? 最佳答案 如果 OP 仍在寻找答案,或者像我这样的人在搜索时发现了这个主题,请按以下步
我有一个使用 NativeActivity 的应用程序。我想调用 Java 来做一些需要上下文的事情(例如,访问 TelephonyManager 以查询 IMEI)。 如何为我的 Activity
我在我的应用程序中使用键盘时遇到问题,该应用程序是一个纯 native 应用程序(基于 Android NDK 中提供的native-activity 示例)。 我有这段 Java 代码来显示键盘:
我尝试仅使用 C++ 将我的所有应用程序从 IOS 和 ANDROID 与 JAVA EGL 移植到 Android 设备上。 我刚刚遇到的一件事是“ fatal error :android_nat
我想要一个使用 NativeActivity 的真正的全屏 android 应用程序。我在 AndroidManifest.xml 中设置主题“Theme.Black.NoTitleBar.Fulls
有什么方法可以将我的源代码(包括所有 .h .cpp 和 .mk 文件)移出项目文件夹?换句话说,我想将 jni 文件夹的内容移出 android 项目文件夹。现在,我的项目的物理结构如下所示: ..
NativeActivity 是否可以访问 GestureDetector 并将事件绑定(bind)到它? 我认为这可能必须通过 JNI,很痛苦。 最佳答案 是的,您必须使用 JNIEnv 来访问 G
我正在使用带有 native_app_glue 的 NativeActivty 为 Android 编写一个 OpenGL 游戏。很难确定何时是删除堆分配对象和 OpenGL 分配对象的最佳时机。 在
有谁知道我在哪里可以找到用于 android NativeActivity 的所有 native c/c++ 方法和函数的列表。我似乎无法在 google/android 网站上的任何地方找到列表,过
我正在尝试在 NativeActivity 中使用自定义 C# 表达式 它可以很好地处理像 Condition = new CSharpValue("1 == 1") 这样的简单表达式 它不适用于这样
我有一个事件将操作安排到外部 API,然后只有在此外部 API 完成时才必须继续,这由事件指示。我目前使用 NativActitivy。 我的想法是设置一个书签,然后注册一个触发书签的事件处理程序。可
我是一名优秀的程序员,十分优秀!