标签: opengl-es

在OpenGL ES(iPhone)中绘制到屏幕外渲染缓冲区

我正在尝试在iPhone上的OpenGL ES中创建一个屏幕外渲染缓冲区.我已经像这样创建了缓冲区:

        glGenFramebuffersOES(1, &offscreenFramebuffer);
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, offscreenFramebuffer);

    glGenRenderbuffersOES(1, &offscreenRenderbuffer);
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, offscreenRenderbuffer);
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, offscreenRenderbuffer);
Run Code Online (Sandbox Code Playgroud)

但我对如何渲染存储感到困惑.Apple的文档说使用EAGLContext renderBufferStorage:fromDrawable:方法,但这似乎只适用于一个渲染缓冲区(显示的主渲染缓冲区).如果我使用普通的OpenGL函数glRenderBufferStorageOES,那么我似乎无法让它显示出来.这是代码:

        // this is in the initialization section:
    glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_RGB8_OES, backingWidth, backingHeight);

    // and this is when I'm trying to draw to it and display it:
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, offscreenFramebuffer);
    GLfloat vc[] = {
        0.0f, 0.0f, 0.0f,
        10.0f, 10.0f, 10.0f,
        0.0f, 0.0f, 0.0f,
        -10.0f, -10.0f, -10.0f,         
    };

    glLoadIdentity();
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(3, GL_FLOAT, 0, vc);
    glDrawArrays(GL_LINES, 0, 4);
    glDisableClientState(GL_VERTEX_ARRAY);

    glBindRenderbufferOES(GL_RENDERBUFFER_OES, offscreenRenderbuffer);
    [context presentRenderbuffer:GL_RENDERBUFFER_OES];
Run Code Online (Sandbox Code Playgroud)

这样做,屏幕上不显示任何内容.但是,如果我将对"offscreen ... Buffer"的引用切换到使用renderBufferStorage方法创建的缓冲区,则它可以正常工作.

有什么建议?

iphone opengl-es

12
推荐指数
1
解决办法
9183
查看次数

是否有可能在现代GPU上做旧派2d blitting?

看起来GL已经成为所有游戏平台(甚至手持设备!)的主流.这已经推动了现代GPU芯片组部署到大量消费者.

这真太了不起了.

现在有了现代GPU系统,是否可以进行通用的老式图形编程(也就是说 - 使用VRAM从X rect到Y rect的blit)?(想想Amiga)或者是以顶点和像素着色器为中心的操作?

GL可以访问吗?OpenGL ES?

渲染纹理四边形是可以的,但它需要双缓冲和重新渲染整个场景.看看我是否可以避免这种情况.

opengl gpu opengl-es

12
推荐指数
1
解决办法
6171
查看次数

PowerVR SGX535着色器性能(OpenGL ES 2.0)

我目前正在研究iPad游戏的几个着色器,似乎Apple的GLSL编译器没有做任何优化(或者很少).我可以在着色器中移动一行并将我的FPS从30降到24但我真的不知道为什么会发生这种情况.

有没有人对以下内容有任何参考:

  • 从GLSL指令生成什么PowerVR指令?
  • PowerVR指令的时序是什么?
  • PowerVR535中有哪些并行处理单元,它们如何被利用?

谢谢,特里斯坦

iphone opengl-es glsl ipad

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

将UIView的内容渲染为OpenGL纹理

有没有办法在iOS中使用OpenGL将UIView的内容渲染为纹理?还是CGLayer的内容?

iphone opengl-es uiview

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

EAGLView到UIImage颜色转换问题

我有一个EAGLView(取自Apple的例子),我可以使用以下代码成功转换为UIImage:

