Jump to content
  • Advertisement
Sign in to follow this  
emt

OpenGL OpenGL(GLSL) Gradient with gsamplerBuffer:Reading buffer data in different formats

This topic is 2103 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I am trying to use same buffer and reading it in two different formats.

The intention is to obtain a gradient at output, but not getting the desired output.

Using  texelFetch(...),glTexBuffer(...)  and  gsamplerBuffer .

Kindly suggest the corrections/changes that may be required. Below are the relevant code snippets,

    // Relevant C code snippet
    // Fill the texture buffer data for gradient
    #define BUFFER_SIZE 256
    char* buffer = (char*)malloc(BUFFER_SIZE);
    for (i = 0; i < 32; i++)
    {
        buffer[2 * i]= (float)((float)i * 0.5 / 31.0);// left to right gradient 0....0.5
        buffer[(2 * i + 1) * 4 + 0] = (char)(128.0 / 31.0 * (float)(31 - i));//inverted gradient 0.5...0
        buffer[2 * (i + 1) * 4 + 1] = (char)(128.0 / 31.0 * (float)(31 - i));//inverted gradient 0.5...0
        buffer[2 * (i + 1) * 4 + 2] = (char)(128.0 / 31.0 * (float)(31 - i));//inverted gradient 0.5...0
        buffer[(2 * i + 1) * 4 + 3] = (char)255;        
    }
------------------------------------------------------------------------------------------------------------
    // Generate the two texture buffer
    glGenBuffers( 2,texBuffObj);
    glGenTextures(2, textureID);
    // Fill the data into buffer as GL_RGBA8
    glBindBuffer( GL_TEXTURE_BUFFER,texBuffObj[0]);
    glBufferData( GL_TEXTURE_BUFFER,BUFFER_SIZE,buffer,GL_DYNAMIC_DRAW);
    glBindTexture(GL_TEXTURE_BUFFER, textureID[0]);
    glTexBuffer(GL_TEXTURE_BUFFER,GL_RGBA8,texBuffObj[0]);
    // Fill the data into buffer as GL_RGBA32F
    glBindBuffer( GL_TEXTURE_BUFFER,texBuffObj[1]);
    glBufferData( GL_TEXTURE_BUFFER,BUFFER_SIZE,buffer,GL_DYNAMIC_DRAW);
    glBindTexture(GL_TEXTURE_BUFFER, textureID[1]);
    glTexBuffer(GL_TEXTURE_BUFFER,GL_RGBA32F,texBuffObj[1]);
------------------------------------------------------------------------------------------------------------
    #define BUFFER_OFFSET(offset) ((void *)(offset))
    // Use the GL_RGBA8 buffer in the draw call
    glBindTexture(GL_TEXTURE_BUFFER, textureID[0]);
    glDrawElements(GL_TRIANGLES, 3 , GL_UNSIGNED_SHORT, 0);
    // Use the GL_RGBA32F buffer in the draw call
    glBindTexture(GL_TEXTURE_BUFFER, textureID[1]);
    glDrawElements(GL_TRIANGLES, 3 , GL_UNSIGNED_SHORT, BUFFER_OFFSET(3,GLushort));    
------------------------------------------------------------------------------------------------------------
    //Fragment shader code
    #version 330 core
    uniform usamplerBuffer samplerRGBA8;
    uniform usamplerBuffer samplerRGBA32F;
    // Ouput data
    out vec4 color;
    in vec2 vs_posCoord;//not the texture coordinates
    void main()
    {
        vec4 colBuffRGBA8;
        vec4 colBuffRGBA32F;
        int offset = int(vs_posCoord.x + vs_posCoord.y) % 32;
        colBuffRGBA32F = texelFetch(samplerRGBA32F,int(offset)) ;
        colBuffRGBA8 = texelFetch(samplerRGBA8,int(offset) + 1);
        color = vec4(colBuffRGBA32F) + colBuffRGBA8;
    }

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!