我有一个带有drawable作为背景的GLSurfaceView,但是在没有surfaceView.setZOrderOnTop(true)的情况下渲染时只有背景可见
我需要避免使用setZOrderOnTop(true),因为在GLSurfaceView上使用静态TextView.
有什么建议让这个工作?
我正在使用方法 glReadPixels定期拍摄快照.我需要定期拍摄此快照,以便按照我的应用要求保存我的数据.drawFrameGLSurfaceView.Renderer
然而,glReadPixels性能确实很慢并且显示出滞后.以下是我使用该方法的方法:
gl.glReadPixels(0, 0, 1280, 752, GL10.GL_RGBA,GL10.GL_UNSIGNED_BYTE, bb);
Run Code Online (Sandbox Code Playgroud)
有替代品可以使用glReadPixels吗?如何在不造成滞后的情况下保存图像?
我尝试通过以下代码分享2个GLSurfaceViews的EGL上下文:
createContext(EGL10 egl, EGLDisplay display, EGLConfig eglConfig) {
EGLContext shared = ...; // a cached egl context
int[] attrib_list = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL10.EGL_NONE };
EGLContext context = egl.eglCreateContext(display, eglConfig, shared == null ? EGL10.EGL_NO_CONTEXT : shared,
attrib_list);
return context;
}
}
Run Code Online (Sandbox Code Playgroud)
该代码适用于大多数Android手机(操作系统> = 2.2),但在所有测试的平板电脑上都失败了.
01-12 18:33:35.381:E/AndroidRuntime(12171):致命异常:GLThread 11
01-12 18:33:35.381:E/AndroidRuntime(12171):java.lang.RuntimeException:eglMakeCurrent失败:EGL_BAD_ACCESS
01-12 18:33:35.381:E/AndroidRuntime(12171):在android.opengl.GLSurfaceView $ EglHelper.throwEglException(GLSurfaceView.java:1146)
由于我声明了LOCAL_LDLIBS:= - lGLESv2,因此EGL是2.0上下文.
为什么它在平板电脑上失败(xoom,galaxy,lg,sony等)
任何见解都表示赞赏.
我需要一个添加GLSurfaceView到FrameLayout一个PopupWindow.问题是,在内部,SurfaceView从当前窗口请求令牌.PopupWindows没有他们自己的令牌,所以我从弹出父母那里给它一个令牌,如下所示:
class MySurfaceView extends GLSurfaceView {
...
@Override
public IBinder getWindowToken() {
// I set the mPopupParent manually to be the parent of the PopupWindow in question
return mPopupParent.getWindowToken();
}
}
...
}
Run Code Online (Sandbox Code Playgroud)
现在,即使MySurfaceView添加到了FrameLayout内容中PopupWindow,它也不会在那里绘制.它借鉴了我从中得到令牌的观点.
如何在实际添加的布局上绘制它?
编辑:只是为了给出更多细节,如果它有所不同,mPopupParent是一个IME视图(基本上是一个键盘).
我正在为一个拥有GLSurfaceView和GLSurfaceView.Renderer的客户编写一个Android应用程序.
我的整个OpenGL工作正常(它基本上是另一个开发人员首先在iOS上编写的端口).除了一件事.当加载视图并因此加载OpenGL的东西时,我的背景快速闪烁黑色,然后OpenGL开始正确渲染(使用我的背景).所以我做的是:
在onSurfaceCreated中我从这开始:
@Override
public void onSurfaceCreated(GL10 gl, EGLConfig config) {
GLES20.glClearColor(0.9f + 0.1f * (21.0f / 255),
0.9f + 0.1f * (36.0f / 255),
0.9f + 0.1f * (31.0f / 255), 1.0f);
// Here goes my other stuff, if I comment all my other stuff out I still get the flash at startup
}
Run Code Online (Sandbox Code Playgroud)
在我的onDrawFrame方法中,我这样做:
@Override
public void onDrawFrame(GL10 gl) {
GLES20.glClear(GLES20.GL_DEPTH_BUFFER_BIT | GLES20.GL_COLOR_BUFFER_BIT);
// My stuff, again, if I comment all this stuff out I still get the …Run Code Online (Sandbox Code Playgroud) 我的应用程序一直在关于Android 4.4.x设备,三星,xiaomi的崩溃报告......
java.lang.IllegalStateException: eglMakeCurrent failed EGL_BAD_ALLOC
at android.view.HardwareRenderer$GlRenderer.createSurface(HardwareRenderer.java:1354)
at android.view.HardwareRenderer$GlRenderer.createEglSurface(HardwareRenderer.java:1241)
at android.view.HardwareRenderer$GlRenderer.initialize(HardwareRenderer.java:1058)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1580)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1030)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5639)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5047)
at java.lang.reflect.Method.invokeNative(Method.java)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:807)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:623)
at dalvik.system.NativeStart.main(NativeStart.java)
Run Code Online (Sandbox Code Playgroud)
我做了一些谷歌,但我的应用程序没有使用任何GLSurfaceView,只使用Android标准视图模块.
也许是因为我正在使用Fragment并持有太多的儿童观点?

