我已经看到了这个主题的多重看法,它开始让我感到困惑.我真的希望有人能给我一个明确的答案!:)
我想直言不讳:Android模拟器是否支持OpenGL ES 2.0?我见过有人说"是的,但你必须改变一些设置." 而且我也看过"不,它不支持它,期间." 以下是我尝试解决问题所做的工作,包括我收到的一些错误消息.
首先,我修改了AndroidManifest.xml以包含以下代码:
<uses-feature
android:glEsVersion="0x00020000" />
<uses-sdk
android:minSdkVersion="15"
android:targetSdkVersion="17" />
Run Code Online (Sandbox Code Playgroud)
然后,当我想实例化我的GLSurfaceView时,我使用这段代码来实例化它:
super(context);
setEGLContextClientVersion(2);
setRenderer(new MyRenderer());
setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
Run Code Online (Sandbox Code Playgroud)
然后,我看到的任何地方都说你必须进入AVD管理器,选择模拟器,转到"硬件",添加"GPU模拟"并将布尔值设置为"是".然而,这是我看到我时所看到的:

特别的是我在AVD Manager中有另一个模拟器,我有"硬件"表:

只是为了向您展示我正在做的事情,这里有一些代码可以完成我想在OpenGL ES 2.0中做的一些事情(我主要从Android自己的教程中得到这个):
int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode);
int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode);
program = GLES20.glCreateProgram();
GLES20.glAttachShader(program, vertexShader);
GLES20.glAttachShader(program, fragmentShader);
GLES20.glLinkProgram(program);
Run Code Online (Sandbox Code Playgroud)
我不想改变我的代码回到使用OpenGL ES 1.0,因为这将需要很多麻烦,如果我可以避免它,我会.
最后,当我尝试运行我的程序时,程序以窗口关闭:"不幸的是,已经停止了." 这就是LogCat告诉我的:
12-05 06:16:27.165: E/AndroidRuntime(936): FATAL EXCEPTION: GLThread 81
12-05 06:16:27.165: E/AndroidRuntime(936): java.lang.IllegalArgumentException: No config chosen
12-05 06:16:27.165: E/AndroidRuntime(936): at android.opengl.GLSurfaceView$BaseConfigChooser.chooseConfig(GLSurfaceView.java:874)
12-05 06:16:27.165: E/AndroidRuntime(936): at android.opengl.GLSurfaceView$EglHelper.start(GLSurfaceView.java:1024)
12-05 06:16:27.165: E/AndroidRuntime(936): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1401)
12-05 06:16:27.165: …Run Code Online (Sandbox Code Playgroud) 我写了一个非常基本的C函数叫做"multby22",它完全符合它的名字所暗示的:它需要很长的时间并且返回那么长的乘以22.(我知道这是一个没有意义的函数,但我写了它试图帮助我用x86汇编.)所以:
long multby22(long x) {
return 22 * x;
}
Run Code Online (Sandbox Code Playgroud)
当我编译程序并在可执行文件上运行"objdump"时,我发现"multby22"的反汇编代码如下:
080483ff <multby22>:
80483ff: 55 push %ebp
8048400: 89 e5 mov %esp,%ebp // Create the stack frame.
8048402: 8b 45 08 mov 0x8(%ebp),%eax // Grab the argument and put it into the %eax register.
8048405: 6b c0 16 imul $0x16,%eax,%eax // ???
8048408: 5d pop %ebp // Pop the buffer pointer and return.
8048409: c3 ret
Run Code Online (Sandbox Code Playgroud)
我理解"imul"用于整数乘法,但我无法找到任何能帮助我使用这种语法的东西!我找到的最接近的是:
imul [reg] [reg] [const]
Run Code Online (Sandbox Code Playgroud)
...将第二个和第三个参数相乘,然后放入第一个参数,该参数必须是寄存器.在我生成的程序集中,第一个参数是常量!
我对Python很陌生,但是到底是什么......这是一个奇怪的问题所以我会尽我所能尽力解释它:
我正忙着用Python编写一个脚本来检查一个网页是否有特定的变化(基本上从0翻到1的数字).当发生更改时,脚本将继续执行其他操作.不幸的是,我还没有达到这一点,因为我甚至在解析HTML时遇到了麻烦,因为BeautifulSoup抓住它时很多HTML都丢失了!(至少,这是我声称的.)
让我们一步一步:我正在使用BeautifulSoup并Mechanize为此而努力.首先,我在网页上找到一个表单并选择它,根据需要更改表单中的控件.(我已经验证了所有控件都按照我的预期更改.)之后,我提交表单,然后调用我编写的辅助函数调用process_results():
...
form = list(client.forms())[1]
client.select_form('ttform');
...
# Modify controls
...
client.submit()
process_results(client)
Run Code Online (Sandbox Code Playgroud)
process_results()只是检查客户回来了什么.首先,根据放入表单的内容,您可以获得无效的搜索结果,因此我想搜索网页上显示的错误消息,看看它是否存在.我BeautifulSoup用来做这个:
# Processes search results.
def process_serach_results(cli):
html = cli.response().read()
soup = BeautifulSoup(html)
...
Run Code Online (Sandbox Code Playgroud)
评估有问题的代码是否出现在页面上的语句如下所示:
...
if (soup.find('td', attr = {'class' : 'msgarea'}) != None):
# Do something...
...
Run Code Online (Sandbox Code Playgroud)
这永远不会被评估为真,因为它找不到我正在描述的标签.我决定直接从打印出既响应Mechanize和BeautifulSoup,这是我得到了(缩短):
Mechanize 打印我要找的代码,这意味着响应正确回复:
...
<TD class=msgarea>
<B class=important_msg>There was a problem with your request:</B>
<BR>
<BR>
<li class=red_msg>...</li>
...
</TD></TR></TABLE><P></DIV>
... …Run Code Online (Sandbox Code Playgroud)