• Advertisement

HatiEth

Member
  • Content count

    2
  • Joined

  • Last visited

Community Reputation

125 Neutral

About HatiEth

  • Rank
    Newbie
  1. [quote name='shacktar' timestamp='1326293712' post='4901650'] In your non-working [i]generate[/i] function, you don't set the [i]GL_DEPTH_ATTACHMENT[/i] for either of the FBOs. Try setting those and see if that works.[/quote] RenderBuffers (including Depth-Buffers are not actually necessary for what I try to do - like i said in the last lines of my first post - i already tried if it was them by commenting them out in the working code which changed nothing on the working status) [quote name='shacktar' timestamp='1326293712' post='4901650'] Also, this: [code] glBindFramebuffer(1, m_frontBuffer); [/code] should be this: [code] glBindFramebuffer(GL_FRAMEBUFFER, m_frontBuffer); [/code] [/quote] Thanks, that was the issue, code-blindness - didn't saw it.
  2. Hi, I have a rather odd problem regarding my code I've implemented FBO, but have got a rather odd problem with my code. I've implemented it twice, where both implementations should work (atleast from my point of view , but I'm properly just code-blind) The not working code is: [CODE] void CParticleSystemMouse::generate( void ) { glGenFramebuffers(1, &m_frontBuffer); glGenFramebuffers(1, &m_backBuffer); glBindFramebuffer(1, m_frontBuffer); glGenTextures(1, &m_frontParticles); glBindTexture(GL_TEXTURE_2D,m_frontParticles); int AM = m_width*m_height*4; //amount of data srand(0); int r =0; char* data = new char[AM]; for(int i = 0; i < AM; i+=4) { r = rand()%10; //std::cout << r << std::endl; data[i+0] = 0; //x velo data[i+1] = 0; //y velo data[i+2] = 255; //~ data[i+3] = (rand()%10)<5?255:0; // is particle } glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); //glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,m_width,m_height,0,GL_RGBA,GL_UNSIGNED_BYTE,(GLvoid*)data); glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,m_frontParticles,0); GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if(status != GL_FRAMEBUFFER_COMPLETE) std::cout << "FBO("<<m_frontBuffer <<") incomplete!" << std::endl; glBindTexture(GL_TEXTURE_2D,0); glBindFramebuffer(GL_FRAMEBUFFER,0); glBindFramebuffer(GL_FRAMEBUFFER,m_backBuffer); glGenTextures(1, &m_backParticles); glBindTexture(GL_TEXTURE_2D,m_backParticles); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); //glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,m_width,m_height,0,GL_RGBA,GL_UNSIGNED_BYTE,(GLvoid*)0); glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,m_backParticles,0); status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if(status!= GL_FRAMEBUFFER_COMPLETE) std::cout << "FBO("<<m_frontBuffer <<") incomplete!" << std::endl; glBindTexture(GL_TEXTURE_2D,0); glBindFramebuffer(GL_FRAMEBUFFER,0); delete [] data; m_calcShader = new CShader(NULL,NULL,"particlesystemmouse.frag"); swapBuffers(); } [/CODE] It is generating the FBOs successfully - I can render to them but the texture is not actually saved after rendering to it. the swapBuffers function is: [CODE] void CParticleSystemMouse::swapBuffers() { GLuint tmp = m_frontParticles; m_frontParticles = m_backParticles; m_backParticles = tmp; tmp = m_frontBuffer; m_frontBuffer = m_backBuffer; m_backBuffer = tmp; } [/CODE] I then copied the generate code from another class where it was working correctly, but I have no clue why it does, and the problem is localized in the generate function that I can confirm so far. [CODE]void CParticleSystemMouse::generate( void ) { //Gen firstbuffer glGenFramebuffers(1,&m_frontBuffer); glGenFramebuffers(1,&m_backBuffer); //Bind firstbuffer glBindFramebuffer(GL_FRAMEBUFFER,m_frontBuffer); GLuint depthBuffer; glGenRenderbuffers(1,&depthBuffer); glBindRenderbuffer(GL_RENDERBUFFER,depthBuffer); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, m_width,m_height); glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,depthBuffer); int AM = m_width*m_height*4; srand(0); //srand(time(NULL)); char* data = new char[AM]; int r = 0; for(int i = 0;i<AM;i+=4){ r = rand() % 10; if(r<5) { data[i+0] = 0; data[i+1] = 0; data[i+2] = 255; data[i+3] = 255; } else { data[i+0] = 0; data[i+1] = 0; data[i+2] = 0; data[i+3] = 0; } } /*bool swapSet=false; for(int i=0;i<AM;i+=4) { data[i+0] = 0; data[i+1] = swapSet?255:0; data[i+2] = 0; data[i+3] = 255; swapSet=!swapSet; }*/ // Texture0 glGenTextures(1,&m_frontParticles); glBindTexture(GL_TEXTURE_2D,m_frontParticles); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,m_width,m_height,0,GL_RGBA,GL_UNSIGNED_BYTE,(GLvoid*)data); //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,m_frontParticles,0); GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if(status != GL_FRAMEBUFFER_COMPLETE) std::cout << "[Error] FBO " << m_frontBuffer << " incomplete!" << std::endl; glBindTexture(GL_TEXTURE_2D,0); glBindRenderbuffer(GL_RENDERBUFFER,0); glBindFramebuffer(GL_FRAMEBUFFER,0); //Gen backBuffer glBindFramebuffer(GL_FRAMEBUFFER,m_backBuffer); depthBuffer = 0; glGenRenderbuffers(1,&depthBuffer); glBindRenderbuffer(GL_RENDERBUFFER,depthBuffer); glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, m_width,m_height); glFramebufferRenderbuffer(GL_FRAMEBUFFER,GL_DEPTH_ATTACHMENT,GL_RENDERBUFFER,depthBuffer); // backTexture 0 glGenTextures(1,&m_backParticles); glBindTexture(GL_TEXTURE_2D,m_backParticles); glTexImage2D(GL_TEXTURE_2D,0,GL_RGBA,m_width,m_height,0,GL_RGBA,GL_UNSIGNED_BYTE,(GLvoid*)0); //glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); glFramebufferTexture2D(GL_FRAMEBUFFER,GL_COLOR_ATTACHMENT0,GL_TEXTURE_2D,m_backParticles,0); status = glCheckFramebufferStatus(GL_FRAMEBUFFER); if(status != GL_FRAMEBUFFER_COMPLETE) std::cout << "[Error] FBO " << m_backBuffer << " incomplete!" << std::endl; m_calcShader = new CShader(NULL, NULL, "particlesystemmouse.frag"); delete [] data; glBindFramebuffer(GL_FRAMEBUFFER,0); glBindTexture(GL_TEXTURE_2D,0); glBindRenderbuffer(GL_RENDERBUFFER,0); swapBuffers(); } [/CODE] So, can someone explain me, what is going on, is there something I'm ignoring ? (Just in case someone points to the render buffer, I've already commented them out in the [b]working[/b] generate code - ain't no change to the working state)
  • Advertisement