我正在使用opengl es 2.0编写Android 2d游戏.在我将精灵绘制到后备缓冲区后,我将灯光绘制到FBO并尝试将其再次混合到后台缓冲区.当我将FBO绘制到帧缓冲区时,即使没有任何颜色也没有任何颜色,帧率在三星Galaxy w上从60降到30(它有一个adreno 205作为gpu).我到处搜索并尝试了一切,即使我在场景中绘制了一个精灵并将一个透明的FBO纹理混合到帧速率下降的屏幕上.我在手机上尝试了其他带有灯光效果的游戏,它们运行良好,几乎所有游戏都可以在手机上运行,我相信它们也使用了帧缓冲.在Galaxy SII(mali 400 gpu)运行正常,我对opengl很新,所以我相信我在某个地方犯了错误,我分享了我的代码.
// Create a framebuffer and renderbuffer
GLES20.glGenFramebuffers(1, fb, offset);
GLES20.glGenRenderbuffers(1, depthRb, offset);
// Create a texture to hold the frame buffer
GLES20.glGenTextures(1, renderTex, offset);
GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, renderTex[offset]);
GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA,
screenWidth, screenHeight, 0,
GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE,
null);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,
GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,
GLES20.GL_CLAMP_TO_EDGE);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER,
GLES20.GL_LINEAR);
GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER,
GLES20.GL_LINEAR);
//bind renderbuffer
GLES20.glBindRenderbuffer(GLES20.GL_RENDERBUFFER, depthRb[offset]);
GLES20.glRenderbufferStorage(GLES20.GL_RENDERBUFFER, GLES20.GL_DEPTH_COMPONENT16,
screenWidth, screenHeight);
// bind the framebuffer
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fb[offset]);
// specify texture as color attachment
GLES20.glFramebufferTexture2D(GLES20.GL_FRAMEBUFFER, GLES20.GL_COLOR_ATTACHMENT0,
GLES20.GL_TEXTURE_2D, renderTex[offset], …Run Code Online (Sandbox Code Playgroud) 我想用Java渲染图像缓冲区(在这种情况下NDK不是选项)并将其传递给着色器GL_TEXTURE_EXTERNAL_OES.
glTexImage2D如规范中所述,它不起作用.但该功能glEGLImageTargetTexture2DOES只能通过GLES11Ext类使用,这似乎有点不对.
无论如何,我试过,它给了我GL_INVALID_OPERATION,如果:
如果GL无法指定使用所提供的eglImageOES(如果,例如,指的是多采样eglImageOES)纹理对象,则产生错误INVALID_OPERATION.
遗憾的是,我不能从这个描述中做出正面或反面,特别是因为Android Java API似乎不能让我访问eglImageOES函数.我也没有找到使用此函数的Java示例.
附上一个小例子:
// Bind the texture unit 0
GLES20.glActiveTexture( GLES20.GL_TEXTURE0 );
throwOnError( "glActiveTexture" );
GLES20.glBindTexture( GL_TEXTURE_EXTERNAL_OES, _samplerLocation );
throwOnError( "glBindTexture" );
// _output is ByteBuffer.allocateDirect(pixels * Integer.SIZE / Byte.SIZE).order(ByteOrder.nativeOrder()).asIntBuffer()
_output.rewind();
_output.limit( pixels );
GLES11Ext.glEGLImageTargetTexture2DOES( GL_TEXTURE_EXTERNAL_OES, _output );
throwOnError( "glEGLImageTargetTexture2DOES" ); // <-- throws
GLES20.glDrawArrays( GLES20.GL_TRIANGLE_STRIP, 0, 4 );
throwOnError( "glDrawArrays" );
Run Code Online (Sandbox Code Playgroud)
有没有人之前这样做或知道这是否可能?
编辑:
我看一下glEGLImageTargetTexture2DOES …
当我尝试将字符创建c为子对齐时,bar表格行中的后续文本也会进行子对齐(非常不直观).
<table>
<tr>
<td>test</td>
<td>foo<sel style="vertical-align: sub">c</sel></td>
<td>bar</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
有人可以指出,我做错了什么或如何解决这个问题.
有没有在OpenGL ES 2.0之上模拟OpenGL ES 1.1 API的包装器?我搜索了很多,但找不到任何实际的实现.
我想将编译器定义设置为-DBLUB以及-DFOO = 1.
目前我只有:
env.Append("CPPDEFINES", ["BLUB", "VALUE2"])
Run Code Online (Sandbox Code Playgroud)
我现在想通过"FOO"包含第三个定义:1然后使用CPPDEFINES作为字典,以便稍后我可以很容易地测试
env["CPPDEFINES"].get("FOO") == 1
Run Code Online (Sandbox Code Playgroud)
或者.我尝试的一切都会导致语法错误或奇怪的错误.能解释一下奇怪的方法在python中对我这么做吗?
在进行std::shared_ptr大量工作时,我有点怀念shared_ref实现的过程。这是 的特化shared_ptr,它保证它永远不会包装 a nullptr(当然,给定正确的用法)。我有点想知道为什么它不在 C++11 标准中。执行过程中是否存在市长问题?我的头顶上什么也想不出来。
编辑:
我希望有一个类似于以下的界面:
template <typename T>
class shared_ref {
public:
shared_ref( T&& ref );
T& get();
T* operator&() const;
template< class Y >
void reset( Y&& obj );
long use_count() const;
bool unique() const;
void swap( shared_ref& r );
};
Run Code Online (Sandbox Code Playgroud) 我需要一个“随机”数字生成器,对于Windows,Mac,Linux,iOS和Android上的给定种子,其生成的结果相同。现在我想std::rand和boost::random_int_generator同boost::mt19937,但遗憾的是,结果是Windows和Mac之间的不同。
有谁知道在所有平台上都能可靠运行的(C ++)实现吗?
编辑1:
更具体地说,boost::mt19937在Windows和Mac上的数字之间存在差异,这表明在Windows上还会生成(2)个其他数字块。看起来真的很奇怪,因为大多数数字都是相同的,这些块仅出现在Windows上。
编辑2:
boost::mt19937在所有平台上都能可靠运行。我们的问题不是那里的错误。
我想知道如何为 Windows 构建可嵌入的 Python。找不到该特定包的任何信息或构建配置。
我问的原因是我可以为 Mac 和 Linux 使用相同的变体。
我有一个相当简单的方法Dockerfile,现在想使用rules_docker构建一个docker镜像。尝试使用container_image,看来我不能使用Dockerfileas作为输入。有什么方法可以构建Dockerfile?
我有一个像这样的结构:
typedef struct st_MASK_SETTINGS
{
uint32_t foo : 1;
uint32_t bar : 7;
} MASK_SETTINGS
Run Code Online (Sandbox Code Playgroud)
现在我想通过 cgo 访问foo- 但找不到任何文档如何做到这一点。
天真的v := ms.foo抱怨has no field or method。
android ×2
c++ ×2
python ×2
2d ×1
bazel ×1
boost-random ×1
c++11 ×1
c++98 ×1
cgo ×1
css ×1
docker ×1
egl ×1
embeddable ×1
framebuffer ×1
go ×1
html ×1
java ×1
opengl-es ×1
python-3.x ×1
random ×1
refcounting ×1
scons ×1