How do I get textures to work in OpenGL?

后端 未结 2 1372
忘掉有多难
忘掉有多难 2020-12-21 13:32

I\'m using the tutorials on http://arcsynthesis.org/gltut/ to learn OpenGL, it\'s required, I have to use it. Mostly I want to apply the textures from Tutorial 15 onto objec

2条回答
  •  隐瞒了意图╮
    2020-12-21 14:01

    Ok guys, I've worked on this whole thing, and did manage to somehow get it running. First off I had to add samplers:

    GLuint g_samplers;
    
    //Add Later
    void CreateSamplers()
    {
    glGenSamplers(1, &g_samplers);
    
        glSamplerParameteri(g_samplers, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glSamplerParameteri(g_samplers, GL_TEXTURE_WRAP_T, GL_REPEAT);
    
    //Linear mipmap Nearest
    glSamplerParameteri(g_samplers, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
    glSamplerParameteri(g_samplers, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
    }
    

    I also added this to the file thing:

    glimg::OpenGLPixelTransferParams xfer = glimg::GetUploadFormatType(pImageSet->GetFormat(), 0);
    
    glimg::SingleImage image = pImageSet->GetImage(0, 0, 0);
    glimg::Dimensions dims = image.GetDimensions();
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, dims.width, dims.height, 0, 
      xfer.format, xfer.type, image.GetImageData());
    

    The xfer variable does get the format and type adjusted to the dds. Also the render code got turned into this:

    //Added necessary 
    glActiveTexture(GL_TEXTURE0 + g_colorTexUnit);
    glBindTexture(GL_TEXTURE_2D,g_checkerTexture);
    glBindSampler(g_colorTexUnit, g_samplers);
    g_pLeftMesh->Render();
    glBindSampler(g_colorTexUnit, 0);
    glBindTexture(GL_TEXTURE_2D, 0);
    

    And of course at the end of init() I needed to add the CreateSamplers thing:

    //Added this later
    LoadCheckerTexture();
    CreateSamplers();
    

    I'm sorry for all the trouble with all this, but guess OpenGL really is just this confusing and it was just dumb luck that I got it right. Just posting this so that people know

提交回复
热议问题