这不会一直发生.但当它发生时,我点击启动器图标,它只是一直崩溃.
我应该搜索的任何方向?
任何回复赞赏.
我需要使用 GLSurfaceView 播放视频流。我试图获取输出并渲染它们。但是颜色不对。
我将输出缓冲区转储到文件并用 yuv 查看器打开它,颜色也不正确。所以我怀疑我使用错误的方式来获取输出缓冲区?这是代码:
mediaCodec = MediaCodec.createDecoderByType("video/avc");
MediaFormat mediaFormat = MediaFormat.createVideoFormat("video/avc", width, height);
mediaFormat.setInteger(MediaFormat.KEY_BIT_RATE, 500000);
mediaFormat.setInteger(MediaFormat.KEY_FRAME_RATE, 15);
mediaFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420PackedSemiPlanar);
mediaFormat.setInteger(MediaFormat.KEY_I_FRAME_INTERVAL, 5);
mediaCodec.configure(mediaFormat, null, null, 0);
mediaCodec.start();
ByteBuffer[] inputBuffers = mediaCodec.getInputBuffers();
int inputBufferIndex = mediaCodec.dequeueInputBuffer(-1);
if (inputBufferIndex >= 0) {
ByteBuffer inputBuffer = inputBuffers[inputBufferIndex];
inputBuffer.clear();
inputBuffer.put(avFrame.frmData);
mediaCodec.queueInputBuffer(inputBufferIndex, 0, avFrame.frmData.length, 0L, 0);
}
MediaCodec.BufferInfo bufferInfo = new MediaCodec.BufferInfo();
ByteBuffer[] outputBuffers = mediaCodec.getOutputBuffers();
int outputBufferIndex = mediaCodec.dequeueOutputBuffer(bufferInfo, 0);
byte[] outData = new byte[bufferInfo.size];
while (outputBufferIndex >= 0) {
ByteBuffer outputBuffer = …Run Code Online (Sandbox Code Playgroud) 我正在Android项目中实现webrtc,我基于github中的这个示例.
此示例使用libjingle库.这是创建视频渲染视图的方式:
// Create video renderers.
VideoRendererGui.setView((GLSurfaceView)videoView, new Runnable() {
@Override
public void run() {
createPeerConnectionFactory();
}
});
remoteRender = VideoRendererGui.create(
REMOTE_X, REMOTE_Y,
REMOTE_WIDTH, REMOTE_HEIGHT, scalingType, false);
localRender = VideoRendererGui.create(
LOCAL_X_CONNECTING, LOCAL_Y_CONNECTING,
LOCAL_WIDTH_CONNECTING, LOCAL_HEIGHT_CONNECTING, scalingType, true);
Run Code Online (Sandbox Code Playgroud)
我的问题是我如何设法自定义remoteRender和localRender,以便我可以position在GLSurfaceView它的宽度和高度更改它
编辑:
我做了一个听众,我试过这个:
@Override
public void onWidthHeightChange(int width, int height) {
VideoRendererGui.update(remoteRender,
REMOTE_X-width, REMOTE_X-height,
REMOTE_WIDTH-width, REMOTE_HEIGHT-height, scalingType, false);
if (iceConnected) {
VideoRendererGui.update(localRender,
LOCAL_X_CONNECTED, LOCAL_Y_CONNECTED,
LOCAL_WIDTH_CONNECTED, LOCAL_HEIGHT_CONNECTED,
ScalingType.SCALE_ASPECT_FIT, true);
} else {
VideoRendererGui.update(localRender,
LOCAL_X_CONNECTING, LOCAL_Y_CONNECTING, …Run Code Online (Sandbox Code Playgroud) 我正在尝试在我的相机视图中粉刷墙壁。任何人都可以告诉我应该从哪里开始,任何图书馆或可以为我指明正确方向的有用东西。
我知道这是一件困难的事情,但我需要一些方向来继续我的工作。目前我只尝试过VuForia,但我不知道我们如何使用它来识别墙壁并在增强现实的墙壁上绘画。
下面是所需的结果:
我正在使用带有Android,Java代码的OpenGLES 2.0进行3D对象渲染.如何使用以下代码在近处和远处位置识别3D对象内部或外部3D对象?
public static PointF screenToWorld(float[] viewMatrix,
float[] projMatrix, float screenX, float screenY) {
float[] nearPos = unProject(viewMatrix, projMatrix, screenX, screenY, 0);
float[] farPos = unProject(viewMatrix, projMatrix, screenX, screenY, 1);
Log.d(LOGTAG,"nearPos ->"+nearPos.length+" "+nearPos);
Log.d(LOGTAG,"farPos ->"+farPos.length+" "+farPos);
// The click occurred in somewhere on the line between the two points
// nearPos and farPos. We want to find
// where that line intersects the plane at z=0
float distance = nearPos[2] / (nearPos[2] - farPos[2]); // Distance between nearPos and z=0 …Run Code Online (Sandbox Code Playgroud) android ×10
glsurfaceview ×10
opengl-es ×4
android-ndk ×1
background ×1
drawable ×1
glreadpixels ×1
libjingle ×1
popupwindow ×1
raycasting ×1
renderer ×1
surfaceview ×1
vuforia ×1
webrtc ×1
yuv ×1