标签: opengl-es

OpenGL会生成一个纹理 - \framebuffer-\shader- etc ID,其值为0?

将生成的ID的glGenTextures(...),glGenFramebuffers(...)永远是0?更具体地说,我可以使用零作为未初始化纹理的id,还是需要使用-1?

opengl opengl-es

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

渲染到深度纹理 - 关于GL_OES_depth_texture使用的不清晰度

我正在尝试替换gl_FragDepthOpenGL ES 2.0中缺少的OpenGL功能.

我需要一种在片段着色器中设置深度的方法,因为在顶点着色器中设置它对于我的目的来说不够准确.AFAIK唯一的方法是使用渲染到纹理的帧缓冲区,在其上完成第一个渲染过程.该深度纹理存储屏幕上每个像素的深度值.然后,深度纹理附加在最终渲染过程中,因此最终渲染器知道每个像素的深度.

由于iOS> = 4.1支持GL_OES_depth_texture,我正在尝试使用GL_DEPTH_COMPONENT24GL_DEPTH_COMPONENT16用于深度纹理.我正在使用以下调用来创建纹理:

glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, textureId, 0);
Run Code Online (Sandbox Code Playgroud)

帧缓冲区创建成功,但我不知道如何继续.我对附加到帧缓冲区的深度纹理缺乏一些基本的了解.

  • 我应该在片段着色器中输出什么值?我的意思gl_FragColor是,即使纹理是深度纹理,仍然是RGBA值.我无法在片段着色器中设置深度,因为gl_FragDepth在OpenGL ES 2.0中缺少
  • 如何从最终渲染过程中的深度纹理中读取深度纹理作为sampler2D
  • 为什么我得到一个不完整的帧缓冲,如果我设置的第三个参数glTexImage2DGL_DEPTH_COMPONENT16,GL_DEPTH_COMPONENT16_OES还是GL_DEPTH_COMPONENT24_OES
  • 将纹理附加到GL_DEPTH_ATTACHMENT?是否正确?如果我改变它GL_COLOR_ATTACHMENT0,我得到一个不完整的帧缓冲.

opengl-es framebuffer depth-buffer opengl-es-2.0

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

加载TextureAtlas后,它的fps速率很低一段时间

stackoverflowers和其他好人,我有一个问题,经过两天的尝试我不知道如何解决:我有libgdx项目(我正在使用阶段和演员,但现在不重要)我添加到评论一切没用,问题很简单:

  1. 首先设置空屏幕几个(4-5)渲染的增量大约为0.04秒,然后大约为0.01
  2. 设置屏幕,在resize方法中我创建了一个新的TextureAtlas实例 - 它加载两个1024 x 1024纹理大约需要0.5-0.8秒,之后它开始渲染,前几个渲染(5)的增量时间大约为0.1秒(在SGS II)或大约0.2 - 0.3秒(在SG ACE上) - 这是一个非常严重的问题,因为当你有一些FadeIn效果或屏幕开头的任何动画时你会看到动画的后半部分 - 是的,当它具有低fps评级......没有任何东西在画画(我甚至看不到任何东西,即使它在0.3秒后也被称为渲染)

我的问题是:TextureAtlas应该在调用时加载每个页面图像,以便它在加载后影响运行?或者至少我是否可以知道它何时会运行,正常绘制?

真的谢谢你的回答!

显而易见的是这里的代码,但它很简单:

public class App extends Game {

    @Override
        public void create() {      
            Gdx.app.log( this.LOG, "Creating game" );
            fpsLogger = new FPSLogger();
                setScreen( new IntroScreen(this) );

    }
}
Run Code Online (Sandbox Code Playgroud)

IntroScreen:

