小编abe*_*ier的帖子

Framebuffer FBO渲染到纹理非常慢,在Android上使用OpenGL ES 2.0,为什么?

我正在使用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)

android 2d framebuffer render-to-texture opengl-es-2.0

6
推荐指数
1
解决办法
2万
查看次数

GLES2.0:通过glEGLImageTargetTexture2DOES使用GL_TEXTURE_EXTERNAL_OES

我想用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 …

java android opengl-es-2.0 egl

6
推荐指数
1
解决办法
6877
查看次数

sub仅对齐一个元素下面的文本

当我尝试将字符创建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)

有人可以指出,我做错了什么或如何解决这个问题.

这是小提琴:https://jsfiddle.net/aaL06scu/

html css

6
推荐指数
1
解决办法
84
查看次数

OpenGL固定功能着色器实现

有没有在OpenGL ES 2.0之上模拟OpenGL ES 1.1 API的包装器?我搜索了很多,但找不到任何实际的实现.

opengl-es opengl-es-2.0

5
推荐指数
2
解决办法
5475
查看次数

在SCons中创建混合(值集)CPPDEFINES

我想将编译器定义设置为-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中对我这么做吗?

python scons

5
推荐指数
1
解决办法
1659
查看次数

缺少共享引用

在进行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)

c++ refcounting c++11

5
推荐指数
1
解决办法
1428
查看次数

跨平台可重现数字生成器

我需要一个“随机”数字生成器,对于Windows,Mac,Linux,iOS和Android上的给定种子,其生成的结果相同。现在我想std::randboost::random_int_generatorboost::mt19937,但遗憾的是,结果是Windows和Mac之间的不同。

有谁知道在所有平台上都能可靠运行的(C ++)实现吗?

编辑1:

更具体地说,boost::mt19937在Windows和Mac上的数字之间存在差异,这表明在Windows上还会生成(2)个其他数字块。看起来真的很奇怪,因为大多数数字都是相同的,这些块仅出现在Windows上。

编辑2:

boost::mt19937在所有平台上都能可靠运行。我们的问题不是那里的错误。

c++ random boost-random c++98

5
推荐指数
1
解决办法
1030
查看次数

如何构建可嵌入的 Python

我想知道如何为 Windows 构建可嵌入的 Python。找不到该特定包的任何信息或构建配置。

我问的原因是我可以为 Mac 和 Linux 使用相同的变体。

python embeddable python-3.x

5
推荐指数
1
解决办法
1016
查看次数

使用Bazel从Dockerfile构建Docker映像

我有一个相当简单的方法Dockerfile,现在想使用rules_docker构建一个docker镜像。尝试使用container_image,看来我不能使用Dockerfileas作为输入。有什么方法可以构建Dockerfile

docker bazel

5
推荐指数
2
解决办法
2644
查看次数

如何在 Go 中访问 C 位域

我有一个像这样的结构:

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

go cgo

5
推荐指数
1
解决办法
918
查看次数