我正在设计一个具有OpenGL处理管道(着色器集合)的应用程序,同时要求最终用户查看未处理的相机预览.
例如,假设您要向用户显示摄像机预览,同时计算从摄像机接收的场景中的红色对象的数量,但是您使用任何着色器来计算对象(如色调过滤),用户不应该看到等.
我该如何正确设置?
我知道我可以设置摄像头预览,然后在回调上接收YUV格式的摄像机帧数据,然后将其转储到OpenGL纹理中并以这种方式处理帧,但是,它具有与之相关的性能问题.我必须将数据从摄像头硬件往返到VM,然后将其传递回GPU内存.我正在使用SurfaceTextureOpenGL以可理解的格式直接从相机获取数据,并将其传递给我的着色器以解决此问题.
我以为我能够向SurfaceTexture最终用户显示相同的未经处理,但TextureView没有构造函数或setter,我可以传递它,SurfaceTexture我希望它呈现.它总是创造自己的.
这是我当前设置的概述:
显然,通过这种设置,我向用户显示处理过的帧,这不是我想要的.此外,帧的处理不是实时的.基本上,我从Camera通过链运行输入一次,所有过滤器完成后,我调用updateTexImage从相机抓取下一帧.我在Nexus 4上的处理速度约为每秒10帧.
我觉得我可能需要使用2个GL上下文,一个用于实时预览,一个用于处理,但我不确定.我希望有人能把我推向正确的方向.
我正在使用DotNetOpenAuth通过OAuth2连接到Facebook和Google.OAuth规范要求在request_uri中不提供其他参数,并且当您使用它们定义Google App时,Google会通过强制指定完全回调uri来实际执行此操作.
我想要完成的是能够在用户通过Facebook或Google验证后将用户返回到特定的URL.流程就是这样,用户点击受保护的链接,然后使用returnUrl参数转发到我的登录页面,然后根据他们选择的OAuth2授权服务器启动授权过程.
由于request_uri中不能包含任何参数(虽然Facebook让你侥幸逃脱),我无法将returnUrl参数发送到授权服务器并将其恢复,以便当用户返回我的网站时,我将它们转发到他们试图访问的受保护页面.我能做的最好的事情是将它们转发到主页或会员欢迎页面.
解决此问题的方法是使用授权服务器将发送回request_uri的"state"参数,但我找不到使用DotNetOpenAuth指定此方法的方法.
默认情况下,代码使用SessionID作为状态参数来验证从授权服务器返回的请求.在WebServerClient类上指定IClientAuthorizationTracker允许我在响应从授权服务器返回时插入我的逻辑,但是在准备授权请求时没有调用它,所以我无法插入我的附加状态.
这是来自WebServerClient.cs的PrepareRequestUserAuthorization的代码:
// Mitigate XSRF attacks by including a state value that would be unpredictable between users, but
// verifiable for the same user/session.
// If the host is implementing the authorization tracker though, they're handling this protection themselves.
if (this.AuthorizationTracker == null) {
var context = this.Channel.GetHttpContext();
if (context.Session != null) {
request.ClientState = context.Session.SessionID;
} else {
Logger.OAuth.WarnFormat("No request context discovered, so no client state parameter could be set to mitigate XSRF attacks."); …Run Code Online (Sandbox Code Playgroud)