public class IntroScreen implements Screen {
   @Override
    public void resize(
        int width,
        int height )
    {
        super.resize( width, height );
        Gdx.app.log("IntroScreen", "Resize start: " );
        atlas = new TextureAtlas( Gdx.files.internal( "image-atlases/pages-info.atlas" ) );
        Gdx.app.log("IntroScreen", "Resize …
Run Code Online (Sandbox Code Playgroud)

android textures frame-rate opengl-es libgdx

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

如何从colors.xml提供GLES20.glClearColor()的参数?

在应用程序的res / values / colors.xml文件中,以#AARRGGBB格式定义了红色:

    <color name="red">#ffff0000</color>
Run Code Online (Sandbox Code Playgroud)

如何将此颜色用作glClearColor和其他OpenGL ES函数的参数?例如:

     public void onSurfaceCreated(GL10 unused, EGLConfig config) {
         GLES20.glClearColor(1.0f, 0.0f, 0.0f, 1.0f); // <-- How to connect R.color.red here? 
     }
Run Code Online (Sandbox Code Playgroud)

android opengl-es opengl-es-2.0

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

Java - Android致命信号11 SIGSEGV

08-30 14:24:14.281: D/dalvikvm(2777): GC_FOR_ALLOC freed 6319K, 41% free 9950K/16724K, paused 12ms, total 12ms
08-30 14:24:14.281: I/dalvikvm-heap(2777): Grow heap (frag case) to 13.750MB for 4194320-byte allocation
08-30 14:24:14.291: D/dalvikvm(2777): GC_FOR_ALLOC freed <1K, 17% free 14045K/16724K, paused 13ms, total 13ms
08-30 14:24:14.381: D/dalvikvm(2777): GC_FOR_ALLOC freed 5122K, 30% free 9955K/14152K, paused 12ms, total 12ms
08-30 14:24:14.381: I/dalvikvm-heap(2777): Grow heap (frag case) to 13.755MB for 4194320-byte allocation
08-30 14:24:14.391: D/dalvikvm(2777): GC_FOR_ALLOC freed <1K, 1% free 14051K/14152K, paused 13ms, total 13ms
08-30 14:24:14.451: D/dalvikvm(2777): GC_FOR_ALLOC …
Run Code Online (Sandbox Code Playgroud)

java crash android opengl-es segmentation-fault

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

Android中的OpenGL ES 2.0上下文

我是Android上的OpenGL的新手,我读过大量记录的样本,我有点理解.但在尝试做任何复杂的事情之前,我想在黑色的bacground上绘制一个简单的2D白色矩形.没有其他的.

我坚持这个错误:call to OpenGL ES API with no current context这似乎是我从非OpenGL调用的东西Thread.问题是我不确定从OpenGL调用什么Thread.所以这是我的代码

// ==============活动================== //

public class MainActivity extends Activity {

public static String TAG = MainActivity.class.getSimpleName();

MyGLSurfaceView surface;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requestWindowFeature(Window.FEATURE_NO_TITLE);
    getWindow().setFlags(
            WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN
    );

    surface = new MyGLSurfaceView(this);
    setContentView(surface);
}

@Override
protected void onPause() {
    super.onPause();
    surface.onPause();
}

@Override
protected void onResume() {
    super.onResume();
    surface.onResume();
}

}
Run Code Online (Sandbox Code Playgroud)

// ==================== GLSurfaceView ======================== //

public class MyGLSurfaceView extends GLSurfaceView {

MyGLSurfaceRenderer …
Run Code Online (Sandbox Code Playgroud)

android opengl-es opengl-es-2.0

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

OpenGL错误处理最佳实践

在调试版本中调用OpenGL之后检查OpenGL错误状态可以成为查找OpenGL代码中的错误的宝贵工具.但是在分配纹理或其他OpenGL资源时会出现内存不足等错误呢?处理或避免这些错误的最佳做法是什么?

在大多数情况下,OpenGL资源分配失败可能是致命的,所以一个程序只是试图分配合理数量的资源并希望最好吗?在不同平台上的实际项目中使用了哪种方法,例如在PC和移动平台上?

opengl opengl-es

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

写入gl_FragColor会导致Android上出现INVALID_OPERATION

我正在尝试为NDK掌握OGLES2并坚持使用GLSL着色器.情况类似于此处已经强调的情况,但似乎背后的原因有些不同.

我有最简单的着色器.

顶点:

#version 110
attribute vec3 vPosition;
void main(void)
{
    gl_Position = vec4(vPosition, 1.0);
    gl_FrontColor = gl_BackColor = vec4(0.3, 0.3, 0.3, 1); // ***
}
Run Code Online (Sandbox Code Playgroud)

分段:

#version 110
void main(void)
{
    gl_FragColor = gl_Color;
}
Run Code Online (Sandbox Code Playgroud)

简单直接.我甚至在剪辑空间中直接定义了三角形.当我在Android 403设备上运行应用程序时***,VS源中的starred ()行会glUseProgram调用以抛出GL_INVALID_OPERATION错误(以及所有后续glGetAttribLocation调用都会执行相同操作).我可以写入gl_FragColorFS(一些硬编码vec4值),但甚至无法触及VS中的gl_FrontColor/ gl_BackColor值.

E/Adreno200-ES20(16211): <qgl2DrvAPI_glUseProgram:1344>: GL_INVALID_OPERATION
E/Adreno200-ES20(16211): <qgl2DrvAPI_glGetAttribLocation:531>: GL_INVALID_OPERATION
Run Code Online (Sandbox Code Playgroud)

我在着色器编译和链接期间检查每个可能的错误(glGetErrorglGetShaderInfoLog),一切都很清楚.

当我将OGL实现切换到JOGL实现时,应用程序在Windows上正常工作(所有引导和呈现代码保持不变).我甚至可以使用包含颜色的顶点属性,完全没有问题.

有没有办法解决这个问题?我不相信Android OGLES实现那么恶心,可能我只是错过了它的一些功能 ......

opengl-es glsl android-ndk opengl-es-2.0 glsles

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

为什么在调用glDrawArrays之前不需要绑定顶点缓冲区对象?

我有点困惑为什么它仍然呈现。我认为您需要绑定一个顶点缓冲区对象,以便glDrawArrays知道要使用哪个顶点缓冲区。

这是我的初始化代码。

// Create and bind vertex array to store vertex attribute states.

glGenVertexArraysOES(NUM_VERTEX_ARRAYS, &m_vertexArray);
glBindVertexArrayOES(m_vertexArray);

// Create and bind vertex buffer to store vertex data.

glGenBuffers(NUM_VERTEX_BUFFERS, &m_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(Vertex) * 36, &m_vertices[0], GL_STATIC_DRAW);

glEnableVertexAttribArray(VertexAttribPosition);
glVertexAttribPointer(VertexAttribPosition, 3, GL_FLOAT, GL_FALSE, 24, BUFFER_OFFSET(0));
glEnableVertexAttribArray(VertexAttribNormal);
glVertexAttribPointer(VertexAttribNormal, 3, GL_FLOAT, GL_FALSE, 24, BUFFER_OFFSET(12));

glBindBuffer(GL_ARRAY_BUFFER, 0);

glBindVertexArrayOES(0);
Run Code Online (Sandbox Code Playgroud)

这是我的渲染代码。我很困惑为什么将0绑定到GL_ARRAY_BUFFER时glDrawArrays仍然可以工作。

glBindVertexArrayOES(m_vertexArray);
glBindBuffer(GL_ARRAY_BUFFER, 0);

glDrawArrays(GL_TRIANGLES, 0, 36);

glBindVertexArrayOES(0);
Run Code Online (Sandbox Code Playgroud)

c++ opengl-es opengl-es-2.0

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

哪些WebGL/OpenGL事件导致同步?

我目前正在撰写论文,主题是通过三重缓冲提高WebGL的渲染性能,或者只是避免同步.我目前正在尝试了解WebGL机器何时以及为何同步,因为在一个进程中等待另一个进程,无论是内部还是外部.

我基本上想要在WebGL/OpenGL渲染管道中找出任何潜在的瓶颈.

我还没有找到一本书或任何其他具有足够详细规格的来源.任何指示或解释?

synchronization opengl-es webgl

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