我试图通过openGL过滤器运行来自相机硬件的流,然后在GLSurfaceView中显示它.当openGL去渲染帧时,LogCat会反复发出错误:
[unnamed-3314-0] updateTexImage:清除GL错误:0x502
0x502是一个通用的openGL错误,并没有真正帮助我追踪问题.这是一个代码如何工作的序列(或者至少应该像我脑中看到的那样工作),并且我已经将代码复制到了下面.我希望别人能看出我的问题是什么.
- 创建新的MyGLSurfaceView.这也在内部创建了新的MyGL20Renderer对象.此MyGLSurfaceView设置为内容视图.
- 一旦MyGLSurfaceView完成膨胀/初始化,此完成事件将触发渲染器创建DirectVideo绘图对象,该对象编译/链接定义的着色器并将它们添加到openGL程序.然后它创建一个新的openGL纹理对象,然后使用纹理对象ID回调MainActivity.
- 从渲染器调用MainActivity方法时,它会使用传递的openGL纹理对象创建一个新的SurfaceTexture对象.然后它将自己设置为表面的onFrameListener.然后创建/打开相机对象,将创建的SurfaceTexture设置为视频流的目标,然后启动相机源.
- 当Feed中有一个框架时,onFrameAvailable会向渲染器发送渲染请求.这是在openGL线程上获取的,该线程调用SurfaceTexture的updateTexImage(),它将帧内存加载到openGL纹理中.然后它调用DirectVideo的绘图对象,并运行openGL程序序列.如果我注释掉这个.draw()行,上面提到的错误消失了,所以看起来这个问题很可能就在这里,但我并不认为这是由于链接/创建不正确的纹理造成的.
MainActivity.java
public class MainActivity extends Activity implements SurfaceTexture.OnFrameAvailableListener
{
private Camera mCamera;
private MyGLSurfaceView glSurfaceView;
private SurfaceTexture surface;
MyGL20Renderer renderer;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
glSurfaceView = new MyGLSurfaceView(this);
renderer = glSurfaceView.getRenderer();
setContentView(glSurfaceView);
}
public void startCamera(int texture)
{
surface = new SurfaceTexture(texture);
surface.setOnFrameAvailableListener(this);
renderer.setSurface(surface);
mCamera = Camera.open();
try
{
mCamera.setPreviewTexture(surface);
mCamera.startPreview();
}
catch (IOException ioe)
{
Log.w("MainActivity","CAM LAUNCH FAILED");
}
}
public void onFrameAvailable(SurfaceTexture surfaceTexture)
{
glSurfaceView.requestRender();
} …
Run Code Online (Sandbox Code Playgroud) 我试图利用TypeSafe
光滑的库与MySQL服务器连接.所有的gettingstarted/tutorial示例都使用withSession{}
框架将自动创建会话,在{}
s 内执行查询,然后在块结束时终止会话.
我的程序相当繁琐,我希望在整个脚本执行过程中保持持久的连接.到目前为止,我已拼凑此代码以显式创建和关闭会话.
val db = Database.forURL("jdbc:mysql://localhost/sandbox", user = "root", password="***", driver = "com.mysql.jdbc.Driver")
val s = db.createSession()
...
s.close()
Run Code Online (Sandbox Code Playgroud)
我可以在哪里执行查询.但是,当我尝试执行命令时,例如
(Qu +"插入TEST(名称)值('"+ name +"')").执行
它崩溃,因为它无法找到隐式会话.我并不完全理解文档中执行定义的语法,但似乎可能有一个可选参数来传递显式会话.我已经尝试过使用.execute(s),但这会发出一个警告:(s)在纯粹的探索中没有做任何事情.
如何显式指定预先存在的会话以运行查询?
附: JAB解决方案的试用代码
class ActorMinion(name: String) extends Actor
{
Database.forURL("jdbc:mysql://localhost/sandbox", user = "root", password="****", driver = "com.mysql.jdbc.Driver") withSession
{
def receive =
{
case Execute =>
{
(Q.u + "insert into TEST (name) values('"+name+"')").execute
sender ! DoneExecuting(name,output,err.toString)
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
哪个返回编译错误
[错误] /home/ubuntu/helloworld/src/main/scala/hw.scala:41:扩展功能缺少参数类型 …
我有代码检查JSON对象是否有一个有效的日期字段.我意识到我可能有一些(s)情况,然后在该函数中嵌套另一个"匹配",但我想知道是否有更简洁的方法在顶级"匹配"中执行此操作.这是我尝试过的代码,但不会返回"成功".我认为有一种方法可以实现这一点,因为很多人都在谈论scala模式匹配的稳健性.谢谢!
val p = """(\d\d\d\d)-(\d\d)-(\d\d)""".r
(json \ "date").validate[String].asOpt match {
case Some(p(date)) => Json.obj("success"->date)
case None => Json.obj("error"->"missing date")
case _ => Json.obj("error"->"invalid date")
}
Run Code Online (Sandbox Code Playgroud)