- (UIImage *)glToUIImage:(CGSize)size {

NSInteger backingWidth = size.width;
NSInteger backingHeight = size.height;

NSInteger myDataLength = backingWidth * backingHeight * 4;

// allocate array and read pixels into it.
GLuint *buffer = (GLuint *) malloc(myDataLength);
glReadPixels(0, 0, backingWidth, backingHeight, GL_RGBA, GL_UNSIGNED_BYTE, buffer);

// gl renders “upside down” so swap top to bottom into new array.
for(int y = 0; y < backingHeight / 2; y++) {
    for(int x = 0; x < backingWidth; x++) {
        //Swap top and bottom bytes …
Run Code Online (Sandbox Code Playgroud)

iphone opengl-es eaglview uiview ios

12
推荐指数
1
解决办法
815
查看次数

WebGL - 渲染深度到fbo纹理不起作用

对于后期处理着色器,我需要我的帧缓冲区的颜色和深度缓冲区.访问colorbuffer工作正常,但我在创建deepbuffer时遇到问题.尝试将texImage2D用于深度纹理时,我总是会收到INVALID_ENUM错误:

WebGL error INVALID_ENUM in texImage2D(TEXTURE_2D, 0, DEPTH_COMPONENT16, 1536, 502, 0, DEPTH_COMPONENT, UNSIGNED_BYTE, null)
Run Code Online (Sandbox Code Playgroud)

使用渲染缓冲而不是纹理工作,但我想要纹理深度,所以我可以将它传递给着色器.

帧缓冲与深度纹理代码:

Framebuffer.prototype.initBufferStuffTexture = function(width, height){
    if(this.width == width && this.height == height){
        return;
    }

    this.width = width;
    this.height = height;

    // remove existing buffers
    gl.bindFramebuffer(gl.FRAMEBUFFER, null);
    if(this.texture != null){
        gl.deleteTexture(this.texture.glid);
        this.texture = null;
    }
    if(this.renderbuffer != null){
        gl.deleteRenderbuffer(this.renderbuffer);
        this.renderbuffer = null;
    }
    if(this.framebuffer != null){
        gl.deleteFramebuffer(this.framebuffer);
        this.framebuffer = null;
    }

    // create new buffers
    this.framebuffer = gl.createFramebuffer();
    this.texture = new Texture();
    this.texture.glid = gl.createTexture();
    this.depth …
Run Code Online (Sandbox Code Playgroud)

opengl-es webgl

12
推荐指数
1
解决办法
5466
查看次数

OpenGL ES 2.0与OpenGL 3 - 相似之处和不同之处

从我读过的东西,看来OpenGL ES 2.0的不是东西,比如OpenGL 2.1,这是我从以前承担.

我很想知道的是OpenGL 3是否与OpenGL ES 2.0相当.换句话说,鉴于我即将为桌面和Android制作游戏引擎,我是否应该特别注意OpenGL 3.x +和OpenGL ES 2.0?

这也可以包括OpenGL 4.x版本.

例如,如果我开始读本书,我在浪费我的时间,如果我打算端口发动机的Android(当然使用NDK;))?

c++ android desktop-application opengl-es opengl-es-2.0

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

gpus_ReturnGuiltyForHardwareRestart崩溃

应用程序在presentFrameBuffer中崩溃(在前台运行时,不会发生中断).

它没有在第一帧崩溃,它画了一段时间然后它突然崩溃了.

我没有重复的确切步骤,但似乎与绘制某些特定内容有关,但我仍然没有通过应用程序报告openGL错误,包括在presentFrameBuffer之前的一个错误检查.如果我在glFinish中将presentFrameBuffer崩溃之前添加glFinish.

应用程序崩溃与EXC_BAD_ACCESS(代码= 1,地址= 0x1)和上面的调用堆栈没有任何其他错误/日志/调试信息.

这是崩溃时报告的callstack:

线程1,队列:com.apple.main-thread

>     #0    0x36871e46 in gpus_ReturnGuiltyForHardwareRestart ()
>     #1    0x36872764 in gpusSubmitDataBuffers ()
>     #2    0x31eae624 in SubmitPacketsIfAny ()
>     #3    0x378a337a in gliPresentViewES ()
>     #4    0x325b6df2 in -[EAGLContext presentRenderbuffer:] ()
>     #5    0x0052986e in EAGLContext_presentRenderbuffer(EAGLContext*, objc_selector*, unsigned int) ()
>     #6    0x000e2a48 in -[EAGLView presentFramebuffer] at /svn/src_svn/GG/iphone/Classes/EAGLView.mm:228
>     #7    0x000e4066 in -[GGViewController drawFrame] at /svn/src_svn/GG/iphone/Classes/GGViewController.mm:504
>     #8    0x3809ab0a in __NSFireTimer ()
>     #9    0x39d36856 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ ()
>     #10   0x39d36502 in …
Run Code Online (Sandbox Code Playgroud)

iphone crash opengl-es ipad ios

12
推荐指数
1
解决办法
7356
查看次数

在iOS中渲染水性涂料

我一直OpenGL在iOS中工作,设置颜色,glColor4f(r,g,b,a)然后在白色上绘制我自己的颜色UIImageView.我基本上有一个刷子,然后在我的用户的触摸周围移动,然后它将颜色绘制到画布上.但这种颜色需要水涂料(如污迹颜色)

有没有人理解/知道如何获得像这个应用程序那样的水彩,以及背景UIImageView上的纹理如何?

https://itunes.apple.com/us/app/hello-watercolor/id539414526?mt=8

或结帐水漆.http://www.fiftythree.com/paper

我为此创造了一笔赏金,因为我真的很难掌握如何从正常颜色中获得如此流畅的颜色.即使你们指的是我正确的方向,或者一些示例代码,我将如何获得效果water-paint,这将是非常有帮助的^ _ ^

作为奖励,如果你能指出我如何画出看起来真实的画布并与油漆混合,那么它也会有所帮助?是否Blending/GLSL有任何这做什么?

这有什么示例项目吗?

xcode opengl-es glsl objective-c ios

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

Android OpenGL透明纹理绘制黑色

我正试图在我的应用程序中绘制透明纹理(文本).奇怪的是,它适用于最新的Nexus 7和我的第二代Moto X,但在最初的Nexus 7上,纹理只是黑色.我已启用混合,纹理为512x512,因此它不是二次幂的问题.我也只是使用GL10,应该支持所有东西,对吗?纹理不能仅仅在这个设备上工作的任何原因?

gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL10.GL_TEXTURE_2D);
// text drawn here
gl.glDisable(GL10.GL_TEXTURE_2D);
gl.glDisable(GL10.GL_BLEND);
Run Code Online (Sandbox Code Playgroud)

这是纹理初始化,我加载纹理图集:

public void loadGlyphs(GL10 gl, Context context) {
    Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), R.drawable.text_bitmap);
    gl.glGenTextures(1, textures, 0);
    gl.glBindTexture(GL10.GL_TEXTURE_2D, textures[0]);

    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_NEAREST);
    gl.glTexParameterf(GL10.GL_TEXTURE_2D, GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);

    GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bitmap, 0);

    bitmap.recycle();
}
Run Code Online (Sandbox Code Playgroud)

Top显示旧Nexus 7上发生的情况.底部图片是Moto X.

坏

好

编辑:这是一个完整的例子.没有透明度,不会在旧的Nexus 7上绘制任何东西.如果我摆脱纹理的东西,它就像它应该的那样绘制白色的正方形.

MainActivity.java

import android.app.Activity;
import android.opengl.GLSurfaceView;
import android.os.Bundle;


public class MainActivity extends Activity {

    private GLSurfaceView glView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        glView = new TestView(this);
        setContentView(glView);
    }

    @Override …
Run Code Online (Sandbox Code Playgroud)

transparency android textures opengl-es

12
推荐指数
1
解决办法
2083
查看次数